diff --git a/.dockerignore b/.dockerignore index 2b1f789c4a..5414d4b45f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,8 +7,9 @@ .github # Generated files -gen/ -!gen/go/** +gen/python/ +gen/rust/ +gen/ts/ # Dependencies node_modules/ @@ -16,6 +17,7 @@ target/ **/Cargo.lock *.pyc __pycache__/ +.kube/ # IDE .vscode/ diff --git a/.github/workflows/build-ci-image.yml b/.github/workflows/build-ci-image.yml index dd90db43e4..61edc7beaa 100644 --- a/.github/workflows/build-ci-image.yml +++ b/.github/workflows/build-ci-image.yml @@ -6,18 +6,18 @@ on: - main - v2 paths: - - 'gen.Dockerfile' - - '.github/workflows/build-ci-image.yml' + - "gen.Dockerfile" + - ".github/workflows/build-ci-image.yml" pull_request: paths: - - 'gen.Dockerfile' - - '.github/workflows/build-ci-image.yml' + - "gen.Dockerfile" + - ".github/workflows/build-ci-image.yml" workflow_dispatch: inputs: force_rebuild: - description: 'Force rebuild of the image' + description: "Force rebuild of the image" required: false - default: 'false' + default: "false" env: REGISTRY: ghcr.io @@ -25,6 +25,7 @@ env: jobs: build: + if: github.event.pull_request.head.repo.fork != true # when the pull requests are from fork repository, skip the steps for build new ci image runs-on: ubuntu-latest permissions: contents: read diff --git a/.github/workflows/check-generate-container.yml b/.github/workflows/check-generate-container.yml new file mode 100644 index 0000000000..6a6b19ab6f --- /dev/null +++ b/.github/workflows/check-generate-container.yml @@ -0,0 +1,119 @@ +name: Check Generated in Container Files + +on: + workflow_call: + inputs: + pr_number: + required: true + type: string + base_ref: + required: true + type: string + +jobs: + # Check generation in CI image, when the PR is not from fork repo + check-generate-container: + runs-on: ubuntu-latest + permissions: + contents: read + actions: read + packages: read + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Determine Docker image + id: docker-image + run: | + # Check if gen.Dockerfile or build workflow was modified + git fetch origin ${{ inputs.base_ref }} + if git diff --name-only origin/${{ inputs.base_ref }}...HEAD | grep -E '^(gen\.Dockerfile|Dockerfile\.ci|\.github/workflows/build-ci-image\.yml)$'; then + echo "modified=true" >> $GITHUB_OUTPUT + echo "image=ghcr.io/flyteorg/flyte/ci:pr-${{ inputs.pr_number}}" >> $GITHUB_OUTPUT + echo "📦 gen.Dockerfile modified - will use PR-specific image" + else + echo "modified=false" >> $GITHUB_OUTPUT + echo "image=ghcr.io/flyteorg/flyte/ci:v2" >> $GITHUB_OUTPUT + echo "📦 Using default v2 image" + fi + + - name: Wait for Docker image build workflow + if: steps.docker-image.outputs.modified == 'true' + uses: actions/github-script@v7 + with: + script: | + const maxAttempts = 60; // 20 minutes max + const delaySeconds = 20; + + console.log('⏳ Waiting for Docker image build workflow to complete...'); + + for (let attempt = 0; attempt < maxAttempts; attempt++) { + // Get workflow runs for this PR + const { data: runs } = await github.rest.actions.listWorkflowRuns({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'build-ci-image.yml', + event: 'pull_request', + per_page: 10 + }); + + // Find the run for this PR + const prRun = runs.workflow_runs.find(run => + run.head_sha === context.payload.pull_request.head.sha + ); + + if (prRun) { + console.log(`Found workflow run: ${prRun.html_url}`); + console.log(`Status: ${prRun.status}, Conclusion: ${prRun.conclusion}`); + + if (prRun.status === 'completed') { + if (prRun.conclusion === 'success') { + console.log('✅ Docker image build completed successfully!'); + return; + } else { + core.setFailed(`❌ Docker image build failed with conclusion: ${prRun.conclusion}`); + return; + } + } + + console.log(`Attempt ${attempt + 1}/${maxAttempts}: Build still running, waiting ${delaySeconds} seconds...`); + } else { + console.log(`Attempt ${attempt + 1}/${maxAttempts}: Build not started yet, waiting ${delaySeconds} seconds...`); + } + + await new Promise(resolve => setTimeout(resolve, delaySeconds * 1000)); + } + + core.setFailed('❌ Timeout waiting for Docker image build to complete'); + + - name: Login to GHCR + if: steps.docker-image.outputs.modified == 'true' + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + - name: Pull Docker image + if: steps.docker-image.outputs.modified == 'true' + run: | + IMAGE="${{ steps.docker-image.outputs.image }}" + echo "📦 Pulling image: $IMAGE" + docker pull "$IMAGE" + + - name: Run checks in container + run: | + IMAGE="${{ steps.docker-image.outputs.image }}" + echo "Using image: $IMAGE" + + docker run --rm \ + -v ${{ github.workspace }}:/workspace \ + -w /workspace \ + -e SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 \ + -e UV_PROJECT_ENVIRONMENT=/tmp/flyte-venv \ + "$IMAGE" \ + bash -c " + git config --global --add safe.directory /workspace && + cd gen/python && uv sync --all-groups --frozen && cd ../.. && + make gen-local && + git diff --exit-code || (echo 'Generated files are out of date. Run \`make gen\` and commit changes.' && exit 1) && + make build-crate + " diff --git a/.github/workflows/check-generate-local.yml b/.github/workflows/check-generate-local.yml new file mode 100644 index 0000000000..d3f701c624 --- /dev/null +++ b/.github/workflows/check-generate-local.yml @@ -0,0 +1,78 @@ +name: Check Generated Local Files + +on: + workflow_call: + +jobs: + # Check generation locally when the PR is from fork repo + check-generate-local: + runs-on: ubuntu-latest + permissions: + contents: read + actions: read + packages: read + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # for fork PR - get the version of tools from gen.Dockerfile + - name: Extract tool versions from gen.Dockerfile + id: versions + run: | + extract() { grep "^ARG ${1}=" gen.Dockerfile | cut -d'=' -f2; } + echo "go=$(extract GO_VERSION)" >> $GITHUB_OUTPUT + echo "python=$(extract PYTHON_VERSION)" >> $GITHUB_OUTPUT + echo "node=$(extract NODE_VERSION)" >> $GITHUB_OUTPUT + echo "rust=$(extract RUST_VERSION)" >> $GITHUB_OUTPUT + echo "uv=$(extract UV_VERSION)" >> $GITHUB_OUTPUT + echo "buf=$(extract BUF_VERSION)" >> $GITHUB_OUTPUT + echo "mockery=$(extract MOCKERY_VERSION)" >> $GITHUB_OUTPUT + + # for fork PR - install tools in runner + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ steps.versions.outputs.go }} + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: ${{ steps.versions.outputs.python }} + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ steps.versions.outputs.node }} + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ steps.versions.outputs.rust }} + + - name: Setup uv + uses: astral-sh/setup-uv@v4 + with: + version: ${{ steps.versions.outputs.uv }} + + - name: Install Buf and Mockery + run: | + BUF_VERSION="${{ steps.versions.outputs.buf }}" + curl -fsSL "https://github.com/bufbuild/buf/releases/download/v${BUF_VERSION}/buf-Linux-x86_64.tar.gz" | tar -xzC /tmp + sudo mv /tmp/buf/bin/buf /usr/local/bin/buf + sudo mv /tmp/buf/bin/protoc-gen-buf-breaking /usr/local/bin/ + sudo mv /tmp/buf/bin/protoc-gen-buf-lint /usr/local/bin/ + npm install -g pnpm + go install "github.com/vektra/mockery/v2@v${{ steps.versions.outputs.mockery }}" + + # for fork PR - Check make gen locally + - name: Run check locally (fork PR) + env: + SETUPTOOLS_SCM_PRETEND_VERSION: "0.0.0" + UV_PROJECT_ENVIRONMENT: /tmp/flyte-venv + run: | + cd gen/python && uv sync --all-groups --frozen && cd ../.. + make gen-local + git diff --exit-code || (echo 'Generated files are out of date. Run \`make gen\` and commit changes.' && exit 1) + make build-crate diff --git a/.github/workflows/check-generate.yml b/.github/workflows/check-generate.yml index 8960da2a22..9db9fa0ad2 100644 --- a/.github/workflows/check-generate.yml +++ b/.github/workflows/check-generate.yml @@ -5,110 +5,23 @@ on: types: [opened, synchronize, reopened] jobs: + check-generate-container: + if: github.event.pull_request.head.repo.fork != true + uses: ./.github/workflows/check-generate-container.yml + with: + pr_number: ${{ github.event.pull_request.number }} + base_ref: ${{ github.base_ref }} + check-generate-local: + if: github.event.pull_request.head.repo.fork == true + uses: ./.github/workflows/check-generate-local.yml check-generate: + needs: [check-generate-container, check-generate-local] + if: always() runs-on: ubuntu-latest - permissions: - contents: read - actions: read - packages: read steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Determine Docker image - id: docker-image + - name: Check results run: | - # Check if gen.Dockerfile or build workflow was modified - git fetch origin ${{ github.base_ref }} - if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -E '^(gen\.Dockerfile|Dockerfile\.ci|\.github/workflows/build-ci-image\.yml)$'; then - echo "modified=true" >> $GITHUB_OUTPUT - echo "image=ghcr.io/flyteorg/flyte/ci:pr-${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT - echo "📦 gen.Dockerfile modified - will use PR-specific image" - else - echo "modified=false" >> $GITHUB_OUTPUT - echo "image=ghcr.io/flyteorg/flyte/ci:v2" >> $GITHUB_OUTPUT - echo "📦 Using default v2 image" + if [[ "${{ needs.check-generate-container.result }}" == "failure" || + "${{ needs.check-generate-local.result }}" == "failure" ]]; then + exit 1 fi - - - name: Wait for Docker image build workflow - if: steps.docker-image.outputs.modified == 'true' - uses: actions/github-script@v7 - with: - script: | - const maxAttempts = 60; // 20 minutes max - const delaySeconds = 20; - - console.log('⏳ Waiting for Docker image build workflow to complete...'); - - for (let attempt = 0; attempt < maxAttempts; attempt++) { - // Get workflow runs for this PR - const { data: runs } = await github.rest.actions.listWorkflowRuns({ - owner: context.repo.owner, - repo: context.repo.repo, - workflow_id: 'build-ci-image.yml', - event: 'pull_request', - per_page: 10 - }); - - // Find the run for this PR - const prRun = runs.workflow_runs.find(run => - run.head_sha === context.payload.pull_request.head.sha - ); - - if (prRun) { - console.log(`Found workflow run: ${prRun.html_url}`); - console.log(`Status: ${prRun.status}, Conclusion: ${prRun.conclusion}`); - - if (prRun.status === 'completed') { - if (prRun.conclusion === 'success') { - console.log('✅ Docker image build completed successfully!'); - return; - } else { - core.setFailed(`❌ Docker image build failed with conclusion: ${prRun.conclusion}`); - return; - } - } - - console.log(`Attempt ${attempt + 1}/${maxAttempts}: Build still running, waiting ${delaySeconds} seconds...`); - } else { - console.log(`Attempt ${attempt + 1}/${maxAttempts}: Build not started yet, waiting ${delaySeconds} seconds...`); - } - - await new Promise(resolve => setTimeout(resolve, delaySeconds * 1000)); - } - - core.setFailed('❌ Timeout waiting for Docker image build to complete'); - - - name: Login to GHCR - if: steps.docker-image.outputs.modified == 'true' - run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin - - - name: Pull Docker image - if: steps.docker-image.outputs.modified == 'true' - run: | - IMAGE="${{ steps.docker-image.outputs.image }}" - echo "📦 Pulling image: $IMAGE" - docker pull "$IMAGE" - - - name: Run checks in container - run: | - IMAGE="${{ steps.docker-image.outputs.image }}" - echo "Using image: $IMAGE" - - docker run --rm \ - -v ${{ github.workspace }}:/workspace \ - -w /workspace \ - -e SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 \ - -e UV_PROJECT_ENVIRONMENT=/tmp/flyte-venv \ - "$IMAGE" \ - bash -c " - git config --global --add safe.directory /workspace && - cd gen/python && uv sync --all-groups --frozen && cd ../.. && - make gen-local && - git diff --exit-code || (echo 'Generated files are out of date. Run \`make gen\` and commit changes.' && exit 1) && - make build-crate - " - - diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml new file mode 100644 index 0000000000..a7d3ba386d --- /dev/null +++ b/.github/workflows/go-tests.yml @@ -0,0 +1,68 @@ +name: Go Tests + +on: + push: + branches: [v2, main] + pull_request: + types: [opened, synchronize, reopened] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + go-tests: + runs-on: ubuntu-latest + permissions: + contents: read + strategy: + fail-fast: false + matrix: + include: + - component: flyteplugins + - component: flytestdlib + - component: runs + # Exclude runs/test/ which contains integration tests + test-args: $(go list ./runs/... | grep -v /test) + - component: executor + # Controller tests require envtest binaries (etcd + kube-apiserver) + needs-envtest: true + - component: flytecopilot + - component: dataproxy + - component: flyteidl2 + - component: actions + - component: manager + name: test (${{ matrix.component }}) + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: "1.24" + cache: true + + - name: Set up envtest + if: matrix.needs-envtest + run: | + ENVTEST_VERSION=$(go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $2, $3}') + go install sigs.k8s.io/controller-runtime/tools/setup-envtest@${ENVTEST_VERSION} + ENVTEST_K8S_VERSION=$(go list -m -f "{{ .Version }}" k8s.io/api | awk -F'[v.]' '{printf "1.%d", $3}') + echo "KUBEBUILDER_ASSETS=$(setup-envtest use ${ENVTEST_K8S_VERSION} --bin-dir /tmp/envtest -p path)" >> "$GITHUB_ENV" + + - name: Run tests + run: | + TEST_ARGS="${{ matrix.test-args }}" + if [ -z "$TEST_ARGS" ]; then + TEST_ARGS="./${{ matrix.component }}/..." + fi + go test -race -coverprofile=coverage.out -covermode=atomic $TEST_ARGS + + - name: Upload coverage + uses: actions/upload-artifact@v4 + if: always() + with: + name: coverage-${{ matrix.component }} + path: coverage.out + retention-days: 7 diff --git a/.gitignore b/.gitignore index f0ce0a066f..e1f0f404e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.kube/ .idea _build/ _bin/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..390d95fb76 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +# Todo(alex): We should add UI into the image when UI is done + +FROM --platform=${BUILDPLATFORM} golang:1.24-bookworm AS flytebuilder + +ARG TARGETARCH +ENV GOARCH="${TARGETARCH}" +ENV GOOS=linux +ENV CGO_ENABLED=0 + +WORKDIR /flyteorg/build + +COPY app app +COPY dataproxy dataproxy +COPY executor executor +COPY flytecopilot flytecopilot +COPY flyteidl2 flyteidl2 +COPY flyteplugins flyteplugins +COPY flytestdlib flytestdlib +COPY gen/go gen/go +COPY actions actions +COPY events events +COPY runs runs + +COPY go.mod go.sum ./ +RUN go mod download +COPY manager manager +RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/root/go/pkg/mod \ + go build -v -o dist/flyte ./manager/cmd/ + + +FROM debian:bookworm-slim + +ARG FLYTE_VERSION +ENV FLYTE_VERSION="${FLYTE_VERSION}" + +ENV DEBCONF_NONINTERACTIVE_SEEN=true +ENV DEBIAN_FRONTEND=noninteractive + +# Install core packages +RUN apt-get update && apt-get install --no-install-recommends --yes \ + ca-certificates \ + tini \ + && rm -rf /var/lib/apt/lists/* + +# Copy compiled executable into image +COPY --from=flytebuilder /flyteorg/build/dist/flyte /usr/local/bin/ + +# Set entrypoint +ENTRYPOINT [ "/usr/bin/tini", "-g", "--", "/usr/local/bin/flyte" ] diff --git a/Makefile b/Makefile index 10f3326ced..a343290397 100644 --- a/Makefile +++ b/Makefile @@ -22,27 +22,31 @@ SEPARATOR := \033[1;36m========================================\033[0m include go.Makefile # ============================================================================= -# Local Cluster Commands +# Go Services Build # ============================================================================= -.PHONY: cluster-create -cluster-create: ## Create k3d cluster with host gateway alias for pod-to-host connectivity - $(eval HOST_GATEWAY_IP := $(shell docker run --rm --add-host=probe:host-gateway busybox cat /etc/hosts 2>/dev/null | awk '$$1~/^[0-9]/&&$$2=="probe"{print $$1;exit}')) - @if [ -z "$(HOST_GATEWAY_IP)" ]; then \ - echo "ERROR: Failed to detect HOST_GATEWAY_IP. Ensure Docker is running."; \ - exit 1; \ - fi - @echo "Host gateway IP: $(HOST_GATEWAY_IP)" - @if k3d cluster get $(CLUSTER_NAME) --no-headers >/dev/null 2>&1; then \ - echo "Cluster $(CLUSTER_NAME) already exists, skipping creation"; \ - else \ - CLUSTER_NAME=$(CLUSTER_NAME) HOST_GATEWAY_IP=$(HOST_GATEWAY_IP) envsubst < config/k3d/cluster.yaml | k3d cluster create --config -; \ - fi - @echo "Cluster $(CLUSTER_NAME) ready. Pods can reach host services via flyte-host:" - -.PHONY: cluster-delete -cluster-delete: ## Delete k3d cluster - @k3d cluster delete $(CLUSTER_NAME) +.PHONY: build +build: verify ## Build all Go service binaries + $(MAKE) -C manager build + $(MAKE) -C runs build + $(MAKE) -C executor build + +# ============================================================================= +# Sandbox Commands +# ============================================================================= + +.PHONY: sandbox-build +sandbox-build: ## Build and start the flyte sandbox (docker/sandbox-bundled) + $(MAKE) -C docker/sandbox-bundled build + +# Run in dev mode with extra arg FLYTE_DEV=True +.PHONY: sandbox-run +sandbox-run: ## Start the flyte sandbox without rebuilding the image + $(MAKE) -C docker/sandbox-bundled start + +.PHONY: sandbox-stop +sandbox-stop: ## Stop the flyte sandbox + $(MAKE) -C docker/sandbox-bundled stop .PHONY: help help: ## Show this help message diff --git a/actions/config/config.go b/actions/config/config.go index fc73755ad5..94162693b2 100644 --- a/actions/config/config.go +++ b/actions/config/config.go @@ -16,8 +16,8 @@ var defaultConfig = &Config{ Kubernetes: KubernetesConfig{ Namespace: "flyte", }, - WatchBufferSize: 100, - RunServiceURL: "http://localhost:8090", + WatchBufferSize: 100, + RunServiceURL: "http://localhost:8090", // 8M slots × 8 bytes/pointer = 64 MB; can track ~8M unique actions. RecordFilterSize: 1 << 23, } diff --git a/actions/k8s/client.go b/actions/k8s/client.go index de025c3807..56e30e0586 100644 --- a/actions/k8s/client.go +++ b/actions/k8s/client.go @@ -9,7 +9,6 @@ import ( "connectrpc.com/connect" "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/types/known/timestamppb" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/kubernetes/scheme" @@ -17,6 +16,7 @@ import ( executorv1 "github.com/flyteorg/flyte/v2/executor/api/v1" "github.com/flyteorg/flyte/v2/flytestdlib/fastcheck" + k8sutil "github.com/flyteorg/flyte/v2/flytestdlib/k8s" "github.com/flyteorg/flyte/v2/flytestdlib/logger" "github.com/flyteorg/flyte/v2/flytestdlib/promutils" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/actions" @@ -45,7 +45,6 @@ type ActionsClient struct { namespace string bufferSize int runClient workflowconnect.InternalRunServiceClient - // recordedFilter deduplicates RecordAction calls across watch reconnects. recordedFilter fastcheck.Filter @@ -91,10 +90,14 @@ func (c *ActionsClient) Enqueue(ctx context.Context, action *actions.Action, run isRoot := action.ParentActionName == nil || *action.ParentActionName == "" taskActionName := buildTaskActionName(actionID) + namespace := buildNamespace(actionID.Run) + if err := k8sutil.EnsureNamespaceExists(ctx, c.k8sClient, namespace); err != nil { + return fmt.Errorf("failed to ensure namespace %s: %w", namespace, err) + } taskAction := &executorv1.TaskAction{ ObjectMeta: metav1.ObjectMeta{ Name: taskActionName, - Namespace: c.namespace, + Namespace: namespace, Labels: map[string]string{ "flyte.org/org": actionID.Run.Org, "flyte.org/project": actionID.Run.Project, @@ -117,7 +120,7 @@ func (c *ActionsClient) Enqueue(ctx context.Context, action *actions.Action, run parentName := buildTaskActionName(parentID) parent := &executorv1.TaskAction{} - if err := c.k8sClient.Get(ctx, client.ObjectKey{Name: parentName, Namespace: c.namespace}, parent); err != nil { + if err := c.k8sClient.Get(ctx, client.ObjectKey{Name: parentName, Namespace: namespace}, parent); err != nil { return fmt.Errorf("failed to get parent TaskAction %s: %w", parentName, err) } @@ -159,7 +162,7 @@ func (c *ActionsClient) AbortAction(ctx context.Context, actionID *common.Action logger.Infof(ctx, "Aborting action %s (reason: %v)", taskActionName, reason) taskAction := &executorv1.TaskAction{} - if err := c.k8sClient.Get(ctx, client.ObjectKey{Name: taskActionName, Namespace: c.namespace}, taskAction); err != nil { + if err := c.k8sClient.Get(ctx, client.ObjectKey{Name: taskActionName, Namespace: buildNamespace(actionID.Run)}, taskAction); err != nil { return fmt.Errorf("failed to get TaskAction %s: %w", taskActionName, err) } @@ -178,7 +181,7 @@ func (c *ActionsClient) GetState(ctx context.Context, actionID *common.ActionIde taskAction := &executorv1.TaskAction{} if err := c.k8sClient.Get(ctx, client.ObjectKey{ Name: taskActionName, - Namespace: c.namespace, + Namespace: buildNamespace(actionID.Run), }, taskAction); err != nil { return "", fmt.Errorf("failed to get TaskAction %s: %w", taskActionName, err) } @@ -195,7 +198,7 @@ func (c *ActionsClient) PutState(ctx context.Context, actionID *common.ActionIde taskAction := &executorv1.TaskAction{} if err := c.k8sClient.Get(ctx, client.ObjectKey{ Name: taskActionName, - Namespace: c.namespace, + Namespace: buildNamespace(actionID.Run), }, taskAction); err != nil { return fmt.Errorf("failed to get TaskAction %s: %w", taskActionName, err) } @@ -221,7 +224,7 @@ func (c *ActionsClient) PutState(ctx context.Context, actionID *common.ActionIde func (c *ActionsClient) ListRunActions(ctx context.Context, runID *common.RunIdentifier) ([]*executorv1.TaskAction, error) { taskActionList := &executorv1.TaskActionList{} listOpts := []client.ListOption{ - client.InNamespace(c.namespace), + client.InNamespace(buildNamespace(runID)), client.MatchingLabels{ "flyte.org/org": runID.Org, "flyte.org/project": runID.Project, @@ -246,7 +249,7 @@ func (c *ActionsClient) ListChildActions(ctx context.Context, parentActionID *co // List all TaskActions in the same run taskActionList := &executorv1.TaskActionList{} listOpts := []client.ListOption{ - client.InNamespace(c.namespace), + client.InNamespace(buildNamespace(parentActionID.Run)), client.MatchingLabels{ "flyte.org/org": parentActionID.Run.Org, "flyte.org/project": parentActionID.Run.Project, @@ -284,7 +287,7 @@ func (c *ActionsClient) GetTaskAction(ctx context.Context, actionID *common.Acti taskAction := &executorv1.TaskAction{} if err := c.k8sClient.Get(ctx, client.ObjectKey{ Name: taskActionName, - Namespace: c.namespace, + Namespace: buildNamespace(actionID.Run), }, taskAction); err != nil { return nil, fmt.Errorf("failed to get TaskAction %s: %w", taskActionName, err) } @@ -360,7 +363,10 @@ func (c *ActionsClient) watchLoop(ctx context.Context) { func (c *ActionsClient) doWatch(ctx context.Context) error { taskActionList := &executorv1.TaskActionList{} - watcher, err := c.k8sClient.Watch(ctx, taskActionList, client.InNamespace(c.namespace)) + timeout := int64(300) // 5 minutes + watcher, err := c.k8sClient.Watch(ctx, taskActionList, &client.ListOptions{ + Raw: &metav1.ListOptions{TimeoutSeconds: &timeout}, + }) if err != nil { return fmt.Errorf("failed to start watch: %w", err) } @@ -469,12 +475,6 @@ func (c *ActionsClient) notifyRunService(ctx context.Context, taskAction *execut } } - // Derive UpdatedTime from the last PhaseHistory entry. - var updatedTime *timestamppb.Timestamp - if n := len(taskAction.Status.PhaseHistory); n > 0 { - updatedTime = timestamppb.New(taskAction.Status.PhaseHistory[n-1].OccurredAt.Time) - } - if update.Phase != common.ActionPhase_ACTION_PHASE_UNSPECIFIED { statusReq := &workflow.UpdateActionStatusRequest{ ActionId: update.ActionID, @@ -486,30 +486,6 @@ func (c *ActionsClient) notifyRunService(ctx context.Context, taskAction *execut logger.Warnf(ctx, "Failed to update action status in run service for %s: %v", update.ActionID.Name, err) } } - - // TODO(nary): some ActionEvent fields not populated here. Need further discussion on where and how we want - // to handle the action event persistence - // - ErrorInfo: not on the CR; the executor does not write structured error info to TaskAction status. - // - LogInfo: not on the CR; log references are managed by the plugin, not surfaced to the CR. - // - LogContext: not on the CR; same reason as LogInfo. - // - Cluster: not on the CR; the executor runs inside the cluster and does not self-report cluster identity. - // - Outputs: not on the CR; output references are written to object storage by the plugin, not to the CR. - // - CacheStatus: not on ActionUpdate; the k8s watcher does not carry catalog cache results. - // - ClusterEvents: not on the CR; Kubernetes events are not aggregated into TaskAction status. - event := &workflow.ActionEvent{ - Id: update.ActionID, - Attempt: 1, // TODO(nary): hardcoded until retry support is added - Phase: update.Phase, - Version: taskAction.Status.PluginPhaseVersion, - UpdatedTime: updatedTime, - ReportedTime: timestamppb.Now(), - } - recordReq := &workflow.RecordActionEventsRequest{ - Events: []*workflow.ActionEvent{event}, - } - if _, err := c.runClient.RecordActionEvents(ctx, connect.NewRequest(recordReq)); err != nil { - logger.Warnf(ctx, "Failed to record action event in run service for %s: %v", update.ActionID.Name, err) - } } // StopWatching stops the TaskAction watcher @@ -551,15 +527,21 @@ func GetPhaseFromConditions(taskAction *executorv1.TaskAction) common.ActionPhas return common.ActionPhase_ACTION_PHASE_UNSPECIFIED } -// buildTaskActionName generates a Kubernetes-compliant name for the TaskAction +// buildTaskActionName generates a Kubernetes-compliant name for the TaskAction. +// For root actions (where action name == run name), the name is -a0-0. +// For child actions, the name is --0. +// The trailing "0" is the attempt number (0-indexed; hardcoded until retry support is added). func buildTaskActionName(actionID *common.ActionIdentifier) string { - return fmt.Sprintf("%s-%s-%s-%s-%s", - actionID.Run.Org, - actionID.Run.Project, - actionID.Run.Domain, - actionID.Run.Name, - actionID.Name, - ) + isRoot := actionID.Name == actionID.Run.Name + if isRoot { + return fmt.Sprintf("%s-a0-0", actionID.Run.Name) + } + return fmt.Sprintf("%s-%s-0", actionID.Run.Name, actionID.Name) +} + +// buildNamespace returns the Kubernetes namespace for a run: "-". +func buildNamespace(runID *common.RunIdentifier) string { + return fmt.Sprintf("%s-%s", runID.Project, runID.Domain) } // buildOutputUri computes the action-specific output URI from the TaskAction spec. @@ -578,12 +560,12 @@ func InitScheme() error { // buildActionSpec converts an actions.Action into the workflow.ActionSpec expected by the executor. func buildActionSpec(action *actions.Action, runSpec *task.RunSpec) *workflow.ActionSpec { actionSpec := &workflow.ActionSpec{ - ActionId: action.ActionId, + ActionId: action.ActionId, ParentActionName: action.ParentActionName, - RunSpec: runSpec, - InputUri: action.InputUri, - RunOutputBase: action.RunOutputBase, - Group: action.Group, + RunSpec: runSpec, + InputUri: action.InputUri, + RunOutputBase: action.RunOutputBase, + Group: action.Group, } switch spec := action.Spec.(type) { diff --git a/actions/k8s/client_test.go b/actions/k8s/client_test.go index 973bfbdc25..d7bd483fea 100644 --- a/actions/k8s/client_test.go +++ b/actions/k8s/client_test.go @@ -62,10 +62,6 @@ func TestNotifyRunService_DeduplicateRecordAction(t *testing.T) { // Expect RecordAction called exactly once mockClient.On("RecordAction", mock.Anything, mock.Anything). Return(&connect.Response[workflow.RecordActionResponse]{}, nil).Once() - // UpdateActionStatus won't be called because phase is UNSPECIFIED - // RecordActionEvents will be called twice (once per event) - mockClient.On("RecordActionEvents", mock.Anything, mock.Anything). - Return(&connect.Response[workflow.RecordActionEventsResponse]{}, nil) // First Added event — should call RecordAction c.notifyRunService(ctx, ta, update, watch.Added) @@ -99,9 +95,6 @@ func TestNotifyRunService_FailedRecordAllowsRetry(t *testing.T) { mockClient.On("RecordAction", mock.Anything, mock.Anything). Return(&connect.Response[workflow.RecordActionResponse]{}, nil).Once() - mockClient.On("RecordActionEvents", mock.Anything, mock.Anything). - Return(&connect.Response[workflow.RecordActionEventsResponse]{}, nil) - // First event — RecordAction fails, should NOT add to filter c.notifyRunService(ctx, ta, update, watch.Added) @@ -130,11 +123,53 @@ func TestNotifyRunService_NilFilter(t *testing.T) { mockClient.On("RecordAction", mock.Anything, mock.Anything). Return(&connect.Response[workflow.RecordActionResponse]{}, nil) - mockClient.On("RecordActionEvents", mock.Anything, mock.Anything). - Return(&connect.Response[workflow.RecordActionEventsResponse]{}, nil) c.notifyRunService(ctx, ta, update, watch.Added) c.notifyRunService(ctx, ta, update, watch.Added) mockClient.AssertNumberOfCalls(t, "RecordAction", 2) } + +func TestBuildTaskActionName(t *testing.T) { + runID := &common.RunIdentifier{ + Org: "org", + Project: "project", + Domain: "development", + Name: "rabc123", + } + + t.Run("root action uses a0-0 suffix", func(t *testing.T) { + // Root: action name == run name + actionID := &common.ActionIdentifier{ + Run: runID, + Name: runID.Name, + } + assert.Equal(t, "rabc123-a0-0", buildTaskActionName(actionID)) + }) + + t.Run("child action includes action name", func(t *testing.T) { + actionID := &common.ActionIdentifier{ + Run: runID, + Name: "train", + } + assert.Equal(t, "rabc123-train-0", buildTaskActionName(actionID)) + }) +} + +func TestBuildNamespace(t *testing.T) { + t.Run("combines project and domain", func(t *testing.T) { + runID := &common.RunIdentifier{ + Project: "flytesnacks", + Domain: "development", + } + assert.Equal(t, "flytesnacks-development", buildNamespace(runID)) + }) + + t.Run("different project and domain", func(t *testing.T) { + runID := &common.RunIdentifier{ + Project: "myproject", + Domain: "production", + } + assert.Equal(t, "myproject-production", buildNamespace(runID)) + }) +} diff --git a/actions/service/interfaces.go b/actions/service/interfaces.go index 6072f9c5e0..dfd1fcea73 100644 --- a/actions/service/interfaces.go +++ b/actions/service/interfaces.go @@ -3,12 +3,12 @@ package service import ( "context" + "github.com/flyteorg/flyte/v2/actions/k8s" executorv1 "github.com/flyteorg/flyte/v2/executor/api/v1" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/actions" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" - "github.com/flyteorg/flyte/v2/actions/k8s" ) // ActionsClientInterface defines the interface for actions operations. diff --git a/actions/setup.go b/actions/setup.go index a78f19cb31..f53efa83b7 100644 --- a/actions/setup.go +++ b/actions/setup.go @@ -6,7 +6,7 @@ import ( "net/http" "github.com/flyteorg/flyte/v2/actions/config" - "github.com/flyteorg/flyte/v2/actions/k8s" + actionsk8s "github.com/flyteorg/flyte/v2/actions/k8s" "github.com/flyteorg/flyte/v2/actions/service" "github.com/flyteorg/flyte/v2/app" "github.com/flyteorg/flyte/v2/flytestdlib/logger" @@ -19,7 +19,7 @@ import ( func Setup(ctx context.Context, sc *app.SetupContext) error { cfg := config.GetConfig() - if err := k8s.InitScheme(); err != nil { + if err := actionsk8s.InitScheme(); err != nil { return fmt.Errorf("actions: failed to initialize scheme: %w", err) } @@ -29,7 +29,7 @@ func Setup(ctx context.Context, sc *app.SetupContext) error { } runClient := workflowconnect.NewInternalRunServiceClient(http.DefaultClient, runServiceURL) - actionsClient := k8s.NewActionsClient(sc.K8sClient, sc.Namespace, cfg.WatchBufferSize, runClient, cfg.RecordFilterSize, sc.Scope) + actionsClient := actionsk8s.NewActionsClient(sc.K8sClient, sc.Namespace, cfg.WatchBufferSize, runClient, cfg.RecordFilterSize, sc.Scope) logger.Infof(ctx, "Actions K8s client initialized for namespace: %s", sc.Namespace) if err := actionsClient.StartWatching(ctx); err != nil { diff --git a/app/k8s.go b/app/k8s.go index 38807b97b8..4a82c98550 100644 --- a/app/k8s.go +++ b/app/k8s.go @@ -5,15 +5,13 @@ import ( "fmt" "time" - corev1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/flyteorg/flyte/v2/flytestdlib/config" + "github.com/flyteorg/flyte/v2/flytestdlib/k8s" "github.com/flyteorg/flyte/v2/flytestdlib/logger" ) @@ -62,7 +60,7 @@ func InitKubernetesClient(ctx context.Context, cfg K8sConfig, scheme *runtime.Sc logger.Infof(ctx, "Kubernetes client initialized (QPS=%.0f, Burst=%d)", restConfig.QPS, restConfig.Burst) if cfg.Namespace != "" { - if err := ensureNamespaceExists(ctx, k8sClient, cfg.Namespace); err != nil { + if err := k8s.EnsureNamespaceExists(ctx, k8sClient, cfg.Namespace); err != nil { return nil, nil, fmt.Errorf("failed to ensure namespace exists: %w", err) } } @@ -72,6 +70,7 @@ func InitKubernetesClient(ctx context.Context, cfg K8sConfig, scheme *runtime.Sc func buildRESTConfig(ctx context.Context, kubeconfig string) (*rest.Config, error) { if kubeconfig != "" { + kubeconfig = config.NormalizePath(kubeconfig) logger.Infof(ctx, "Using kubeconfig from: %s", kubeconfig) cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err != nil { @@ -99,27 +98,3 @@ func buildRESTConfig(ctx context.Context, kubeconfig string) (*rest.Config, erro logger.Infof(ctx, "Using default kubeconfig (~/.kube/config)") return cfg, nil } - -func ensureNamespaceExists(ctx context.Context, k8sClient client.Client, name string) error { - ns := &corev1.Namespace{} - err := k8sClient.Get(ctx, types.NamespacedName{Name: name}, ns) - if err == nil { - logger.Infof(ctx, "Namespace '%s' already exists", name) - return nil - } - - if !apierrors.IsNotFound(err) { - return fmt.Errorf("failed to check namespace: %w", err) - } - - logger.Infof(ctx, "Creating namespace '%s'", name) - ns = &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{Name: name}, - } - if err := k8sClient.Create(ctx, ns); err != nil { - return fmt.Errorf("failed to create namespace: %w", err) - } - - logger.Infof(ctx, "Created namespace '%s'", name) - return nil -} diff --git a/boilerplate/flyte/golang_support_tools/go.mod b/boilerplate/flyte/golang_support_tools/go.mod index 0a7582b7ca..51ebbeec68 100644 --- a/boilerplate/flyte/golang_support_tools/go.mod +++ b/boilerplate/flyte/golang_support_tools/go.mod @@ -279,6 +279,7 @@ require ( ) replace ( + github.com/flyteorg/flyte/flytestdlib => ../../../flytestdlib github.com/pseudomuto/protoc-gen-doc => github.com/flyteorg/protoc-gen-doc v1.4.2 sigs.k8s.io/controller-runtime => sigs.k8s.io/controller-runtime v0.16.2 ) diff --git a/charts/.gitignore b/charts/.gitignore new file mode 100644 index 0000000000..ee3892e879 --- /dev/null +++ b/charts/.gitignore @@ -0,0 +1 @@ +charts/ diff --git a/charts/flyte-binary/.gitignore b/charts/flyte-binary/.gitignore new file mode 100644 index 0000000000..4f62b849d5 --- /dev/null +++ b/charts/flyte-binary/.gitignore @@ -0,0 +1 @@ +gen diff --git a/charts/flyte-binary/.helmignore b/charts/flyte-binary/.helmignore new file mode 100644 index 0000000000..0e8a0eb36f --- /dev/null +++ b/charts/flyte-binary/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/flyte-binary/Chart.yaml b/charts/flyte-binary/Chart.yaml new file mode 100644 index 0000000000..11f4da3732 --- /dev/null +++ b/charts/flyte-binary/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: flyte-binary +description: Chart for basic single Flyte executable deployment + +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) + +version: v0.2.0 # VERSION diff --git a/charts/flyte-binary/Makefile b/charts/flyte-binary/Makefile new file mode 100644 index 0000000000..6bb7256cc2 --- /dev/null +++ b/charts/flyte-binary/Makefile @@ -0,0 +1,17 @@ + +GENERATED_FILE="gen/binary_manifest.yaml" +DEMO_GENERATED_FILE="gen/demomanifest.yaml" + +cleanhelm: + @[ -f $(GENERATED_FILE) ] && rm $(GENERATED_FILE) || true + +cleandemo: + @[ -f $(DEMO_GENERATED_FILE) ] && rm $(DEMO_GENERATED_FILE) || true + +.PHONY: helm +helm: cleanhelm + helm template binary-tst-deploy ./ -n flyte --dependency-update --debug --create-namespace -a rbac.authorization.k8s.io/v1 -a networking.k8s.io/v1/Ingress -a apiextensions.k8s.io/v1/CustomResourceDefinition > $(GENERATED_FILE) + +.PHONY: demohelm +demohelm: cleandemo + helm template flytedemo ./ -f flytectldemo.yaml -n flyte --dependency-update --debug --create-namespace -a rbac.authorization.k8s.io/v1 -a networking.k8s.io/v1/Ingress -a apiextensions.k8s.io/v1/CustomResourceDefinition > $(DEMO_GENERATED_FILE) diff --git a/charts/flyte-binary/README.md b/charts/flyte-binary/README.md new file mode 100644 index 0000000000..fb31f8b9ce --- /dev/null +++ b/charts/flyte-binary/README.md @@ -0,0 +1,175 @@ +# flyte-binary + +![Version: v0.2.0](https://img.shields.io/badge/Version-v0.2.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.16.0](https://img.shields.io/badge/AppVersion-1.16.0-informational?style=flat-square) + +Chart for basic single Flyte executable deployment + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| file://../flyteconnector | flyteconnector(flyteconnector) | v0.1.10 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| clusterResourceTemplates.annotations | object | `{}` | | +| clusterResourceTemplates.externalConfigMap | string | `""` | | +| clusterResourceTemplates.inline | object | `{}` | | +| clusterResourceTemplates.inlineConfigMap | string | `""` | | +| clusterResourceTemplates.labels | object | `{}` | | +| commonAnnotations | object | `{}` | | +| commonLabels | object | `{}` | | +| configuration.annotations | object | `{}` | | +| configuration.auth.authorizedUris | list | `[]` | | +| configuration.auth.clientSecretsExternalSecretRef | string | `""` | | +| configuration.auth.enableAuthServer | bool | `true` | | +| configuration.auth.enabled | bool | `false` | | +| configuration.auth.flyteClient.audience | string | `""` | | +| configuration.auth.flyteClient.clientId | string | `"flytectl"` | | +| configuration.auth.flyteClient.redirectUri | string | `"http://localhost:53593/callback"` | | +| configuration.auth.flyteClient.scopes[0] | string | `"all"` | | +| configuration.auth.internal.clientId | string | `"flytepropeller"` | | +| configuration.auth.internal.clientSecret | string | `""` | | +| configuration.auth.internal.clientSecretHash | string | `""` | | +| configuration.auth.oidc.baseUrl | string | `""` | | +| configuration.auth.oidc.clientId | string | `""` | | +| configuration.auth.oidc.clientSecret | string | `""` | | +| configuration.co-pilot.image.repository | string | `"cr.flyte.org/flyteorg/flytecopilot"` | | +| configuration.co-pilot.image.tag | string | `"v1.16.4"` | | +| configuration.connectorService.defaultConnector.defaultTimeout | string | `"10s"` | | +| configuration.connectorService.defaultConnector.endpoint | string | `"k8s://flyteconnector.flyte:8000"` | | +| configuration.connectorService.defaultConnector.insecure | bool | `true` | | +| configuration.connectorService.defaultConnector.timeouts.GetTask | string | `"10s"` | | +| configuration.connectorService.defaultConnector.timeouts.ListAgents | string | `"3s"` | | +| configuration.database.dbname | string | `"flyte"` | | +| configuration.database.host | string | `"127.0.0.1"` | | +| configuration.database.options | string | `"sslmode=disable"` | | +| configuration.database.password | string | `""` | | +| configuration.database.passwordPath | string | `""` | | +| configuration.database.port | int | `5432` | | +| configuration.database.username | string | `"postgres"` | | +| configuration.externalConfigMap | string | `""` | | +| configuration.externalSecretRef | string | `""` | | +| configuration.inline | object | `{}` | | +| configuration.inlineConfigMap | string | `""` | | +| configuration.inlineSecretRef | string | `""` | | +| configuration.labels | object | `{}` | | +| configuration.logging.level | int | `1` | | +| configuration.logging.plugins.cloudwatch.enabled | bool | `false` | | +| configuration.logging.plugins.cloudwatch.templateUri | string | `""` | | +| configuration.logging.plugins.custom | list | `[]` | | +| configuration.logging.plugins.kubernetes.enabled | bool | `false` | | +| configuration.logging.plugins.kubernetes.templateUri | string | `""` | | +| configuration.logging.plugins.stackdriver.enabled | bool | `false` | | +| configuration.logging.plugins.stackdriver.templateUri | string | `""` | | +| configuration.propeller.createCRDs | bool | `true` | | +| configuration.propeller.literalOffloadingConfigEnabled | bool | `false` | | +| configuration.storage.metadataContainer | string | `"my-organization-flyte-container"` | | +| configuration.storage.provider | string | `"s3"` | | +| configuration.storage.providerConfig.azure.account | string | `"storage-account-name"` | | +| configuration.storage.providerConfig.azure.configDomainSuffix | string | `""` | | +| configuration.storage.providerConfig.azure.configUploadConcurrency | int | `4` | | +| configuration.storage.providerConfig.azure.key | string | `""` | | +| configuration.storage.providerConfig.gcs.project | string | `"my-organization-gcp-project"` | | +| configuration.storage.providerConfig.s3.accessKey | string | `""` | | +| configuration.storage.providerConfig.s3.authType | string | `"iam"` | | +| configuration.storage.providerConfig.s3.disableSSL | bool | `false` | | +| configuration.storage.providerConfig.s3.endpoint | string | `""` | | +| configuration.storage.providerConfig.s3.region | string | `"us-east-1"` | | +| configuration.storage.providerConfig.s3.secretKey | string | `""` | | +| configuration.storage.providerConfig.s3.v2Signing | bool | `false` | | +| configuration.storage.userDataContainer | string | `"my-organization-flyte-container"` | | +| deployment.annotations | object | `{}` | | +| deployment.args | list | `[]` | | +| deployment.command | list | `[]` | | +| deployment.extraEnvVars | list | `[]` | | +| deployment.extraEnvVarsConfigMap | string | `""` | | +| deployment.extraEnvVarsSecret | string | `""` | | +| deployment.extraPodSpec | object | `{}` | | +| deployment.extraVolumeMounts | list | `[]` | | +| deployment.extraVolumes | list | `[]` | | +| deployment.genAdminAuthSecret.args | list | `[]` | | +| deployment.genAdminAuthSecret.command | list | `[]` | | +| deployment.genAdminAuthSecret.securityContext | object | `{}` | | +| deployment.image.pullPolicy | string | `"IfNotPresent"` | | +| deployment.image.repository | string | `"cr.flyte.org/flyteorg/flyte-binary"` | | +| deployment.image.tag | string | `"latest"` | | +| deployment.initContainers | list | `[]` | | +| deployment.labels | object | `{}` | | +| deployment.lifecycleHooks | object | `{}` | | +| deployment.livenessProbe | object | `{}` | | +| deployment.podAnnotations | object | `{}` | | +| deployment.podLabels | object | `{}` | | +| deployment.podSecurityContext.enabled | bool | `false` | | +| deployment.podSecurityContext.fsGroup | int | `65534` | | +| deployment.podSecurityContext.runAsGroup | int | `65534` | | +| deployment.podSecurityContext.runAsUser | int | `65534` | | +| deployment.preInitContainers | list | `[]` | | +| deployment.readinessProbe | object | `{}` | | +| deployment.securityContext | object | `{}` | | +| deployment.sidecars | list | `[]` | | +| deployment.startupProbe | object | `{}` | | +| deployment.waitForDB.args | list | `[]` | | +| deployment.waitForDB.command | list | `[]` | | +| deployment.waitForDB.image.pullPolicy | string | `"IfNotPresent"` | | +| deployment.waitForDB.image.repository | string | `"postgres"` | | +| deployment.waitForDB.image.tag | string | `"15-alpine"` | | +| deployment.waitForDB.securityContext | object | `{}` | | +| enabled_plugins.tasks | object | `{"task-plugins":{"default-for-task-types":{"container":"container","container_array":"k8s-array","sidecar":"sidecar"},"enabled-plugins":["container","sidecar","k8s-array","connector-service","echo"]}}` | Tasks specific configuration [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#GetConfig) | +| enabled_plugins.tasks.task-plugins | object | `{"default-for-task-types":{"container":"container","container_array":"k8s-array","sidecar":"sidecar"},"enabled-plugins":["container","sidecar","k8s-array","connector-service","echo"]}` | Plugins configuration, [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#TaskPluginConfig) | +| enabled_plugins.tasks.task-plugins.enabled-plugins | list | `["container","sidecar","k8s-array","connector-service","echo"]` | [Enabled Plugins](https://pkg.go.dev/github.com/lyft/flyteplugins/go/tasks/config#Config). Enable sagemaker*, athena if you install the backend plugins | +| flyte-core-components.admin.disableClusterResourceManager | bool | `false` | | +| flyte-core-components.admin.disableScheduler | bool | `false` | | +| flyte-core-components.admin.disabled | bool | `false` | | +| flyte-core-components.admin.seedProjectsWithDetails[0].description | string | `"Default project setup."` | | +| flyte-core-components.admin.seedProjectsWithDetails[0].name | string | `"flytesnacks"` | | +| flyte-core-components.admin.seedProjects[0] | string | `"flytesnacks"` | | +| flyte-core-components.dataCatalog.disabled | bool | `false` | | +| flyte-core-components.propeller.disableWebhook | bool | `false` | | +| flyte-core-components.propeller.disabled | bool | `false` | | +| flyteconnector.enabled | bool | `false` | | +| fullnameOverride | string | `""` | | +| ingress.commonAnnotations | object | `{}` | | +| ingress.create | bool | `false` | | +| ingress.grpcAnnotations | object | `{}` | | +| ingress.grpcExtraPaths.append | list | `[]` | | +| ingress.grpcExtraPaths.prepend | list | `[]` | | +| ingress.grpcIngressClassName | string | `""` | | +| ingress.grpcTls | list | `[]` | | +| ingress.host | string | `""` | | +| ingress.httpAnnotations | object | `{}` | | +| ingress.httpExtraPaths.append | list | `[]` | | +| ingress.httpExtraPaths.prepend | list | `[]` | | +| ingress.httpIngressClassName | string | `""` | | +| ingress.httpTls | list | `[]` | | +| ingress.ingressClassName | string | `""` | | +| ingress.labels | object | `{}` | | +| ingress.separateGrpcIngress | bool | `true` | | +| ingress.tls | list | `[]` | | +| nameOverride | string | `""` | | +| rbac.annotations | object | `{}` | | +| rbac.create | bool | `true` | | +| rbac.extraRules | list | `[]` | | +| rbac.labels | object | `{}` | | +| service.clusterIP | string | `""` | | +| service.commonAnnotations | object | `{}` | | +| service.externalTrafficPolicy | string | `"Cluster"` | | +| service.extraPorts | list | `[]` | | +| service.grpcAnnotations | object | `{}` | | +| service.httpAnnotations | object | `{}` | | +| service.labels | object | `{}` | | +| service.loadBalancerIP | string | `""` | | +| service.loadBalancerSourceRanges | list | `[]` | | +| service.nodePorts.grpc | string | `""` | | +| service.nodePorts.http | string | `""` | | +| service.ports.grpc | string | `""` | | +| service.ports.http | string | `""` | | +| service.type | string | `"ClusterIP"` | | +| serviceAccount.annotations | object | `{}` | | +| serviceAccount.create | bool | `true` | | +| serviceAccount.imagePullSecrets | list | `[]` | | +| serviceAccount.labels | object | `{}` | | +| serviceAccount.name | string | `""` | | + diff --git a/charts/flyte-binary/defaults/cluster-resource-templates/namespace.yaml b/charts/flyte-binary/defaults/cluster-resource-templates/namespace.yaml new file mode 100644 index 0000000000..301cb82f42 --- /dev/null +++ b/charts/flyte-binary/defaults/cluster-resource-templates/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: '{{ namespace }}' diff --git a/charts/flyte-binary/templates/NOTES.txt b/charts/flyte-binary/templates/NOTES.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/charts/flyte-binary/templates/_helpers.tpl b/charts/flyte-binary/templates/_helpers.tpl new file mode 100644 index 0000000000..3e49eefdef --- /dev/null +++ b/charts/flyte-binary/templates/_helpers.tpl @@ -0,0 +1,172 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "flyte-binary.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "flyte-binary.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "flyte-binary.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Base labels +*/}} +{{- define "flyte-binary.baseLabels" -}} +app.kubernetes.io/name: {{ include "flyte-binary.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "flyte-binary.labels" -}} +helm.sh/chart: {{ include "flyte-binary.chart" . }} +{{ include "flyte-binary.baseLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "flyte-binary.selectorLabels" -}} +{{ include "flyte-binary.baseLabels" . }} +app.kubernetes.io/component: flyte-binary +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "flyte-binary.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "flyte-binary.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + +{{/* +Flag to use external configuration. +*/}} +{{- define "flyte-binary.configuration.externalConfiguration" -}} +{{- or .Values.configuration.externalConfigMap .Values.configuration.externalSecretRef -}} +{{- end -}} + +{{/* +Get the Flyte configuration ConfigMap name. +*/}} +{{- define "flyte-binary.configuration.configMapName" -}} +{{- printf "%s-config" (include "flyte-binary.fullname" .) -}} +{{- end -}} + +{{/* +Get the Flyte configuration Secret name. +*/}} +{{- define "flyte-binary.configuration.configSecretName" -}} +{{- printf "%s-config-secret" (include "flyte-binary.fullname" .) -}} +{{- end -}} + +{{/* +Get the Flyte logging configuration. +*/}} +{{- define "flyte-binary.configuration.logging.plugins" -}} +{{- with .Values.configuration.logging.plugins -}} +kubernetes-enabled: {{ .kubernetes.enabled }} +{{- if .kubernetes.enabled }} +kubernetes-template-uri: {{ required "Template URI required for Kubernetes logging plugin" .kubernetes.templateUri }} +{{- end }} +cloudwatch-enabled: {{ .cloudwatch.enabled }} +{{- if .cloudwatch.enabled }} +cloudwatch-template-uri: {{ required "Template URI required for CloudWatch logging plugin" .cloudwatch.templateUri }} +{{- end }} +stackdriver-enabled: {{ .stackdriver.enabled }} +{{- if .stackdriver.enabled }} +stackdriver-template-uri: {{ required "Template URI required for stackdriver logging plugin" .stackdriver.templateUri }} +{{- end }} +{{- if .custom }} +templates: {{- toYaml .custom | nindent 2 -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Get the Flyte cluster resource templates ConfigMap name. +*/}} +{{- define "flyte-binary.clusterResourceTemplates.configMapName" -}} +{{- printf "%s-cluster-resource-templates" (include "flyte-binary.fullname" .) -}} +{{- end -}} + +{{/* +Get the Flyte HTTP service name +*/}} +{{- define "flyte-binary.service.http.name" -}} +{{- printf "%s-http" (include "flyte-binary.fullname" .) -}} +{{- end -}} + +{{/* +Get the Flyte service HTTP port. +*/}} +{{- define "flyte-binary.service.http.port" -}} +{{- default 8090 .Values.service.ports.http -}} +{{- end -}} + +{{/* +Get the Flyte gRPC service name +*/}} +{{- define "flyte-binary.service.grpc.name" -}} +{{- printf "%s-http" (include "flyte-binary.fullname" .) -}} +{{- end -}} + +{{/* +Get the Flyte service gRPC port. +*/}} +{{- define "flyte-binary.service.grpc.port" -}} +{{- default 8090 .Values.service.ports.grpc -}} +{{- end -}} + +{{/* +Get the Flyte API paths for ingress. +*/}} +{{- define "flyte-binary.ingress.grpcPaths" -}} +- /flyteidl2.workflow.RunService +- /flyteidl2.workflow.RunService/* +- /flyteidl2.task.TaskService +- /flyteidl2.task.TaskService/* +- /flyteidl2.workflow.TranslatorService +- /flyteidl2.workflow.TranslatorService/* +- /flyteidl2.actions.ActionsService +- /flyteidl2.actions.ActionsService/* +- /flyteidl2.dataproxy.DataProxyService +- /flyteidl2.dataproxy.DataProxyService/* +{{- end -}} + +{{/* +Get the Flyte ClusterRole name. +*/}} +{{- define "flyte-binary.rbac.clusterRoleName" -}} +{{- printf "%s-cluster-role" (include "flyte-binary.fullname" .) -}} +{{- end -}} diff --git a/charts/flyte-binary/templates/admin-auth-secret.yaml b/charts/flyte-binary/templates/admin-auth-secret.yaml new file mode 100644 index 0000000000..3e164c1f10 --- /dev/null +++ b/charts/flyte-binary/templates/admin-auth-secret.yaml @@ -0,0 +1,16 @@ +{{- if .Values.configuration.auth.enabled }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "flyte-binary.configuration.auth.adminAuthSecretName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} +type: Opaque +{{- end }} diff --git a/charts/flyte-binary/templates/auth-client-secret.yaml b/charts/flyte-binary/templates/auth-client-secret.yaml new file mode 100644 index 0000000000..05612d72a5 --- /dev/null +++ b/charts/flyte-binary/templates/auth-client-secret.yaml @@ -0,0 +1,19 @@ +{{- if and .Values.configuration.auth.enabled (not .Values.configuration.auth.clientSecretsExternalSecretRef) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "flyte-binary.configuration.auth.clientSecretName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} +type: Opaque +stringData: + client_secret: {{ required "Internal client secret required when authentication is enabled" .Values.configuration.auth.internal.clientSecret | quote }} + oidc_client_secret: {{ required "OIDC client secret required when authentication is enabled" .Values.configuration.auth.oidc.clientSecret | quote }} +{{- end }} diff --git a/charts/flyte-binary/templates/clusterrole.yaml b/charts/flyte-binary/templates/clusterrole.yaml new file mode 100644 index 0000000000..02988e68ab --- /dev/null +++ b/charts/flyte-binary/templates/clusterrole.yaml @@ -0,0 +1,58 @@ +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ include "flyte-binary.rbac.clusterRoleName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.rbac.labels }} + {{- tpl ( .Values.rbac.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.rbac.annotations }} + {{- tpl ( .Values.rbac.annotations | toYaml ) . | nindent 4 }} + {{- end }} +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - events + verbs: + - create + - delete + - patch + - update + - apiGroups: + - flyte.org + resources: + - taskactions + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + {{- if .Values.rbac.extraRules }} + {{- toYaml .Values.rbac.extraRules | nindent 2 }} + {{- end }} +{{- end }} diff --git a/charts/flyte-binary/templates/clusterrolebinding.yaml b/charts/flyte-binary/templates/clusterrolebinding.yaml new file mode 100644 index 0000000000..3c13b302ad --- /dev/null +++ b/charts/flyte-binary/templates/clusterrolebinding.yaml @@ -0,0 +1,29 @@ +{{- if and .Values.rbac.create .Values.serviceAccount.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ include "flyte-binary.fullname" . }}-cluster-role-binding + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.rbac.labels }} + {{- tpl ( .Values.rbac.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.rbac.annotations }} + {{- tpl ( .Values.rbac.annotations | toYaml ) . | nindent 4 }} + {{- end }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ include "flyte-binary.rbac.clusterRoleName" . }} +subjects: + - kind: ServiceAccount + name: {{ include "flyte-binary.serviceAccountName" . }} + namespace: {{ .Release.Namespace | quote }} +{{- end }} diff --git a/charts/flyte-binary/templates/config-secret.yaml b/charts/flyte-binary/templates/config-secret.yaml new file mode 100644 index 0000000000..5992755b1f --- /dev/null +++ b/charts/flyte-binary/templates/config-secret.yaml @@ -0,0 +1,52 @@ +{{- if not (include "flyte-binary.configuration.externalConfiguration" .) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "flyte-binary.configuration.configSecretName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.configuration.labels }} + {{- tpl ( .Values.configuration.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.configuration.annotations }} + {{- tpl ( .Values.configuration.annotations | toYaml ) . | nindent 4 }} + {{- end }} +type: Opaque +stringData: + {{- if .Values.configuration.database.password }} + 012-database-secrets.yaml: | + database: + postgres: + password: {{ .Values.configuration.database.password | quote }} + {{- end }} + {{- if eq "s3" .Values.configuration.storage.provider }} + {{- if eq "accesskey" .Values.configuration.storage.providerConfig.s3.authType }} + 013-storage-secrets.yaml: | + storage: + stow: + config: + access_key_id: {{ required "Access key required for S3 storage provider" .Values.configuration.storage.providerConfig.s3.accessKey | quote }} + secret_key: {{ required "Secret key required for S3 storage provider" .Values.configuration.storage.providerConfig.s3.secretKey | quote }} + {{- end }} + {{- end }} + {{- if .Values.configuration.auth.enabled }} + {{- if .Values.configuration.auth.enableAuthServer }} + {{- if .Values.configuration.auth.internal.clientSecretHash }} + 014-auth-secrets.yaml: | + auth: + appAuth: + selfAuthServer: + staticClients: + flytepropeller: + client_secret: {{ .Values.configuration.auth.internal.clientSecretHash | quote }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/charts/flyte-binary/templates/configmap.yaml b/charts/flyte-binary/templates/configmap.yaml new file mode 100644 index 0000000000..560dae06f7 --- /dev/null +++ b/charts/flyte-binary/templates/configmap.yaml @@ -0,0 +1,111 @@ +{{- if not (include "flyte-binary.configuration.externalConfiguration" .) }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "flyte-binary.configuration.configMapName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.configuration.labels }} + {{- tpl ( .Values.configuration.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.configuration.annotations }} + {{- tpl ( .Values.configuration.annotations | toYaml ) . | nindent 4 }} + {{- end }} +data: + 000-core.yaml: | + logger: + show-source: true + level: {{ default 1 .Values.configuration.logging.level }} +{{ tpl ( index .Values "flyte-core-components" | toYaml ) . | nindent 4 }} + 001-plugins.yaml: | + tasks: + {{- .Values.enabled_plugins.tasks | toYaml | nindent 6 }} + plugins: + logs: {{- include "flyte-binary.configuration.logging.plugins" . | nindent 8 }} + k8s: + co-pilot: + {{- with ( index .Values.configuration "co-pilot" ).image }} + image: {{ printf "%s:%s" .repository .tag | quote }} + {{- end }} + k8s-array: + logs: + config: {{- include "flyte-binary.configuration.logging.plugins" . | nindent 12 }} + 002-database.yaml: | + {{- with .Values.configuration.database }} + database: + {{- if .sqlite.file }} + sqlite: + file: {{ .sqlite.file | quote }} + {{- else }} + postgres: + username: {{ .username }} + host: {{ tpl .host $ }} + port: {{ .port }} + dbname: {{ .dbname }} + options: {{ .options | quote }} + {{- if .passwordPath }} + passwordPath: {{ .passwordPath }} + {{- end }} + {{- end }} + {{- end }} + 003-storage.yaml: | + {{- with .Values.configuration.storage }} + storage: + type: stow + stow: + {{- if eq "s3" .provider }} + {{- with .providerConfig.s3 }} + kind: s3 + config: + region: {{ required "Region required for S3 storage provider" .region }} + disable_ssl: {{ .disableSSL }} + v2_signing: {{ .v2Signing }} + {{- if .endpoint }} + endpoint: {{ tpl .endpoint $ }} + {{- end }} + {{- if eq "iam" .authType }} + auth_type: iam + {{- else if eq "accesskey" .authType }} + auth_type: accesskey + {{- else }} + {{- printf "Invalid value for S3 storage provider authentication type. Expected one of (iam, accesskey), but got: %s" .authType | fail }} + {{- end }} + {{- end }} + {{- else if eq "azure" .provider }} + {{- with .providerConfig.azure }} + kind: azure + config: + account: {{ .account }} + {{- if .key }} + key: {{ .key }} + {{- end }} + {{- if .configDomainSuffix }} + configDomainSuffix: {{ .configDomainSuffix }} + {{- end }} + {{- if .configUploadConcurrency }} + configUploadConcurrency: {{ .configUploadConcurrency }} + {{- end }} + {{- end }} + {{- else if eq "gcs" .provider }} + kind: google + config: + json: "" + project_id: {{ required "GCP project required for GCS storage provider" .providerConfig.gcs.project }} + scopes: https://www.googleapis.com/auth/cloud-platform + {{- else }} + {{- printf "Invalid value for storage provider. Expected one of (s3, gcs), but got: %s" .provider | fail }} + {{- end }} + container: {{ required "Metadata container required" .metadataContainer }} + {{- end }} + {{- if .Values.configuration.inline }} + 100-inline-config.yaml: | + {{- tpl ( .Values.configuration.inline | toYaml ) . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/flyte-binary/templates/crds/taskaction.yaml b/charts/flyte-binary/templates/crds/taskaction.yaml new file mode 100644 index 0000000000..c0be44bf43 --- /dev/null +++ b/charts/flyte-binary/templates/crds/taskaction.yaml @@ -0,0 +1,263 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: taskactions.flyte.org +spec: + group: flyte.org + names: + kind: TaskAction + listKind: TaskActionList + plural: taskactions + singular: taskaction + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.runName + name: Run + type: string + - jsonPath: .spec.actionName + name: Action + type: string + - jsonPath: .spec.taskType + name: TaskType + type: string + - jsonPath: .status.conditions[?(@.type=='Progressing')].reason + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=='Progressing')].status + name: Progressing + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=='Succeeded')].status + name: Succeeded + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=='Failed')].status + name: Failed + priority: 1 + type: string + name: v1 + schema: + openAPIV3Schema: + description: TaskAction is the Schema for the taskactions API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: spec defines the desired state of TaskAction + properties: + actionName: + description: ActionName is the unique name of this action within the + run + maxLength: 30 + minLength: 1 + type: string + domain: + description: Domain this action belongs to + maxLength: 63 + minLength: 1 + type: string + inputUri: + description: InputURI is the path to the input data for this action + minLength: 1 + type: string + org: + description: Org this action belongs to + maxLength: 63 + minLength: 1 + type: string + parentActionName: + description: ParentActionName is the optional name of the parent action + maxLength: 30 + minLength: 1 + type: string + project: + description: Project this action belongs to + maxLength: 63 + minLength: 1 + type: string + runName: + description: RunName is the name of the run this action belongs to + maxLength: 30 + minLength: 1 + type: string + runOutputBase: + description: RunOutputBase is the base path where this action should + write its output + minLength: 1 + type: string + shortName: + description: ShortName is the human-readable display name for this + task + maxLength: 63 + type: string + taskTemplate: + description: TaskTemplate is the proto-serialized core.TaskTemplate + stored inline in etcd + format: byte + type: string + taskType: + description: TaskType identifies which plugin handles this task (e.g. + "container", "spark", "ray") + maxLength: 63 + minLength: 1 + type: string + required: + - actionName + - domain + - inputUri + - org + - project + - runName + - runOutputBase + - taskTemplate + - taskType + type: object + status: + description: status defines the observed state of TaskAction + properties: + conditions: + description: |- + conditions represent the current state of the TaskAction resource. + Each condition has a unique type and reflects the status of a specific aspect of the resource. + + Standard condition types include: + - "Available": the resource is fully functional + - "Progressing": the resource is being created or updated + - "Degraded": the resource failed to reach or maintain its desired state + + The status of each condition is one of True, False, or Unknown. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CalmelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + phaseHistory: + description: |- + PhaseHistory is an append-only log of phase transitions. Unlike conditions + (which are updated in-place by type), this preserves the full timeline: + Queued → Initializing → Executing → Succeeded/Failed, each with a timestamp. + items: + description: PhaseTransition records a phase change with its timestamp. + properties: + message: + description: Message is an optional human-readable message about + the transition. + type: string + occurredAt: + description: OccurredAt is when this phase transition happened. + format: date-time + type: string + phase: + description: Phase is the phase that was entered (e.g. "Queued", + "Initializing", "Executing", "Succeeded", "Failed"). + type: string + required: + - occurredAt + - phase + type: object + type: array + pluginPhase: + description: PluginPhase is a human-readable representation of the + plugin's current phase. + type: string + pluginPhaseVersion: + description: PluginPhaseVersion is the version of the current plugin + phase. + format: int32 + type: integer + pluginState: + description: PluginState is the Gob-encoded plugin state from the + last reconciliation round. + format: byte + type: string + pluginStateVersion: + description: PluginStateVersion tracks the version of the plugin state + schema for compatibility. + type: integer + stateJson: + description: StateJSON is the JSON serialized NodeStatus that was + last sent to the State Service + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/charts/flyte-binary/templates/deployment.yaml b/charts/flyte-binary/templates/deployment.yaml new file mode 100644 index 0000000000..ec45925dd6 --- /dev/null +++ b/charts/flyte-binary/templates/deployment.yaml @@ -0,0 +1,215 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "flyte-binary.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.deployment.labels }} + {{- tpl ( .Values.deployment.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.deployment.annotations }} + {{- tpl ( .Values.deployment.annotations | toYaml ) . | nindent 4 }} + {{- end }} +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: {{- include "flyte-binary.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: {{- include "flyte-binary.selectorLabels" . | nindent 8 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 8 }} + {{- end }} + {{- if .Values.deployment.podLabels }} + {{- tpl ( .Values.deployment.podLabels | toYaml ) . | nindent 8 }} + {{- end }} + annotations: + {{- if not (include "flyte-binary.configuration.externalConfiguration" .) }} + checksum/configuration: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + checksum/configuration-secret: {{ include (print $.Template.BasePath "/config-secret.yaml") . | sha256sum }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 8 }} + {{- end }} + {{- if .Values.deployment.podAnnotations }} + {{- tpl ( .Values.deployment.podAnnotations | toYaml ) . | nindent 8 }} + {{- end }} + spec: + {{- if .Values.deployment.extraPodSpec }} + {{- tpl ( .Values.deployment.extraPodSpec | toYaml ) . | nindent 6 }} + {{- end }} + {{- if .Values.deployment.podSecurityContext.enabled }} + securityContext: {{- omit .Values.deployment.podSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + serviceAccountName: {{ include "flyte-binary.serviceAccountName" . }} + {{- if or .Values.deployment.initContainers (not (include "flyte-binary.configuration.externalConfiguration" .)) }} + initContainers: + {{- if not (include "flyte-binary.configuration.externalConfiguration" .) }} + {{- if .Values.deployment.preInitContainers }} + {{- tpl ( .Values.deployment.preInitContainers | toYaml ) . | nindent 8 }} + {{- end }} + - name: wait-for-db + {{- with .Values.deployment.waitForDB.image }} + image: {{ printf "%s:%s" .repository .tag | quote }} + imagePullPolicy: {{ .pullPolicy | quote }} + {{- end }} + command: + {{- if .Values.deployment.waitForDB.command }} + {{- tpl ( .Values.deployment.waitForDB.command | toYaml ) . | nindent 12 }} + {{- else }} + - sh + - -ec + {{- end }} + args: + {{- if .Values.deployment.waitForDB.args }} + {{- tpl ( .Values.deployment.waitForDB.args | toYaml ) . | nindent 12 }} + {{- else }} + {{- with .Values.configuration.database }} + - | + until pg_isready \ + -h {{ tpl .host $ }} \ + -p {{ .port }} \ + -U {{ .username }} + do + echo waiting for database + sleep 0.1 + done + {{- end }} + {{- end }} + {{- if .Values.deployment.resources }} + resources: {{- toYaml .Values.deployment.resources | nindent 12 }} + {{- end }} + {{- if .Values.deployment.waitForDB.securityContext }} + securityContext: {{- toYaml .Values.deployment.waitForDB.securityContext | nindent 12 }} + {{- end }} + {{- end }} + {{- if .Values.deployment.initContainers }} + {{- tpl ( .Values.deployment.initContainers | toYaml ) . | nindent 8 }} + {{- end }} + {{- end }} + containers: + - name: flyte + {{- with .Values.deployment.image }} + image: {{ printf "%s:%s" .repository .tag | quote }} + imagePullPolicy: {{ .pullPolicy | quote }} + {{- end }} + {{- if .Values.deployment.command }} + command: {{- tpl ( .Values.deployment.command | toYaml ) . | nindent 12 }} + {{- end }} + args: + {{- if .Values.deployment.args }} + {{- tpl ( .Values.deployment.args | toYaml ) . | nindent 12 }} + {{- else }} + - --config + - /etc/flyte/config.d/*.yaml + {{- end }} + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + {{- if .Values.deployment.extraEnvVars }} + {{- tpl ( .Values.deployment.extraEnvVars | toYaml ) . | nindent 12 }} + {{- end }} + {{- if or .Values.deployment.extraEnvVarsConfigMap .Values.deployment.extraEnvVarsSecret }} + envFrom: + {{- if .Values.deployment.extraEnvVarsConfigMap }} + - configMapRef: + name: {{ .Values.deployment.extraEnvVarsConfigMap }} + {{- end }} + {{- if .Values.deployment.extraEnvVarsSecret }} + - secretRef: + name: {{ .Values.deployment.extraEnvVarsSecret }} + {{- end }} + {{- end }} + ports: + - name: http + containerPort: 8090 + {{- if .Values.deployment.startupProbe }} + startupProbe: {{- tpl ( .Values.deployment.startupProbe | toYaml ) . | nindent 12 }} + {{- end }} + livenessProbe: + {{- if .Values.deployment.livenessProbe }} + {{- tpl ( .Values.deployment.livenessProbe | toYaml ) . | nindent 12 }} + {{- else }} + httpGet: + path: /healthz + port: http + initialDelaySeconds: 30 + {{- end }} + readinessProbe: + {{- if .Values.deployment.readinessProbe }} + {{- tpl ( .Values.deployment.readinessProbe | toYaml ) . | nindent 12 }} + {{- else }} + httpGet: + path: /healthz + port: http + initialDelaySeconds: 30 + {{- end }} + {{- if .Values.deployment.resources }} + resources: {{- toYaml .Values.deployment.resources | nindent 12 }} + {{- end }} + {{- if .Values.deployment.lifecycleHooks }} + lifecycle: {{- tpl ( .Values.deployment.lifecycleHooks | toYaml ) . | nindent 12 }} + {{- end }} + volumeMounts: + {{- if .Values.configuration.auth.enabled }} + - name: auth + mountPath: /etc/secrets + {{- end }} + - name: config + mountPath: /etc/flyte/config.d + {{- if .Values.deployment.extraVolumeMounts }} + {{- tpl ( .Values.deployment.extraVolumeMounts | toYaml ) . | nindent 12 }} + {{- end }} + {{- if .Values.deployment.securityContext }} + securityContext: {{- toYaml .Values.deployment.securityContext | nindent 12 }} + {{- end }} + {{- if .Values.deployment.sidecars }} + {{- tpl ( .Values.deployment.sidecars | toYaml ) . | nindent 8 }} + {{- end }} + volumes: + - name: config + {{- if (include "flyte-binary.configuration.externalConfiguration" .) }} + projected: + sources: + {{- if .Values.configuration.externalConfigMap }} + - configMap: + name: {{ tpl .Values.configuration.externalConfigMap . }} + {{- end }} + {{- if .Values.configuration.externalSecretRef }} + - secret: + name: {{ tpl .Values.configuration.externalSecretRef . }} + {{- end }} + {{- else }} + projected: + sources: + - configMap: + name: {{ include "flyte-binary.configuration.configMapName" . }} + - secret: + name: {{ include "flyte-binary.configuration.configSecretName" . }} + {{- if .Values.configuration.inlineConfigMap }} + - configMap: + name: {{ tpl .Values.configuration.inlineConfigMap . }} + {{- end }} + {{- if .Values.configuration.inlineSecretRef }} + - secret: + name: {{ tpl .Values.configuration.inlineSecretRef . }} + {{- end }} + {{- end }} + {{- if .Values.deployment.extraVolumes }} + {{- tpl ( .Values.deployment.extraVolumes | toYaml ) . | nindent 8 }} + {{- end }} diff --git a/charts/flyte-binary/templates/ingress/grpc.yaml b/charts/flyte-binary/templates/ingress/grpc.yaml new file mode 100644 index 0000000000..bd43185e50 --- /dev/null +++ b/charts/flyte-binary/templates/ingress/grpc.yaml @@ -0,0 +1,64 @@ +{{- if and .Values.ingress.create .Values.ingress.separateGrpcIngress }} +{{- $paths := (include "flyte-binary.ingress.grpcPaths" .) | fromYamlArray }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "flyte-binary.fullname" . }}-grpc + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.ingress.labels }} + {{- tpl ( .Values.ingress.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.ingress.commonAnnotations }} + {{- tpl ( .Values.ingress.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.ingress.grpcAnnotations }} + {{- tpl ( .Values.ingress.grpcAnnotations | toYaml ) . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.ingress.grpcIngressClassName }} + ingressClassName: {{ .Values.ingress.grpcIngressClassName | quote }} + {{- else if .Values.ingress.ingressClassName }} + ingressClassName: {{ .Values.ingress.ingressClassName | quote }} + {{- end }} + {{- if .Values.ingress.grpcTls }} + tls: {{- tpl ( .Values.ingress.grpcTls | toYaml ) . | nindent 2 }} + {{- else if .Values.ingress.tls }} + tls: {{- tpl ( .Values.ingress.tls | toYaml ) . | nindent 2 }} + {{- end }} + rules: + - http: + paths: + {{- if .Values.ingress.grpcExtraPaths.prepend }} + {{- tpl ( .Values.ingress.grpcExtraPaths.prepend | toYaml ) . | nindent 6 }} + {{- end }} + {{- range $path := $paths }} + - path: {{ $path }} + {{- if semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion }} + pathType: ImplementationSpecific + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ include "flyte-binary.service.grpc.name" $ }} + port: + number: {{ include "flyte-binary.service.grpc.port" $ }} + {{- else }} + serviceName: {{ include "flyte-binary.service.grpc.name" $ }} + servicePort: {{ include "flyte-binary.service.grpc.port" $ }} + {{- end }} + {{- end }} + {{- if .Values.ingress.grpcExtraPaths.append }} + {{- tpl ( .Values.ingress.grpcExtraPaths.append | toYaml ) . | nindent 6 }} + {{- end }} + {{- if .Values.ingress.host }} + host: {{ tpl .Values.ingress.host . | quote }} + {{- end }} +{{- end }} diff --git a/charts/flyte-binary/templates/ingress/http.yaml b/charts/flyte-binary/templates/ingress/http.yaml new file mode 100644 index 0000000000..cdce87047b --- /dev/null +++ b/charts/flyte-binary/templates/ingress/http.yaml @@ -0,0 +1,199 @@ +{{- if .Values.ingress.create }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "flyte-binary.fullname" . }}-http + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.ingress.labels }} + {{- tpl ( .Values.ingress.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.ingress.commonAnnotations }} + {{- tpl ( .Values.ingress.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.ingress.httpAnnotations }} + {{- tpl ( .Values.ingress.httpAnnotations | toYaml ) . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.ingress.httpIngressClassName }} + ingressClassName: {{ .Values.ingress.httpIngressClassName | quote }} + {{- else if .Values.ingress.ingressClassName }} + ingressClassName: {{ .Values.ingress.ingressClassName | quote }} + {{- end }} + {{- if .Values.ingress.httpTls }} + tls: {{- tpl ( .Values.ingress.httpTls | toYaml ) . | nindent 2 }} + {{- else if .Values.ingress.tls }} + tls: {{- tpl ( .Values.ingress.tls | toYaml ) . | nindent 2 }} + {{- end }} + rules: + - http: + paths: + {{- if .Values.ingress.httpExtraPaths.prepend }} + {{- tpl ( .Values.ingress.httpExtraPaths.prepend | toYaml ) . | nindent 6 }} + {{- end }} + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /console + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /console/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /api + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /api/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /healthcheck + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /v1/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /.well-known + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /.well-known/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /login + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /login/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /logout + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /logout/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /callback + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /callback/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /me + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /config + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /config/* + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /oauth2 + pathType: ImplementationSpecific + - backend: + service: + name: {{ include "flyte-binary.service.http.name" . }} + port: + number: {{ include "flyte-binary.service.http.port" . }} + path: /oauth2/* + pathType: ImplementationSpecific + {{- if not .Values.ingress.separateGrpcIngress }} + {{- $paths := (include "flyte-binary.ingress.grpcPaths" .) | fromYamlArray }} + {{- range $path := $paths }} + - path: {{ $path }} + {{- if semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion }} + pathType: ImplementationSpecific + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ include "flyte-binary.service.http.name" $ }} + port: + number: {{ include "flyte-binary.service.grpc.port" $ }} + {{- else }} + serviceName: {{ include "flyte-binary.service.http.name" $ }} + servicePort: {{ include "flyte-binary.service.grpc.port" $ }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.ingress.httpExtraPaths.append }} + {{- tpl ( .Values.ingress.httpExtraPaths.append | toYaml ) . | nindent 6 }} + {{- end }} + {{- if .Values.ingress.host }} + host: {{ tpl .Values.ingress.host . | quote }} + {{- end }} +{{- end }} diff --git a/charts/flyte-binary/templates/service/http.yaml b/charts/flyte-binary/templates/service/http.yaml new file mode 100644 index 0000000000..ab79c90210 --- /dev/null +++ b/charts/flyte-binary/templates/service/http.yaml @@ -0,0 +1,59 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "flyte-binary.service.http.name" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.service.labels }} + {{- tpl ( .Values.service.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.service.commonAnnotations }} + {{- tpl ( .Values.service.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.service.httpAnnotations }} + {{- tpl ( .Values.service.httpAnnotations | toYaml ) . | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + {{- if or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort") }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerSourceRanges)) }} + loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }} + {{- end }} + {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP)) }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- end }} + {{- if and .Values.service.clusterIP (eq .Values.service.type "ClusterIP") }} + clusterIP: {{ .Values.service.clusterIP }} + {{- end }} + ports: + - name: http + port: {{ include "flyte-binary.service.http.port" . }} + targetPort: http + {{- if and (or (eq .Values.service.type "NodePort") (eq .Values.service.type "LoadBalancer")) (not (empty .Values.service.nodePorts.http)) }} + nodePort: {{ .Values.service.nodePorts.http }} + {{- else if eq .Values.service.type "ClusterIP" }} + nodePort: null + {{- end }} + {{- if not .Values.ingress.separateGrpcIngress }} + - name: grpc + port: {{ include "flyte-binary.service.grpc.port" . }} + targetPort: grpc + {{- if and (or (eq .Values.service.type "NodePort") (eq .Values.service.type "LoadBalancer")) (not (empty .Values.service.nodePorts.grpc)) }} + nodePort: {{ .Values.service.nodePorts.grpc }} + {{- else if eq .Values.service.type "ClusterIP" }} + nodePort: null + {{- end }} + {{- end }} + {{- if .Values.service.extraPorts }} + {{- tpl ( .Values.service.extraPorts | toYaml ) . | nindent 4 }} + {{- end }} + selector: {{- include "flyte-binary.selectorLabels" . | nindent 4 }} diff --git a/charts/flyte-binary/templates/serviceaccount.yaml b/charts/flyte-binary/templates/serviceaccount.yaml new file mode 100644 index 0000000000..52c077e4eb --- /dev/null +++ b/charts/flyte-binary/templates/serviceaccount.yaml @@ -0,0 +1,25 @@ +{{- if .Values.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "flyte-binary.serviceAccountName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-binary.labels" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- tpl ( .Values.commonLabels | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.serviceAccount.labels }} + {{- tpl ( .Values.serviceAccount.labels | toYaml ) . | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- tpl ( .Values.commonAnnotations | toYaml ) . | nindent 4 }} + {{- end }} + {{- if .Values.serviceAccount.annotations }} + {{- tpl ( .Values.serviceAccount.annotations | toYaml ) . | nindent 4 }} + {{- end }} +{{- if .Values.serviceAccount.imagePullSecrets }} +imagePullSecrets: + {{- tpl ( .Values.serviceAccount.imagePullSecrets | toYaml ) . | nindent 2 }} +{{- end }} +{{- end }} diff --git a/charts/flyte-binary/values.yaml b/charts/flyte-binary/values.yaml new file mode 100644 index 0000000000..c7ef4e51b0 --- /dev/null +++ b/charts/flyte-binary/values.yaml @@ -0,0 +1,429 @@ +# nameOverride String to override flyte-binary.name template +nameOverride: "" +# fullnameOverride String to override flyte-binary.fullname template +fullnameOverride: "" +# commonLabels Add labels to all the deployed resources +commonLabels: {} +# commonAnnotations Add annotations to all the deployed resources +commonAnnotations: {} + +# flyte-core-components: Configuration for the unified Flyte Manager +flyte-core-components: + manager: + server: + host: "0.0.0.0" + port: 8090 + executor: + healthProbePort: 8081 + kubernetes: + namespace: "flyte" + kubeconfig: "" + qps: 1000 + burst: 2000 + timeout: "30s" + runs: + server: + host: "0.0.0.0" + port: 8090 + watchBufferSize: 100 + storagePrefix: "s3://flyte-data" + # Right now sandbox use SQLite db, we just leave the postgreSQL setting for potential future usage + database: + maxIdleConnections: 10 + maxOpenConnections: 100 + connMaxLifeTime: 1h + postgres: + host: "127.0.0.1" + port: 5432 + dbname: flyte + username: postgres + password: "" + options: "sslmode=disable" + debug: false + + actions: + kubernetes: + namespace: "flyte" + kubeconfig: "" + watchBufferSize: 100 + + dataproxy: + upload: + maxSize: "100Mi" + maxExpiresIn: 1h + defaultFileNameLength: 20 + storagePrefix: "uploads" + download: + maxExpiresIn: 1h + +# configuration Specify configuration for Flyte +configuration: + # database Specify configuration for Flyte's database connection + database: + # username Name for user to connect to database as + username: postgres + # password Password to connect to database with + # If set, a Secret will be created with this value and mounted to Flyte pod + password: "" + # passwordPath Mountpath of file containing password to be added to Flyte deployment + passwordPath: "" + # host Hostname of database instance + host: 127.0.0.1 + # port Port to connect to database at + port: 5432 + # dbname Name of database to use + dbname: flyte + # options Additional client options for connecting to database + options: sslmode=disable + # sqlite.file Path to SQLite database file. If set, SQLite is used instead of PostgreSQL. + sqlite: + file: "/var/lib/flyte/flyte.db" + # storage Specify configuration for object store + storage: + # metadataContainer Bucket to store Flyte metadata + metadataContainer: "my-organization-flyte-container" + # userDataContainer Bucket to store Flyte user data + userDataContainer: "my-organization-flyte-container" + # provider Object store provider (Supported values: s3, gcs) + provider: s3 + # providerConfig Additional object store provider-specific configuration + providerConfig: + # s3 Provider configuration for S3 object store + s3: + # region AWS region at which bucket resides + region: "us-east-1" + # disableSSL Switch to disable SSL for communicating with S3-compatible service + disableSSL: false + # v2Signing Flag to sign requests with v2 signature + # Useful for s3-compatible blob stores (e.g. minio) + v2Signing: false + # endpoint URL of S3-compatible service + endpoint: "" + # authType Type of authentication to use for connecting to S3-compatible service (Supported values: iam, accesskey) + authType: "iam" + # accessKey Access key for authenticating with S3-compatible service + accessKey: "" + # secretKey Secret key for authenticating with S3-compatible service + secretKey: "" + # gcs Provider configuration for GCS object store + gcs: + # project Google Cloud project in which bucket resides + project: "my-organization-gcp-project" + # azure Provider configuration for Azure object store + azure: + # configDomainSuffix Domain name suffix + configDomainSuffix: "" + # configUploadConcurrency Upload Concurrency (default 4) + configUploadConcurrency: 4 + # account Storage Account name + account: "storage-account-name" + # key Storage Account key if used + key: "" + # logging Specify configuration for logs emitted by Flyte + logging: + # level Set the log level + level: 1 + # plugins Specify additional logging plugins + plugins: + # kubernetes Configure logging plugin to have logs visible in the Kubernetes Dashboard + kubernetes: + enabled: false + templateUri: "" + # cloudwatch Configure logging plugin to have logs visible in CloudWatch + cloudwatch: + enabled: false + templateUri: "" + # stackdriver Configure logging plugin to have logs visible in StackDriver + stackdriver: + enabled: false + templateUri: "" + custom: [] + # auth Specify configuration for Flyte authentication + # Todo(alex): When we have a auth service, we will come back here to set configuration + auth: + # enabled Enable Flyte authentication + enabled: false + # enableAuthServer Enable built-in authentication server + enableAuthServer: true + # oidc OIDC configuration for Flyte authentication + oidc: + # baseUrl URL for OIDC provider + baseUrl: "" + # clientId Flyte application client ID + clientId: "" + # clientSecret Flyte application client secret + clientSecret: "" + # internal Configuration for internal authentication + # The settings for internal still need to be defined if you wish to use an external auth server + # These credentials are used during communication between the FlyteAdmin and Propeller microservices + internal: + # clientId Client ID for internal authentication - set to external auth server + clientId: flytemanager + # clientSecret Client secret for internal authentication + clientSecret: "" + # clientSecretHash Bcrypt hash of clientSecret + clientSecretHash: "" + # Uncomment next line if needed - set this field if your external Auth server (ex. Auth0) requires an audience parameter + # audience: "" + # flyteClient Configuration for Flyte client authentication + flyteClient: + # clientId Client ID for Flyte client authentication + clientId: flytectl + # redirectUri Redirect URI for Flyte client authentication + redirectUri: http://localhost:53593/callback + # scopes Scopes for Flyte client authentication + scopes: + - all + # audience Audience for Flyte client authentication + audience: "" + # authorizedUris Set of URIs that clients are allowed to visit the service on + authorizedUris: [] + # clientSecretExternalSecretRef Specify an existing, external Secret containing values for `client_secret` and `oidc_client_secret`. + # If set, a Secret will not be generated by this chart for client secrets. + clientSecretsExternalSecretRef: "" + # co-pilot Configuration for Flyte CoPilot + co-pilot: + # image Configure image to use for CoPilot sidecar + image: + # repository CoPilot sidecar image repository + repository: cr.flyte.org/flyteorg/flytecopilot # FLYTECOPILOT_IMAGE + # tag CoPilot sidecar image tag + tag: v1.16.4 # FLYTECOPILOT_TAG + # connectorService Flyte Connector configuration + connectorService: + defaultConnector: + endpoint: "k8s://flyteconnector.flyte:8000" + insecure: true + timeouts: + GetTask: 10s + ListAgents: 3s + defaultTimeout: 10s + + # externalConfigMap Specify an existing, external ConfigMap to use as configuration for Flyte + # If set, no Flyte configuration will be generated by this chart + externalConfigMap: "" + # externalSecretRef Specify an existing, external Secret to use as configuration for Flyte + # If set, no Flyte configuration will be generated by this chart + externalSecretRef: "" + # inline Specify additional configuration or overrides for Flyte, to be merged with the base configuration + inline: {} + # inlineConfigMap Specify an existing ConfigMap containing additional configuration + # or overrides for Flyte, to be merged with the base configuration + inlineConfigMap: "" + # inlineSecretRef Specify an existing Secret containing additional configuration + # or overrides for Flyte, to be merged with the base configuration + inlineSecretRef: "" + # labels Add labels to created ConfigMap + labels: {} + # annotations Add annotations to created ConfigMap + annotations: {} + +# deployment Configure Flyte deployment specification +deployment: + # image Configure image to use for Flyte + image: + # repository Flyte image repository + repository: cr.flyte.org/flyteorg/flyte-binary # FLYTE_IMAGE + # tag Flyte image tag + tag: latest # FLYTE_TAG + # pullPolicy Flyte image pull policy + pullPolicy: IfNotPresent + # extraEnvVars Array with extra environment variables to add to Flyte + extraEnvVars: [] + # extraEnvVarsConfigMap Name of existing ConfigMap containing extra env vars for Flyte + extraEnvVarsConfigMap: "" + # extraEnvVarsSecret Name of existing Secret containing extra env vars for Flyte + extraEnvVarsSecret: "" + # command Override default container command + command: [] + # args Override default container args + args: [] + # livenessProbe Override default container liveness probe + # See: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ + livenessProbe: {} + # readinessProbe Override default container readiness probe + readinessProbe: {} + # startupProbe Specify a startup probe for Flyte container + startupProbe: {} + # lifecycleHooks Specify hooks to run in Flyte container before or after startup + lifecycleHooks: {} + # resources Resource limits and requests for Flyte container + # Uncomment and update to specify resources for deployment + # resources: + # limits: + # memory: 1Gi + # requests: + # cpu: 1 + # podSecurityContext Specify security context for Flyte pod + # See: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ + podSecurityContext: + enabled: false + runAsUser: 65534 + runAsGroup: 65534 + fsGroup: 65534 + # waitForDB Configure init container to wait for DB during pod startup + # This is disabled when an external ConfigMap is used to specify Flyte configuration + waitForDB: + # image Configure image to use for wait-for-db init container + image: + # repository Init container image repository + repository: postgres + # tag Init container image tag + tag: 15-alpine + # pullPolicy Init container image pull policy + pullPolicy: IfNotPresent + # command Override default init container command + command: [] + # args Override default init container args + args: [] + # securityContext Specify security context for wait-for-db init container + securityContext: {} + # genAdminAuthSecret Configure init container to generate secrets for internal use + genAdminAuthSecret: + # command Override default init container command + command: [] + # args Override default init container args + args: [] + # securityContext Specify security context for gen-admin-auth-secret init container + securityContext: {} + # labels Add labels to Flyte deployment + labels: {} + # annotations Add annotations to Flyte deployment + annotations: {} + # labels Add labels to Flyte pod + podLabels: {} + # annotations Add annotations to Flyte pod + podAnnotations: {} + # extraVolumeMounts Specify additional volumeMounts for Flyte container + extraVolumeMounts: [] + # extraVolume Specify additional volumes for Flyte pod + extraVolumes: [] + # sidecars Specify additional containers for Flyte pod + sidecars: [] + # initContainers Specify additional init containers for Flyte pod + initContainers: [] + # preInitContainers Specify additional pre-init containers for Flyte pod that run before the wait-for-db init container + preInitContainers: [] + # extraPodSpec Specify additional configuration for Flyte pod + # This can be used for adding affinity, tolerations, hostNetwork, etc. + extraPodSpec: {} + # securityContext Specify security context for Flyte container + securityContext: {} + +# service Configure service for Flyte +service: + # type Kubernetes service type + type: ClusterIP + # ports Flyte service ports + # If not specified, defaults to corresponding container ports + ports: + http: "" + grpc: "" + # nodePorts Node ports for Flyte service if service type is `NodePort` or `LoadBalancer` + nodePorts: + http: "" + grpc: "" + # clusterIP Set static IP if service type is `ClusterIP` + clusterIP: "" + # labels Add labels to Flyte services + labels: {} + # commonAnnotations Add annotations to Flyte services + commonAnnotations: {} + # httpAnnotations Add annotations to http service resource + httpAnnotations: {} + # grpcAnnotations Add annotations to grpc service resource + grpcAnnotations: {} + # loadBalancerIP Set static IP if service type is `LoadBalancer` + loadBalancerIP: "" + # externalTrafficPolicy Enable client source IP preservation if service type is `NodePort` or `LoadBalancer` + # See: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + externalTrafficPolicy: Cluster + # loadBalancerSourceRanges Addresses that are allowed when service is `LoadBalancer` + loadBalancerSourceRanges: [] + # extraPorts Additional ports to add to Flyte service + extraPorts: [] + +# ingress Configure ingress for Flyte +ingress: + # create Create ingress resources + create: false + # labels Add labels to ingress resources + labels: {} + # host Hostname to bind to ingress resources + host: "" + # separateGrpcIngress Create a separate ingress resource for GRPC if true. Required for certain ingress controllers like nginx. + separateGrpcIngress: true + # commonAnnotations Add common annotations to all ingress resources + commonAnnotations: {} + # httpAnnotations Add annotations to http ingress resource + httpAnnotations: {} + # grpcAnnotations Add annotations to grpc ingress resource + grpcAnnotations: {} + # ingressClassName Ingress class to use with all ingress resources + ingressClassName: "" + # httpIngressClassName Ingress class to use with all http ingress resource. Overrides `ingressClassName` + httpIngressClassName: "" + # grpcIngressClassName Ingress class to use with all grpc ingress resource. Overrides `ingressClassName` + grpcIngressClassName: "" + # tls Add TLS configuration to all ingress resources + tls: [] + # httpTls Add TLS configuration to http ingress resource. Overrides `tls` + httpTls: [] + # grpcTls Add TLS configuration to grpc ingress resource. Overrides `tls` + grpcTls: [] + # httpExtraPaths Add extra paths to http ingress rule + httpExtraPaths: + prepend: [] + append: [] + # grpcExtraPaths Add extra paths to grpc ingress rule + grpcExtraPaths: + prepend: [] + append: [] + +# rbac Configure Kubernetes RBAC for Flyte +rbac: + # create Create ClusterRole and ClusterRoleBinding resources + create: true + # labels Add labels to RBAC resources + labels: {} + # annotations Add annotations to RBAC resources + annotations: {} + # extraRules Add additional rules to the ClusterRole + extraRules: [] + +# serviceAccount Configure Flyte ServiceAccount +serviceAccount: + # create Create ServiceAccount for Flyte + create: true + # name Name of service account + name: "" + # labels Add labels to ServiceAccount + labels: {} + # annotations Add annotations to ServiceAccount + annotations: {} + # imagePullSecrets Secrets to use for fetching images from private registries + imagePullSecrets: [] + +# flyteconnector Configure Flyte Connector objects +flyteconnector: + # enable Flag to enable bundled Flyte Connector + enabled: false + +enabled_plugins: + # -- Tasks specific configuration [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#GetConfig) + tasks: + # -- Plugins configuration, [structure](https://pkg.go.dev/github.com/flyteorg/flytepropeller/pkg/controller/nodes/task/config#TaskPluginConfig) + task-plugins: + # -- [Enabled Plugins](https://pkg.go.dev/github.com/lyft/flyteplugins/go/tasks/config#Config). + # Enable sagemaker*, athena if you install the backend plugins + enabled-plugins: + - container + - sidecar + - connector-service + - echo + default-for-task-types: + container: container + sidecar: sidecar + container_array: k8s-array + # -- Uncomment to enable task type that uses Flyte Connector + # bigquery_query_job_task: connector-service diff --git a/charts/flyte-sandbox/.helmignore b/charts/flyte-sandbox/.helmignore new file mode 100644 index 0000000000..0e8a0eb36f --- /dev/null +++ b/charts/flyte-sandbox/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/flyte-sandbox/Chart.lock b/charts/flyte-sandbox/Chart.lock new file mode 100644 index 0000000000..8e8aa23f2c --- /dev/null +++ b/charts/flyte-sandbox/Chart.lock @@ -0,0 +1,18 @@ +dependencies: +- name: docker-registry + repository: https://twuni.github.io/docker-registry.helm + version: 2.2.2 +- name: flyte-binary + repository: file://../flyte-binary + version: v0.2.0 +- name: kubernetes-dashboard + repository: https://kubernetes-retired.github.io/dashboard/ + version: 6.0.0 +- name: minio + repository: https://charts.bitnami.com/bitnami + version: 12.6.7 +- name: postgresql + repository: https://charts.bitnami.com/bitnami + version: 12.8.1 +digest: sha256:226294cb2ca0049355056db89e7e0085f407eda14a9cc6737d37fba486eb2c28 +generated: "2026-02-27T22:05:59.483903+08:00" diff --git a/charts/flyte-sandbox/Chart.yaml b/charts/flyte-sandbox/Chart.yaml new file mode 100644 index 0000000000..c801f8aa01 --- /dev/null +++ b/charts/flyte-sandbox/Chart.yaml @@ -0,0 +1,46 @@ +apiVersion: v2 +name: flyte-sandbox +description: A Helm chart for the Flyte local sandbox + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.1" + +dependencies: + - name: docker-registry + version: 2.2.2 + repository: https://twuni.github.io/docker-registry.helm + condition: docker-registry.enabled + - name: flyte-binary + version: v0.2.0 + repository: file://../flyte-binary + condition: flyte-binary.enabled + - name: kubernetes-dashboard + version: 6.0.0 + repository: https://kubernetes-retired.github.io/dashboard/ + condition: kubernetes-dashboard.enabled + - name: minio + version: 12.6.7 + repository: https://charts.bitnami.com/bitnami + condition: minio.enabled + - name: postgresql + version: 12.8.1 + repository: https://charts.bitnami.com/bitnami + condition: postgresql.enabled diff --git a/charts/flyte-sandbox/README.md b/charts/flyte-sandbox/README.md new file mode 100644 index 0000000000..6c7345c67b --- /dev/null +++ b/charts/flyte-sandbox/README.md @@ -0,0 +1,114 @@ +# flyte-sandbox + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.16.1](https://img.shields.io/badge/AppVersion-1.16.1-informational?style=flat-square) + +A Helm chart for the Flyte local sandbox + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| file://../flyte-binary | flyte-binary | v0.1.10 | +| https://charts.bitnami.com/bitnami | minio | 12.6.7 | +| https://charts.bitnami.com/bitnami | postgresql | 12.8.1 | +| https://kubernetes-retired.github.io/dashboard/ | kubernetes-dashboard | 6.0.0 | +| https://twuni.github.io/docker-registry.helm | docker-registry | 2.2.2 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| docker-registry.enabled | bool | `true` | | +| docker-registry.image.pullPolicy | string | `"Never"` | | +| docker-registry.image.tag | string | `"sandbox"` | | +| docker-registry.persistence.enabled | bool | `false` | | +| docker-registry.service.nodePort | int | `30000` | | +| docker-registry.service.type | string | `"NodePort"` | | +| flyte-binary.clusterResourceTemplates.inlineConfigMap | string | `"{{ include \"flyte-sandbox.clusterResourceTemplates.inlineConfigMap\" . }}"` | | +| flyte-binary.configuration.database.host | string | `"{{ printf \"%s-postgresql\" .Release.Name | trunc 63 | trimSuffix \"-\" }}"` | | +| flyte-binary.configuration.database.password | string | `"postgres"` | | +| flyte-binary.configuration.inline.plugins.k8s.default-env-vars[0].FLYTE_AWS_ENDPOINT | string | `"http://{{ printf \"%s-minio\" .Release.Name | trunc 63 | trimSuffix \"-\" }}.{{ .Release.Namespace }}:9000"` | | +| flyte-binary.configuration.inline.plugins.k8s.default-env-vars[1].FLYTE_AWS_ACCESS_KEY_ID | string | `"minio"` | | +| flyte-binary.configuration.inline.plugins.k8s.default-env-vars[2].FLYTE_AWS_SECRET_ACCESS_KEY | string | `"miniostorage"` | | +| flyte-binary.configuration.inline.plugins.k8s.default-env-vars[3].FLYTE_PLATFORM_URL | string | `"{{ printf \"%s-http\" .Release.Name }}.{{ .Release.Namespace }}:8090"` | | +| flyte-binary.configuration.inline.plugins.k8s.default-env-vars[4].FLYTE_PLATFORM_INSECURE | bool | `true` | | +| flyte-binary.configuration.inline.storage.signedURL.stowConfigOverride.endpoint | string | `"http://localhost:30002"` | | +| flyte-binary.configuration.inline.task_resources.defaults.cpu | string | `"500m"` | | +| flyte-binary.configuration.inline.task_resources.defaults.ephemeralStorage | int | `0` | | +| flyte-binary.configuration.inline.task_resources.defaults.gpu | int | `0` | | +| flyte-binary.configuration.inline.task_resources.defaults.memory | string | `"1Gi"` | | +| flyte-binary.configuration.inline.task_resources.limits.cpu | int | `0` | | +| flyte-binary.configuration.inline.task_resources.limits.ephemeralStorage | int | `0` | | +| flyte-binary.configuration.inline.task_resources.limits.gpu | int | `0` | | +| flyte-binary.configuration.inline.task_resources.limits.memory | int | `0` | | +| flyte-binary.configuration.inlineConfigMap | string | `"{{ include \"flyte-sandbox.configuration.inlineConfigMap\" . }}"` | | +| flyte-binary.configuration.logging.level | int | `5` | | +| flyte-binary.configuration.logging.plugins.kubernetes.enabled | bool | `true` | | +| flyte-binary.configuration.logging.plugins.kubernetes.templateUri | string | `"http://localhost:30080/kubernetes-dashboard/#/log/{{.namespace }}/{{ .podName }}/pod?namespace={{ .namespace }}"` | | +| flyte-binary.configuration.storage.metadataContainer | string | `"my-s3-bucket"` | | +| flyte-binary.configuration.storage.provider | string | `"s3"` | | +| flyte-binary.configuration.storage.providerConfig.s3.accessKey | string | `"minio"` | | +| flyte-binary.configuration.storage.providerConfig.s3.authType | string | `"accesskey"` | | +| flyte-binary.configuration.storage.providerConfig.s3.disableSSL | bool | `true` | | +| flyte-binary.configuration.storage.providerConfig.s3.endpoint | string | `"http://{{ printf \"%s-minio\" .Release.Name | trunc 63 | trimSuffix \"-\" }}.{{ .Release.Namespace }}:9000"` | | +| flyte-binary.configuration.storage.providerConfig.s3.secretKey | string | `"miniostorage"` | | +| flyte-binary.configuration.storage.providerConfig.s3.v2Signing | bool | `true` | | +| flyte-binary.configuration.storage.userDataContainer | string | `"my-s3-bucket"` | | +| flyte-binary.deployment.image.pullPolicy | string | `"Never"` | | +| flyte-binary.deployment.image.repository | string | `"flyte-binary"` | | +| flyte-binary.deployment.image.tag | string | `"sandbox"` | | +| flyte-binary.deployment.waitForDB.image.pullPolicy | string | `"Never"` | | +| flyte-binary.deployment.waitForDB.image.repository | string | `"bitnami/postgresql"` | | +| flyte-binary.deployment.waitForDB.image.tag | string | `"sandbox"` | | +| flyte-binary.enabled | bool | `true` | | +| flyte-binary.nameOverride | string | `"flyte-sandbox"` | | +| flyte-binary.rbac.extraRules[0].apiGroups[0] | string | `"*"` | | +| flyte-binary.rbac.extraRules[0].resources[0] | string | `"*"` | | +| flyte-binary.rbac.extraRules[0].verbs[0] | string | `"*"` | | +| kubernetes-dashboard.enabled | bool | `true` | | +| kubernetes-dashboard.extraArgs[0] | string | `"--enable-insecure-login"` | | +| kubernetes-dashboard.extraArgs[1] | string | `"--enable-skip-login"` | | +| kubernetes-dashboard.image.pullPolicy | string | `"Never"` | | +| kubernetes-dashboard.image.tag | string | `"sandbox"` | | +| kubernetes-dashboard.protocolHttp | bool | `true` | | +| kubernetes-dashboard.rbac.clusterReadOnlyRole | bool | `true` | | +| kubernetes-dashboard.rbac.clusterRoleMetrics | bool | `false` | | +| kubernetes-dashboard.rbac.create | bool | `true` | | +| kubernetes-dashboard.service.externalPort | int | `80` | | +| minio.auth.rootPassword | string | `"miniostorage"` | | +| minio.auth.rootUser | string | `"minio"` | | +| minio.defaultBuckets | string | `"my-s3-bucket"` | | +| minio.enabled | bool | `true` | | +| minio.extraEnvVars[0].name | string | `"MINIO_BROWSER_REDIRECT_URL"` | | +| minio.extraEnvVars[0].value | string | `"http://localhost:30080/minio"` | | +| minio.image.pullPolicy | string | `"Never"` | | +| minio.image.tag | string | `"sandbox"` | | +| minio.persistence.enabled | bool | `true` | | +| minio.persistence.existingClaim | string | `"{{ include \"flyte-sandbox.persistence.minioVolumeName\" . }}"` | | +| minio.service.nodePorts.api | int | `30002` | | +| minio.service.type | string | `"NodePort"` | | +| minio.volumePermissions.enabled | bool | `true` | | +| minio.volumePermissions.image.pullPolicy | string | `"Never"` | | +| minio.volumePermissions.image.tag | string | `"sandbox"` | | +| postgresql.auth.postgresPassword | string | `"postgres"` | | +| postgresql.enabled | bool | `true` | | +| postgresql.image.pullPolicy | string | `"Never"` | | +| postgresql.image.tag | string | `"sandbox"` | | +| postgresql.primary.persistence.enabled | bool | `true` | | +| postgresql.primary.persistence.existingClaim | string | `"{{ include \"flyte-sandbox.persistence.dbVolumeName\" . }}"` | | +| postgresql.primary.service.nodePorts.postgresql | int | `30001` | | +| postgresql.primary.service.type | string | `"NodePort"` | | +| postgresql.shmVolume.enabled | bool | `false` | | +| postgresql.volumePermissions.enabled | bool | `true` | | +| postgresql.volumePermissions.image.pullPolicy | string | `"Never"` | | +| postgresql.volumePermissions.image.tag | string | `"sandbox"` | | +| sandbox.buildkit.enabled | bool | `true` | | +| sandbox.buildkit.image.pullPolicy | string | `"Never"` | | +| sandbox.buildkit.image.repository | string | `"moby/buildkit"` | | +| sandbox.buildkit.image.tag | string | `"sandbox"` | | +| sandbox.dev | bool | `false` | | +| sandbox.proxy.enabled | bool | `true` | | +| sandbox.proxy.image.pullPolicy | string | `"Never"` | | +| sandbox.proxy.image.repository | string | `"envoyproxy/envoy"` | | +| sandbox.proxy.image.tag | string | `"sandbox"` | | + diff --git a/charts/flyte-sandbox/templates/NOTES.txt b/charts/flyte-sandbox/templates/NOTES.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/charts/flyte-sandbox/templates/_helpers.tpl b/charts/flyte-sandbox/templates/_helpers.tpl new file mode 100644 index 0000000000..d156a497fc --- /dev/null +++ b/charts/flyte-sandbox/templates/_helpers.tpl @@ -0,0 +1,120 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "flyte-sandbox.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "flyte-sandbox.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "flyte-sandbox.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "flyte-sandbox.labels" -}} +helm.sh/chart: {{ include "flyte-sandbox.chart" . }} +{{ include "flyte-sandbox.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "flyte-sandbox.selectorLabels" -}} +app.kubernetes.io/name: {{ include "flyte-sandbox.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "flyte-sandbox.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "flyte-sandbox.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + +{{/* +Name of inline ConfigMap containing additional configuration or overrides for Flyte +*/}} +{{- define "flyte-sandbox.configuration.inlineConfigMap" -}} +{{- printf "%s-extra-config" .Release.Name -}} +{{- end }} + +{{/* +Name of inline ConfigMap containing additional cluster resource templates +*/}} +{{- define "flyte-sandbox.clusterResourceTemplates.inlineConfigMap" -}} +{{- printf "%s-extra-cluster-resource-templates" .Release.Name -}} +{{- end }} + +{{/* +Name of PersistentVolume and PersistentVolumeClaim for PostgreSQL database +*/}} +{{- define "flyte-sandbox.persistence.dbVolumeName" -}} +{{- printf "%s-db-storage" .Release.Name -}} +{{- end }} + +{{/* +Name of PersistentVolume and PersistentVolumeClaim for Minio +*/}} +{{- define "flyte-sandbox.persistence.minioVolumeName" -}} +{{- printf "%s-minio-storage" .Release.Name -}} +{{- end }} + +{{/* +Selector labels for Buildkit +*/}} +{{- define "flyte-sandbox.buildkitSelectorLabels" -}} +{{ include "flyte-sandbox.selectorLabels" . }} +app.kubernetes.io/component: buildkit +{{- end }} + +{{/* +Selector labels for Envoy proxy +*/}} +{{- define "flyte-sandbox.proxySelectorLabels" -}} +{{ include "flyte-sandbox.selectorLabels" . }} +app.kubernetes.io/component: proxy +{{- end }} + +{{/* +Name of Envoy proxy configmap +*/}} +{{- define "flyte-sandbox.proxyConfigMapName" -}} +{{- printf "%s-proxy-config" .Release.Name -}} +{{- end }} + +{{/* +Name of development-mode Flyte headless service +*/}} +{{- define "flyte-sandbox.localHeadlessService" -}} +{{- printf "%s-local" .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- end }} diff --git a/charts/flyte-sandbox/templates/buildkit/deployment.yaml b/charts/flyte-sandbox/templates/buildkit/deployment.yaml new file mode 100644 index 0000000000..9485a0fb43 --- /dev/null +++ b/charts/flyte-sandbox/templates/buildkit/deployment.yaml @@ -0,0 +1,51 @@ +{{- if .Values.sandbox.buildkit.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "flyte-sandbox.fullname" . }}-buildkit + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + replicas: 1 + selector: + matchLabels: {{- include "flyte-sandbox.buildkitSelectorLabels" . | nindent 6 }} + template: + metadata: + labels: {{- include "flyte-sandbox.buildkitSelectorLabels" . | nindent 8 }} + spec: + dnsPolicy: ClusterFirstWithHostNet + hostNetwork: true + containers: + - name: buildkit + {{- with .Values.sandbox.buildkit.image }} + image: {{ printf "%s:%s" .repository .tag | quote }} + imagePullPolicy: {{ .pullPolicy | quote }} + {{- end }} + args: + - --addr + - unix:///run/buildkit/buildkitd.sock + - --addr + - tcp://0.0.0.0:30003 + ports: + - name: tcp + containerPort: 30003 + protocol: TCP + readinessProbe: + exec: + command: + - buildctl + - debug + - workers + initialDelaySeconds: 5 + periodSeconds: 30 + livenessProbe: + exec: + command: + - buildctl + - debug + - workers + initialDelaySeconds: 5 + periodSeconds: 30 + securityContext: + privileged: true +{{- end }} diff --git a/charts/flyte-sandbox/templates/config/cluster-resource-template-inline-configmap.yaml b/charts/flyte-sandbox/templates/config/cluster-resource-template-inline-configmap.yaml new file mode 100644 index 0000000000..a72dcd1e72 --- /dev/null +++ b/charts/flyte-sandbox/templates/config/cluster-resource-template-inline-configmap.yaml @@ -0,0 +1,7 @@ +{{- if ( index .Values "flyte-binary" "enabled" ) }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "flyte-sandbox.clusterResourceTemplates.inlineConfigMap" . }} + namespace: {{ .Release.Namespace | quote }} +{{- end }} diff --git a/charts/flyte-sandbox/templates/config/configuration-inline-configmap.yaml b/charts/flyte-sandbox/templates/config/configuration-inline-configmap.yaml new file mode 100644 index 0000000000..7354956a6e --- /dev/null +++ b/charts/flyte-sandbox/templates/config/configuration-inline-configmap.yaml @@ -0,0 +1,7 @@ +{{- if ( index .Values "flyte-binary" "enabled" ) }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "flyte-sandbox.configuration.inlineConfigMap" . }} + namespace: {{ .Release.Namespace | quote }} +{{- end }} diff --git a/charts/flyte-sandbox/templates/local/endpoint.yaml b/charts/flyte-sandbox/templates/local/endpoint.yaml new file mode 100644 index 0000000000..54e1c938df --- /dev/null +++ b/charts/flyte-sandbox/templates/local/endpoint.yaml @@ -0,0 +1,16 @@ +{{- if and ( not ( index .Values "flyte-binary" "enabled" ) ) .Values.sandbox.dev }} +apiVersion: v1 +kind: Endpoints +metadata: + name: {{ include "flyte-sandbox.localHeadlessService" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "flyte-sandbox.labels" . | nindent 4 }} +subsets: + - addresses: + - ip: '%{HOST_GATEWAY_IP}%' + ports: + - name: http + port: 8090 + protocol: TCP +{{- end }} diff --git a/charts/flyte-sandbox/templates/local/service.yaml b/charts/flyte-sandbox/templates/local/service.yaml new file mode 100644 index 0000000000..21e741d606 --- /dev/null +++ b/charts/flyte-sandbox/templates/local/service.yaml @@ -0,0 +1,15 @@ +{{- if and ( not ( index .Values "flyte-binary" "enabled" ) ) .Values.sandbox.dev }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "flyte-sandbox.localHeadlessService" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + clusterIP: None + ports: + - name: http + port: 8090 + protocol: TCP +{{- end }} diff --git a/charts/flyte-sandbox/templates/proxy/configmap.yaml b/charts/flyte-sandbox/templates/proxy/configmap.yaml new file mode 100644 index 0000000000..5eff1e188b --- /dev/null +++ b/charts/flyte-sandbox/templates/proxy/configmap.yaml @@ -0,0 +1,147 @@ +{{- if .Values.sandbox.proxy.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "flyte-sandbox.proxyConfigMapName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-sandbox.labels" . | nindent 4 }} +data: + envoy.yaml: | + admin: + access_log_path: /dev/stdout + static_resources: + listeners: + - address: + socket_address: + address: 0.0.0.0 + port_value: 8000 + filter_chains: + - filters: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + codec_type: AUTO + upgrade_configs: + - upgrade_type: websocket + route_config: + name: local_route + virtual_hosts: + - name: backend + domains: + - "*" + routes: + {{- if or ( index .Values "flyte-binary" "enabled" ) .Values.sandbox.dev }} + - match: + prefix: "/healthz" + route: + cluster: flyte + - match: + prefix: "/readyz" + route: + cluster: flyte + - match: + prefix: "/flyteidl2.workflow.RunService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.task.TaskService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.workflow.TranslatorService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.actions.ActionsService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.dataproxy.DataProxyService" + route: + cluster: flyte + timeout: 0s + {{- end }} + {{- if index .Values "kubernetes-dashboard" "enabled" }} + - match: + path: "/kubernetes-dashboard" + redirect: + path_redirect: "/kubernetes-dashboard/" + - match: + prefix: "/kubernetes-dashboard/" + route: + cluster: kubernetes-dashboard + prefix_rewrite: / + {{- end }} + {{- if .Values.minio.enabled }} + - match: + path: "/minio" + redirect: + path_redirect: "/minio/" + - match: + prefix: "/minio/" + route: + cluster: minio + prefix_rewrite: / + {{- end }} + http_filters: + - name: envoy.filters.http.router + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router + clusters: + {{- if or ( index .Values "flyte-binary" "enabled" ) .Values.sandbox.dev }} + - name: flyte + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + http2_protocol_options: {} + load_assignment: + cluster_name: flyte + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + {{- if index .Values "flyte-binary" "enabled" }} + address: {{ include "flyte-binary.service.http.name" .}} + {{- else }} + address: {{ include "flyte-sandbox.localHeadlessService" . }} + {{- end }} + port_value: 8090 + {{- end }} + {{- if index .Values "kubernetes-dashboard" "enabled" }} + - name: kubernetes-dashboard + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: kubernetes-dashboard + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: {{ .Release.Name }}-kubernetes-dashboard + port_value: 80 + {{- end }} + {{- if .Values.minio.enabled }} + - name: minio + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: minio + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: {{ .Release.Name }}-minio + port_value: 9001 + {{- end }} + +{{- end }} diff --git a/charts/flyte-sandbox/templates/proxy/deployment.yaml b/charts/flyte-sandbox/templates/proxy/deployment.yaml new file mode 100644 index 0000000000..74c6db10e8 --- /dev/null +++ b/charts/flyte-sandbox/templates/proxy/deployment.yaml @@ -0,0 +1,39 @@ +{{- if .Values.sandbox.proxy.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "flyte-sandbox.fullname" . }}-proxy + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + replicas: 1 + selector: + matchLabels: {{- include "flyte-sandbox.proxySelectorLabels" . | nindent 6 }} + template: + metadata: + labels: {{- include "flyte-sandbox.proxySelectorLabels" . | nindent 8 }} + spec: + containers: + - name: proxy + {{- with .Values.sandbox.proxy.image }} + image: {{ printf "%s:%s" .repository .tag | quote }} + imagePullPolicy: {{ .pullPolicy | quote }} + {{- end }} + ports: + - name: http + containerPort: 8000 + volumeMounts: + - name: config + mountPath: /etc/envoy + livenessProbe: + tcpSocket: + port: http + initialDelaySeconds: 30 + readinessProbe: + tcpSocket: + port: http + volumes: + - name: config + configMap: + name: {{ include "flyte-sandbox.proxyConfigMapName" . }} +{{- end }} diff --git a/charts/flyte-sandbox/templates/proxy/service.yaml b/charts/flyte-sandbox/templates/proxy/service.yaml new file mode 100644 index 0000000000..d893b601ab --- /dev/null +++ b/charts/flyte-sandbox/templates/proxy/service.yaml @@ -0,0 +1,18 @@ +{{- if .Values.sandbox.proxy.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "flyte-sandbox.fullname" . }}-proxy + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + type: NodePort + ports: + - port: 8000 + nodePort: 30080 + protocol: TCP + name: http + selector: + {{- include "flyte-sandbox.proxySelectorLabels" . | nindent 4 }} +{{- end }} diff --git a/charts/flyte-sandbox/templates/storage/db/pv.yaml b/charts/flyte-sandbox/templates/storage/db/pv.yaml new file mode 100644 index 0000000000..3be3389e9d --- /dev/null +++ b/charts/flyte-sandbox/templates/storage/db/pv.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: {{ include "flyte-sandbox.persistence.dbVolumeName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: "/var/lib/flyte/storage/db" diff --git a/charts/flyte-sandbox/templates/storage/db/pvc.yaml b/charts/flyte-sandbox/templates/storage/db/pvc.yaml new file mode 100644 index 0000000000..e7f819c5bc --- /dev/null +++ b/charts/flyte-sandbox/templates/storage/db/pvc.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "flyte-sandbox.persistence.dbVolumeName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + volumeName: {{ include "flyte-sandbox.persistence.dbVolumeName" . }} diff --git a/charts/flyte-sandbox/templates/storage/minio/pv.yaml b/charts/flyte-sandbox/templates/storage/minio/pv.yaml new file mode 100644 index 0000000000..309bc72f3a --- /dev/null +++ b/charts/flyte-sandbox/templates/storage/minio/pv.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: {{ include "flyte-sandbox.persistence.minioVolumeName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: "/var/lib/flyte/storage/minio" diff --git a/charts/flyte-sandbox/templates/storage/minio/pvc.yaml b/charts/flyte-sandbox/templates/storage/minio/pvc.yaml new file mode 100644 index 0000000000..150b4f4a60 --- /dev/null +++ b/charts/flyte-sandbox/templates/storage/minio/pvc.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "flyte-sandbox.persistence.minioVolumeName" . }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "flyte-sandbox.labels" . | nindent 4 }} +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + volumeName: {{ include "flyte-sandbox.persistence.minioVolumeName" . }} diff --git a/charts/flyte-sandbox/values.yaml b/charts/flyte-sandbox/values.yaml new file mode 100644 index 0000000000..b60f477f48 --- /dev/null +++ b/charts/flyte-sandbox/values.yaml @@ -0,0 +1,178 @@ +docker-registry: + enabled: true + image: + tag: sandbox + pullPolicy: Never + persistence: + enabled: false + service: + type: NodePort + nodePort: 30000 + +flyte-binary: + nameOverride: flyte-sandbox + enabled: true + configuration: + database: + host: '{{ printf "%s-postgresql" .Release.Name | trunc 63 | trimSuffix "-" }}' + password: postgres + storage: + metadataContainer: flyte-data + userDataContainer: flyte-data + provider: s3 + providerConfig: + s3: + disableSSL: true + v2Signing: true + endpoint: http://{{ printf "%s-minio" .Release.Name | trunc 63 | trimSuffix "-" }}.{{ .Release.Namespace }}:9000 + authType: accesskey + accessKey: minio + secretKey: miniostorage + logging: + level: 5 + plugins: + kubernetes: + enabled: true + templateUri: |- + http://localhost:30080/kubernetes-dashboard/#/log/{{.namespace }}/{{ .podName }}/pod?namespace={{ .namespace }} + inline: + task_resources: + defaults: + cpu: 500m + ephemeralStorage: 0 + gpu: 0 + memory: 1Gi + limits: + cpu: 0 + ephemeralStorage: 0 + gpu: 0 + memory: 0 + storage: + signedURL: + stowConfigOverride: + endpoint: http://localhost:30002 + plugins: + k8s: + default-env-vars: + - FLYTE_AWS_ENDPOINT: http://{{ printf "%s-minio" .Release.Name | trunc 63 | trimSuffix "-" }}.{{ .Release.Namespace }}:9000 + - FLYTE_AWS_ACCESS_KEY_ID: minio + - FLYTE_AWS_SECRET_ACCESS_KEY: miniostorage + - _U_EP_OVERRIDE: '{{ printf "%s-http" .Release.Name }}.{{ .Release.Namespace }}:8090' + - _U_INSECURE: "true" + - _U_USE_ACTIONS: "1" + runs: + database: + postgres: + host: '{{ printf "%s-postgresql" .Release.Name | trunc 63 | trimSuffix "-" }}.{{ .Release.Namespace }}' + port: 5432 + dbName: runs + user: postgres + password: postgres + inlineConfigMap: '{{ include "flyte-sandbox.configuration.inlineConfigMap" . }}' + clusterResourceTemplates: + inlineConfigMap: '{{ include "flyte-sandbox.clusterResourceTemplates.inlineConfigMap" . }}' + deployment: + image: + repository: flyte-binary-v2 + tag: sandbox + pullPolicy: Never + waitForDB: + image: + repository: bitnami/postgresql + tag: sandbox + pullPolicy: Never + rbac: + # This is strictly NOT RECOMMENDED in production clusters, and is only for use + # within local Flyte sandboxes. + # When using cluster resource templates to create additional namespaced roles, + # Flyte is required to have a superset of those permissions. To simplify + # experimenting with new backend plugins that require additional roles be created + # with cluster resource templates (e.g. Spark), we add the following: + extraRules: + - apiGroups: + - '*' + resources: + - '*' + verbs: + - '*' + +kubernetes-dashboard: + enabled: true + image: + tag: sandbox + pullPolicy: Never + extraArgs: + - --enable-insecure-login + - --enable-skip-login + protocolHttp: true + service: + externalPort: 80 + rbac: + create: true + clusterRoleMetrics: false + clusterReadOnlyRole: true + +minio: + enabled: true + image: + tag: sandbox + pullPolicy: Never + auth: + rootUser: minio + rootPassword: miniostorage + defaultBuckets: flyte-data + extraEnvVars: + - name: MINIO_BROWSER_REDIRECT_URL + value: http://localhost:30080/minio + service: + type: NodePort + nodePorts: + api: 30002 + persistence: + enabled: true + existingClaim: '{{ include "flyte-sandbox.persistence.minioVolumeName" . }}' + volumePermissions: + enabled: true + image: + tag: sandbox + pullPolicy: Never + +postgresql: + enabled: true + image: + tag: sandbox + pullPolicy: Never + auth: + postgresPassword: postgres + shmVolume: + enabled: false + primary: + service: + type: NodePort + nodePorts: + postgresql: 30001 + persistence: + enabled: true + existingClaim: '{{ include "flyte-sandbox.persistence.dbVolumeName" . }}' + volumePermissions: + enabled: true + image: + tag: sandbox + pullPolicy: Never + +sandbox: + # dev Routes requests to an instance of Flyte running locally on a developer's + # development environment. This is only usable if the flyte-binary chart is disabled. + dev: false + buildkit: + enabled: true + image: + repository: moby/buildkit + tag: sandbox + pullPolicy: Never + proxy: + enabled: true + image: + repository: envoyproxy/envoy + tag: sandbox + pullPolicy: Never diff --git a/docker/sandbox-bundled/.gitignore b/docker/sandbox-bundled/.gitignore new file mode 100644 index 0000000000..f1ae4909ec --- /dev/null +++ b/docker/sandbox-bundled/.gitignore @@ -0,0 +1,3 @@ +.kube +.venv +images/tar diff --git a/docker/sandbox-bundled/Dockerfile b/docker/sandbox-bundled/Dockerfile new file mode 100644 index 0000000000..be5ce62d89 --- /dev/null +++ b/docker/sandbox-bundled/Dockerfile @@ -0,0 +1,49 @@ +# syntax=docker/dockerfile:1.4-labs +FROM --platform=${BUILDPLATFORM} mgoltzsche/podman:minimal AS builder + +ARG TARGETARCH +ENV TARGETARCH "${TARGETARCH}" + +WORKDIR /build + +COPY images/manifest.txt images/preload ./ +RUN --security=insecure ./preload manifest.txt + + +FROM --platform=${BUILDPLATFORM} golang:1.24-bullseye AS bootstrap + +ARG TARGETARCH +ENV CGO_ENABLED 0 +ENV GOARCH "${TARGETARCH}" +ENV GOOS linux + +WORKDIR /flyteorg/build +COPY bootstrap/go.mod bootstrap/go.sum ./ +RUN go mod download +COPY bootstrap/ ./ +RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/root/go/pkg/mod \ + go build -o dist/flyte-sandbox-bootstrap cmd/bootstrap/main.go + + +FROM rancher/k3s:v1.29.0-k3s1 + +ARG TARGETARCH + +ARG FLYTE_SANDBOX_VERSION +ENV FLYTE_SANDBOX_VERSION "${FLYTE_SANDBOX_VERSION}" + +COPY --from=builder /build/images/ /var/lib/rancher/k3s/agent/images/ +COPY images/tar/${TARGETARCH}/ /var/lib/rancher/k3s/agent/images/ +COPY manifests/ /var/lib/rancher/k3s/server/manifests-staging/ +COPY bin/ /bin/ + +# Install bootstrap +COPY --from=bootstrap /flyteorg/build/dist/flyte-sandbox-bootstrap /bin/ + +VOLUME /var/lib/flyte/storage + +# Set environment variable for picking up additional CA certificates +ENV SSL_CERT_DIR /var/lib/flyte/config/ca-certificates + +ENTRYPOINT [ "/bin/k3d-entrypoint.sh" ] +CMD [ "server", "--disable=traefik", "--disable=servicelb" ] diff --git a/docker/sandbox-bundled/Makefile b/docker/sandbox-bundled/Makefile new file mode 100644 index 0000000000..c0659f3071 --- /dev/null +++ b/docker/sandbox-bundled/Makefile @@ -0,0 +1,113 @@ +define FLYTE_BINARY_BUILD +mkdir -p images/tar/$(1) + +docker buildx build \ + --build-arg FLYTECONSOLE_VERSION=$(FLYTECONSOLE_VERSION) \ + --builder flyte-sandbox \ + --platform linux/$(1) \ + --tag flyte-binary-v2:sandbox \ + --output type=docker,dest=images/tar/$(1)/flyte-binary.tar \ + ../.. + +endef + +.PHONY: create_builder +create_builder: + [ -n "$(shell docker buildx ls | awk '/^flyte-sandbox / {print $$1}')" ] || \ + docker buildx create --name flyte-sandbox \ + --driver docker-container --driver-opt image=moby/buildkit:master \ + --buildkitd-flags '--allow-insecure-entitlement security.insecure' \ + --platform linux/arm64,linux/amd64 + +.PHONY: flyte +flyte: FLYTECONSOLE_VERSION := latest +flyte: create_builder + $(foreach arch,amd64 arm64,$(call FLYTE_BINARY_BUILD,$(arch))) + +.PHONY: helm-repos +helm-repos: + helm repo add docker-registry https://twuni.github.io/docker-registry.helm + helm repo add kubernetes-dashboard https://kubernetes-retired.github.io/dashboard/ + helm repo add bitnami https://charts.bitnami.com/bitnami + helm repo update + +.PHONY: dep_build +dep_build: helm-repos + cd $(SANDBOX_CHART_DIR) && helm dependency build + +.PHONY: dep_update +dep_update: SANDBOX_CHART_DIR := ../../charts/flyte-sandbox +dep_update: dep_build + cd $(SANDBOX_CHART_DIR)/charts && for f in *.tgz; do tar xzf "$$f"; done + +.PHONY: manifests +manifests: dep_update + mkdir -p manifests + kustomize build \ + --enable-helm \ + --load-restrictor=LoadRestrictionsNone \ + kustomize/complete > manifests/complete.yaml + kustomize build \ + --enable-helm \ + --load-restrictor=LoadRestrictionsNone \ + kustomize/dev > manifests/dev.yaml + +.PHONY: build +build: flyte dep_update manifests + docker buildx build --builder flyte-sandbox --allow security.insecure --load \ + --tag flyte-sandbox-v2:latest . + +# Port map +# 6443 - k8s API server +# 30000 - Docker Registry +# 30001 - DB +# 30002 - Minio +# 30003 - Buildkit +# 30080 - Flyte Proxy +.PHONY: start +start: FLYTE_SANDBOX_IMAGE := flyte-sandbox-v2:latest +start: FLYTE_DEV := False +start: + [ -n "$(shell docker volume ls --filter name=^flyte-sandbox$$ --format {{.Name}})" ] || \ + docker volume create flyte-sandbox + @if [ -z "$(shell docker ps --filter name=^flyte-sandbox$$ --format {{.Names}})" ]; then \ + rm -f $(PWD)/.kube/kubeconfig; \ + docker run --detach --rm --privileged --name flyte-sandbox \ + --add-host "host.docker.internal:host-gateway" \ + --env FLYTE_DEV=$(FLYTE_DEV) \ + --env K3S_KUBECONFIG_OUTPUT=/.kube/kubeconfig \ + --volume $(PWD)/.kube:/.kube \ + --volume $(HOME)/.flyte/sandboxv2:/var/lib/flyte/config \ + --volume flyte-sandbox:/var/lib/flyte/storage \ + --publish "6443":"6443" \ + --publish "30000:30000" \ + --publish "30001:30001" \ + --publish "30002:30002" \ + --publish "30003:30003" \ + --publish "30080:30080" \ + $(FLYTE_SANDBOX_IMAGE); \ + fi + @echo "Waiting for kubeconfig..." + @until [ -s $(PWD)/.kube/kubeconfig ]; do sleep 1; done + @# On WSL, the bind-mounted kubeconfig may be root-owned, which makes the host-side cp fail with permission denied. + @docker exec flyte-sandbox chown $(shell id -u):$(shell id -g) /.kube/kubeconfig + @mkdir -p $(HOME)/.flyte/sandboxv2 + @cp $(PWD)/.kube/kubeconfig $(HOME)/.flyte/sandboxv2/kubeconfig + @echo "Kubeconfig copied to ~/.flyte/sandboxv2/kubeconfig" +.PHONY: kubeconfig +.SILENT: kubeconfig +kubeconfig: + sed -i -e "/server:/ s/: .*/: https:\/\/127.0.0.1:$(shell docker port flyte-sandbox | grep ^6443 | awk '{print $$3}' | awk -F: '{print $$2}')/" .kube/kubeconfig + echo "export KUBECONFIG=$(PWD)/.kube/kubeconfig" + +.PHONY: stop +stop: + docker stop flyte-sandbox + +.PHONY: console +console: + open http://localhost:30080/console + +.venv: + python -m venv .venv + . .venv/bin/activate && pip install flytekit diff --git a/docker/sandbox-bundled/bin/k3d-entrypoint-cgroupv2.sh b/docker/sandbox-bundled/bin/k3d-entrypoint-cgroupv2.sh new file mode 100755 index 0000000000..88cb669ded --- /dev/null +++ b/docker/sandbox-bundled/bin/k3d-entrypoint-cgroupv2.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +set -o errexit +set -o nounset + +######################################################################################################################################### +# DISCLAIMER # +# Copied from https://github.com/moby/moby/blob/ed89041433a031cafc0a0f19cfe573c31688d377/hack/dind#L28-L37 # +# Permission granted by Akihiro Suda (https://github.com/k3d-io/k3d/issues/493#issuecomment-827405962) # +# Moby License Apache 2.0: https://github.com/moby/moby/blob/ed89041433a031cafc0a0f19cfe573c31688d377/LICENSE # +######################################################################################################################################### +if [ -f /sys/fs/cgroup/cgroup.controllers ]; then + echo "[$(date -Iseconds)] [CgroupV2 Fix] Evacuating Root Cgroup ..." + # move the processes from the root group to the /init group, + # otherwise writing subtree_control fails with EBUSY. + mkdir -p /sys/fs/cgroup/init + busybox xargs -rn1 < /sys/fs/cgroup/cgroup.procs > /sys/fs/cgroup/init/cgroup.procs || : + # enable controllers + sed -e 's/ / +/g' -e 's/^/+/' <"/sys/fs/cgroup/cgroup.controllers" >"/sys/fs/cgroup/cgroup.subtree_control" + echo "[$(date -Iseconds)] [CgroupV2 Fix] Done" +fi diff --git a/docker/sandbox-bundled/bin/k3d-entrypoint-flyte-sandbox-bootstrap.sh b/docker/sandbox-bundled/bin/k3d-entrypoint-flyte-sandbox-bootstrap.sh new file mode 100755 index 0000000000..5bbc30f786 --- /dev/null +++ b/docker/sandbox-bundled/bin/k3d-entrypoint-flyte-sandbox-bootstrap.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +flyte-sandbox-bootstrap + +KUBECONFIG_PATH="${K3S_KUBECONFIG_OUTPUT:-/etc/rancher/k3s/k3s.yaml}" +( + while ! [ -s "$KUBECONFIG_PATH" ]; do sleep 1; done + sed -i 's/: default/: flytev2-sandbox/g' "$KUBECONFIG_PATH" +) & diff --git a/docker/sandbox-bundled/bin/k3d-entrypoint.sh b/docker/sandbox-bundled/bin/k3d-entrypoint.sh new file mode 100755 index 0000000000..e2239597f1 --- /dev/null +++ b/docker/sandbox-bundled/bin/k3d-entrypoint.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -o errexit +set -o nounset + +LOGFILE="/var/log/k3d-entrypoints_$(date "+%y%m%d%H%M%S").log" + +touch "$LOGFILE" + +echo "[$(date -Iseconds)] Running k3d entrypoints..." >> "$LOGFILE" + +for entrypoint in /bin/k3d-entrypoint-*.sh ; do + echo "[$(date -Iseconds)] Running $entrypoint" >> "$LOGFILE" + "$entrypoint" >> "$LOGFILE" 2>&1 || exit 1 +done + +echo "[$(date -Iseconds)] Finished k3d entrypoint scripts!" >> "$LOGFILE" + +exec /bin/k3s "$@" diff --git a/docker/sandbox-bundled/bootstrap/Makefile b/docker/sandbox-bundled/bootstrap/Makefile new file mode 100644 index 0000000000..05669dffb5 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/Makefile @@ -0,0 +1,17 @@ +.PHONY: fmt +fmt: + go mod tidy + gofmt -w -s . + golines -w . + +.PHONY: check-fmt +check-fmt: + @[ -z "$(shell gofmt -l .)" ] || ( echo "Not formatted:" && gofmt -l . && exit 1 ) + +.PHONY: lint +lint: + golangci-lint run + +.PHONY: test +test: + go test -v ./... diff --git a/docker/sandbox-bundled/bootstrap/cmd/bootstrap/main.go b/docker/sandbox-bundled/bootstrap/cmd/bootstrap/main.go new file mode 100644 index 0000000000..e4b411b09d --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/cmd/bootstrap/main.go @@ -0,0 +1,80 @@ +package main + +import ( + "log" + "net" + "os" + "path/filepath" + + "github.com/flyteorg/flyte/docker/sandbox-bundled/bootstrap/internal/transform" + "github.com/flyteorg/flyte/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config" + "github.com/flyteorg/flyte/docker/sandbox-bundled/bootstrap/internal/transform/plugins/vars" +) + +const ( + configDirPath = "/var/lib/flyte/config" + configurationConfigMapName = "flyte-sandbox-extra-config" + deploymentName = "flyte-sandbox" + devModeEnvVar = "FLYTE_DEV" + dockerHost = "host.docker.internal" + namespace = "flyte" + + // Template paths + devTemplatePath = "/var/lib/rancher/k3s/server/manifests-staging/dev.yaml" + fullTemplatePath = "/var/lib/rancher/k3s/server/manifests-staging/complete.yaml" + renderedManifestPath = "/var/lib/rancher/k3s/server/manifests/flyte.yaml" +) + +func main() { + var tmplPath string + var tPlugins []transform.Plugin + + if os.Getenv(devModeEnvVar) == "True" { + tmplPath = devTemplatePath + } else { + // If we are not running in dev mode, look for user-specified configuration + // to load into the sandbox deployment + tmplPath = fullTemplatePath + + cOpts := config.LoaderOpts{ + ConfigurationConfigMapName: configurationConfigMapName, + DeploymentName: deploymentName, + Namespace: namespace, + DirPath: configDirPath, + } + c, err := config.NewLoader(&cOpts) + if err != nil { + log.Fatalf("failed to initialize config loader: %s", err) + } + tPlugins = append(tPlugins, c) + } + + // Replace template variables + v := vars.NewVars(map[string]vars.ValueGetter{ + "%{HOST_GATEWAY_IP}%": func() (string, error) { + addrs, err := net.LookupHost(dockerHost) + if err != nil { + return "", err + } + return addrs[0], nil + }, + }) + tPlugins = append(tPlugins, v) + + // Render final manifest and write out + tmpl, err := os.ReadFile(tmplPath) + if err != nil { + log.Fatalf("failed to read manifest: %s", err) + } + t := transform.NewTransformer(tPlugins...) + rendered, err := t.Transform(tmpl) + if err != nil { + log.Fatalf("failed to apply transformations: %s", err) + } + if err := os.MkdirAll(filepath.Dir(renderedManifestPath), 0755); err != nil { + log.Fatalf("failed to create destination directory: %s", err) + } + if err := os.WriteFile(renderedManifestPath, rendered, 0644); err != nil { + log.Fatalf("failed to write rendered manifest: %s", err) + } +} diff --git a/docker/sandbox-bundled/bootstrap/go.mod b/docker/sandbox-bundled/bootstrap/go.mod new file mode 100644 index 0000000000..281d05740a --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/go.mod @@ -0,0 +1,53 @@ +module github.com/flyteorg/flyte/docker/sandbox-bundled/bootstrap + +go 1.24.0 + +require ( + github.com/stretchr/testify v1.8.0 + k8s.io/api v0.26.1 + k8s.io/apimachinery v0.26.1 + sigs.k8s.io/kustomize/api v0.12.1 + sigs.k8s.io/kustomize/kyaml v0.13.9 + sigs.k8s.io/yaml v1.3.0 +) + +require ( + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/go-errors/errors v1.0.1 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/swag v0.19.14 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.1.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/imdario/mergo v0.3.6 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/xlab/treeprint v1.1.0 // indirect + go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect + k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect +) diff --git a/docker/sandbox-bundled/bootstrap/go.sum b/docker/sandbox-bundled/bootstrap/go.sum new file mode 100644 index 0000000000..2e15ca2604 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/go.sum @@ -0,0 +1,222 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= +k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= +k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= +k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs= +k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= +sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/cluster_resource_templates.go b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/cluster_resource_templates.go new file mode 100644 index 0000000000..e3da84e2f4 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/cluster_resource_templates.go @@ -0,0 +1,135 @@ +package config + +import ( + "encoding/hex" + "fmt" + "os" + "path/filepath" + + "github.com/flyteorg/flyte/docker/sandbox-bundled/bootstrap/internal/utils" + appsv1 "k8s.io/api/apps/v1" + apiv1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/kustomize/api/types" +) + +type ClusterResourceTemplatesNotFound struct { + path string +} + +func (e *ClusterResourceTemplatesNotFound) Error() string { + return fmt.Sprintf("cluster resource templates directory not found or is empty: %s", e.path) +} + +type ClusterResourceTemplates struct { + ConfigMapName string + DeploymentName string + Namespace string + Paths []string +} + +func NewClusterResourceTemplates( + configMapName, deploymentName, namespace, dirPath string, +) (*ClusterResourceTemplates, error) { + entries, err := os.ReadDir(dirPath) + if os.IsNotExist(err) { + return nil, &ClusterResourceTemplatesNotFound{dirPath} + } + if err != nil { + return nil, err + } + + var paths []string + for _, entry := range entries { + if entry.IsDir() { + continue + } + info, err := entry.Info() + if err != nil { + return nil, err + } + if info.Size() > 0 { + paths = append(paths, filepath.Join(dirPath, entry.Name())) + } + } + + if len(paths) == 0 { + return nil, &ClusterResourceTemplatesNotFound{dirPath} + } + + return &ClusterResourceTemplates{ + ConfigMapName: configMapName, + DeploymentName: deploymentName, + Namespace: namespace, + Paths: paths, + }, nil +} + +func (c *ClusterResourceTemplates) Update(k *types.Kustomization) error { + // Build ConfigMap data from files + data := map[string]string{} + for _, path := range c.Paths { + content, err := os.ReadFile(path) + if err != nil { + return fmt.Errorf("reading cluster resource template %s: %w", path, err) + } + data[filepath.Base(path)] = string(content) + } + + // Patch the ConfigMap directly with file contents + cm := corev1.ConfigMap{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "ConfigMap", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: c.ConfigMapName, + Namespace: c.Namespace, + }, + Data: data, + } + cmPatchYaml, err := utils.MarshalPatch(&cm, true, true) + if err != nil { + return err + } + + // Patch the Deployment with a checksum annotation + checksum, err := utils.FileCollectionChecksum(c.Paths) + if err != nil { + return err + } + deployPatch := appsv1.Deployment{ + TypeMeta: metav1.TypeMeta{ + Kind: "Deployment", + APIVersion: "apps/v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: c.DeploymentName, + Namespace: c.Namespace, + }, + Spec: appsv1.DeploymentSpec{ + Template: apiv1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "checksum/extra-cluster-resource-templates": hex.EncodeToString(checksum), + }, + }, + }, + }, + } + deployPatchYaml, err := utils.MarshalPatch(&deployPatch, true, true) + if err != nil { + return err + } + + if k.Patches == nil { + k.Patches = []types.Patch{} + } + k.Patches = append(k.Patches, + types.Patch{Patch: string(cmPatchYaml)}, + types.Patch{Patch: string(deployPatchYaml)}, + ) + + return nil +} diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/configuration.go b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/configuration.go new file mode 100644 index 0000000000..6df4109711 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/configuration.go @@ -0,0 +1,108 @@ +package config + +import ( + "encoding/hex" + "fmt" + "os" + + "github.com/flyteorg/flyte/docker/sandbox-bundled/bootstrap/internal/utils" + appsv1 "k8s.io/api/apps/v1" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/kustomize/api/types" +) + +type ConfigurationNotFound struct { + path string +} + +func (e *ConfigurationNotFound) Error() string { + return fmt.Sprintf("configuration file not found or is empty: %s", e.path) +} + +type Configuration struct { + ConfigMapName string + DeploymentName string + Namespace string + Path string +} + +func NewConfiguration( + configMapName, deploymentName, namespace, path string, +) (*Configuration, error) { + // Check that the file is accessible and not empty + info, err := os.Stat(path) + if os.IsNotExist(err) || info.Size() == 0 { + return nil, &ConfigurationNotFound{path} + } + if err != nil { + return nil, err + } + + return &Configuration{ + ConfigMapName: configMapName, + DeploymentName: deploymentName, + Namespace: namespace, + Path: path, + }, nil +} + +func (c *Configuration) checksum() ([]byte, error) { + checksum, err := utils.FileChecksum(c.Path) + if err != nil { + return nil, err + } + return checksum, nil +} + +func (c *Configuration) Update(k *types.Kustomization) error { + // Add configmap args + if k.ConfigMapGenerator == nil { + k.ConfigMapGenerator = []types.ConfigMapArgs{} + } + k.ConfigMapGenerator = append(k.ConfigMapGenerator, types.ConfigMapArgs{ + GeneratorArgs: types.GeneratorArgs{ + Namespace: c.Namespace, + Name: c.ConfigMapName, + Behavior: "replace", + KvPairSources: types.KvPairSources{ + FileSources: []string{fmt.Sprintf("999-extra-config.yaml=%s", c.Path)}, + }, + }, + }) + + // Patch deployment to add annotation + checksum, err := c.checksum() + if err != nil { + return err + } + patch := appsv1.Deployment{ + TypeMeta: metav1.TypeMeta{ + Kind: "Deployment", + APIVersion: "apps/v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: c.DeploymentName, + Namespace: c.Namespace, + }, + Spec: appsv1.DeploymentSpec{ + Template: apiv1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "checksum/extra-configuration": hex.EncodeToString(checksum), + }, + }, + }, + }, + } + patchYaml, err := utils.MarshalPatch(&patch, true, true) + if err != nil { + return err + } + if k.Patches == nil { + k.Patches = []types.Patch{} + } + k.Patches = append(k.Patches, types.Patch{Patch: string(patchYaml)}) + + return nil +} diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/loader.go b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/loader.go new file mode 100644 index 0000000000..5b7df68081 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/loader.go @@ -0,0 +1,112 @@ +package config + +import ( + "errors" + "os" + "path/filepath" + + "sigs.k8s.io/kustomize/api/krusty" + "sigs.k8s.io/kustomize/api/types" + "sigs.k8s.io/kustomize/kyaml/filesys" + "sigs.k8s.io/yaml" +) + +type LoaderOpts struct { + ConfigurationConfigMapName string + ClusterResourceTemplatesConfigMapName string + DeploymentName string + Namespace string + DirPath string +} + +type Loader struct { + configuration *Configuration + clusterResourceTemplates *ClusterResourceTemplates +} + +func NewLoader(opts *LoaderOpts) (*Loader, error) { + var err error + loader := Loader{} + + absDirPath, err := filepath.Abs(opts.DirPath) + if err != nil { + return nil, err + } + + loader.configuration, err = NewConfiguration( + opts.ConfigurationConfigMapName, + opts.DeploymentName, + opts.Namespace, + filepath.Join(absDirPath, "config.yaml"), + ) + var configurationNotFound *ConfigurationNotFound + if err != nil && !errors.As(err, &configurationNotFound) { + return nil, err + } + + loader.clusterResourceTemplates, err = NewClusterResourceTemplates( + opts.ClusterResourceTemplatesConfigMapName, + opts.DeploymentName, + opts.Namespace, + filepath.Join(absDirPath, "cluster-resource-templates"), + ) + var clusterResourceTemplatesNotFound *ClusterResourceTemplatesNotFound + if err != nil && !errors.As(err, &clusterResourceTemplatesNotFound) { + return nil, err + } + + return &loader, nil +} + +func (cl *Loader) Transform(data []byte) ([]byte, error) { + if cl.configuration == nil && cl.clusterResourceTemplates == nil { + return data, nil + } + + workDir, err := os.MkdirTemp("", "") + if err != nil { + return nil, err + } + defer os.RemoveAll(workDir) + + baseManifestPath := filepath.Join(workDir, "base.yaml") + if err := os.WriteFile(baseManifestPath, data, 0644); err != nil { + return nil, err + } + + k := types.Kustomization{Resources: []string{baseManifestPath}} + + if cl.clusterResourceTemplates != nil { + if err := cl.clusterResourceTemplates.Update(&k); err != nil { + return nil, err + } + } + + if cl.configuration != nil { + if err := cl.configuration.Update(&k); err != nil { + return nil, err + } + } + + kyaml, err := yaml.Marshal(k) + if err != nil { + return nil, err + } + if err := os.WriteFile(filepath.Join(workDir, "kustomization.yaml"), kyaml, 0644); err != nil { + return nil, err + } + + opts := krusty.MakeDefaultOptions() + opts.DoLegacyResourceSort = true + opts.LoadRestrictions = types.LoadRestrictionsNone + kustomizer := krusty.MakeKustomizer(opts) + resMap, err := kustomizer.Run(filesys.MakeFsOnDisk(), workDir) + if err != nil { + return nil, err + } + out, err := resMap.AsYaml() + if err != nil { + return nil, err + } + return out, nil +} diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/loader_test.go b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/loader_test.go new file mode 100644 index 0000000000..d943d4bfc4 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/loader_test.go @@ -0,0 +1,124 @@ +package config + +import ( + "encoding/hex" + "os" + "path/filepath" + "testing" + + "github.com/flyteorg/flyte/docker/sandbox-bundled/bootstrap/internal/utils" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestLoaderHappy(t *testing.T) { + cOpts := LoaderOpts{ + ConfigurationConfigMapName: "test-config", + ClusterResourceTemplatesConfigMapName: "test-cluster-resource-templates", + DeploymentName: "test-deployment", + Namespace: "test", + DirPath: filepath.Join("testdata", "happy"), + } + c, err := NewLoader(&cOpts) + require.NoError(t, err) + + base, err := os.ReadFile(filepath.Join("testdata", "base.yaml")) + require.NoError(t, err) + + rendered, err := c.Transform(base) + require.NoError(t, err) + + configAbsPath, err := filepath.Abs(filepath.Join("testdata", "happy", "config.yaml")) + require.NoError(t, err) + configChecksum, err := utils.FileChecksum(configAbsPath) + require.NoError(t, err) + + crtAbsPath, err := filepath.Abs(filepath.Join("testdata", "happy", "cluster-resource-templates", "resource.yaml")) + require.NoError(t, err) + crtChecksum, err := utils.FileCollectionChecksum([]string{crtAbsPath}) + require.NoError(t, err) + + expected := "apiVersion: v1\n" + + "data:\n" + + " resource.yaml: |\n" + + " foo: bar\n" + + "kind: ConfigMap\n" + + "metadata:\n" + + " name: test-cluster-resource-templates\n" + + " namespace: test\n" + + "---\n" + + "apiVersion: v1\n" + + "data:\n" + + " 999-extra-config.yaml: |\n" + + " ham: spam\n" + + "kind: ConfigMap\n" + + "metadata:\n" + + " name: test-config\n" + + " namespace: test\n" + + "---\n" + + "apiVersion: apps/v1\n" + + "kind: Deployment\n" + + "metadata:\n" + + " name: test-deployment\n" + + " namespace: test\n" + + "spec:\n" + + " replicas: 1\n" + + " selector:\n" + + " matchLabels:\n" + + " app: test\n" + + " template:\n" + + " metadata:\n" + + " annotations:\n" + + " checksum/extra-cluster-resource-templates: " + hex.EncodeToString(crtChecksum) + "\n" + + " checksum/extra-configuration: " + hex.EncodeToString(configChecksum) + "\n" + + " labels:\n" + + " app: test\n" + + " spec:\n" + + " containers:\n" + + " - image: test:test\n" + + " name: test\n" + + assert.Equal(t, expected, string(rendered)) +} + +func TestLoaderEmptyDir(t *testing.T) { + cOpts := LoaderOpts{ + ConfigurationConfigMapName: "test-config", + ClusterResourceTemplatesConfigMapName: "test-cluster-resource-templates", + DeploymentName: "test-deployment", + Namespace: "test", + DirPath: filepath.Join("testdata", "emptydir"), + } + c, err := NewLoader(&cOpts) + require.NoError(t, err) + assert.Nil(t, c.configuration) + assert.Nil(t, c.clusterResourceTemplates) + + base, err := os.ReadFile(filepath.Join("testdata", "base.yaml")) + require.NoError(t, err) + + rendered, err := c.Transform(base) + require.NoError(t, err) + assert.Equal(t, base, rendered) +} + +func TestLoaderEmptyFiles(t *testing.T) { + cOpts := LoaderOpts{ + ConfigurationConfigMapName: "test-config", + ClusterResourceTemplatesConfigMapName: "test-cluster-resource-templates", + DeploymentName: "test-deployment", + Namespace: "test", + DirPath: filepath.Join("testdata", "emptyfile"), + } + c, err := NewLoader(&cOpts) + require.NoError(t, err) + assert.Nil(t, c.configuration) + assert.Nil(t, c.clusterResourceTemplates) + + base, err := os.ReadFile(filepath.Join("testdata", "base.yaml")) + require.NoError(t, err) + + rendered, err := c.Transform(base) + require.NoError(t, err) + assert.Equal(t, base, rendered) +} diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/base.yaml b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/base.yaml new file mode 100644 index 0000000000..566572ec47 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/base.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: test-cluster-resource-templates + namespace: test +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: test-config + namespace: test +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: test-deployment + namespace: test +spec: + replicas: 1 + selector: + matchLabels: + app: test + template: + metadata: + labels: + app: test + spec: + containers: + - name: test + image: test:test diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/emptydir/.keep b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/emptydir/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/emptyfile/cluster-resource-templates/resource.yaml b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/emptyfile/cluster-resource-templates/resource.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/emptyfile/config.yaml b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/emptyfile/config.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/happy/cluster-resource-templates/resource.yaml b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/happy/cluster-resource-templates/resource.yaml new file mode 100644 index 0000000000..20e9ff3fea --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/happy/cluster-resource-templates/resource.yaml @@ -0,0 +1 @@ +foo: bar diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/happy/config.yaml b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/happy/config.yaml new file mode 100644 index 0000000000..874969518b --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/config/testdata/happy/config.yaml @@ -0,0 +1 @@ +ham: spam diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/vars/vars.go b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/vars/vars.go new file mode 100644 index 0000000000..105d679c34 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/vars/vars.go @@ -0,0 +1,28 @@ +package vars + +import ( + "strings" +) + +type ValueGetter func() (string, error) + +type Vars struct { + internal map[string]ValueGetter +} + +func NewVars(values map[string]ValueGetter) *Vars { + return &Vars{internal: values} +} + +func (v *Vars) Transform(data []byte) ([]byte, error) { + var tokens []string + for key, valueGetter := range v.internal { + value, err := valueGetter() + if err != nil { + return nil, err + } + tokens = append(tokens, []string{key, value}...) + } + replacer := strings.NewReplacer(tokens...) + return []byte(replacer.Replace(string(data))), nil +} diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/plugins/vars/vars_test.go b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/vars/vars_test.go new file mode 100644 index 0000000000..fdcfe9329d --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/plugins/vars/vars_test.go @@ -0,0 +1,23 @@ +package vars + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestVars(t *testing.T) { + v := NewVars(map[string]ValueGetter{ + "%(foo)%": func() (string, error) { + return "there", nil + }, + "%(bar)%": func() (string, error) { + return "friend", nil + }, + }) + result, err := v.Transform([]byte("hello %(foo)%, %(bar)%")) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, result, []byte("hello there, friend"), "strings should match") +} diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/transformer.go b/docker/sandbox-bundled/bootstrap/internal/transform/transformer.go new file mode 100644 index 0000000000..749297b46b --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/transformer.go @@ -0,0 +1,26 @@ +package transform + +type Plugin interface { + Transform(data []byte) ([]byte, error) +} + +type Transformer struct { + plugins []Plugin +} + +func NewTransformer(plugins ...Plugin) *Transformer { + return &Transformer{plugins: plugins} +} + +func (t *Transformer) Transform(data []byte) ([]byte, error) { + dataCopy := make([]byte, len(data)) + copy(dataCopy, data) + + var err error + for _, p := range t.plugins { + if dataCopy, err = p.Transform(dataCopy); err != nil { + return nil, err + } + } + return dataCopy, nil +} diff --git a/docker/sandbox-bundled/bootstrap/internal/transform/transformer_test.go b/docker/sandbox-bundled/bootstrap/internal/transform/transformer_test.go new file mode 100644 index 0000000000..bb8b805a0e --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/transform/transformer_test.go @@ -0,0 +1,34 @@ +package transform + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/assert" +) + +type Foo struct{} + +func (f Foo) Transform(data []byte) ([]byte, error) { + return bytes.Join([][]byte{[]byte("foo transformed:"), data}, []byte(" ")), nil +} + +type Bar struct{} + +func (b Bar) Transform(data []byte) ([]byte, error) { + return bytes.Join([][]byte{[]byte("bar transformed:"), data}, []byte(" ")), nil +} + +func TestTransformer(t *testing.T) { + tx := NewTransformer(Foo{}, Bar{}) + result, err := tx.Transform([]byte("test")) + if err != nil { + t.Fatal(err) + } + assert.Equal( + t, + result, + []byte("bar transformed: foo transformed: test"), + "strings should match", + ) +} diff --git a/docker/sandbox-bundled/bootstrap/internal/utils/checksum.go b/docker/sandbox-bundled/bootstrap/internal/utils/checksum.go new file mode 100644 index 0000000000..d47bd1fd37 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/utils/checksum.go @@ -0,0 +1,44 @@ +package utils + +import ( + "crypto/sha256" + "encoding/hex" + "fmt" + "io" + "os" + "sort" + "strings" +) + +func FileChecksum(path string) ([]byte, error) { + f, err := os.Open(path) + if err != nil { + return nil, err + } + defer f.Close() + + h := sha256.New() + if _, err := io.Copy(h, f); err != nil { + return nil, err + } + + return h.Sum(nil), nil +} + +func FileCollectionChecksum(paths []string) ([]byte, error) { + // Compute individual checksums and sort + var checksumPaths []string + for _, p := range paths { + c, err := FileChecksum(p) + if err != nil { + return nil, err + } + checksumPaths = append(checksumPaths, fmt.Sprintf("%s\t%s", hex.EncodeToString(c), p)) + } + sort.Strings(checksumPaths) + + // Compute checksum of sorted checksum path pairs + h := sha256.New() + h.Write([]byte(strings.Join(checksumPaths, "\n"))) + return h.Sum(nil), nil +} diff --git a/docker/sandbox-bundled/bootstrap/internal/utils/checksum_test.go b/docker/sandbox-bundled/bootstrap/internal/utils/checksum_test.go new file mode 100644 index 0000000000..049547d872 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/utils/checksum_test.go @@ -0,0 +1,37 @@ +package utils + +import ( + "encoding/hex" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestFileChecksum(t *testing.T) { + c, err := FileChecksum(filepath.Join("testdata/foo")) + if err != nil { + t.Fatal(err) + } + assert.Equal( + t, + hex.EncodeToString(c), + "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c", + "checksums should match", + ) +} + +func TestFileCollectionChecksum(t *testing.T) { + c, err := FileCollectionChecksum( + []string{filepath.Join("testdata/foo"), filepath.Join("testdata/bar")}, + ) + if err != nil { + t.Fatal(err) + } + assert.Equal( + t, + hex.EncodeToString(c), + "2db7bade901cc7260437c7cdd91b9f0cdb34fe3e5c72c5d0e756f3ce7d0c3f6a", + "checksums should match", + ) +} diff --git a/docker/sandbox-bundled/bootstrap/internal/utils/patch.go b/docker/sandbox-bundled/bootstrap/internal/utils/patch.go new file mode 100644 index 0000000000..319ae9d9c3 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/utils/patch.go @@ -0,0 +1,53 @@ +package utils + +import ( + "encoding/json" + "reflect" + + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/yaml" +) + +func sanitizePatch(m map[string]interface{}, filterNil, filterEmpty bool) { + val := reflect.ValueOf(m) + for _, e := range val.MapKeys() { + v := val.MapIndex(e) + if v.IsNil() { + if filterNil { + delete(m, e.String()) + } + continue + } + switch t := v.Interface().(type) { + case map[string]interface{}: + sanitizePatch(t, filterNil, filterEmpty) + if filterEmpty && len(t) == 0 { + delete(m, e.String()) + } + case []interface{}: + if filterEmpty && len(t) == 0 { + delete(m, e.String()) + } + } + } +} + +func MarshalPatch(o interface{}, filterNil, filterEmpty bool) ([]byte, error) { + m, err := runtime.DefaultUnstructuredConverter.ToUnstructured(o) + if err != nil { + return nil, err + } + sanitizePatch(m, filterNil, filterEmpty) + + j, err := json.Marshal(m) + if err != nil { + return nil, err + } + + y, err := yaml.JSONToYAML(j) + if err != nil { + return nil, err + } + + return y, nil +} diff --git a/docker/sandbox-bundled/bootstrap/internal/utils/patch_test.go b/docker/sandbox-bundled/bootstrap/internal/utils/patch_test.go new file mode 100644 index 0000000000..a757d15a25 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/utils/patch_test.go @@ -0,0 +1,115 @@ +package utils + +import ( + "testing" + + "github.com/stretchr/testify/assert" + appsv1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestMarshalPatch(t *testing.T) { + patch := appsv1.Deployment{ + TypeMeta: metav1.TypeMeta{ + Kind: "Deployment", + APIVersion: "apps/v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + Namespace: "bar", + }, + Spec: appsv1.DeploymentSpec{}, + } + t.Run("NoFilter", func(t *testing.T) { + y, err := MarshalPatch(&patch, false, false) + if err != nil { + t.Fatal(err) + } + assert.Equal( + t, + string(y), + `apiVersion: apps/v1 +kind: Deployment +metadata: + creationTimestamp: null + name: foo + namespace: bar +spec: + selector: null + strategy: {} + template: + metadata: + creationTimestamp: null + spec: + containers: null +status: {} +`, + "YAML strings should match", + ) + }) + t.Run("FilterNil", func(t *testing.T) { + y, err := MarshalPatch(&patch, true, false) + if err != nil { + t.Fatal(err) + } + assert.Equal( + t, + string(y), + `apiVersion: apps/v1 +kind: Deployment +metadata: + name: foo + namespace: bar +spec: + strategy: {} + template: + metadata: {} + spec: {} +status: {} +`, + "YAML strings should match", + ) + }) + t.Run("FilterEmpty", func(t *testing.T) { + y, err := MarshalPatch(&patch, false, true) + if err != nil { + t.Fatal(err) + } + assert.Equal( + t, + string(y), + `apiVersion: apps/v1 +kind: Deployment +metadata: + creationTimestamp: null + name: foo + namespace: bar +spec: + selector: null + template: + metadata: + creationTimestamp: null + spec: + containers: null +`, + "YAML strings should match", + ) + }) + t.Run("FilterAll", func(t *testing.T) { + y, err := MarshalPatch(&patch, true, true) + if err != nil { + t.Fatal(err) + } + assert.Equal( + t, + string(y), + `apiVersion: apps/v1 +kind: Deployment +metadata: + name: foo + namespace: bar +`, + "YAML strings should match", + ) + }) +} diff --git a/docker/sandbox-bundled/bootstrap/internal/utils/testdata/bar b/docker/sandbox-bundled/bootstrap/internal/utils/testdata/bar new file mode 100644 index 0000000000..5716ca5987 --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/utils/testdata/bar @@ -0,0 +1 @@ +bar diff --git a/docker/sandbox-bundled/bootstrap/internal/utils/testdata/foo b/docker/sandbox-bundled/bootstrap/internal/utils/testdata/foo new file mode 100644 index 0000000000..257cc5642c --- /dev/null +++ b/docker/sandbox-bundled/bootstrap/internal/utils/testdata/foo @@ -0,0 +1 @@ +foo diff --git a/docker/sandbox-bundled/images/manifest.txt b/docker/sandbox-bundled/images/manifest.txt new file mode 100644 index 0000000000..6607b23da9 --- /dev/null +++ b/docker/sandbox-bundled/images/manifest.txt @@ -0,0 +1,12 @@ +docker.io/bitnami/os-shell:sandbox=bitnamilegacy/os-shell:11-debian-11 +docker.io/bitnami/minio:sandbox=minio/minio:RELEASE.2024-01-31T20-20-33Z +docker.io/bitnami/postgresql:sandbox=bitnamilegacy/postgresql:15.1.0-debian-11-r20 +docker.io/envoyproxy/envoy:sandbox=envoyproxy/envoy:v1.23-latest +docker.io/kubernetesui/dashboard:sandbox=kubernetesui/dashboard:v2.7.0 +docker.io/library/registry:sandbox=registry:2.8.1 +docker.io/moby/buildkit:sandbox=moby/buildkit:buildx-stable-1 +docker.io/rancher/local-path-provisioner:v0.0.21 +docker.io/rancher/mirrored-coredns-coredns:1.9.1 +docker.io/rancher/mirrored-library-busybox:1.34.1 +docker.io/rancher/mirrored-metrics-server:v0.5.2 +docker.io/rancher/mirrored-pause:3.6 diff --git a/docker/sandbox-bundled/images/preload b/docker/sandbox-bundled/images/preload new file mode 100755 index 0000000000..fac95ee3d5 --- /dev/null +++ b/docker/sandbox-bundled/images/preload @@ -0,0 +1,19 @@ +#!/bin/sh + +set -ex + +__save_image() { + local dest="$1" + local tar="$(echo ${dest} | cut -d: -f1 | tr / -).tar" + local src="$( [ -n "$2" ] && echo "$2" || echo ${dest} )" + podman pull --arch ${TARGETARCH} ${src} + podman tag ${src} ${dest} + podman save -o ${tar} ${dest} +} + +MANIFEST="$(realpath "$1")" +mkdir -p images +cd images +while read line; do + __save_image $(echo ${line} | tr = ' ') +done < ${MANIFEST} diff --git a/docker/sandbox-bundled/kustomize/complete/kustomization.yaml b/docker/sandbox-bundled/kustomize/complete/kustomization.yaml new file mode 100644 index 0000000000..a123fc1b57 --- /dev/null +++ b/docker/sandbox-bundled/kustomize/complete/kustomization.yaml @@ -0,0 +1,75 @@ +helmGlobals: + chartHome: ../../../../charts +helmCharts: +- name: flyte-sandbox + releaseName: flyte-sandbox + namespace: flyte +namespace: flyte +resources: +- ../namespace.yaml +- ../dashboard-rbac.yaml +patches: +- target: + kind: Secret + name: kubernetes-dashboard-csrf + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Deployment + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Service + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Secret + name: flyte-sandbox-kubernetes-dashboard-certs + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Secret + name: kubernetes-dashboard-key-holder + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: ConfigMap + name: kubernetes-dashboard-settings + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Role + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: RoleBinding + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- path: ../minio-patch.yaml diff --git a/docker/sandbox-bundled/kustomize/dashboard-rbac.yaml b/docker/sandbox-bundled/kustomize/dashboard-rbac.yaml new file mode 100644 index 0000000000..fcd5c7be7b --- /dev/null +++ b/docker/sandbox-bundled/kustomize/dashboard-rbac.yaml @@ -0,0 +1,31 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kubernetes-dashboard + namespace: flyte +rules: +- apiGroups: [""] + resources: ["secrets"] + verbs: ["create"] +- apiGroups: [""] + resources: ["secrets"] + resourceNames: ["kubernetes-dashboard-csrf", "kubernetes-dashboard-key-holder"] + verbs: ["get", "update", "delete"] +- apiGroups: [""] + resources: ["configmaps"] + resourceNames: ["kubernetes-dashboard-settings"] + verbs: ["get", "update"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kubernetes-dashboard + namespace: flyte +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubernetes-dashboard +subjects: +- kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte diff --git a/docker/sandbox-bundled/kustomize/dev/kustomization.yaml b/docker/sandbox-bundled/kustomize/dev/kustomization.yaml new file mode 100644 index 0000000000..73edb12ee0 --- /dev/null +++ b/docker/sandbox-bundled/kustomize/dev/kustomization.yaml @@ -0,0 +1,81 @@ +helmGlobals: + chartHome: ../../../../charts +helmCharts: +- name: flyte-sandbox + releaseName: flyte-sandbox + namespace: flyte + valuesInline: + flyte-binary: + enabled: false + sandbox: + dev: true +namespace: flyte +resources: +- ../namespace.yaml +- ../../../../charts/flyte-binary/templates/crds/taskaction.yaml +- ../dashboard-rbac.yaml +patches: +- target: + kind: Secret + name: kubernetes-dashboard-csrf + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Deployment + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Service + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Secret + name: flyte-sandbox-kubernetes-dashboard-certs + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Secret + name: kubernetes-dashboard-key-holder + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: ConfigMap + name: kubernetes-dashboard-settings + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: Role + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- target: + kind: RoleBinding + name: flyte-sandbox-kubernetes-dashboard + patch: | + - op: add + path: /metadata/namespace + value: flyte +- path: ../minio-patch.yaml diff --git a/docker/sandbox-bundled/kustomize/minio-patch.yaml b/docker/sandbox-bundled/kustomize/minio-patch.yaml new file mode 100644 index 0000000000..8814c1fc27 --- /dev/null +++ b/docker/sandbox-bundled/kustomize/minio-patch.yaml @@ -0,0 +1,25 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: flyte-sandbox-minio + namespace: flyte +spec: + template: + spec: + initContainers: + - name: volume-permissions + command: + - /bin/bash + - -ec + - | + chown -R 1001:1001 /data + mkdir -p /data/flyte-data + chown 1001:1001 /data/flyte-data + containers: + - name: minio + command: + - minio + - server + - /data + - --console-address + - :9001 diff --git a/docker/sandbox-bundled/kustomize/namespace.yaml b/docker/sandbox-bundled/kustomize/namespace.yaml new file mode 100644 index 0000000000..ca27d7f885 --- /dev/null +++ b/docker/sandbox-bundled/kustomize/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: flyte diff --git a/docker/sandbox-bundled/manifests/complete.yaml b/docker/sandbox-bundled/manifests/complete.yaml new file mode 100644 index 0000000000..c6436801e9 --- /dev/null +++ b/docker/sandbox-bundled/manifests/complete.yaml @@ -0,0 +1,1977 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: flyte +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: taskactions.flyte.org +spec: + group: flyte.org + names: + kind: TaskAction + listKind: TaskActionList + plural: taskactions + singular: taskaction + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.runName + name: Run + type: string + - jsonPath: .spec.actionName + name: Action + type: string + - jsonPath: .spec.taskType + name: TaskType + type: string + - jsonPath: .status.conditions[?(@.type=='Progressing')].reason + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=='Progressing')].status + name: Progressing + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=='Succeeded')].status + name: Succeeded + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=='Failed')].status + name: Failed + priority: 1 + type: string + name: v1 + schema: + openAPIV3Schema: + description: TaskAction is the Schema for the taskactions API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: spec defines the desired state of TaskAction + properties: + actionName: + description: ActionName is the unique name of this action within the + run + maxLength: 30 + minLength: 1 + type: string + domain: + description: Domain this action belongs to + maxLength: 63 + minLength: 1 + type: string + inputUri: + description: InputURI is the path to the input data for this action + minLength: 1 + type: string + org: + description: Org this action belongs to + maxLength: 63 + minLength: 1 + type: string + parentActionName: + description: ParentActionName is the optional name of the parent action + maxLength: 30 + minLength: 1 + type: string + project: + description: Project this action belongs to + maxLength: 63 + minLength: 1 + type: string + runName: + description: RunName is the name of the run this action belongs to + maxLength: 30 + minLength: 1 + type: string + runOutputBase: + description: RunOutputBase is the base path where this action should + write its output + minLength: 1 + type: string + shortName: + description: ShortName is the human-readable display name for this + task + maxLength: 63 + type: string + taskTemplate: + description: TaskTemplate is the proto-serialized core.TaskTemplate + stored inline in etcd + format: byte + type: string + taskType: + description: TaskType identifies which plugin handles this task (e.g. + "container", "spark", "ray") + maxLength: 63 + minLength: 1 + type: string + required: + - actionName + - domain + - inputUri + - org + - project + - runName + - runOutputBase + - taskTemplate + - taskType + type: object + status: + description: status defines the observed state of TaskAction + properties: + conditions: + description: |- + conditions represent the current state of the TaskAction resource. + Each condition has a unique type and reflects the status of a specific aspect of the resource. + + Standard condition types include: + - "Available": the resource is fully functional + - "Progressing": the resource is being created or updated + - "Degraded": the resource failed to reach or maintain its desired state + + The status of each condition is one of True, False, or Unknown. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CalmelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + phaseHistory: + description: |- + PhaseHistory is an append-only log of phase transitions. Unlike conditions + (which are updated in-place by type), this preserves the full timeline: + Queued → Initializing → Executing → Succeeded/Failed, each with a timestamp. + items: + description: PhaseTransition records a phase change with its timestamp. + properties: + message: + description: Message is an optional human-readable message about + the transition. + type: string + occurredAt: + description: OccurredAt is when this phase transition happened. + format: date-time + type: string + phase: + description: Phase is the phase that was entered (e.g. "Queued", + "Initializing", "Executing", "Succeeded", "Failed"). + type: string + required: + - occurredAt + - phase + type: object + type: array + pluginPhase: + description: PluginPhase is a human-readable representation of the + plugin's current phase. + type: string + pluginPhaseVersion: + description: PluginPhaseVersion is the version of the current plugin + phase. + format: int32 + type: integer + pluginState: + description: PluginState is the Gob-encoded plugin state from the + last reconciliation round. + format: byte + type: string + pluginStateVersion: + description: PluginStateVersion tracks the version of the plugin state + schema for compatibility. + type: integer + stateJson: + description: StateJSON is the JSON serialized NodeStatus that was + last sent to the State Service + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + helm.sh/chart: flyte-binary-v0.2.0 + name: flyte-sandbox + namespace: flyte +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +secrets: +- name: flyte-sandbox-minio +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +rules: +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-key-holder + - kubernetes-dashboard-certs + - kubernetes-dashboard-csrf + resources: + - secrets + verbs: + - get + - update + - delete +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-settings + resources: + - configmaps + verbs: + - get + - update +- apiGroups: + - "" + resourceNames: + - heapster + - dashboard-metrics-scraper + resources: + - services + verbs: + - proxy +- apiGroups: + - "" + resourceNames: + - heapster + - 'http:heapster:' + - 'https:heapster:' + - dashboard-metrics-scraper + - http:dashboard-metrics-scraper + resources: + - services/proxy + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kubernetes-dashboard + namespace: flyte +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - create +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-csrf + - kubernetes-dashboard-key-holder + resources: + - secrets + verbs: + - get + - update + - delete +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-settings + resources: + - configmaps + verbs: + - get + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + helm.sh/chart: flyte-binary-v0.2.0 + name: flyte-sandbox-cluster-role + namespace: flyte +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - delete + - patch + - update +- apiGroups: + - flyte.org + resources: + - taskactions + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - '*' + resources: + - '*' + verbs: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard-readonly +rules: +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - persistentvolumeclaims + - pods + - replicationcontrollers + - replicationcontrollers/scale + - serviceaccounts + - services + - nodes + - persistentvolumeclaims + - persistentvolumes + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - bindings + - events + - limitranges + - namespaces/status + - pods/log + - pods/status + - replicationcontrollers/status + - resourcequotas + - resourcequotas/status + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - daemonsets + - deployments + - deployments/scale + - replicasets + - replicasets/scale + - statefulsets + verbs: + - get + - list + - watch +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch +- apiGroups: + - batch + resources: + - cronjobs + - jobs + verbs: + - get + - list + - watch +- apiGroups: + - extensions + resources: + - daemonsets + - deployments + - deployments/scale + - ingresses + - networkpolicies + - replicasets + - replicasets/scale + - replicationcontrollers/scale + verbs: + - get + - list + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - networkpolicies + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + - volumeattachments + verbs: + - get + - list + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - roles + - rolebindings + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: flyte-sandbox-kubernetes-dashboard +subjects: +- kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kubernetes-dashboard + namespace: flyte +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubernetes-dashboard +subjects: +- kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + helm.sh/chart: flyte-binary-v0.2.0 + name: flyte-sandbox-cluster-role-binding + namespace: flyte +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flyte-sandbox-cluster-role +subjects: +- kind: ServiceAccount + name: flyte-sandbox + namespace: flyte +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard-readonly +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flyte-sandbox-kubernetes-dashboard-readonly +subjects: +- kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: v1 +data: + 000-core.yaml: | + logger: + show-source: true + level: 5 + + actions: + kubernetes: + kubeconfig: "" + namespace: flyte + watchBufferSize: 100 + dataproxy: + download: + maxExpiresIn: 1h + upload: + defaultFileNameLength: 20 + maxExpiresIn: 1h + maxSize: 100Mi + storagePrefix: uploads + manager: + executor: + healthProbePort: 8081 + kubernetes: + burst: 2000 + kubeconfig: "" + namespace: flyte + qps: 1000 + timeout: 30s + server: + host: 0.0.0.0 + port: 8090 + runs: + database: + connMaxLifeTime: 1h + maxIdleConnections: 10 + maxOpenConnections: 100 + postgres: + dbname: flyte + debug: false + host: 127.0.0.1 + options: sslmode=disable + password: "" + port: 5432 + username: postgres + server: + host: 0.0.0.0 + port: 8090 + storagePrefix: s3://flyte-data + watchBufferSize: 100 + 001-plugins.yaml: | + tasks: + task-plugins: + default-for-task-types: + container: container + container_array: k8s-array + sidecar: sidecar + enabled-plugins: + - container + - sidecar + - connector-service + - echo + plugins: + logs: + kubernetes-enabled: true + kubernetes-template-uri: http://localhost:30080/kubernetes-dashboard/#/log/{{.namespace }}/{{ .podName }}/pod?namespace={{ .namespace }} + cloudwatch-enabled: false + stackdriver-enabled: false + k8s: + co-pilot: + image: "cr.flyte.org/flyteorg/flytecopilot:v1.16.4" + k8s-array: + logs: + config: + kubernetes-enabled: true + kubernetes-template-uri: http://localhost:30080/kubernetes-dashboard/#/log/{{.namespace }}/{{ .podName }}/pod?namespace={{ .namespace }} + cloudwatch-enabled: false + stackdriver-enabled: false + 002-database.yaml: | + database: + sqlite: + file: "/var/lib/flyte/flyte.db" + 003-storage.yaml: | + storage: + type: stow + stow: + kind: s3 + config: + region: us-east-1 + disable_ssl: true + v2_signing: true + endpoint: http://flyte-sandbox-minio.flyte:9000 + auth_type: accesskey + container: flyte-data + 100-inline-config.yaml: | + plugins: + k8s: + default-env-vars: + - FLYTE_AWS_ENDPOINT: http://flyte-sandbox-minio.flyte:9000 + - FLYTE_AWS_ACCESS_KEY_ID: minio + - FLYTE_AWS_SECRET_ACCESS_KEY: miniostorage + - _U_EP_OVERRIDE: 'flyte-sandbox-http.flyte:8090' + - _U_INSECURE: "true" + - _U_USE_ACTIONS: "1" + runs: + database: + postgres: + dbName: runs + host: 'flyte-sandbox-postgresql.flyte' + password: postgres + port: 5432 + user: postgres + storage: + signedURL: + stowConfigOverride: + endpoint: http://localhost:30002 + task_resources: + defaults: + cpu: 500m + ephemeralStorage: 0 + gpu: 0 + memory: 1Gi + limits: + cpu: 0 + ephemeralStorage: 0 + gpu: 0 + memory: 0 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + helm.sh/chart: flyte-binary-v0.2.0 + name: flyte-sandbox-config + namespace: flyte +--- +apiVersion: v1 +data: + config.yml: |- + health: + storagedriver: + enabled: true + interval: 10s + threshold: 3 + http: + addr: :5000 + debug: + addr: :5001 + prometheus: + enabled: false + path: /metrics + headers: + X-Content-Type-Options: + - nosniff + log: + fields: + service: registry + storage: + cache: + blobdescriptor: inmemory + version: 0.1 +kind: ConfigMap +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry-config + namespace: flyte +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: flyte-sandbox-extra-cluster-resource-templates + namespace: flyte +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: flyte-sandbox-extra-config + namespace: flyte +--- +apiVersion: v1 +data: + envoy.yaml: | + admin: + access_log_path: /dev/stdout + static_resources: + listeners: + - address: + socket_address: + address: 0.0.0.0 + port_value: 8000 + filter_chains: + - filters: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + codec_type: AUTO + upgrade_configs: + - upgrade_type: websocket + route_config: + name: local_route + virtual_hosts: + - name: backend + domains: + - "*" + routes: + - match: + prefix: "/healthz" + route: + cluster: flyte + - match: + prefix: "/readyz" + route: + cluster: flyte + - match: + prefix: "/flyteidl2.workflow.RunService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.task.TaskService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.workflow.TranslatorService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.actions.ActionsService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.dataproxy.DataProxyService" + route: + cluster: flyte + timeout: 0s + - match: + path: "/kubernetes-dashboard" + redirect: + path_redirect: "/kubernetes-dashboard/" + - match: + prefix: "/kubernetes-dashboard/" + route: + cluster: kubernetes-dashboard + prefix_rewrite: / + - match: + path: "/minio" + redirect: + path_redirect: "/minio/" + - match: + prefix: "/minio/" + route: + cluster: minio + prefix_rewrite: / + http_filters: + - name: envoy.filters.http.router + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router + clusters: + - name: flyte + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + http2_protocol_options: {} + load_assignment: + cluster_name: flyte + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: flyte-sandbox-http + port_value: 8090 + - name: kubernetes-dashboard + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: kubernetes-dashboard + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: flyte-sandbox-kubernetes-dashboard + port_value: 80 + - name: minio + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: minio + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: flyte-sandbox-minio + port_value: 9001 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-proxy-config + namespace: flyte +--- +apiVersion: v1 +data: null +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: kubernetes-dashboard-settings + namespace: flyte +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + helm.sh/chart: flyte-binary-v0.2.0 + name: flyte-sandbox-config-secret + namespace: flyte +stringData: + 012-database-secrets.yaml: | + database: + postgres: + password: "postgres" + 013-storage-secrets.yaml: | + storage: + stow: + config: + access_key_id: "minio" + secret_key: "miniostorage" +type: Opaque +--- +apiVersion: v1 +data: + haSharedSecret: emM2QnVqZHg2bDRmNU5SRg== + proxyPassword: "" + proxyUsername: "" +kind: Secret +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry-secret + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard-certs + namespace: flyte +type: Opaque +--- +apiVersion: v1 +data: + root-password: bWluaW9zdG9yYWdl + root-user: bWluaW8= +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +type: Opaque +--- +apiVersion: v1 +data: + postgres-password: cG9zdGdyZXM= +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: kubernetes-dashboard-csrf + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: kubernetes-dashboard-key-holder + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry + namespace: flyte +spec: + ports: + - name: http-5000 + nodePort: 30000 + port: 5000 + protocol: TCP + targetPort: 5000 + selector: + app: docker-registry + release: flyte-sandbox + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + helm.sh/chart: flyte-binary-v0.2.0 + name: flyte-sandbox-http + namespace: flyte +spec: + ports: + - name: http + nodePort: null + port: 8090 + targetPort: http + selector: + app.kubernetes.io/component: flyte-binary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + kubernetes.io/cluster-service: "true" + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +spec: + ports: + - name: http + port: 80 + targetPort: http + selector: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: kubernetes-dashboard + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +spec: + externalTrafficPolicy: Cluster + ports: + - name: minio-api + nodePort: 30002 + port: 9000 + targetPort: minio-api + - name: minio-console + port: 9001 + targetPort: minio-console + selector: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: minio + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + namespace: flyte +spec: + externalTrafficPolicy: Cluster + ports: + - name: tcp-postgresql + nodePort: 30001 + port: 5432 + targetPort: tcp-postgresql + selector: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + sessionAffinity: None + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" + name: flyte-sandbox-postgresql-hl + namespace: flyte +spec: + clusterIP: None + ports: + - name: tcp-postgresql + port: 5432 + targetPort: tcp-postgresql + publishNotReadyAddresses: true + selector: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-proxy + namespace: flyte +spec: + ports: + - name: http + nodePort: 30080 + port: 8000 + protocol: TCP + selector: + app.kubernetes.io/component: proxy + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + type: NodePort +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-db-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: /var/lib/flyte/storage/db + storageClassName: manual +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-minio-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: /var/lib/flyte/storage/minio + storageClassName: manual +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-db-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: manual + volumeName: flyte-sandbox-db-storage +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-minio-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: manual + volumeName: flyte-sandbox-minio-storage +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + helm.sh/chart: flyte-binary-v0.2.0 + name: flyte-sandbox + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: flyte-binary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + strategy: + type: Recreate + template: + metadata: + annotations: + checksum/configuration: 3b0d6da5b288489c1f1dd02d5cfa086b29ef51328f9f6b729836a22a7a8cd4e1 + checksum/configuration-secret: 588da2ac84d45dd5285521c58bc6c9969924887acb9674d75802055c3a97d9bb + labels: + app.kubernetes.io/component: flyte-binary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + spec: + containers: + - args: + - --config + - /etc/flyte/config.d/*.yaml + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: flyte-binary-v2:sandbox + imagePullPolicy: Never + livenessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 30 + name: flyte + ports: + - containerPort: 8090 + name: http + readinessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 30 + volumeMounts: + - mountPath: /etc/flyte/config.d + name: config + initContainers: + - args: + - | + until pg_isready \ + -h flyte-sandbox-postgresql \ + -p 5432 \ + -U postgres + do + echo waiting for database + sleep 0.1 + done + command: + - sh + - -ec + image: bitnami/postgresql:sandbox + imagePullPolicy: Never + name: wait-for-db + serviceAccountName: flyte-sandbox + volumes: + - name: config + projected: + sources: + - configMap: + name: flyte-sandbox-config + - secret: + name: flyte-sandbox-config-secret + - configMap: + name: flyte-sandbox-extra-config +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-buildkit + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: buildkit + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + template: + metadata: + labels: + app.kubernetes.io/component: buildkit + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + spec: + containers: + - args: + - --addr + - unix:///run/buildkit/buildkitd.sock + - --addr + - tcp://0.0.0.0:30003 + image: moby/buildkit:sandbox + imagePullPolicy: Never + livenessProbe: + exec: + command: + - buildctl + - debug + - workers + initialDelaySeconds: 5 + periodSeconds: 30 + name: buildkit + ports: + - containerPort: 30003 + name: tcp + protocol: TCP + readinessProbe: + exec: + command: + - buildctl + - debug + - workers + initialDelaySeconds: 5 + periodSeconds: 30 + securityContext: + privileged: true + dnsPolicy: ClusterFirstWithHostNet + hostNetwork: true +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry + namespace: flyte +spec: + minReadySeconds: 5 + replicas: 1 + selector: + matchLabels: + app: docker-registry + release: flyte-sandbox + template: + metadata: + annotations: + checksum/config: 8f50e768255a87f078ba8b9879a0c174c3e045ffb46ac8723d2eedbe293c8d81 + checksum/secret: 796feb18367c04449fe1a0f869fa44179d659d4357a7f83833c3e905b7df3072 + labels: + app: docker-registry + release: flyte-sandbox + spec: + containers: + - command: + - /bin/registry + - serve + - /etc/docker/registry/config.yml + env: + - name: REGISTRY_HTTP_SECRET + valueFrom: + secretKeyRef: + key: haSharedSecret + name: flyte-sandbox-docker-registry-secret + - name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY + value: /var/lib/registry + image: registry:sandbox + imagePullPolicy: Never + livenessProbe: + httpGet: + path: / + port: 5000 + name: docker-registry + ports: + - containerPort: 5000 + readinessProbe: + httpGet: + path: / + port: 5000 + resources: {} + volumeMounts: + - mountPath: /etc/docker/registry + name: flyte-sandbox-docker-registry-config + - mountPath: /var/lib/registry/ + name: data + securityContext: + fsGroup: 1000 + runAsUser: 1000 + volumes: + - configMap: + name: flyte-sandbox-docker-registry-config + name: flyte-sandbox-docker-registry-config + - emptyDir: {} + name: data +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: kubernetes-dashboard + strategy: + rollingUpdate: + maxSurge: 0 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + annotations: null + labels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + spec: + containers: + - args: + - --namespace=flyte + - --metrics-provider=none + - --enable-insecure-login + - --enable-skip-login + image: kubernetesui/dashboard:sandbox + imagePullPolicy: Never + livenessProbe: + httpGet: + path: / + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + timeoutSeconds: 30 + name: kubernetes-dashboard + ports: + - containerPort: 9090 + name: http + protocol: TCP + resources: + limits: + cpu: 2 + memory: 200Mi + requests: + cpu: 100m + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsGroup: 2001 + runAsUser: 1001 + volumeMounts: + - mountPath: /certs + name: kubernetes-dashboard-certs + - mountPath: /tmp + name: tmp-volume + securityContext: + seccompProfile: + type: RuntimeDefault + serviceAccountName: flyte-sandbox-kubernetes-dashboard + volumes: + - name: kubernetes-dashboard-certs + secret: + secretName: flyte-sandbox-kubernetes-dashboard-certs + - emptyDir: {} + name: tmp-volume +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +spec: + selector: + matchLabels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: minio + strategy: + type: Recreate + template: + metadata: + annotations: + checksum/credentials-secret: ecce809e3af19025d134846a9a81e163dd41df7e26abf2c6657895d9d13607a9 + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: minio + topologyKey: kubernetes.io/hostname + weight: 1 + containers: + - command: + - minio + - server + - /data + - --console-address + - :9001 + env: + - name: BITNAMI_DEBUG + value: "false" + - name: MINIO_SCHEME + value: http + - name: MINIO_FORCE_NEW_KEYS + value: "no" + - name: MINIO_ROOT_USER + valueFrom: + secretKeyRef: + key: root-user + name: flyte-sandbox-minio + - name: MINIO_ROOT_PASSWORD + valueFrom: + secretKeyRef: + key: root-password + name: flyte-sandbox-minio + - name: MINIO_DEFAULT_BUCKETS + value: flyte-data + - name: MINIO_BROWSER + value: "on" + - name: MINIO_PROMETHEUS_AUTH_TYPE + value: public + - name: MINIO_CONSOLE_PORT_NUMBER + value: "9001" + - name: MINIO_BROWSER_REDIRECT_URL + value: http://localhost:30080/minio + image: docker.io/bitnami/minio:sandbox + imagePullPolicy: Never + livenessProbe: + failureThreshold: 5 + httpGet: + path: /minio/health/live + port: minio-api + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 5 + successThreshold: 1 + timeoutSeconds: 5 + name: minio + ports: + - containerPort: 9000 + name: minio-api + protocol: TCP + - containerPort: 9001 + name: minio-console + protocol: TCP + readinessProbe: + failureThreshold: 5 + initialDelaySeconds: 5 + periodSeconds: 5 + successThreshold: 1 + tcpSocket: + port: minio-api + timeoutSeconds: 1 + resources: + limits: {} + requests: {} + securityContext: + runAsNonRoot: true + runAsUser: 1001 + volumeMounts: + - mountPath: /data + name: data + initContainers: + - command: + - /bin/bash + - -ec + - | + chown -R 1001:1001 /data + mkdir -p /data/flyte-data + chown 1001:1001 /data/flyte-data + image: docker.io/bitnami/os-shell:sandbox + imagePullPolicy: Never + name: volume-permissions + resources: + limits: {} + requests: {} + securityContext: + runAsUser: 0 + volumeMounts: + - mountPath: /data + name: data + securityContext: + fsGroup: 1001 + serviceAccountName: flyte-sandbox-minio + volumes: + - name: data + persistentVolumeClaim: + claimName: flyte-sandbox-minio-storage +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-proxy + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: proxy + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + template: + metadata: + labels: + app.kubernetes.io/component: proxy + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + spec: + containers: + - image: envoyproxy/envoy:sandbox + imagePullPolicy: Never + livenessProbe: + initialDelaySeconds: 30 + tcpSocket: + port: http + name: proxy + ports: + - containerPort: 8000 + name: http + readinessProbe: + tcpSocket: + port: http + volumeMounts: + - mountPath: /etc/envoy + name: config + volumes: + - configMap: + name: flyte-sandbox-proxy-config + name: config +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + serviceName: flyte-sandbox-postgresql-hl + template: + metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + spec: + affinity: + nodeAffinity: null + podAffinity: null + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + topologyKey: kubernetes.io/hostname + weight: 1 + containers: + - env: + - name: BITNAMI_DEBUG + value: "false" + - name: POSTGRESQL_PORT_NUMBER + value: "5432" + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + key: postgres-password + name: flyte-sandbox-postgresql + - name: POSTGRESQL_ENABLE_LDAP + value: "no" + - name: POSTGRESQL_ENABLE_TLS + value: "no" + - name: POSTGRESQL_LOG_HOSTNAME + value: "false" + - name: POSTGRESQL_LOG_CONNECTIONS + value: "false" + - name: POSTGRESQL_LOG_DISCONNECTIONS + value: "false" + - name: POSTGRESQL_PGAUDIT_LOG_CATALOG + value: "off" + - name: POSTGRESQL_CLIENT_MIN_MESSAGES + value: error + - name: POSTGRESQL_SHARED_PRELOAD_LIBRARIES + value: pgaudit + image: docker.io/bitnami/postgresql:sandbox + imagePullPolicy: Never + livenessProbe: + exec: + command: + - /bin/sh + - -c + - exec pg_isready -U "postgres" -h 127.0.0.1 -p 5432 + failureThreshold: 6 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: postgresql + ports: + - containerPort: 5432 + name: tcp-postgresql + readinessProbe: + exec: + command: + - /bin/sh + - -c + - -e + - | + exec pg_isready -U "postgres" -h 127.0.0.1 -p 5432 + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ] + failureThreshold: 6 + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + limits: {} + requests: + cpu: 250m + memory: 256Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + runAsGroup: 0 + runAsNonRoot: true + runAsUser: 1001 + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /bitnami/postgresql + name: data + hostIPC: false + hostNetwork: false + initContainers: + - command: + - /bin/sh + - -ec + - | + chown 1001:1001 /bitnami/postgresql + mkdir -p /bitnami/postgresql/data + chmod 700 /bitnami/postgresql/data + find /bitnami/postgresql -mindepth 1 -maxdepth 1 -not -name "conf" -not -name ".snapshot" -not -name "lost+found" | \ + xargs -r chown -R 1001:1001 + image: docker.io/bitnami/os-shell:sandbox + imagePullPolicy: Never + name: init-chmod-data + resources: + limits: {} + requests: {} + securityContext: + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /bitnami/postgresql + name: data + securityContext: + fsGroup: 1001 + serviceAccountName: default + volumes: + - name: data + persistentVolumeClaim: + claimName: flyte-sandbox-db-storage + updateStrategy: + rollingUpdate: {} + type: RollingUpdate diff --git a/docker/sandbox-bundled/manifests/dev.yaml b/docker/sandbox-bundled/manifests/dev.yaml new file mode 100644 index 0000000000..63de81ebdd --- /dev/null +++ b/docker/sandbox-bundled/manifests/dev.yaml @@ -0,0 +1,1649 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: flyte +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: taskactions.flyte.org +spec: + group: flyte.org + names: + kind: TaskAction + listKind: TaskActionList + plural: taskactions + singular: taskaction + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.runName + name: Run + type: string + - jsonPath: .spec.actionName + name: Action + type: string + - jsonPath: .spec.taskType + name: TaskType + type: string + - jsonPath: .status.conditions[?(@.type=='Progressing')].reason + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=='Progressing')].status + name: Progressing + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=='Succeeded')].status + name: Succeeded + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=='Failed')].status + name: Failed + priority: 1 + type: string + name: v1 + schema: + openAPIV3Schema: + description: TaskAction is the Schema for the taskactions API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: spec defines the desired state of TaskAction + properties: + actionName: + description: ActionName is the unique name of this action within the + run + maxLength: 30 + minLength: 1 + type: string + domain: + description: Domain this action belongs to + maxLength: 63 + minLength: 1 + type: string + inputUri: + description: InputURI is the path to the input data for this action + minLength: 1 + type: string + org: + description: Org this action belongs to + maxLength: 63 + minLength: 1 + type: string + parentActionName: + description: ParentActionName is the optional name of the parent action + maxLength: 30 + minLength: 1 + type: string + project: + description: Project this action belongs to + maxLength: 63 + minLength: 1 + type: string + runName: + description: RunName is the name of the run this action belongs to + maxLength: 30 + minLength: 1 + type: string + runOutputBase: + description: RunOutputBase is the base path where this action should + write its output + minLength: 1 + type: string + shortName: + description: ShortName is the human-readable display name for this + task + maxLength: 63 + type: string + taskTemplate: + description: TaskTemplate is the proto-serialized core.TaskTemplate + stored inline in etcd + format: byte + type: string + taskType: + description: TaskType identifies which plugin handles this task (e.g. + "container", "spark", "ray") + maxLength: 63 + minLength: 1 + type: string + required: + - actionName + - domain + - inputUri + - org + - project + - runName + - runOutputBase + - taskTemplate + - taskType + type: object + status: + description: status defines the observed state of TaskAction + properties: + conditions: + description: |- + conditions represent the current state of the TaskAction resource. + Each condition has a unique type and reflects the status of a specific aspect of the resource. + + Standard condition types include: + - "Available": the resource is fully functional + - "Progressing": the resource is being created or updated + - "Degraded": the resource failed to reach or maintain its desired state + + The status of each condition is one of True, False, or Unknown. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CalmelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + phaseHistory: + description: |- + PhaseHistory is an append-only log of phase transitions. Unlike conditions + (which are updated in-place by type), this preserves the full timeline: + Queued → Initializing → Executing → Succeeded/Failed, each with a timestamp. + items: + description: PhaseTransition records a phase change with its timestamp. + properties: + message: + description: Message is an optional human-readable message about + the transition. + type: string + occurredAt: + description: OccurredAt is when this phase transition happened. + format: date-time + type: string + phase: + description: Phase is the phase that was entered (e.g. "Queued", + "Initializing", "Executing", "Succeeded", "Failed"). + type: string + required: + - occurredAt + - phase + type: object + type: array + pluginPhase: + description: PluginPhase is a human-readable representation of the + plugin's current phase. + type: string + pluginPhaseVersion: + description: PluginPhaseVersion is the version of the current plugin + phase. + format: int32 + type: integer + pluginState: + description: PluginState is the Gob-encoded plugin state from the + last reconciliation round. + format: byte + type: string + pluginStateVersion: + description: PluginStateVersion tracks the version of the plugin state + schema for compatibility. + type: integer + stateJson: + description: StateJSON is the JSON serialized NodeStatus that was + last sent to the State Service + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +secrets: +- name: flyte-sandbox-minio +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +rules: +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-key-holder + - kubernetes-dashboard-certs + - kubernetes-dashboard-csrf + resources: + - secrets + verbs: + - get + - update + - delete +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-settings + resources: + - configmaps + verbs: + - get + - update +- apiGroups: + - "" + resourceNames: + - heapster + - dashboard-metrics-scraper + resources: + - services + verbs: + - proxy +- apiGroups: + - "" + resourceNames: + - heapster + - 'http:heapster:' + - 'https:heapster:' + - dashboard-metrics-scraper + - http:dashboard-metrics-scraper + resources: + - services/proxy + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kubernetes-dashboard + namespace: flyte +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - create +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-csrf + - kubernetes-dashboard-key-holder + resources: + - secrets + verbs: + - get + - update + - delete +- apiGroups: + - "" + resourceNames: + - kubernetes-dashboard-settings + resources: + - configmaps + verbs: + - get + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard-readonly +rules: +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - persistentvolumeclaims + - pods + - replicationcontrollers + - replicationcontrollers/scale + - serviceaccounts + - services + - nodes + - persistentvolumeclaims + - persistentvolumes + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - bindings + - events + - limitranges + - namespaces/status + - pods/log + - pods/status + - replicationcontrollers/status + - resourcequotas + - resourcequotas/status + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - daemonsets + - deployments + - deployments/scale + - replicasets + - replicasets/scale + - statefulsets + verbs: + - get + - list + - watch +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch +- apiGroups: + - batch + resources: + - cronjobs + - jobs + verbs: + - get + - list + - watch +- apiGroups: + - extensions + resources: + - daemonsets + - deployments + - deployments/scale + - ingresses + - networkpolicies + - replicasets + - replicasets/scale + - replicationcontrollers/scale + verbs: + - get + - list + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - networkpolicies + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + - volumeattachments + verbs: + - get + - list + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - roles + - rolebindings + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: flyte-sandbox-kubernetes-dashboard +subjects: +- kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kubernetes-dashboard + namespace: flyte +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kubernetes-dashboard +subjects: +- kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard-readonly +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: flyte-sandbox-kubernetes-dashboard-readonly +subjects: +- kind: ServiceAccount + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +--- +apiVersion: v1 +data: + config.yml: |- + health: + storagedriver: + enabled: true + interval: 10s + threshold: 3 + http: + addr: :5000 + debug: + addr: :5001 + prometheus: + enabled: false + path: /metrics + headers: + X-Content-Type-Options: + - nosniff + log: + fields: + service: registry + storage: + cache: + blobdescriptor: inmemory + version: 0.1 +kind: ConfigMap +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry-config + namespace: flyte +--- +apiVersion: v1 +data: + envoy.yaml: | + admin: + access_log_path: /dev/stdout + static_resources: + listeners: + - address: + socket_address: + address: 0.0.0.0 + port_value: 8000 + filter_chains: + - filters: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + codec_type: AUTO + upgrade_configs: + - upgrade_type: websocket + route_config: + name: local_route + virtual_hosts: + - name: backend + domains: + - "*" + routes: + - match: + prefix: "/healthz" + route: + cluster: flyte + - match: + prefix: "/readyz" + route: + cluster: flyte + - match: + prefix: "/flyteidl2.workflow.RunService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.task.TaskService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.workflow.TranslatorService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.actions.ActionsService" + route: + cluster: flyte + timeout: 0s + - match: + prefix: "/flyteidl2.dataproxy.DataProxyService" + route: + cluster: flyte + timeout: 0s + - match: + path: "/kubernetes-dashboard" + redirect: + path_redirect: "/kubernetes-dashboard/" + - match: + prefix: "/kubernetes-dashboard/" + route: + cluster: kubernetes-dashboard + prefix_rewrite: / + - match: + path: "/minio" + redirect: + path_redirect: "/minio/" + - match: + prefix: "/minio/" + route: + cluster: minio + prefix_rewrite: / + http_filters: + - name: envoy.filters.http.router + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router + clusters: + - name: flyte + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + http2_protocol_options: {} + load_assignment: + cluster_name: flyte + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: flyte-sandbox-local + port_value: 8090 + - name: kubernetes-dashboard + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: kubernetes-dashboard + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: flyte-sandbox-kubernetes-dashboard + port_value: 80 + - name: minio + connect_timeout: 0.25s + type: STRICT_DNS + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: minio + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: flyte-sandbox-minio + port_value: 9001 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-proxy-config + namespace: flyte +--- +apiVersion: v1 +data: null +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: kubernetes-dashboard-settings + namespace: flyte +--- +apiVersion: v1 +data: + haSharedSecret: dlJOV1dRdnA3dENpUkhDUg== + proxyPassword: "" + proxyUsername: "" +kind: Secret +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry-secret + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard-certs + namespace: flyte +type: Opaque +--- +apiVersion: v1 +data: + root-password: bWluaW9zdG9yYWdl + root-user: bWluaW8= +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +type: Opaque +--- +apiVersion: v1 +data: + postgres-password: cG9zdGdyZXM= +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: kubernetes-dashboard-csrf + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Secret +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: kubernetes-dashboard-key-holder + namespace: flyte +type: Opaque +--- +apiVersion: v1 +kind: Endpoints +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-local + namespace: flyte +subsets: +- addresses: + - ip: '%{HOST_GATEWAY_IP}%' + ports: + - name: http + port: 8090 + protocol: TCP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry + namespace: flyte +spec: + ports: + - name: http-5000 + nodePort: 30000 + port: 5000 + protocol: TCP + targetPort: 5000 + selector: + app: docker-registry + release: flyte-sandbox + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + kubernetes.io/cluster-service: "true" + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +spec: + ports: + - name: http + port: 80 + targetPort: http + selector: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: kubernetes-dashboard + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-local + namespace: flyte +spec: + clusterIP: None + ports: + - name: http + port: 8090 + protocol: TCP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +spec: + externalTrafficPolicy: Cluster + ports: + - name: minio-api + nodePort: 30002 + port: 9000 + targetPort: minio-api + - name: minio-console + port: 9001 + targetPort: minio-console + selector: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: minio + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + namespace: flyte +spec: + externalTrafficPolicy: Cluster + ports: + - name: tcp-postgresql + nodePort: 30001 + port: 5432 + targetPort: tcp-postgresql + selector: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + sessionAffinity: None + type: NodePort +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" + name: flyte-sandbox-postgresql-hl + namespace: flyte +spec: + clusterIP: None + ports: + - name: tcp-postgresql + port: 5432 + targetPort: tcp-postgresql + publishNotReadyAddresses: true + selector: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-proxy + namespace: flyte +spec: + ports: + - name: http + nodePort: 30080 + port: 8000 + protocol: TCP + selector: + app.kubernetes.io/component: proxy + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + type: NodePort +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-db-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: /var/lib/flyte/storage/db + storageClassName: manual +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-minio-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: /var/lib/flyte/storage/minio + storageClassName: manual +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-db-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: manual + volumeName: flyte-sandbox-db-storage +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-minio-storage + namespace: flyte +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: manual + volumeName: flyte-sandbox-minio-storage +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-buildkit + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: buildkit + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + template: + metadata: + labels: + app.kubernetes.io/component: buildkit + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + spec: + containers: + - args: + - --addr + - unix:///run/buildkit/buildkitd.sock + - --addr + - tcp://0.0.0.0:30003 + image: moby/buildkit:sandbox + imagePullPolicy: Never + livenessProbe: + exec: + command: + - buildctl + - debug + - workers + initialDelaySeconds: 5 + periodSeconds: 30 + name: buildkit + ports: + - containerPort: 30003 + name: tcp + protocol: TCP + readinessProbe: + exec: + command: + - buildctl + - debug + - workers + initialDelaySeconds: 5 + periodSeconds: 30 + securityContext: + privileged: true + dnsPolicy: ClusterFirstWithHostNet + hostNetwork: true +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: docker-registry + chart: docker-registry-2.2.2 + heritage: Helm + release: flyte-sandbox + name: flyte-sandbox-docker-registry + namespace: flyte +spec: + minReadySeconds: 5 + replicas: 1 + selector: + matchLabels: + app: docker-registry + release: flyte-sandbox + template: + metadata: + annotations: + checksum/config: 8f50e768255a87f078ba8b9879a0c174c3e045ffb46ac8723d2eedbe293c8d81 + checksum/secret: 426caf593431ecac84ef53585c9e08471e0da16870aed698439a3c30b1454131 + labels: + app: docker-registry + release: flyte-sandbox + spec: + containers: + - command: + - /bin/registry + - serve + - /etc/docker/registry/config.yml + env: + - name: REGISTRY_HTTP_SECRET + valueFrom: + secretKeyRef: + key: haSharedSecret + name: flyte-sandbox-docker-registry-secret + - name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY + value: /var/lib/registry + image: registry:sandbox + imagePullPolicy: Never + livenessProbe: + httpGet: + path: / + port: 5000 + name: docker-registry + ports: + - containerPort: 5000 + readinessProbe: + httpGet: + path: / + port: 5000 + resources: {} + volumeMounts: + - mountPath: /etc/docker/registry + name: flyte-sandbox-docker-registry-config + - mountPath: /var/lib/registry/ + name: data + securityContext: + fsGroup: 1000 + runAsUser: 1000 + volumes: + - configMap: + name: flyte-sandbox-docker-registry-config + name: flyte-sandbox-docker-registry-config + - emptyDir: {} + name: data +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + name: flyte-sandbox-kubernetes-dashboard + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: kubernetes-dashboard + strategy: + rollingUpdate: + maxSurge: 0 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + annotations: null + labels: + app.kubernetes.io/component: kubernetes-dashboard + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: kubernetes-dashboard + app.kubernetes.io/version: 2.7.0 + helm.sh/chart: kubernetes-dashboard-6.0.0 + spec: + containers: + - args: + - --namespace=flyte + - --metrics-provider=none + - --enable-insecure-login + - --enable-skip-login + image: kubernetesui/dashboard:sandbox + imagePullPolicy: Never + livenessProbe: + httpGet: + path: / + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + timeoutSeconds: 30 + name: kubernetes-dashboard + ports: + - containerPort: 9090 + name: http + protocol: TCP + resources: + limits: + cpu: 2 + memory: 200Mi + requests: + cpu: 100m + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsGroup: 2001 + runAsUser: 1001 + volumeMounts: + - mountPath: /certs + name: kubernetes-dashboard-certs + - mountPath: /tmp + name: tmp-volume + securityContext: + seccompProfile: + type: RuntimeDefault + serviceAccountName: flyte-sandbox-kubernetes-dashboard + volumes: + - name: kubernetes-dashboard-certs + secret: + secretName: flyte-sandbox-kubernetes-dashboard-certs + - emptyDir: {} + name: tmp-volume +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + name: flyte-sandbox-minio + namespace: flyte +spec: + selector: + matchLabels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: minio + strategy: + type: Recreate + template: + metadata: + annotations: + checksum/credentials-secret: ecce809e3af19025d134846a9a81e163dd41df7e26abf2c6657895d9d13607a9 + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: minio + helm.sh/chart: minio-12.6.7 + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: minio + topologyKey: kubernetes.io/hostname + weight: 1 + containers: + - command: + - minio + - server + - /data + - --console-address + - :9001 + env: + - name: BITNAMI_DEBUG + value: "false" + - name: MINIO_SCHEME + value: http + - name: MINIO_FORCE_NEW_KEYS + value: "no" + - name: MINIO_ROOT_USER + valueFrom: + secretKeyRef: + key: root-user + name: flyte-sandbox-minio + - name: MINIO_ROOT_PASSWORD + valueFrom: + secretKeyRef: + key: root-password + name: flyte-sandbox-minio + - name: MINIO_DEFAULT_BUCKETS + value: flyte-data + - name: MINIO_BROWSER + value: "on" + - name: MINIO_PROMETHEUS_AUTH_TYPE + value: public + - name: MINIO_CONSOLE_PORT_NUMBER + value: "9001" + - name: MINIO_BROWSER_REDIRECT_URL + value: http://localhost:30080/minio + image: docker.io/bitnami/minio:sandbox + imagePullPolicy: Never + livenessProbe: + failureThreshold: 5 + httpGet: + path: /minio/health/live + port: minio-api + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 5 + successThreshold: 1 + timeoutSeconds: 5 + name: minio + ports: + - containerPort: 9000 + name: minio-api + protocol: TCP + - containerPort: 9001 + name: minio-console + protocol: TCP + readinessProbe: + failureThreshold: 5 + initialDelaySeconds: 5 + periodSeconds: 5 + successThreshold: 1 + tcpSocket: + port: minio-api + timeoutSeconds: 1 + resources: + limits: {} + requests: {} + securityContext: + runAsNonRoot: true + runAsUser: 1001 + volumeMounts: + - mountPath: /data + name: data + initContainers: + - command: + - /bin/bash + - -ec + - | + chown -R 1001:1001 /data + mkdir -p /data/flyte-data + chown 1001:1001 /data/flyte-data + image: docker.io/bitnami/os-shell:sandbox + imagePullPolicy: Never + name: volume-permissions + resources: + limits: {} + requests: {} + securityContext: + runAsUser: 0 + volumeMounts: + - mountPath: /data + name: data + securityContext: + fsGroup: 1001 + serviceAccountName: flyte-sandbox-minio + volumes: + - name: data + persistentVolumeClaim: + claimName: flyte-sandbox-minio-storage +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: flyte-sandbox + app.kubernetes.io/version: 1.16.1 + helm.sh/chart: flyte-sandbox-0.1.0 + name: flyte-sandbox-proxy + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: proxy + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + template: + metadata: + labels: + app.kubernetes.io/component: proxy + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: flyte-sandbox + spec: + containers: + - image: envoyproxy/envoy:sandbox + imagePullPolicy: Never + livenessProbe: + initialDelaySeconds: 30 + tcpSocket: + port: http + name: proxy + ports: + - containerPort: 8000 + name: http + readinessProbe: + tcpSocket: + port: http + volumeMounts: + - mountPath: /etc/envoy + name: config + volumes: + - configMap: + name: flyte-sandbox-proxy-config + name: config +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + namespace: flyte +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + serviceName: flyte-sandbox-postgresql-hl + template: + metadata: + labels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: postgresql + helm.sh/chart: postgresql-12.8.1 + name: flyte-sandbox-postgresql + spec: + affinity: + nodeAffinity: null + podAffinity: null + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/component: primary + app.kubernetes.io/instance: flyte-sandbox + app.kubernetes.io/name: postgresql + topologyKey: kubernetes.io/hostname + weight: 1 + containers: + - env: + - name: BITNAMI_DEBUG + value: "false" + - name: POSTGRESQL_PORT_NUMBER + value: "5432" + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + key: postgres-password + name: flyte-sandbox-postgresql + - name: POSTGRESQL_ENABLE_LDAP + value: "no" + - name: POSTGRESQL_ENABLE_TLS + value: "no" + - name: POSTGRESQL_LOG_HOSTNAME + value: "false" + - name: POSTGRESQL_LOG_CONNECTIONS + value: "false" + - name: POSTGRESQL_LOG_DISCONNECTIONS + value: "false" + - name: POSTGRESQL_PGAUDIT_LOG_CATALOG + value: "off" + - name: POSTGRESQL_CLIENT_MIN_MESSAGES + value: error + - name: POSTGRESQL_SHARED_PRELOAD_LIBRARIES + value: pgaudit + image: docker.io/bitnami/postgresql:sandbox + imagePullPolicy: Never + livenessProbe: + exec: + command: + - /bin/sh + - -c + - exec pg_isready -U "postgres" -h 127.0.0.1 -p 5432 + failureThreshold: 6 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: postgresql + ports: + - containerPort: 5432 + name: tcp-postgresql + readinessProbe: + exec: + command: + - /bin/sh + - -c + - -e + - | + exec pg_isready -U "postgres" -h 127.0.0.1 -p 5432 + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ] + failureThreshold: 6 + initialDelaySeconds: 5 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + limits: {} + requests: + cpu: 250m + memory: 256Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + runAsGroup: 0 + runAsNonRoot: true + runAsUser: 1001 + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /bitnami/postgresql + name: data + hostIPC: false + hostNetwork: false + initContainers: + - command: + - /bin/sh + - -ec + - | + chown 1001:1001 /bitnami/postgresql + mkdir -p /bitnami/postgresql/data + chmod 700 /bitnami/postgresql/data + find /bitnami/postgresql -mindepth 1 -maxdepth 1 -not -name "conf" -not -name ".snapshot" -not -name "lost+found" | \ + xargs -r chown -R 1001:1001 + image: docker.io/bitnami/os-shell:sandbox + imagePullPolicy: Never + name: init-chmod-data + resources: + limits: {} + requests: {} + securityContext: + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /bitnami/postgresql + name: data + securityContext: + fsGroup: 1001 + serviceAccountName: default + volumes: + - name: data + persistentVolumeClaim: + claimName: flyte-sandbox-db-storage + updateStrategy: + rollingUpdate: {} + type: RollingUpdate diff --git a/events/cmd/main.go b/events/cmd/main.go new file mode 100644 index 0000000000..a5efbc6ce2 --- /dev/null +++ b/events/cmd/main.go @@ -0,0 +1,27 @@ +package main + +import ( + "context" + "os" + + "github.com/flyteorg/flyte/v2/app" + "github.com/flyteorg/flyte/v2/events" + eventsconfig "github.com/flyteorg/flyte/v2/events/config" +) + +func main() { + a := &app.App{ + Name: "events-service", + Short: "Events Service for Flyte", + Setup: func(ctx context.Context, sc *app.SetupContext) error { + cfg := eventsconfig.GetConfig() + sc.Host = cfg.Server.Host + sc.Port = cfg.Server.Port + + return events.Setup(ctx, sc) + }, + } + if err := a.Run(); err != nil { + os.Exit(1) + } +} diff --git a/events/config/config.go b/events/config/config.go new file mode 100644 index 0000000000..7d53e544de --- /dev/null +++ b/events/config/config.go @@ -0,0 +1,37 @@ +package config + +import "github.com/flyteorg/flyte/v2/flytestdlib/config" + +const configSectionKey = "events" + +//go:generate pflags Config --default-var=defaultConfig + +var defaultConfig = &Config{ + Server: ServerConfig{ + Port: 8092, + Host: "0.0.0.0", + }, + RunServiceURL: "http://localhost:8090", +} + +var configSection = config.MustRegisterSection(configSectionKey, defaultConfig) + +// Config holds configuration for the Events service. +type Config struct { + // HTTP server configuration. + Server ServerConfig `json:"server"` + + // RunServiceURL is the base URL for the internal run service. + RunServiceURL string `json:"runServiceUrl" pflag:",Base URL of the internal run service"` +} + +// ServerConfig holds HTTP server configuration. +type ServerConfig struct { + Port int `json:"port" pflag:",Port to bind the HTTP server"` + Host string `json:"host" pflag:",Host to bind the HTTP server"` +} + +// GetConfig returns the parsed events configuration. +func GetConfig() *Config { + return configSection.GetConfig().(*Config) +} diff --git a/events/service/events_proxy_service.go b/events/service/events_proxy_service.go new file mode 100644 index 0000000000..93f9b4c21c --- /dev/null +++ b/events/service/events_proxy_service.go @@ -0,0 +1,48 @@ +package service + +import ( + "context" + "fmt" + + "connectrpc.com/connect" + "github.com/flyteorg/flyte/v2/flytestdlib/logger" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow/workflowconnect" +) + +// EventsProxyService implements the EventsProxyService gRPC API. +type EventsProxyService struct { + runClient workflowconnect.InternalRunServiceClient +} + +func NewEventsProxyService(runClient workflowconnect.InternalRunServiceClient) *EventsProxyService { + return &EventsProxyService{runClient: runClient} +} + +// Record accepts action events and forwards them synchronously to the run service. +func (s *EventsProxyService) Record(ctx context.Context, req *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) { + if s.runClient == nil { + return nil, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("run client is not initialized")) + } + if err := req.Msg.Validate(); err != nil { + logger.Errorf(ctx, "invalid EventsProxyService.Record request: %v", err) + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + if len(req.Msg.GetEvents()) == 0 { + return connect.NewResponse(&workflow.RecordResponse{}), nil + } + + recordEventReq := &workflow.RecordActionEventsRequest{Events: req.Msg.GetEvents()} + recordActionResp, err := s.runClient.RecordActionEvents(ctx, connect.NewRequest(recordEventReq)) + if err != nil { + logger.Warnf(ctx, "failed to forward action events to run service: %v", err) + return nil, connect.NewError(connect.CodeInternal, err) + } + status := recordActionResp.Msg.GetStatus() + if status != nil && status.Code != 0 { + logger.Warnf(ctx, "run service returned non-ok status for action events: code=%d, msg=%s", status.Code, status.Message) + return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("run service failed: %s", status.Message)) + } + + return connect.NewResponse(&workflow.RecordResponse{}), nil +} diff --git a/events/setup.go b/events/setup.go new file mode 100644 index 0000000000..b075518867 --- /dev/null +++ b/events/setup.go @@ -0,0 +1,30 @@ +package events + +import ( + "context" + "net/http" + + "github.com/flyteorg/flyte/v2/app" + "github.com/flyteorg/flyte/v2/events/config" + "github.com/flyteorg/flyte/v2/events/service" + "github.com/flyteorg/flyte/v2/flytestdlib/logger" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow/workflowconnect" +) + +// Setup registers the EventsProxyService handler. +func Setup(ctx context.Context, sc *app.SetupContext) error { + cfg := config.GetConfig() + + runServiceURL := cfg.RunServiceURL + if sc.BaseURL != "" { + runServiceURL = sc.BaseURL + } + runClient := workflowconnect.NewInternalRunServiceClient(http.DefaultClient, runServiceURL) + + eventsSvc := service.NewEventsProxyService(runClient) + path, handler := workflowconnect.NewEventsProxyServiceHandler(eventsSvc) + sc.Mux.Handle(path, handler) + logger.Infof(ctx, "Mounted EventsProxyService at %s", path) + + return nil +} diff --git a/executor/cmd/main.go b/executor/cmd/main.go index e905073872..9cb87a4435 100644 --- a/executor/cmd/main.go +++ b/executor/cmd/main.go @@ -7,26 +7,7 @@ import ( "github.com/flyteorg/flyte/v2/app" "github.com/flyteorg/flyte/v2/executor" - executorconfig "github.com/flyteorg/flyte/v2/executor/pkg/config" ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/healthz" - "sigs.k8s.io/controller-runtime/pkg/log/zap" - "sigs.k8s.io/controller-runtime/pkg/metrics/filters" - metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" - "sigs.k8s.io/controller-runtime/pkg/webhook" - - flyteorgv1 "github.com/flyteorg/flyte/v2/executor/api/v1" - "github.com/flyteorg/flyte/v2/executor/pkg/config" - "github.com/flyteorg/flyte/v2/executor/pkg/controller" - "github.com/flyteorg/flyte/v2/executor/pkg/plugin" - "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery" - "github.com/flyteorg/flyte/v2/flytestdlib/promutils" - "github.com/flyteorg/flyte/v2/flytestdlib/storage" - - // Plugin registrations -- blank imports trigger init() which registers plugins with the global registry. - _ "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/plugins/k8s/pod" - stdconfig "github.com/flyteorg/flyte/v2/flytestdlib/config" - "github.com/flyteorg/flyte/v2/flytestdlib/config/viper" ) func main() { @@ -34,198 +15,18 @@ func main() { Name: "executor", Short: "Executor controller manager for Flyte TaskActions", Setup: func(ctx context.Context, sc *app.SetupContext) error { - cfg := executorconfig.GetConfig() - - // Executor doesn't serve HTTP — it uses controller-runtime's own - // health probe port. Set a dummy port so the app skeleton starts - // its HTTP server on a non-conflicting address (or 0 to disable). + // Executor doesn't serve HTTP. Use 0 to avoid binding an app HTTP port. sc.Port = 0 - - k8sConfig := ctrl.GetConfigOrDie() - sc.K8sConfig = k8sConfig + sc.K8sConfig = ctrl.GetConfigOrDie() if err := executor.Setup(ctx, sc); err != nil { return fmt.Errorf("executor setup failed: %w", err) } - - _ = cfg // config is read inside executor.Setup's worker return nil }, } - if err := a.Run(); err != nil { - os.Exit(1) - } -} - -func initConfig(cmd *cobra.Command) error { - configAccessor = viper.NewAccessor(stdconfig.Options{ - SearchPaths: []string{cfgFile, ".", "/etc/flyte/config"}, - StrictMode: false, - }) - - // Traverse to root command - rootCmd := cmd - for rootCmd.Parent() != nil { - rootCmd = rootCmd.Parent() - } - - configAccessor.InitializePflags(rootCmd.PersistentFlags()) - - return configAccessor.UpdateConfig(context.Background()) -} - -// nolint:gocyclo -func run() error { - cfg := config.GetConfig() - - opts := zap.Options{ - Development: true, - } - ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) - - var tlsOpts []func(*tls.Config) - - // if the enable-http2 flag is false (the default), http/2 should be disabled - // due to its vulnerabilities. More specifically, disabling http/2 will - // prevent from being vulnerable to the HTTP/2 Stream Cancellation and - // Rapid Reset CVEs. For more information see: - // - https://github.com/advisories/GHSA-qppj-fm5r-hxr3 - // - https://github.com/advisories/GHSA-4374-p667-p6c8 - disableHTTP2 := func(c *tls.Config) { - setupLog.Info("disabling http/2") - c.NextProtos = []string{"http/1.1"} - } - - if !cfg.EnableHTTP2 { - tlsOpts = append(tlsOpts, disableHTTP2) - } - - // Initial webhook TLS options - webhookTLSOpts := tlsOpts - webhookServerOptions := webhook.Options{ - TLSOpts: webhookTLSOpts, - } - - if len(cfg.WebhookCertPath) > 0 { - setupLog.Info("Initializing webhook certificate watcher using provided certificates", - "webhook-cert-path", cfg.WebhookCertPath, "webhook-cert-name", cfg.WebhookCertName, "webhook-cert-key", cfg.WebhookCertKey) - - webhookServerOptions.CertDir = cfg.WebhookCertPath - webhookServerOptions.CertName = cfg.WebhookCertName - webhookServerOptions.KeyName = cfg.WebhookCertKey - } - - webhookServer := webhook.NewServer(webhookServerOptions) - // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server. - // More info: - // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.22.1/pkg/metrics/server - // - https://book.kubebuilder.io/reference/metrics.html - metricsServerOptions := metricsserver.Options{ - BindAddress: cfg.MetricsBindAddress, - SecureServing: cfg.MetricsSecure, - TLSOpts: tlsOpts, - } - - if cfg.MetricsSecure { - // FilterProvider is used to protect the metrics endpoint with authn/authz. - // These configurations ensure that only authorized users and service accounts - // can access the metrics endpoint. The RBAC are configured in 'config/rbac/kustomization.yaml'. More info: - // https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.22.1/pkg/metrics/filters#WithAuthenticationAndAuthorization - metricsServerOptions.FilterProvider = filters.WithAuthenticationAndAuthorization - } - - // If the certificate is not specified, controller-runtime will automatically - // generate self-signed certificates for the metrics server. While convenient for development and testing, - // this setup is not recommended for production. - if len(cfg.MetricsCertPath) > 0 { - setupLog.Info("Initializing metrics certificate watcher using provided certificates", - "metrics-cert-path", cfg.MetricsCertPath, "metrics-cert-name", cfg.MetricsCertName, "metrics-cert-key", cfg.MetricsCertKey) - - metricsServerOptions.CertDir = cfg.MetricsCertPath - metricsServerOptions.CertName = cfg.MetricsCertName - metricsServerOptions.KeyName = cfg.MetricsCertKey - } - - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, - Metrics: metricsServerOptions, - WebhookServer: webhookServer, - HealthProbeBindAddress: cfg.HealthProbeBindAddress, - LeaderElection: cfg.LeaderElect, - LeaderElectionID: "abf369a8.flyte.org", - // LeaderElectionReleaseOnCancel defines if the leader should step down voluntarily - // when the Manager ends. This requires the binary to immediately end when the - // Manager is stopped, otherwise, this setting is unsafe. Setting this significantly - // speeds up voluntary leader transitions as the new leader don't have to wait - // LeaseDuration time first. - // - // In the default scaffold provided, the program ends immediately after - // the manager stops, so would be fine to enable this option. However, - // if you are doing or is intended to do any operation such as perform cleanups - // after the manager stops then its usage might be unsafe. - // LeaderElectionReleaseOnCancel: true, - }) - if err != nil { - setupLog.Error(err, "unable to start manager") - os.Exit(1) - } - - // Create DataStore for plugin I/O (task templates, inputs, outputs) - dataStore, err := storage.NewDataStore(storage.GetConfig(), promutils.NewScope("executor:storage")) - if err != nil { - setupLog.Error(err, "unable to create data store") - os.Exit(1) - } - - // Create SetupContext for plugin initialization. - // ctrl.Manager satisfies pluginsCore.KubeClient (GetClient + GetCache). - setupCtx := plugin.NewSetupContext( - mgr, // KubeClient - nil, // SecretManager -- TODO: implement - nil, // ResourceRegistrar -- not needed for executor - nil, // EnqueueOwner -- not needed, controller-runtime handles reconciliation - nil, // EnqueueLabels - "TaskAction", - promutils.NewScope("executor"), - ) - - // Initialize plugin registry from the global pluginmachinery singleton. - // Plugins are registered via blank imports above (e.g. pod plugin). - registry := plugin.NewRegistry(setupCtx, pluginmachinery.PluginRegistry()) - if err := registry.Initialize(context.Background()); err != nil { - setupLog.Error(err, "unable to initialize plugin registry") - os.Exit(1) - } - - reconciler := controller.NewTaskActionReconciler( - mgr.GetClient(), - mgr.GetScheme(), - registry, - dataStore, - ) - reconciler.Recorder = mgr.GetEventRecorderFor("taskaction-controller") - if err := reconciler.SetupWithManager(mgr); err != nil { - setupLog.Error(err, "unable to create controller", "controller", "TaskAction") - os.Exit(1) - } - - // +kubebuilder:scaffold:builder - - if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { - setupLog.Error(err, "unable to set up health check") - os.Exit(1) - } - if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { - setupLog.Error(err, "unable to set up ready check") - os.Exit(1) - } - - setupLog.Info("starting manager") - if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { - setupLog.Error(err, "problem running manager") + if err := a.Run(); err != nil { os.Exit(1) } - - return nil } diff --git a/executor/pkg/config/config.go b/executor/pkg/config/config.go index 379f5e2149..b440d7cc72 100644 --- a/executor/pkg/config/config.go +++ b/executor/pkg/config/config.go @@ -1,6 +1,8 @@ package config import ( + "time" + stdconfig "github.com/flyteorg/flyte/v2/flytestdlib/config" ) @@ -19,7 +21,12 @@ var ( MetricsCertName: "tls.crt", MetricsCertKey: "tls.key", EnableHTTP2: false, - StateServiceURL: "http://localhost:8090", + EventsServiceURL: "http://localhost:8090", + Cluster: "", + GC: GCConfig{ + Interval: stdconfig.Duration{Duration: 30 * time.Minute}, + MaxTTL: stdconfig.Duration{Duration: 1 * time.Hour}, + }, } configSection = stdconfig.MustRegisterSection(configSectionKey, defaultConfig) @@ -61,8 +68,23 @@ type Config struct { // EnableHTTP2 enables HTTP/2 for the metrics and webhook servers. EnableHTTP2 bool `json:"enableHTTP2" pflag:",Enable HTTP/2 for metrics and webhook servers"` - // StateServiceURL is the URL of the State Service for reporting action state updates. - StateServiceURL string `json:"stateServiceURL" pflag:",URL of the State Service for action state updates"` + // EventsServiceURL is the URL of the event Service for reporting action state updates. + EventsServiceURL string `json:"EventsServiceURL" pflag:",URL of the Event Service for action event updates"` + + // Cluster is the cluster identifier attached to action events. + Cluster string `json:"cluster" pflag:",Cluster identifier for action events"` + + // GC configures the garbage collector for terminal TaskActions. + GC GCConfig `json:"gc" pflag:",Garbage collector configuration for terminal TaskActions"` +} + +// GCConfig holds the configuration for the TaskAction garbage collector. +type GCConfig struct { + // Interval is how often the garbage collector runs. 0 disables GC. + Interval stdconfig.Duration `json:"interval" pflag:",How often the garbage collector runs. 0 disables GC."` + + // MaxTTL is the time-to-live for terminal TaskActions before deletion. + MaxTTL stdconfig.Duration `json:"maxTTL" pflag:",Time-to-live for terminal TaskActions before deletion."` } // GetConfig returns the parsed executor configuration diff --git a/executor/pkg/config/config_flags.go b/executor/pkg/config/config_flags.go index e6c7052323..f737873315 100755 --- a/executor/pkg/config/config_flags.go +++ b/executor/pkg/config/config_flags.go @@ -61,6 +61,9 @@ func (cfg Config) GetPFlagSet(prefix string) *pflag.FlagSet { cmdFlags.String(fmt.Sprintf("%v%v", prefix, "metricsCertName"), defaultConfig.MetricsCertName, "Name of the metrics server certificate file") cmdFlags.String(fmt.Sprintf("%v%v", prefix, "metricsCertKey"), defaultConfig.MetricsCertKey, "Name of the metrics server key file") cmdFlags.Bool(fmt.Sprintf("%v%v", prefix, "enableHTTP2"), defaultConfig.EnableHTTP2, "Enable HTTP/2 for metrics and webhook servers") - cmdFlags.String(fmt.Sprintf("%v%v", prefix, "stateServiceURL"), defaultConfig.StateServiceURL, "URL of the State Service for action state updates") + cmdFlags.String(fmt.Sprintf("%v%v", prefix, "EventsServiceURL"), defaultConfig.EventsServiceURL, "URL of the Event Service for action event updates") + cmdFlags.String(fmt.Sprintf("%v%v", prefix, "cluster"), defaultConfig.Cluster, "Cluster identifier for action events") + cmdFlags.String(fmt.Sprintf("%v%v", prefix, "gc.interval"), defaultConfig.GC.Interval.String(), "How often the garbage collector runs. 0 disables GC.") + cmdFlags.String(fmt.Sprintf("%v%v", prefix, "gc.maxTTL"), defaultConfig.GC.MaxTTL.String(), "Time-to-live for terminal TaskActions before deletion.") return cmdFlags } diff --git a/executor/pkg/config/config_flags_test.go b/executor/pkg/config/config_flags_test.go index 6f058ae63e..363ec7c3c5 100755 --- a/executor/pkg/config/config_flags_test.go +++ b/executor/pkg/config/config_flags_test.go @@ -253,14 +253,56 @@ func TestConfig_SetFlags(t *testing.T) { } }) }) - t.Run("Test_stateServiceURL", func(t *testing.T) { + t.Run("Test_EventsServiceURL", func(t *testing.T) { t.Run("Override", func(t *testing.T) { testValue := "1" - cmdFlags.Set("stateServiceURL", testValue) - if vString, err := cmdFlags.GetString("stateServiceURL"); err == nil { - testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.StateServiceURL) + cmdFlags.Set("EventsServiceURL", testValue) + if vString, err := cmdFlags.GetString("EventsServiceURL"); err == nil { + testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.EventsServiceURL) + + } else { + assert.FailNow(t, err.Error()) + } + }) + }) + t.Run("Test_cluster", func(t *testing.T) { + + t.Run("Override", func(t *testing.T) { + testValue := "1" + + cmdFlags.Set("cluster", testValue) + if vString, err := cmdFlags.GetString("cluster"); err == nil { + testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.Cluster) + + } else { + assert.FailNow(t, err.Error()) + } + }) + }) + t.Run("Test_gc.interval", func(t *testing.T) { + + t.Run("Override", func(t *testing.T) { + testValue := defaultConfig.GC.Interval.String() + + cmdFlags.Set("gc.interval", testValue) + if vString, err := cmdFlags.GetString("gc.interval"); err == nil { + testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.GC.Interval) + + } else { + assert.FailNow(t, err.Error()) + } + }) + }) + t.Run("Test_gc.maxTTL", func(t *testing.T) { + + t.Run("Override", func(t *testing.T) { + testValue := defaultConfig.GC.MaxTTL.String() + + cmdFlags.Set("gc.maxTTL", testValue) + if vString, err := cmdFlags.GetString("gc.maxTTL"); err == nil { + testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.GC.MaxTTL) } else { assert.FailNow(t, err.Error()) diff --git a/executor/pkg/controller/garbage_collector.go b/executor/pkg/controller/garbage_collector.go new file mode 100644 index 0000000000..8429fb471b --- /dev/null +++ b/executor/pkg/controller/garbage_collector.go @@ -0,0 +1,109 @@ +package controller + +import ( + "context" + "time" + + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/log" + + flyteorgv1 "github.com/flyteorg/flyte/v2/executor/api/v1" +) + +// GarbageCollector periodically deletes terminal TaskActions that have exceeded their TTL. +// It implements the controller-runtime manager.Runnable interface. +type GarbageCollector struct { + client client.Client + interval time.Duration + maxTTL time.Duration +} + +// NewGarbageCollector creates a new GarbageCollector. +func NewGarbageCollector(c client.Client, interval, maxTTL time.Duration) *GarbageCollector { + return &GarbageCollector{ + client: c, + interval: interval, + maxTTL: maxTTL, + } +} + +// Start runs the garbage collection loop until the context is cancelled. +// It satisfies the manager.Runnable interface. +func (gc *GarbageCollector) Start(ctx context.Context) error { + logger := log.FromContext(ctx).WithName("gc") + logger.Info("starting TaskAction garbage collector", "interval", gc.interval, "maxTTL", gc.maxTTL) + + ticker := time.NewTicker(gc.interval) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + logger.Info("stopping TaskAction garbage collector") + return nil + case <-ticker.C: + if err := gc.collect(ctx); err != nil { + logger.Error(err, "garbage collection cycle failed") + } + } + } +} + +const gcPageSize = 500 + +// collect lists all terminated TaskActions (paginated) and deletes those whose completed-time has expired. +func (gc *GarbageCollector) collect(ctx context.Context) error { + logger := log.FromContext(ctx).WithName("gc") + + cutoff := time.Now().UTC().Add(-gc.maxTTL).Format(labelTimeFormat) + deleted := 0 + total := 0 + continueToken := "" + + for { + var taskActions flyteorgv1.TaskActionList + listOpts := []client.ListOption{ + client.MatchingLabels{LabelTerminationStatus: LabelValueTerminated}, + client.HasLabels{LabelCompletedTime}, + client.Limit(gcPageSize), + } + if continueToken != "" { + listOpts = append(listOpts, client.Continue(continueToken)) + } + + if err := gc.client.List(ctx, &taskActions, listOpts...); err != nil { + return err + } + + total += len(taskActions.Items) + + for i := range taskActions.Items { + ta := &taskActions.Items[i] + completedTime := ta.GetLabels()[LabelCompletedTime] + if completedTime == "" { + continue + } + + // The minute-precision format is lexicographically ordered, so string comparison works. + if completedTime < cutoff { + if err := gc.client.Delete(ctx, ta); err != nil { + logger.Error(err, "failed to delete expired TaskAction", + "name", ta.Name, "namespace", ta.Namespace, "completedTime", completedTime) + continue + } + deleted++ + } + } + + continueToken = taskActions.GetContinue() + if continueToken == "" { + break + } + } + + if deleted > 0 { + logger.Info("garbage collection completed", "deleted", deleted, "total", total) + } + + return nil +} diff --git a/executor/pkg/controller/garbage_collector_test.go b/executor/pkg/controller/garbage_collector_test.go new file mode 100644 index 0000000000..312c39e4db --- /dev/null +++ b/executor/pkg/controller/garbage_collector_test.go @@ -0,0 +1,152 @@ +package controller + +import ( + "context" + "time" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + + flyteorgv1 "github.com/flyteorg/flyte/v2/executor/api/v1" +) + +func createTaskAction(ctx context.Context, name string, labels map[string]string) *flyteorgv1.TaskAction { + ta := &flyteorgv1.TaskAction{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: "default", + Labels: labels, + }, + Spec: flyteorgv1.TaskActionSpec{ + RunName: "test-run", + Org: "test-org", + Project: "test-project", + Domain: "test-domain", + ActionName: "test-action", + InputURI: "/tmp/input", + RunOutputBase: "/tmp/output", + TaskType: "python-task", + TaskTemplate: buildTaskTemplateBytes("python-task", "python:3.11"), + }, + } + ExpectWithOffset(1, k8sClient.Create(ctx, ta)).To(Succeed()) + return ta +} + +func deleteTaskAction(ctx context.Context, name string) { + ta := &flyteorgv1.TaskAction{} + err := k8sClient.Get(ctx, types.NamespacedName{Name: name, Namespace: "default"}, ta) + if err == nil { + _ = k8sClient.Delete(ctx, ta) + } +} + +var _ = Describe("GarbageCollector", func() { + ctx := context.Background() + + AfterEach(func() { + // Clean up all TaskActions in default namespace + var list flyteorgv1.TaskActionList + Expect(k8sClient.List(ctx, &list, client.InNamespace("default"))).To(Succeed()) + for i := range list.Items { + _ = k8sClient.Delete(ctx, &list.Items[i]) + } + }) + + It("should delete TaskActions with expired completed-time label", func() { + expiredTime := time.Now().UTC().Add(-2 * time.Hour).Format(labelTimeFormat) + createTaskAction(ctx, "gc-expired", map[string]string{ + LabelTerminationStatus: LabelValueTerminated, + LabelCompletedTime: expiredTime, + }) + + gc := NewGarbageCollector(k8sClient, 1*time.Minute, 1*time.Hour) + Expect(gc.collect(ctx)).To(Succeed()) + + ta := &flyteorgv1.TaskAction{} + err := k8sClient.Get(ctx, types.NamespacedName{Name: "gc-expired", Namespace: "default"}, ta) + Expect(err).To(HaveOccurred()) + Expect(client.IgnoreNotFound(err)).To(Succeed()) + }) + + It("should retain TaskActions with recent completed-time label", func() { + recentTime := time.Now().UTC().Format(labelTimeFormat) + createTaskAction(ctx, "gc-recent", map[string]string{ + LabelTerminationStatus: LabelValueTerminated, + LabelCompletedTime: recentTime, + }) + + gc := NewGarbageCollector(k8sClient, 1*time.Minute, 1*time.Hour) + Expect(gc.collect(ctx)).To(Succeed()) + + ta := &flyteorgv1.TaskAction{} + err := k8sClient.Get(ctx, types.NamespacedName{Name: "gc-recent", Namespace: "default"}, ta) + Expect(err).NotTo(HaveOccurred()) + }) + + It("should retain non-terminated TaskActions", func() { + createTaskAction(ctx, "gc-active", nil) + + gc := NewGarbageCollector(k8sClient, 1*time.Minute, 1*time.Hour) + Expect(gc.collect(ctx)).To(Succeed()) + + ta := &flyteorgv1.TaskAction{} + err := k8sClient.Get(ctx, types.NamespacedName{Name: "gc-active", Namespace: "default"}, ta) + Expect(err).NotTo(HaveOccurred()) + }) + + It("should handle empty list gracefully", func() { + gc := NewGarbageCollector(k8sClient, 1*time.Minute, 1*time.Hour) + Expect(gc.collect(ctx)).To(Succeed()) + }) +}) + +var _ = Describe("ensureTerminalLabels", func() { + ctx := context.Background() + + AfterEach(func() { + deleteTaskAction(ctx, "terminal-labels-test") + }) + + It("should patch completed-time when termination-status is set but completed-time is missing", func() { + ta := createTaskAction(ctx, "terminal-missing-time", map[string]string{ + LabelTerminationStatus: LabelValueTerminated, + }) + defer deleteTaskAction(ctx, "terminal-missing-time") + + reconciler := &TaskActionReconciler{ + Client: k8sClient, + Scheme: k8sClient.Scheme(), + } + + Expect(reconciler.ensureTerminalLabels(ctx, ta)).To(Succeed()) + Expect(ta.GetLabels()[LabelTerminationStatus]).To(Equal(LabelValueTerminated)) + Expect(ta.GetLabels()[LabelCompletedTime]).NotTo(BeEmpty()) + }) + + It("should be idempotent", func() { + ta := createTaskAction(ctx, "terminal-labels-test", nil) + + reconciler := &TaskActionReconciler{ + Client: k8sClient, + Scheme: k8sClient.Scheme(), + } + + // First call should set labels + Expect(reconciler.ensureTerminalLabels(ctx, ta)).To(Succeed()) + Expect(ta.GetLabels()[LabelTerminationStatus]).To(Equal(LabelValueTerminated)) + Expect(ta.GetLabels()[LabelCompletedTime]).NotTo(BeEmpty()) + firstCompletedTime := ta.GetLabels()[LabelCompletedTime] + + // Re-fetch to get updated resource version + updated := &flyteorgv1.TaskAction{} + Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "terminal-labels-test", Namespace: "default"}, updated)).To(Succeed()) + + // Second call should be a no-op (labels already set) + Expect(reconciler.ensureTerminalLabels(ctx, updated)).To(Succeed()) + Expect(updated.GetLabels()[LabelCompletedTime]).To(Equal(firstCompletedTime)) + }) +}) diff --git a/executor/pkg/controller/suite_test.go b/executor/pkg/controller/suite_test.go index 4ef1241b40..e5bde42927 100644 --- a/executor/pkg/controller/suite_test.go +++ b/executor/pkg/controller/suite_test.go @@ -26,23 +26,36 @@ import ( . "github.com/onsi/gomega" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" + ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" + metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" flyteorgv1 "github.com/flyteorg/flyte/v2/executor/api/v1" + "github.com/flyteorg/flyte/v2/executor/pkg/plugin" + "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery" + "github.com/flyteorg/flyte/v2/flytestdlib/contextutils" + "github.com/flyteorg/flyte/v2/flytestdlib/promutils" + "github.com/flyteorg/flyte/v2/flytestdlib/promutils/labeled" + "github.com/flyteorg/flyte/v2/flytestdlib/storage" + + // Register the pod plugin so the registry can resolve container/python task types. + _ "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/plugins/k8s/pod" ) // These tests use Ginkgo (BDD-style Go testing framework). Refer to // http://onsi.github.io/ginkgo/ to learn more about Ginkgo. var ( - ctx context.Context - cancel context.CancelFunc - testEnv *envtest.Environment - cfg *rest.Config - k8sClient client.Client + ctx context.Context + cancel context.CancelFunc + testEnv *envtest.Environment + cfg *rest.Config + k8sClient client.Client + pluginRegistry *plugin.Registry + dataStore *storage.DataStore ) func TestControllers(t *testing.T) { @@ -81,6 +94,41 @@ var _ = BeforeSuite(func() { k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme}) Expect(err).NotTo(HaveOccurred()) Expect(k8sClient).NotTo(BeNil()) + + By("setting up controller-runtime manager for plugin registry") + mgr, err := ctrl.NewManager(cfg, ctrl.Options{ + Scheme: scheme.Scheme, + Metrics: metricsserver.Options{ + BindAddress: "0", // disable metrics server in tests + }, + }) + Expect(err).NotTo(HaveOccurred()) + + // Start manager in background — needed so the cache syncs and + // kubeClient.GetClient()/GetCache() work for plugins. + go func() { + defer GinkgoRecover() + Expect(mgr.Start(ctx)).To(Succeed()) + }() + + // Wait for the cache to sync before proceeding. + Expect(mgr.GetCache().WaitForCacheSync(ctx)).To(BeTrue()) + + By("initializing plugin registry with pod plugin") + setupCtx := plugin.NewSetupContext( + mgr, nil, nil, nil, nil, + "TaskAction", + promutils.NewScope("test"), + ) + pluginRegistry = plugin.NewRegistry(setupCtx, pluginmachinery.PluginRegistry()) + Expect(pluginRegistry.Initialize(ctx)).To(Succeed()) + + By("initializing labeled metrics keys") + labeled.SetMetricKeys(contextutils.ProjectKey, contextutils.DomainKey) + + By("creating in-memory data store") + dataStore, err = storage.NewDataStore(&storage.Config{Type: storage.TypeMemory}, promutils.NewScope("test:storage")) + Expect(err).NotTo(HaveOccurred()) }) var _ = AfterSuite(func() { diff --git a/executor/pkg/controller/taskaction_controller.go b/executor/pkg/controller/taskaction_controller.go index 0f904e6119..fefd6e1933 100644 --- a/executor/pkg/controller/taskaction_controller.go +++ b/executor/pkg/controller/taskaction_controller.go @@ -22,8 +22,10 @@ import ( "encoding/json" "fmt" "reflect" + "strings" "time" + "connectrpc.com/connect" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -39,18 +41,33 @@ import ( "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/catalog" pluginsCore "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/core" "github.com/flyteorg/flyte/v2/flytestdlib/storage" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" + core "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/core" + task "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow/workflowconnect" + "google.golang.org/protobuf/types/known/timestamppb" ) const ( TaskActionDefaultRequeueDuration = 5 * time.Second taskActionFinalizer = "flyte.org/plugin-finalizer" + + // LabelTerminationStatus marks a TaskAction as terminated for GC discovery. + LabelTerminationStatus = "flyte.org/termination-status" + // LabelCompletedTime records the UTC time (minute precision) when the TaskAction became terminal. + LabelCompletedTime = "flyte.org/completed-time" + // LabelValueTerminated is the value for LabelTerminationStatus. + LabelValueTerminated = "terminated" + // labelTimeFormat is the time format used for the completed-time label (lexicographically ordered, minute precision). + labelTimeFormat = "2006-01-02.15-04" ) type K8sEventType string const ( FailedUnmarshal K8sEventType = "FailedUnmarshal" + FailedValidation K8sEventType = "FailedValidation" FailedPluginResolve K8sEventType = "FailedPluginResolve" FailedPluginHandle K8sEventType = "FailedPluginHandle" ) @@ -65,6 +82,8 @@ type TaskActionReconciler struct { SecretManager pluginsCore.SecretManager ResourceManager pluginsCore.ResourceManager CatalogClient catalog.AsyncClient + eventsClient workflowconnect.EventsProxyServiceClient + cluster string } // NewTaskActionReconciler creates a new TaskActionReconciler @@ -73,12 +92,16 @@ func NewTaskActionReconciler( scheme *runtime.Scheme, registry *plugin.Registry, dataStore *storage.DataStore, + eventsClient workflowconnect.EventsProxyServiceClient, + cluster string, ) *TaskActionReconciler { return &TaskActionReconciler{ Client: c, Scheme: scheme, PluginRegistry: registry, DataStore: dataStore, + eventsClient: eventsClient, + cluster: cluster, } } @@ -98,7 +121,7 @@ func (r *TaskActionReconciler) Reconcile(ctx context.Context, req ctrl.Request) return ctrl.Result{}, client.IgnoreNotFound(err) } - // Please do NOT modify `originalTaskActionInstance` in the following code. This is for checking + // Please do NOT modify `originalTaskActionInstance` in the following code. This is for checking // if the TaskAction instance changes originalTaskActionInstance := taskAction.DeepCopy() @@ -109,23 +132,29 @@ func (r *TaskActionReconciler) Reconcile(ctx context.Context, req ctrl.Request) // Check terminal conditions -- short-circuit if isTerminal(taskAction) { + if err := r.ensureTerminalLabels(ctx, taskAction); err != nil { + return ctrl.Result{}, err + } return ctrl.Result{}, nil } - // Validate required spec fields before proceeding - if err := validateSpec(taskAction); err != nil { - logger.Error(err, "TaskAction spec is invalid") - r.Recorder.Eventf(taskAction, corev1.EventTypeWarning, string(flyteorgv1.ConditionReasonInvalidSpec), - "Invalid spec: %v", err) - setCondition(taskAction, flyteorgv1.ConditionTypeFailed, metav1.ConditionTrue, - flyteorgv1.ConditionReasonInvalidSpec, err.Error()) - setCondition(taskAction, flyteorgv1.ConditionTypeProgressing, metav1.ConditionFalse, - flyteorgv1.ConditionReasonInvalidSpec, err.Error()) + // Validate spec fields and resolve plugin before adding the finalizer + // If either fails, the resource is marked terminal and not requeued — no finalizer to clean up + p, reason, err := validateTaskAction(taskAction, r.PluginRegistry) + if err != nil { + logger.Error(err, "TaskAction validation failed") + eventType := FailedValidation + if reason == flyteorgv1.ConditionReasonPluginNotFound { + eventType = FailedPluginResolve + } + r.Recorder.Eventf(taskAction, corev1.EventTypeWarning, string(eventType), "%v", err) + setCondition(taskAction, flyteorgv1.ConditionTypeFailed, metav1.ConditionTrue, reason, err.Error()) + setCondition(taskAction, flyteorgv1.ConditionTypeProgressing, metav1.ConditionFalse, reason, err.Error()) _ = r.Status().Update(ctx, taskAction) return ctrl.Result{}, nil // terminal — do not requeue } - // Ensure finalizer is present + // Ensure finalizer is present (once validation passes) if !controllerutil.ContainsFinalizer(taskAction, taskActionFinalizer) { controllerutil.AddFinalizer(taskAction, taskActionFinalizer) if err := r.Update(ctx, taskAction); err != nil { @@ -135,23 +164,6 @@ func (r *TaskActionReconciler) Reconcile(ctx context.Context, req ctrl.Request) return ctrl.Result{}, nil } - // Resolve plugin from registry - p, err := r.PluginRegistry.ResolvePlugin(taskAction.Spec.TaskType) - if err != nil { - logger.Error(err, "failed to resolve plugin", "taskType", taskAction.Spec.TaskType) - r.Recorder.Eventf(taskAction, corev1.EventTypeWarning, string(FailedPluginResolve), - "No plugin found for task type %q: %v", taskAction.Spec.TaskType, err) - setCondition(taskAction, flyteorgv1.ConditionTypeFailed, metav1.ConditionTrue, - flyteorgv1.ConditionReasonPluginNotFound, err.Error()) - setCondition(taskAction, flyteorgv1.ConditionTypeProgressing, metav1.ConditionFalse, - flyteorgv1.ConditionReasonPluginNotFound, err.Error()) - err = r.Status().Update(ctx, taskAction) - if err != nil { - return ctrl.Result{}, err - } - return ctrl.Result{}, nil - } - // Build PluginStateManager from persisted state stateMgr := plugin.NewPluginStateManager( taskAction.Status.PluginState, @@ -200,13 +212,45 @@ func (r *TaskActionReconciler) Reconcile(ctx context.Context, req ctrl.Request) taskAction.Status.PluginPhase = phaseInfo.Phase().String() taskAction.Status.PluginPhaseVersion = phaseInfo.Version() - if err := r.updateTaskActionStatus(ctx, originalTaskActionInstance, taskAction); err != nil { + if err := r.updateTaskActionStatus(ctx, originalTaskActionInstance, taskAction, phaseInfo); err != nil { return ctrl.Result{}, err } + // If the TaskAction just became terminal, stamp GC labels + if isTerminal(taskAction) { + if err := r.ensureTerminalLabels(ctx, taskAction); err != nil { + return ctrl.Result{}, err + } + } + return ctrl.Result{RequeueAfter: TaskActionDefaultRequeueDuration}, nil } +// ensureTerminalLabels adds GC-related labels to a terminal TaskAction if not already present. +// This is idempotent — if the labels are already set, it's a no-op. +// Uses a MergeFrom patch instead of a full Update to reduce conflict surface with concurrent reconciles. +func (r *TaskActionReconciler) ensureTerminalLabels(ctx context.Context, taskAction *flyteorgv1.TaskAction) error { + labels := taskAction.GetLabels() + if labels != nil && labels[LabelTerminationStatus] == LabelValueTerminated && labels[LabelCompletedTime] != "" { + return nil // already labeled + } + + patch := client.MergeFrom(taskAction.DeepCopy()) + + if labels == nil { + labels = make(map[string]string) + } + labels[LabelTerminationStatus] = LabelValueTerminated + labels[LabelCompletedTime] = terminalTransitionTime(taskAction).Format(labelTimeFormat) + taskAction.SetLabels(labels) + + if err := r.Patch(ctx, taskAction, patch); err != nil { + log.FromContext(ctx).Error(err, "failed to set terminal labels on TaskAction") + return err + } + return nil +} + // handleAbortAndFinalize handles the deletion of a TaskAction by aborting and finalizing the plugin. func (r *TaskActionReconciler) handleAbortAndFinalize(ctx context.Context, taskAction *flyteorgv1.TaskAction) (ctrl.Result, error) { logger := log.FromContext(ctx) @@ -259,20 +303,176 @@ func (r *TaskActionReconciler) removeFinalizer(ctx context.Context, taskAction * // updateTaskActionStatus updates the TaskAction status only when the status has changed, // avoiding unnecessary API calls for unchanged state. -func (r *TaskActionReconciler) updateTaskActionStatus(ctx context.Context, oldTaskAction, newTaskAction *flyteorgv1.TaskAction) error { +func (r *TaskActionReconciler) updateTaskActionStatus( + ctx context.Context, + oldTaskAction, newTaskAction *flyteorgv1.TaskAction, + phaseInfo pluginsCore.PhaseInfo, +) error { logger := log.FromContext(ctx) if !taskActionStatusChanged(oldTaskAction.Status, newTaskAction.Status) { return nil } + actionEvent := r.buildActionEvent(newTaskAction, phaseInfo) + if _, err := r.eventsClient.Record(ctx, connect.NewRequest(&workflow.RecordRequest{ + Events: []*workflow.ActionEvent{actionEvent}, + })); err != nil { + r.Recorder.Eventf( + newTaskAction, + corev1.EventTypeWarning, + "ActionEventPublishFailed", + "Failed to persist action event %q: %v", + actionEvent.GetId().GetName(), + err, + ) + logger.Error(err, "failed to persist action event", "action", actionEvent.GetId().GetName()) + return err + } + logger.Info("updateTaskActionStatus", "name", oldTaskAction.Name, "old status", oldTaskAction.Status, "new status", newTaskAction.Status) - err := r.Status().Update(ctx, newTaskAction) - if err != nil { + if err := r.Status().Update(ctx, newTaskAction); err != nil { logger.Error(err, "Error updating status", "name", oldTaskAction.Name, "error", err, "TaskAction", newTaskAction) + return err + } + + return nil +} + +func (r *TaskActionReconciler) buildActionEvent( + taskAction *flyteorgv1.TaskAction, + phaseInfo pluginsCore.PhaseInfo, +) *workflow.ActionEvent { + actionID := &common.ActionIdentifier{ + Run: &common.RunIdentifier{ + Org: taskAction.Spec.Org, + Project: taskAction.Spec.Project, + Domain: taskAction.Spec.Domain, + Name: taskAction.Spec.RunName, + }, + Name: taskAction.Spec.ActionName, + } + + info := phaseInfo.Info() + updatedTime := updatedTimestamp(info, taskAction.Status.PhaseHistory) + reportedTime := reportedTimestamp(info) + + event := &workflow.ActionEvent{ + Id: actionID, + Attempt: 1, // TODO(nary): wire retry attempt once retry state is available in executor status. + Phase: phaseToActionPhase(phaseInfo.Phase()), + Version: phaseInfo.Version(), + UpdatedTime: updatedTime, + ErrorInfo: toActionErrorInfo(phaseInfo.Err()), + Cluster: r.cluster, + Outputs: outputRefs(taskAction.Spec.RunOutputBase, taskAction.Spec.ActionName), + ClusterEvents: toClusterEvents(info, updatedTime), + ReportedTime: reportedTime, + } + + if info != nil { + event.LogInfo = info.Logs + event.LogContext = info.LogContext + event.CacheStatus = cacheStatusFromExternalResources(info.ExternalResources) + } + + return event +} + +func updatedTimestamp(info *pluginsCore.TaskInfo, history []flyteorgv1.PhaseTransition) *timestamppb.Timestamp { + if info != nil && info.OccurredAt != nil { + return timestamppb.New(*info.OccurredAt) + } + if n := len(history); n > 0 { + return timestamppb.New(history[n-1].OccurredAt.Time) + } + return nil +} + +func reportedTimestamp(info *pluginsCore.TaskInfo) *timestamppb.Timestamp { + if info != nil && info.ReportedAt != nil { + return timestamppb.New(*info.ReportedAt) + } + return timestamppb.Now() +} + +func outputRefs(runOutputBase, actionName string) *task.OutputReferences { + if runOutputBase == "" { + return nil + } + return &task.OutputReferences{ + OutputUri: strings.TrimRight(runOutputBase, "/") + "/" + actionName, + } +} + +func phaseToActionPhase(phase pluginsCore.Phase) common.ActionPhase { + switch phase { + case pluginsCore.PhaseNotReady, pluginsCore.PhaseQueued: + return common.ActionPhase_ACTION_PHASE_QUEUED + case pluginsCore.PhaseWaitingForResources, pluginsCore.PhaseWaitingForCache: + return common.ActionPhase_ACTION_PHASE_WAITING_FOR_RESOURCES + case pluginsCore.PhaseInitializing: + return common.ActionPhase_ACTION_PHASE_INITIALIZING + case pluginsCore.PhaseRunning: + return common.ActionPhase_ACTION_PHASE_RUNNING + case pluginsCore.PhaseSuccess: + return common.ActionPhase_ACTION_PHASE_SUCCEEDED + case pluginsCore.PhaseRetryableFailure, pluginsCore.PhasePermanentFailure: + return common.ActionPhase_ACTION_PHASE_FAILED + case pluginsCore.PhaseAborted: + return common.ActionPhase_ACTION_PHASE_ABORTED + default: + return common.ActionPhase_ACTION_PHASE_UNSPECIFIED + } +} + +func toActionErrorInfo(err *core.ExecutionError) *workflow.ErrorInfo { + if err == nil { + return nil + } + out := &workflow.ErrorInfo{ + Message: err.GetMessage(), + Kind: workflow.ErrorInfo_KIND_UNSPECIFIED, + } + switch err.GetKind() { + case core.ExecutionError_USER: + out.Kind = workflow.ErrorInfo_KIND_USER + case core.ExecutionError_SYSTEM: + out.Kind = workflow.ErrorInfo_KIND_SYSTEM + } + return out +} + +func toClusterEvents(info *pluginsCore.TaskInfo, fallbackTime *timestamppb.Timestamp) []*workflow.ClusterEvent { + if info == nil || len(info.AdditionalReasons) == 0 { + return nil + } + out := make([]*workflow.ClusterEvent, 0, len(info.AdditionalReasons)) + for _, reason := range info.AdditionalReasons { + e := &workflow.ClusterEvent{ + Message: reason.Reason, + } + if reason.OccurredAt != nil { + e.OccurredAt = timestamppb.New(*reason.OccurredAt) + } else { + e.OccurredAt = fallbackTime + } + out = append(out, e) } + return out +} - return err +func cacheStatusFromExternalResources(resources []*pluginsCore.ExternalResource) core.CatalogCacheStatus { + for _, resource := range resources { + if resource == nil { + continue + } + // Return the first explicit cache status signal. + if resource.CacheStatus != core.CatalogCacheStatus_CACHE_DISABLED { + return resource.CacheStatus + } + } + return core.CatalogCacheStatus_CACHE_DISABLED } // taskActionStatusChanged reports whether any status field has changed between old and new, @@ -379,6 +579,23 @@ func isTerminal(ta *flyteorgv1.TaskAction) bool { return false } +// terminalTransitionTime returns the LastTransitionTime from the terminal condition +// (Succeeded or Failed). Falls back to time.Now().UTC() if no transition time is found. +func terminalTransitionTime(ta *flyteorgv1.TaskAction) time.Time { + for _, cond := range ta.Status.Conditions { + if cond.Status != metav1.ConditionTrue { + continue + } + if cond.Type == string(flyteorgv1.ConditionTypeSucceeded) || cond.Type == string(flyteorgv1.ConditionTypeFailed) { + if !cond.LastTransitionTime.IsZero() { + return cond.LastTransitionTime.UTC() + } + break + } + } + return time.Now().UTC() +} + // createStateJSON creates a simplified state JSON for observability. func createStateJSON(actionSpec *workflow.ActionSpec, phase string) string { state := map[string]interface{}{ @@ -403,9 +620,31 @@ func (r *TaskActionReconciler) SetupWithManager(mgr ctrl.Manager) error { Complete(r) } -// validateSpec checks that the TaskAction spec has all required fields populated. -func validateSpec(taskAction *flyteorgv1.TaskAction) error { +// pluginResolver is satisfied by *plugin.Registry and allows mocking in tests. +type pluginResolver interface { + ResolvePlugin(taskType string) (pluginsCore.Plugin, error) +} + +// validateTaskAction checks that all required spec fields are populated and that a plugin +// is registered for the given task type. Both checks happen before the finalizer is added, +// so a failure here leaves the resource finalizer-free and trivially deletable. +func validateTaskAction(taskAction *flyteorgv1.TaskAction, registry pluginResolver) (pluginsCore.Plugin, flyteorgv1.TaskActionConditionReason, error) { var missing []string + if taskAction.Spec.RunName == "" { + missing = append(missing, "runName") + } + if taskAction.Spec.Org == "" { + missing = append(missing, "org") + } + if taskAction.Spec.Project == "" { + missing = append(missing, "project") + } + if taskAction.Spec.Domain == "" { + missing = append(missing, "domain") + } + if taskAction.Spec.ActionName == "" { + missing = append(missing, "actionName") + } if taskAction.Spec.TaskType == "" { missing = append(missing, "taskType") } @@ -419,9 +658,17 @@ func validateSpec(taskAction *flyteorgv1.TaskAction) error { missing = append(missing, "runOutputBase") } if len(missing) > 0 { - return fmt.Errorf("required spec fields are empty: %v", missing) + return nil, flyteorgv1.ConditionReasonInvalidSpec, + fmt.Errorf("required spec fields are empty: %v", missing) } - return nil + + p, err := registry.ResolvePlugin(taskAction.Spec.TaskType) + if err != nil { + return nil, flyteorgv1.ConditionReasonPluginNotFound, + fmt.Errorf("no plugin found for task type %q: %w", taskAction.Spec.TaskType, err) + } + + return p, "", nil } // setCondition sets or updates a condition on the TaskAction. diff --git a/executor/pkg/controller/taskaction_controller_test.go b/executor/pkg/controller/taskaction_controller_test.go index 24ff885f3e..87cebe6cb5 100644 --- a/executor/pkg/controller/taskaction_controller_test.go +++ b/executor/pkg/controller/taskaction_controller_test.go @@ -19,16 +19,60 @@ package controller import ( "context" + "connectrpc.com/connect" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "google.golang.org/protobuf/proto" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "sigs.k8s.io/controller-runtime/pkg/reconcile" flyteorgv1 "github.com/flyteorg/flyte/v2/executor/api/v1" + pluginsCore "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/core" + k8sPlugin "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/k8s" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/core" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" ) +// fakeEventsClient is a no-op implementation of EventsProxyServiceClient for tests. +type fakeEventsClient struct{} + +func (f *fakeEventsClient) Record(_ context.Context, _ *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) { + return connect.NewResponse(&workflow.RecordResponse{}), nil +} + +// buildTaskTemplateBytes creates a minimal protobuf-serialized TaskTemplate +// with a container spec that the pod plugin can use to build a Pod. +func buildTaskTemplateBytes(taskType, image string) []byte { + tmpl := &core.TaskTemplate{ + Type: taskType, + Target: &core.TaskTemplate_Container{ + Container: &core.Container{ + Image: image, + Command: []string{"echo"}, + Args: []string{"hello"}, + }, + }, + Metadata: &core.TaskMetadata{ + Runtime: &core.RuntimeMetadata{ + Type: core.RuntimeMetadata_FLYTE_SDK, + }, + }, + Interface: &core.TypedInterface{}, + } + data, err := proto.Marshal(tmpl) + Expect(err).NotTo(HaveOccurred()) + return data +} + +// emptyPluginRegistry satisfies plugin.PluginRegistryIface with no registered plugins. +type emptyPluginRegistry struct{} + +func (emptyPluginRegistry) GetCorePlugins() []pluginsCore.PluginEntry { return nil } +func (emptyPluginRegistry) GetK8sPlugins() []k8sPlugin.PluginEntry { return nil } + var _ = Describe("TaskAction Controller", func() { Context("When reconciling a resource", func() { const resourceName = "test-resource" @@ -37,7 +81,7 @@ var _ = Describe("TaskAction Controller", func() { typeNamespacedName := types.NamespacedName{ Name: resourceName, - Namespace: "default", // TODO(user):Modify as needed + Namespace: "default", } taskaction := &flyteorgv1.TaskAction{} @@ -58,6 +102,8 @@ var _ = Describe("TaskAction Controller", func() { ActionName: "test-action", InputURI: "/tmp/input", RunOutputBase: "/tmp/output", + TaskType: "python-task", + TaskTemplate: buildTaskTemplateBytes("python-task", "python:3.11"), }, } Expect(k8sClient.Create(ctx, resource)).To(Succeed()) @@ -73,9 +119,98 @@ var _ = Describe("TaskAction Controller", func() { By("Cleanup the specific resource instance TaskAction") Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) }) + It("should successfully reconcile the resource", func() { By("Reconciling the created resource") + controllerReconciler := &TaskActionReconciler{ + Client: k8sClient, + Scheme: k8sClient.Scheme(), + Recorder: record.NewFakeRecorder(10), + PluginRegistry: pluginRegistry, + DataStore: dataStore, + eventsClient: &fakeEventsClient{}, + } + + _, err := controllerReconciler.Reconcile(ctx, reconcile.Request{ + NamespacedName: typeNamespacedName, + }) + Expect(err).NotTo(HaveOccurred()) + + // After the first reconciliation the controller should have added + // a finalizer and/or set conditions on the TaskAction status. + updatedTaskAction := &flyteorgv1.TaskAction{} + err = k8sClient.Get(ctx, typeNamespacedName, updatedTaskAction) + Expect(err).NotTo(HaveOccurred()) + + // The first reconcile adds the finalizer; a second reconcile + // drives the plugin Handle path which sets conditions. + _, err = controllerReconciler.Reconcile(ctx, reconcile.Request{ + NamespacedName: typeNamespacedName, + }) + Expect(err).NotTo(HaveOccurred()) + + err = k8sClient.Get(ctx, typeNamespacedName, updatedTaskAction) + Expect(err).NotTo(HaveOccurred()) + Expect(updatedTaskAction.Status.Conditions).NotTo(BeEmpty()) + }) + }) + + Context("When reconciling a terminal TaskAction", func() { + const terminalResourceName = "terminal-test-resource" + + ctx := context.Background() + + typeNamespacedName := types.NamespacedName{ + Name: terminalResourceName, + Namespace: "default", + } + + BeforeEach(func() { + By("creating a terminal TaskAction") + resource := &flyteorgv1.TaskAction{ + ObjectMeta: metav1.ObjectMeta{ + Name: terminalResourceName, + Namespace: "default", + }, + Spec: flyteorgv1.TaskActionSpec{ + RunName: "test-run", + Org: "test-org", + Project: "test-project", + Domain: "test-domain", + ActionName: "test-action", + InputURI: "/tmp/input", + RunOutputBase: "/tmp/output", + TaskType: "python-task", + TaskTemplate: buildTaskTemplateBytes("python-task", "python:3.11"), + }, + } + Expect(k8sClient.Create(ctx, resource)).To(Succeed()) + + // Set terminal condition on status + resource.Status.Conditions = []metav1.Condition{ + { + Type: string(flyteorgv1.ConditionTypeSucceeded), + Status: metav1.ConditionTrue, + Reason: string(flyteorgv1.ConditionReasonCompleted), + Message: "TaskAction completed successfully", + LastTransitionTime: metav1.Now(), + }, + } + Expect(k8sClient.Status().Update(ctx, resource)).To(Succeed()) + }) + + AfterEach(func() { + resource := &flyteorgv1.TaskAction{} + err := k8sClient.Get(ctx, typeNamespacedName, resource) + if err == nil { + Expect(k8sClient.Delete(ctx, resource)).To(Succeed()) + } + }) + + It("should set GC labels on terminal TaskAction", func() { + By("Reconciling the terminal resource") + controllerReconciler := &TaskActionReconciler{ Client: k8sClient, Scheme: k8sClient.Scheme(), @@ -86,11 +221,12 @@ var _ = Describe("TaskAction Controller", func() { }) Expect(err).NotTo(HaveOccurred()) - // Verify that the TaskAction was updated with a condition + // Verify GC labels are set updatedTaskAction := &flyteorgv1.TaskAction{} err = k8sClient.Get(ctx, typeNamespacedName, updatedTaskAction) Expect(err).NotTo(HaveOccurred()) - Expect(updatedTaskAction.Status.Conditions).NotTo(BeEmpty()) + Expect(updatedTaskAction.GetLabels()).To(HaveKeyWithValue(LabelTerminationStatus, LabelValueTerminated)) + Expect(updatedTaskAction.GetLabels()).To(HaveKey(LabelCompletedTime)) }) }) }) diff --git a/executor/pkg/controller/taskaction_validation_test.go b/executor/pkg/controller/taskaction_validation_test.go new file mode 100644 index 0000000000..517a7dcacd --- /dev/null +++ b/executor/pkg/controller/taskaction_validation_test.go @@ -0,0 +1,113 @@ +package controller + +import ( + "context" + "fmt" + "strings" + "testing" + + flyteorgv1 "github.com/flyteorg/flyte/v2/executor/api/v1" + pluginsCore "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/core" +) + +// mockPluginResolver is a test double for pluginResolver. +type mockPluginResolver struct { + plugin pluginsCore.Plugin + err error +} + +func (m *mockPluginResolver) ResolvePlugin(_ string) (pluginsCore.Plugin, error) { + return m.plugin, m.err +} + +// mockPlugin is a minimal pluginsCore.Plugin implementation for tests. +type mockPlugin struct{} + +func (mockPlugin) GetID() string { return "mock" } +func (mockPlugin) GetProperties() pluginsCore.PluginProperties { return pluginsCore.PluginProperties{} } +func (mockPlugin) Handle(_ context.Context, _ pluginsCore.TaskExecutionContext) (pluginsCore.Transition, error) { + return pluginsCore.Transition{}, nil +} +func (mockPlugin) Abort(_ context.Context, _ pluginsCore.TaskExecutionContext) error { return nil } +func (mockPlugin) Finalize(_ context.Context, _ pluginsCore.TaskExecutionContext) error { return nil } + +func validTaskAction() *flyteorgv1.TaskAction { + return &flyteorgv1.TaskAction{ + Spec: flyteorgv1.TaskActionSpec{ + RunName: "my-run", + Org: "my-org", + Project: "my-project", + Domain: "my-domain", + ActionName: "my-action", + TaskType: "container", + TaskTemplate: []byte(`{}`), + InputURI: "s3://bucket/input", + RunOutputBase: "s3://bucket/output", + }, + } +} + +func TestValidateTaskAction_ValidSpec(t *testing.T) { + resolver := &mockPluginResolver{plugin: mockPlugin{}} + p, reason, err := validateTaskAction(validTaskAction(), resolver) + if err != nil { + t.Fatalf("expected no error, got: %v", err) + } + if reason != "" { + t.Fatalf("expected empty reason, got: %q", reason) + } + if p == nil { + t.Fatal("expected non-nil plugin") + } +} + +func TestValidateTaskAction_MissingFields(t *testing.T) { + cases := []struct { + name string + mutate func(*flyteorgv1.TaskAction) + expectedField string + }{ + {"missing runName", func(ta *flyteorgv1.TaskAction) { ta.Spec.RunName = "" }, "runName"}, + {"missing org", func(ta *flyteorgv1.TaskAction) { ta.Spec.Org = "" }, "org"}, + {"missing project", func(ta *flyteorgv1.TaskAction) { ta.Spec.Project = "" }, "project"}, + {"missing domain", func(ta *flyteorgv1.TaskAction) { ta.Spec.Domain = "" }, "domain"}, + {"missing actionName", func(ta *flyteorgv1.TaskAction) { ta.Spec.ActionName = "" }, "actionName"}, + {"missing taskType", func(ta *flyteorgv1.TaskAction) { ta.Spec.TaskType = "" }, "taskType"}, + {"missing taskTemplate", func(ta *flyteorgv1.TaskAction) { ta.Spec.TaskTemplate = nil }, "taskTemplate"}, + {"missing inputUri", func(ta *flyteorgv1.TaskAction) { ta.Spec.InputURI = "" }, "inputUri"}, + {"missing runOutputBase", func(ta *flyteorgv1.TaskAction) { ta.Spec.RunOutputBase = "" }, "runOutputBase"}, + } + + resolver := &mockPluginResolver{plugin: mockPlugin{}} + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + ta := validTaskAction() + tc.mutate(ta) + _, reason, err := validateTaskAction(ta, resolver) + if err == nil { + t.Fatal("expected error, got nil") + } + if !strings.Contains(err.Error(), tc.expectedField) { + t.Errorf("expected error to mention %q, got: %v", tc.expectedField, err) + } + if reason != flyteorgv1.ConditionReasonInvalidSpec { + t.Errorf("expected reason %q, got %q", flyteorgv1.ConditionReasonInvalidSpec, reason) + } + }) + } +} + +func TestValidateTaskAction_PluginNotFound(t *testing.T) { + resolver := &mockPluginResolver{ + plugin: nil, + err: fmt.Errorf("no plugin registered for task type %q", "container"), + } + _, reason, err := validateTaskAction(validTaskAction(), resolver) + if err == nil { + t.Fatal("expected error, got nil") + } + if reason != flyteorgv1.ConditionReasonPluginNotFound { + t.Errorf("expected reason %q, got %q", flyteorgv1.ConditionReasonPluginNotFound, reason) + } +} diff --git a/executor/pkg/plugin/setup_context.go b/executor/pkg/plugin/setup_context.go index 050bf5c1a9..a2c2f69028 100644 --- a/executor/pkg/plugin/setup_context.go +++ b/executor/pkg/plugin/setup_context.go @@ -38,10 +38,10 @@ func NewSetupContext( } } -func (s *setupContext) EnqueueOwner() pluginsCore.EnqueueOwner { return s.enqueueOwner } -func (s *setupContext) IncludeEnqueueLabels() []string { return s.enqueueLabels } -func (s *setupContext) OwnerKind() string { return s.ownerKind } -func (s *setupContext) MetricsScope() promutils.Scope { return s.metricsScope } -func (s *setupContext) KubeClient() pluginsCore.KubeClient { return s.kubeClient } -func (s *setupContext) SecretManager() pluginsCore.SecretManager { return s.secretManager } +func (s *setupContext) EnqueueOwner() pluginsCore.EnqueueOwner { return s.enqueueOwner } +func (s *setupContext) IncludeEnqueueLabels() []string { return s.enqueueLabels } +func (s *setupContext) OwnerKind() string { return s.ownerKind } +func (s *setupContext) MetricsScope() promutils.Scope { return s.metricsScope } +func (s *setupContext) KubeClient() pluginsCore.KubeClient { return s.kubeClient } +func (s *setupContext) SecretManager() pluginsCore.SecretManager { return s.secretManager } func (s *setupContext) ResourceRegistrar() pluginsCore.ResourceRegistrar { return s.resourceRegistrar } diff --git a/executor/pkg/plugin/task_exec_context.go b/executor/pkg/plugin/task_exec_context.go index f2b5ac377e..9684965217 100644 --- a/executor/pkg/plugin/task_exec_context.go +++ b/executor/pkg/plugin/task_exec_context.go @@ -7,8 +7,8 @@ import ( "google.golang.org/protobuf/proto" flyteorgv1 "github.com/flyteorg/flyte/v2/executor/api/v1" - pluginsCore "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/core" "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/catalog" + pluginsCore "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/core" "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/io" "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery/ioutils" "github.com/flyteorg/flyte/v2/flytestdlib/storage" @@ -31,17 +31,27 @@ type taskExecutionContext struct { catalogClient catalog.AsyncClient } -func (t *taskExecutionContext) ResourceManager() pluginsCore.ResourceManager { return t.resourceManager } -func (t *taskExecutionContext) SecretManager() pluginsCore.SecretManager { return t.secretManager } -func (t *taskExecutionContext) TaskRefreshIndicator() pluginsCore.SignalAsync { return t.taskRefreshIndicator } -func (t *taskExecutionContext) DataStore() *storage.DataStore { return t.dataStore } -func (t *taskExecutionContext) PluginStateReader() pluginsCore.PluginStateReader { return t.pluginStateReader } -func (t *taskExecutionContext) PluginStateWriter() pluginsCore.PluginStateWriter { return t.pluginStateWriter } -func (t *taskExecutionContext) TaskReader() pluginsCore.TaskReader { return t.taskReader } -func (t *taskExecutionContext) InputReader() io.InputReader { return t.inputReader } -func (t *taskExecutionContext) TaskExecutionMetadata() pluginsCore.TaskExecutionMetadata { return t.taskExecMetadata } -func (t *taskExecutionContext) OutputWriter() io.OutputWriter { return t.outputWriter } -func (t *taskExecutionContext) Catalog() catalog.AsyncClient { return t.catalogClient } +func (t *taskExecutionContext) ResourceManager() pluginsCore.ResourceManager { + return t.resourceManager +} +func (t *taskExecutionContext) SecretManager() pluginsCore.SecretManager { return t.secretManager } +func (t *taskExecutionContext) TaskRefreshIndicator() pluginsCore.SignalAsync { + return t.taskRefreshIndicator +} +func (t *taskExecutionContext) DataStore() *storage.DataStore { return t.dataStore } +func (t *taskExecutionContext) PluginStateReader() pluginsCore.PluginStateReader { + return t.pluginStateReader +} +func (t *taskExecutionContext) PluginStateWriter() pluginsCore.PluginStateWriter { + return t.pluginStateWriter +} +func (t *taskExecutionContext) TaskReader() pluginsCore.TaskReader { return t.taskReader } +func (t *taskExecutionContext) InputReader() io.InputReader { return t.inputReader } +func (t *taskExecutionContext) TaskExecutionMetadata() pluginsCore.TaskExecutionMetadata { + return t.taskExecMetadata +} +func (t *taskExecutionContext) OutputWriter() io.OutputWriter { return t.outputWriter } +func (t *taskExecutionContext) Catalog() catalog.AsyncClient { return t.catalogClient } // inlineTaskReader reads a TaskTemplate from bytes stored inline in the CRD. type inlineTaskReader struct { diff --git a/executor/pkg/plugin/task_exec_metadata.go b/executor/pkg/plugin/task_exec_metadata.go index 82b175f051..65399dbb98 100644 --- a/executor/pkg/plugin/task_exec_metadata.go +++ b/executor/pkg/plugin/task_exec_metadata.go @@ -119,18 +119,20 @@ func buildOverridesFromTaskTemplate(data []byte) *taskOverrides { return &taskOverrides{resources: res} } -func (m *taskExecutionMetadata) GetOwnerID() types.NamespacedName { return m.ownerID } -func (m *taskExecutionMetadata) GetTaskExecutionID() pluginsCore.TaskExecutionID { return m.taskExecutionID } -func (m *taskExecutionMetadata) GetNamespace() string { return m.namespace } -func (m *taskExecutionMetadata) GetOwnerReference() metav1.OwnerReference { return m.ownerReference } -func (m *taskExecutionMetadata) GetLabels() map[string]string { return m.labels } -func (m *taskExecutionMetadata) GetAnnotations() map[string]string { return m.annotations } -func (m *taskExecutionMetadata) GetMaxAttempts() uint32 { return m.maxAttempts } -func (m *taskExecutionMetadata) GetK8sServiceAccount() string { return "" } -func (m *taskExecutionMetadata) IsInterruptible() bool { return false } -func (m *taskExecutionMetadata) GetInterruptibleFailureThreshold() int32 { return 0 } -func (m *taskExecutionMetadata) GetEnvironmentVariables() map[string]string { return m.envVars } -func (m *taskExecutionMetadata) GetConsoleURL() string { return "" } +func (m *taskExecutionMetadata) GetOwnerID() types.NamespacedName { return m.ownerID } +func (m *taskExecutionMetadata) GetTaskExecutionID() pluginsCore.TaskExecutionID { + return m.taskExecutionID +} +func (m *taskExecutionMetadata) GetNamespace() string { return m.namespace } +func (m *taskExecutionMetadata) GetOwnerReference() metav1.OwnerReference { return m.ownerReference } +func (m *taskExecutionMetadata) GetLabels() map[string]string { return m.labels } +func (m *taskExecutionMetadata) GetAnnotations() map[string]string { return m.annotations } +func (m *taskExecutionMetadata) GetMaxAttempts() uint32 { return m.maxAttempts } +func (m *taskExecutionMetadata) GetK8sServiceAccount() string { return "" } +func (m *taskExecutionMetadata) IsInterruptible() bool { return false } +func (m *taskExecutionMetadata) GetInterruptibleFailureThreshold() int32 { return 0 } +func (m *taskExecutionMetadata) GetEnvironmentVariables() map[string]string { return m.envVars } +func (m *taskExecutionMetadata) GetConsoleURL() string { return "" } func (m *taskExecutionMetadata) GetOverrides() pluginsCore.TaskOverrides { return m.overrides @@ -153,9 +155,9 @@ type taskOverrides struct { resources *v1.ResourceRequirements } -func (t *taskOverrides) GetResources() *v1.ResourceRequirements { return t.resources } +func (t *taskOverrides) GetResources() *v1.ResourceRequirements { return t.resources } func (t *taskOverrides) GetExtendedResources() *core.ExtendedResources { return nil } -func (t *taskOverrides) GetContainerImage() string { return "" } -func (t *taskOverrides) GetConfigMap() *v1.ConfigMap { return nil } -func (t *taskOverrides) GetPodTemplate() *core.K8SPod { return nil } -func (t *taskOverrides) GetConfig() map[string]string { return nil } +func (t *taskOverrides) GetContainerImage() string { return "" } +func (t *taskOverrides) GetConfigMap() *v1.ConfigMap { return nil } +func (t *taskOverrides) GetPodTemplate() *core.K8SPod { return nil } +func (t *taskOverrides) GetConfig() map[string]string { return nil } diff --git a/executor/setup.go b/executor/setup.go index e8734929c8..f2e55ced6d 100644 --- a/executor/setup.go +++ b/executor/setup.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "fmt" + "net/http" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -23,6 +24,7 @@ import ( "github.com/flyteorg/flyte/v2/flyteplugins/go/tasks/pluginmachinery" "github.com/flyteorg/flyte/v2/flytestdlib/promutils" "github.com/flyteorg/flyte/v2/flytestdlib/storage" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow/workflowconnect" // Plugin registrations — blank imports trigger init() which registers // plugins with the global registry. @@ -105,14 +107,30 @@ func Setup(ctx context.Context, sc *app.SetupContext) error { return fmt.Errorf("executor: failed to initialize plugin registry: %w", err) } + eventsServiceURL := sc.BaseURL + if eventsServiceURL == "" { + eventsServiceURL = cfg.EventsServiceURL + } + eventsClient := workflowconnect.NewEventsProxyServiceClient(http.DefaultClient, eventsServiceURL) + reconciler := controller.NewTaskActionReconciler( - mgr.GetClient(), mgr.GetScheme(), registry, dataStore, + mgr.GetClient(), mgr.GetScheme(), registry, dataStore, eventsClient, cfg.Cluster, ) reconciler.Recorder = mgr.GetEventRecorderFor("taskaction-controller") if err := reconciler.SetupWithManager(mgr); err != nil { return fmt.Errorf("executor: failed to setup controller: %w", err) } + if cfg.GC.Interval.Duration > 0 { + if cfg.GC.MaxTTL.Duration <= 0 { + return fmt.Errorf("executor: gc.maxTTL must be positive when gc is enabled, got %v", cfg.GC.MaxTTL.Duration) + } + gc := controller.NewGarbageCollector(mgr.GetClient(), cfg.GC.Interval.Duration, cfg.GC.MaxTTL.Duration) + if err := mgr.Add(gc); err != nil { + return fmt.Errorf("executor: failed to add garbage collector: %w", err) + } + } + if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { return fmt.Errorf("executor: failed to add health check: %w", err) } diff --git a/flyteidl2/common/role.proto b/flyteidl2/common/role.proto index 67e67dd966..168655a897 100644 --- a/flyteidl2/common/role.proto +++ b/flyteidl2/common/role.proto @@ -38,6 +38,10 @@ enum RoleType { // The support role would have contributor permissions plus the access to support endpoints ROLE_TYPE_SUPPORT = 9; + + // Internal system-provisioned role assigned to all identities by default. + // Grants baseline access required for platform functionality (e.g. image builder). + ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS = 10; } message Role { diff --git a/flyteidl2/gen_utils/rust/src/lib.rs b/flyteidl2/gen_utils/rust/src/lib.rs index bbbfd319c8..de3f8f3d99 100644 --- a/flyteidl2/gen_utils/rust/src/lib.rs +++ b/flyteidl2/gen_utils/rust/src/lib.rs @@ -49,6 +49,10 @@ pub mod flyteidl { include!("flyteidl2.core.rs"); } + pub mod notification { + include!("flyteidl2.notification.rs"); + } + pub mod task { include!("flyteidl2.task.rs"); } diff --git a/flyteidl2/logs/dataplane/payload.proto b/flyteidl2/logs/dataplane/payload.proto index 419207908d..4afd34b17d 100644 --- a/flyteidl2/logs/dataplane/payload.proto +++ b/flyteidl2/logs/dataplane/payload.proto @@ -70,6 +70,10 @@ message ContainerSelector { // The label selector to filter pods. This will only apply to live pods' logs because Listing by prefix // isn't supported. string kubernetes_pod_label_selector = 5; + + // NodeName is the name of the Kubernetes node to filter pods for. Only pods running on this node will be included. + // +optional + string node_name = 6; } message LiveLogsOptions { diff --git a/flyteidl2/notification/definition.proto b/flyteidl2/notification/definition.proto new file mode 100644 index 0000000000..bb31a94a69 --- /dev/null +++ b/flyteidl2/notification/definition.proto @@ -0,0 +1,96 @@ +syntax = "proto3"; + +package flyteidl2.notification; + +import "buf/validate/validate.proto"; +import "flyteidl2/common/identifier.proto"; +import "flyteidl2/common/phase.proto"; + +option go_package = "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/notification"; + +message DeliveryConfigTemplate { + option (buf.validate.message).cel = { + id: "at_least_one_required" + message: "at least one of the delivery options must be set" + expression: "has(this.webhook) || has(this.email)" + }; + + WebhookDeliveryTemplate webhook = 1; + + EmailDeliveryTemplate email = 2; +} + +enum EventType { + EVENT_TYPE_UNSPECIFIED = 0; + EVENT_TYPE_RUN_COMPLETED = 1; +} + +message RunCompletedNotificationTemplateData { + common.RunIdentifier run = 1 [(buf.validate.field).required = true]; + + common.ActionPhase phase = 2; + + string error = 3; +} + +enum HttpMethod { + HTTP_METHOD_UNSPECIFIED = 0; + HTTP_METHOD_GET = 1; + HTTP_METHOD_HEAD = 2; + HTTP_METHOD_POST = 3; + HTTP_METHOD_PUT = 4; + HTTP_METHOD_DELETE = 5; + HTTP_METHOD_CONNECT = 6; + HTTP_METHOD_OPTIONS = 7; + HTTP_METHOD_TRACE = 8; + HTTP_METHOD_PATCH = 9; +} + +message WebhookDeliveryTemplate { + string url = 1 [(buf.validate.field).string = { + min_len: 1 + max_len: 2000 + }]; + + HttpMethod method = 2 [(buf.validate.field).enum = { + not_in: [0] + }]; + + map headers = 3 [(buf.validate.field).map = { + keys: { + string: { + min_len: 1 + max_len: 20 + } + } + values: { + string: { + min_len: 1 + max_len: 50 + } + } + max_pairs: 20 + }]; + + string body_template = 4; // this is a Go template that may contain placeholders +} + +message EmailRecipient { + string name = 1; + + string address = 2; +} + +message EmailDeliveryTemplate { + string subject = 1 [(buf.validate.field).string.min_len = 1]; // this is a Go template that may contain placeholders + + repeated EmailRecipient to = 2 [(buf.validate.field).repeated.min_items = 1]; + + repeated EmailRecipient cc = 3; + + repeated EmailRecipient bcc = 4; + + string html_template = 5 [(buf.validate.field).string.min_len = 1]; // this is a Go template that may contain placeholders + + string text_template = 6; // this is a Go template that may contain placeholders +} diff --git a/flyteidl2/secret/payload.proto b/flyteidl2/secret/payload.proto index 5f074ba07b..a6abc0dcbe 100644 --- a/flyteidl2/secret/payload.proto +++ b/flyteidl2/secret/payload.proto @@ -28,6 +28,9 @@ message UpdateSecretResponse {} // GetSecretRequest contains the identifier used for looking up the secret message GetSecretRequest { SecretIdentifier id = 1 [(buf.validate.field).required = true]; + // If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included. + // If false (default), system secrets will be hidden and return NotFound. + bool include_system_secrets = 2; } // GetSecretProxyResponse returns the looked up secret from the secret service @@ -39,6 +42,9 @@ message GetSecretResponse { message DeleteSecretRequest { // name to be used for looking up the secret SecretIdentifier id = 1 [(buf.validate.field).required = true]; + // If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) can be deleted. + // If false (default), attempting to delete a system secret will return NotFound. + bool include_system_secrets = 2; } // DeleteSecretResponse is an empty response right now on successfully deleting the secret. @@ -63,6 +69,9 @@ message ListSecretsRequest { // The client can use the next token for each cluster to fetch the next page of results. // In multi cluster, inorder to page through next set of results, client needs to send this token in the next request map per_cluster_tokens = 6; + // If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included in results. + // If false (default), system secrets will be filtered out. + bool include_system_secrets = 7; } // ListSecretsResponse returns paginated results of the accessible secrets at the scope defined in the request. diff --git a/flyteidl2/task/run.proto b/flyteidl2/task/run.proto index 0dfda4bc1b..f9e138eec3 100644 --- a/flyteidl2/task/run.proto +++ b/flyteidl2/task/run.proto @@ -2,8 +2,11 @@ syntax = "proto3"; package flyteidl2.task; +import "buf/validate/validate.proto"; +import "flyteidl2/common/phase.proto"; import "flyteidl2/core/literals.proto"; import "flyteidl2/core/security.proto"; +import "flyteidl2/notification/definition.proto"; import "google/protobuf/wrappers.proto"; option go_package = "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task"; @@ -93,4 +96,42 @@ message RunSpec { // CacheConfig contains configurations that influence the behavior of cache reads and writes CacheConfig cache_config = 9; + + // Optionally, you can send a notification when your run completes. + oneof notification_settings { + string notification_rule_name = 10; // either refer to a previously stored notification rule + + InlineRuleList notification_rules = 11; // either define an inline one-off rule + } +} + +message InlineRuleList { + repeated InlineRule rules = 1 [(buf.validate.field).repeated.min_items = 1]; +} + +message InlineRule { + repeated common.ActionPhase on_phases = 1 [(buf.validate.field).repeated = { + min_items: 1 + unique: true + items: { + enum: { + in: [ // terminal phases only + 5, // ACTION_PHASE_SUCCEEDED + 6, // ACTION_PHASE_FAILED + 7, // ACTION_PHASE_ABORTED + 8 // ACTION_PHASE_TIMED_OUT + ] + } + } + }]; + + oneof delivery { + option (buf.validate.oneof).required = true; + + // (run org + delivery_config_name) will be used as a delivery config id + string delivery_config_name = 2; + + // template can only have fields defined in flyteidl2.notification.RunCompletedNotificationTemplateData + flyteidl2.notification.DeliveryConfigTemplate delivery_template = 3; + } } diff --git a/flyteidl2/workflow/events_proxy_service.proto b/flyteidl2/workflow/events_proxy_service.proto new file mode 100644 index 0000000000..5a24de663a --- /dev/null +++ b/flyteidl2/workflow/events_proxy_service.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; + +package flyteidl2.workflow; + +import "buf/validate/validate.proto"; +import "flyteidl2/workflow/run_definition.proto"; + +option go_package = "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow"; + +// EventsProxyService provides an interface for forwarding the events to Run Service or Redis stream. +service EventsProxyService { + // record the events for an action. + rpc Record(RecordRequest) returns (RecordResponse) {} +} + +// ============================================================================ +// Record +// ============================================================================ + +// RecordRequest is the request message for recording the events for the actions. +message RecordRequest { + // The events to record. + repeated flyteidl2.workflow.ActionEvent events = 1 [(buf.validate.field).repeated.min_items = 1]; +} + +// RecordResponse is the response message recording an event for an action. +message RecordResponse {} diff --git a/flyteplugins/go/tasks/logs/logging_utils.go b/flyteplugins/go/tasks/logs/logging_utils.go index aa003348da..a8755e86d7 100644 --- a/flyteplugins/go/tasks/logs/logging_utils.go +++ b/flyteplugins/go/tasks/logs/logging_utils.go @@ -96,11 +96,22 @@ func (t templateLogPluginCollection) GetTaskLogs(input tasklog.Input) (tasklog.O } // InitializeLogPlugins initializes log plugin based on config. -func InitializeLogPlugins(cfg *LogConfig) (tasklog.Plugin, error) { +func InitializeLogPlugins(cfg *LogConfig, taskTemplate *core.TaskTemplate) (tasklog.Plugin, error) { // Use a list to maintain order. var plugins []tasklog.Plugin var dynamicPlugins []tasklog.Plugin + // If the task template has log links, prepend them as TemplateLogPlugin entries. + if taskTemplate != nil && taskTemplate.GetMetadata() != nil { + for _, logLink := range taskTemplate.GetMetadata().GetLogLinks() { + plugins = append(plugins, tasklog.TemplateLogPlugin{ + DisplayName: logLink.GetName(), + TemplateURIs: []tasklog.TemplateURI{logLink.GetUri()}, + IconUri: logLink.GetIconUri(), + }) + } + } + if cfg.IsKubernetesEnabled { if len(cfg.KubernetesTemplateURI) > 0 { plugins = append(plugins, tasklog.TemplateLogPlugin{DisplayName: kubernetesLogsDisplayName, TemplateURIs: []tasklog.TemplateURI{cfg.KubernetesTemplateURI}, MessageFormat: core.TaskLog_JSON}) diff --git a/flyteplugins/go/tasks/logs/logging_utils_test.go b/flyteplugins/go/tasks/logs/logging_utils_test.go index 7e77dfaabf..8787dfc3c5 100644 --- a/flyteplugins/go/tasks/logs/logging_utils_test.go +++ b/flyteplugins/go/tasks/logs/logging_utils_test.go @@ -42,7 +42,7 @@ func dummyTaskExecID() pluginCore.TaskExecutionID { } func TestGetLogsForContainerInPod_NoPlugins(t *testing.T) { - logPlugin, err := InitializeLogPlugins(&LogConfig{}) + logPlugin, err := InitializeLogPlugins(&LogConfig{}, nil) assert.NoError(t, err) l, err := GetLogsForContainerInPod(context.TODO(), logPlugin, dummyTaskExecID(), nil, 0, " Suffix", nil, nil) assert.NoError(t, err) @@ -54,7 +54,7 @@ func TestGetLogsForContainerInPod_NoLogs(t *testing.T) { IsCloudwatchEnabled: true, CloudwatchRegion: "us-east-1", CloudwatchLogGroup: "/kubernetes/flyte-production", - }) + }, nil) assert.NoError(t, err) p, err := GetLogsForContainerInPod(context.TODO(), logPlugin, dummyTaskExecID(), nil, 0, " Suffix", nil, nil) assert.NoError(t, err) @@ -66,7 +66,7 @@ func TestGetLogsForContainerInPod_BadIndex(t *testing.T) { IsCloudwatchEnabled: true, CloudwatchRegion: "us-east-1", CloudwatchLogGroup: "/kubernetes/flyte-production", - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -97,7 +97,7 @@ func TestGetLogsForContainerInPod_BadIndex_WithoutStatus(t *testing.T) { IsCloudwatchEnabled: true, CloudwatchRegion: "us-east-1", CloudwatchLogGroup: "/kubernetes/flyte-production", - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -121,7 +121,7 @@ func TestGetLogsForContainerInPod_MissingStatus(t *testing.T) { IsCloudwatchEnabled: true, CloudwatchRegion: "us-east-1", CloudwatchLogGroup: "/kubernetes/flyte-production", - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -145,7 +145,7 @@ func TestGetLogsForContainerInPod_Cloudwatch(t *testing.T) { logPlugin, err := InitializeLogPlugins(&LogConfig{IsCloudwatchEnabled: true, CloudwatchRegion: "us-east-1", CloudwatchLogGroup: "/kubernetes/flyte-production", - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -181,7 +181,7 @@ func TestGetLogsForContainerInPod_K8s(t *testing.T) { MessageFormat: core.TaskLog_JSON, }, }, - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -220,7 +220,7 @@ func TestGetLogsForContainerInPod_All(t *testing.T) { IsCloudwatchEnabled: true, CloudwatchRegion: "us-east-1", CloudwatchLogGroup: "/kubernetes/flyte-production", - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -253,7 +253,7 @@ func TestGetLogsForContainerInPod_HostName(t *testing.T) { IsCloudwatchEnabled: true, CloudwatchRegion: "us-east-1", CloudwatchLogGroup: "/kubernetes/flyte-production", - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -285,7 +285,7 @@ func TestGetLogsForContainerInPod_Stackdriver(t *testing.T) { IsStackDriverEnabled: true, GCPProjectName: "myGCPProject", StackdriverLogResourceName: "aws_ec2_instance", - }) + }, nil) assert.NoError(t, err) pod := &v1.Pod{ @@ -360,7 +360,7 @@ func TestGetLogsForContainerInPod_LegacyTemplate(t *testing.T) { } func assertTestSucceeded(tb testing.TB, config *LogConfig, taskTemplate *core.TaskTemplate, expectedTaskLogs []*core.TaskLog, hostname string) { - logPlugin, err := InitializeLogPlugins(config) + logPlugin, err := InitializeLogPlugins(config, nil) assert.NoError(tb, err) pod := &v1.Pod{ diff --git a/flyteplugins/go/tasks/pluginmachinery/tasklog/plugin.go b/flyteplugins/go/tasks/pluginmachinery/tasklog/plugin.go index 054acbc588..76d333f3be 100644 --- a/flyteplugins/go/tasks/pluginmachinery/tasklog/plugin.go +++ b/flyteplugins/go/tasks/pluginmachinery/tasklog/plugin.go @@ -68,4 +68,5 @@ type TemplateLogPlugin struct { ShowWhilePending bool `json:"showWhilePending" pflag:",If true, the log link will be shown even if the task is in a pending state."` HideOnceFinished bool `json:"hideOnceFinished" pflag:",If true, the log link will be hidden once the task has finished."` LinkType string `json:"linkType" pflag:",Type of the log. (external, dashboard, or ide). This is used to distinguish between different log links."` + IconUri string `json:"iconUri" pflag:",Icon URI for the log link."` } diff --git a/flyteplugins/go/tasks/plugins/k8s/dask/dask.go b/flyteplugins/go/tasks/plugins/k8s/dask/dask.go index 3df2cc4d36..e9fc897bce 100644 --- a/flyteplugins/go/tasks/plugins/k8s/dask/dask.go +++ b/flyteplugins/go/tasks/plugins/k8s/dask/dask.go @@ -304,7 +304,11 @@ func createJobSpec(workerSpec daskAPI.WorkerSpec, schedulerSpec daskAPI.Schedule } func (p daskResourceHandler) GetTaskPhase(ctx context.Context, pluginContext k8s.PluginContext, r client.Object) (pluginsCore.PhaseInfo, error) { - logPlugin, err := logs.InitializeLogPlugins(&GetConfig().Logs) + taskTemplate, err := pluginContext.TaskReader().Read(ctx) + if err != nil { + return pluginsCore.PhaseInfoUndefined, err + } + logPlugin, err := logs.InitializeLogPlugins(&GetConfig().Logs, taskTemplate) if err != nil { return pluginsCore.PhaseInfoUndefined, err } diff --git a/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator.go b/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator.go index f4b7788fd6..4a8b6e0655 100644 --- a/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator.go +++ b/flyteplugins/go/tasks/plugins/k8s/kfoperators/common/common_operator.go @@ -98,7 +98,7 @@ func GetLogs(pluginContext k8s.PluginContext, taskType string, objectMeta meta_v taskLogs := make([]*core.TaskLog, 0, 10) taskExecID := pluginContext.TaskExecutionMetadata().GetTaskExecutionID() - logPlugin, err := logs.InitializeLogPlugins(logs.GetLogConfig()) + logPlugin, err := logs.InitializeLogPlugins(logs.GetLogConfig(), taskTemplate) if err != nil { return nil, err diff --git a/flyteplugins/go/tasks/plugins/k8s/pod/plugin.go b/flyteplugins/go/tasks/plugins/k8s/pod/plugin.go index 1cd38c863a..701b87f179 100644 --- a/flyteplugins/go/tasks/plugins/k8s/pod/plugin.go +++ b/flyteplugins/go/tasks/plugins/k8s/pod/plugin.go @@ -172,7 +172,11 @@ func (p plugin) BuildResource(ctx context.Context, taskCtx pluginsCore.TaskExecu } func (p plugin) GetTaskPhase(ctx context.Context, pluginContext k8s.PluginContext, r client.Object) (pluginsCore.PhaseInfo, error) { - logPlugin, err := logs.InitializeLogPlugins(logs.GetLogConfig()) + taskTemplate, err := pluginContext.TaskReader().Read(ctx) + if err != nil { + return pluginsCore.PhaseInfoUndefined, err + } + logPlugin, err := logs.InitializeLogPlugins(logs.GetLogConfig(), taskTemplate) if err != nil { return pluginsCore.PhaseInfoUndefined, err } diff --git a/flyteplugins/go/tasks/plugins/k8s/ray/ray.go b/flyteplugins/go/tasks/plugins/k8s/ray/ray.go index 8d7523073a..ee3f10d932 100644 --- a/flyteplugins/go/tasks/plugins/k8s/ray/ray.go +++ b/flyteplugins/go/tasks/plugins/k8s/ray/ray.go @@ -586,7 +586,11 @@ func (rayJobResourceHandler) BuildIdentityResource(ctx context.Context, taskCtx } func getEventInfoForRayJob(ctx context.Context, logConfig logs.LogConfig, pluginContext k8s.PluginContext, rayJob *rayv1.RayJob) (*pluginsCore.TaskInfo, error) { - logPlugin, err := logs.InitializeLogPlugins(&logConfig) + taskTemplate, err := pluginContext.TaskReader().Read(ctx) + if err != nil { + return nil, fmt.Errorf("failed to read task template. Error: %w", err) + } + logPlugin, err := logs.InitializeLogPlugins(&logConfig, taskTemplate) if err != nil { return nil, fmt.Errorf("failed to initialize log plugins. Error: %w", err) } diff --git a/flyteplugins/go/tasks/plugins/k8s/ray/ray_test.go b/flyteplugins/go/tasks/plugins/k8s/ray/ray_test.go index 343fba3404..a9b1071c9a 100644 --- a/flyteplugins/go/tasks/plugins/k8s/ray/ray_test.go +++ b/flyteplugins/go/tasks/plugins/k8s/ray/ray_test.go @@ -896,6 +896,10 @@ func newPluginContext(pluginState k8s.PluginState) *k8smocks.PluginContext { plg.EXPECT().PluginStateReader().Return(&pluginStateReaderMock) + taskReader := &mocks.TaskReader{} + taskReader.EXPECT().Read(mock.Anything).Return(&core.TaskTemplate{}, nil) + plg.EXPECT().TaskReader().Return(taskReader) + return plg } diff --git a/flyteplugins/go/tasks/plugins/k8s/spark/spark.go b/flyteplugins/go/tasks/plugins/k8s/spark/spark.go index 3c6a57c80f..2532929ced 100644 --- a/flyteplugins/go/tasks/plugins/k8s/spark/spark.go +++ b/flyteplugins/go/tasks/plugins/k8s/spark/spark.go @@ -369,6 +369,10 @@ func (sparkResourceHandler) BuildIdentityResource(ctx context.Context, taskCtx p } func getEventInfoForSpark(ctx context.Context, pluginContext k8s.PluginContext, sj *sparkOp.SparkApplication) (*pluginsCore.TaskInfo, error) { + taskTemplate, err := pluginContext.TaskReader().Read(ctx) + if err != nil { + return nil, fmt.Errorf("failed to read task template: %w", err) + } sparkConfig := GetSparkConfig() taskLogs := make([]*core.TaskLog, 0, 3) @@ -376,7 +380,7 @@ func getEventInfoForSpark(ctx context.Context, pluginContext k8s.PluginContext, taskExecID := pluginContext.TaskExecutionMetadata().GetTaskExecutionID() if sj.Status.DriverInfo.PodName != "" { - p, err := logs.InitializeLogPlugins(&sparkConfig.LogConfig.Mixed) + p, err := logs.InitializeLogPlugins(&sparkConfig.LogConfig.Mixed, taskTemplate) if err != nil { return nil, err } @@ -397,7 +401,7 @@ func getEventInfoForSpark(ctx context.Context, pluginContext k8s.PluginContext, } } - p, err := logs.InitializeLogPlugins(&sparkConfig.LogConfig.User) + p, err := logs.InitializeLogPlugins(&sparkConfig.LogConfig.User, taskTemplate) if err != nil { return nil, err } @@ -441,7 +445,7 @@ func getEventInfoForSpark(ctx context.Context, pluginContext k8s.PluginContext, } } - p, err = logs.InitializeLogPlugins(&sparkConfig.LogConfig.System) + p, err = logs.InitializeLogPlugins(&sparkConfig.LogConfig.System, taskTemplate) if err != nil { return nil, err } @@ -460,7 +464,7 @@ func getEventInfoForSpark(ctx context.Context, pluginContext k8s.PluginContext, taskLogs = append(taskLogs, o.TaskLogs...) } - p, err = logs.InitializeLogPlugins(&sparkConfig.LogConfig.AllUser) + p, err = logs.InitializeLogPlugins(&sparkConfig.LogConfig.AllUser, taskTemplate) if err != nil { return nil, err } diff --git a/flyteplugins/go/tasks/plugins/webapi/connector/integration_test.go b/flyteplugins/go/tasks/plugins/webapi/connector/integration_test.go index c5bc2001bd..10cf7fe147 100644 --- a/flyteplugins/go/tasks/plugins/webapi/connector/integration_test.go +++ b/flyteplugins/go/tasks/plugins/webapi/connector/integration_test.go @@ -177,7 +177,7 @@ func getTaskContext(t *testing.T) *pluginCoreMocks.TaskExecutionContext { execID := rand.String(3) tID := &pluginCoreMocks.TaskExecutionID{} tID.On("GetGeneratedName").Return(execID + "-my-task-1") - tID.On("GetID").Return(flyteIdlCore.TaskExecutionIdentifier{ + tID.On("GetID").Return(&flyteIdlCore.TaskExecutionIdentifier{ TaskId: &flyteIdlCore.Identifier{ ResourceType: flyteIdlCore.ResourceType_TASK, Project: "a", @@ -203,7 +203,7 @@ func getTaskContext(t *testing.T) *pluginCoreMocks.TaskExecutionContext { tMeta.On("GetAnnotations").Return(map[string]string{"foo": "bar"}) tMeta.On("GetK8sServiceAccount").Return("k8s-account") tMeta.On("GetEnvironmentVariables").Return(map[string]string{"foo": "bar"}) - tMeta.On("GetSecurityContext").Return(flyteIdlCore.SecurityContext{ + tMeta.On("GetSecurityContext").Return(&flyteIdlCore.SecurityContext{ RunAs: &flyteIdlCore.Identity{ExecutionIdentity: "execution-identity"}, }) diff --git a/flyteplugins/go/tasks/plugins/webapi/connector/plugin.go b/flyteplugins/go/tasks/plugins/webapi/connector/plugin.go index 74749b496c..64c4a5b889 100644 --- a/flyteplugins/go/tasks/plugins/webapi/connector/plugin.go +++ b/flyteplugins/go/tasks/plugins/webapi/connector/plugin.go @@ -285,7 +285,7 @@ func (p *Plugin) Delete(ctx context.Context, taskCtx webapi.DeleteContext) error } func (p *Plugin) getEventInfoForConnectorApp(taskCtx webapi.StatusContext, resource ResourceWrapper) ([]*flyteIdl.TaskLog, error) { - logPlugin, err := logs.InitializeLogPlugins(&p.cfg.Logs) + logPlugin, err := logs.InitializeLogPlugins(&p.cfg.Logs, nil) if err != nil { return nil, fmt.Errorf("failed to initialize log plugins with error: %v", err) } diff --git a/flytestdlib/config/path.go b/flytestdlib/config/path.go new file mode 100644 index 0000000000..03e6feb66f --- /dev/null +++ b/flytestdlib/config/path.go @@ -0,0 +1,15 @@ +package config + +import ( + "os" + "path/filepath" + "strings" +) + +func NormalizePath(path string) string { + if strings.HasPrefix(path, "~/") { + home, _ := os.UserHomeDir() + path = filepath.Join(home, path[2:]) + } + return filepath.Clean(path) +} diff --git a/flytestdlib/config/path_test.go b/flytestdlib/config/path_test.go new file mode 100644 index 0000000000..ea3810d6ff --- /dev/null +++ b/flytestdlib/config/path_test.go @@ -0,0 +1,71 @@ +package config + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNormalizePath(t *testing.T) { + home, _ := os.UserHomeDir() + + tests := []struct { + name string + input string + expected string + }{ + { + name: "tilde expansion", + input: "~/foo/bar", + expected: filepath.Join(home, "foo/bar"), + }, + { + name: "tilde with dot-dot", + input: "~/foo/../bar", + expected: filepath.Join(home, "bar"), + }, + { + name: "absolute path with dot-dot", + input: "/etc/flyte/../config.yaml", + expected: "/etc/config.yaml", + }, + { + name: "absolute path with multiple dot-dot", + input: "/a/b/c/../../d", + expected: "/a/d", + }, + { + name: "relative path with dot-dot", + input: "foo/../bar", + expected: "bar", + }, + { + name: "dot in path", + input: "/foo/./bar", + expected: "/foo/bar", + }, + { + name: "trailing slash removed", + input: "/foo/bar/", + expected: "/foo/bar", + }, + { + name: "plain absolute path unchanged", + input: "/etc/flyte/config.yaml", + expected: "/etc/flyte/config.yaml", + }, + { + name: "plain relative path unchanged", + input: "config.yaml", + expected: "config.yaml", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equal(t, tt.expected, NormalizePath(tt.input)) + }) + } +} diff --git a/flytestdlib/database/db.go b/flytestdlib/database/db.go index 17d2d979c4..2f9385870a 100644 --- a/flytestdlib/database/db.go +++ b/flytestdlib/database/db.go @@ -4,8 +4,8 @@ import ( "context" "fmt" + "github.com/glebarez/sqlite" "github.com/go-gormigrate/gormigrate/v2" - "gorm.io/driver/sqlite" "gorm.io/gorm" "github.com/flyteorg/flyte/v2/flytestdlib/logger" @@ -22,6 +22,7 @@ func GetDB(ctx context.Context, dbConfig *DbConfig, logConfig *logger.Config) ( gormConfig := &gorm.Config{ Logger: GetGormLogger(ctx, logConfig), DisableForeignKeyConstraintWhenMigrating: false, + TranslateError: true, } var gormDb *gorm.DB @@ -78,6 +79,7 @@ func GetReadOnlyDB(ctx context.Context, dbConfig *DbConfig, logConfig *logger.Co gormConfig := &gorm.Config{ Logger: GetGormLogger(ctx, logConfig), DisableForeignKeyConstraintWhenMigrating: false, + TranslateError: true, } var gormDb *gorm.DB diff --git a/flytestdlib/database/postgres.go b/flytestdlib/database/postgres.go index 3e898e3840..7367d44fac 100644 --- a/flytestdlib/database/postgres.go +++ b/flytestdlib/database/postgres.go @@ -43,7 +43,7 @@ func resolvePassword(ctx context.Context, passwordVal, passwordPath string) stri } // Produces the DSN (data source name) for opening a postgres db connection. -func getPostgresDsn(ctx context.Context, pgConfig PostgresConfig) string { +func GetPostgresDsn(ctx context.Context, pgConfig PostgresConfig) string { password := resolvePassword(ctx, pgConfig.Password, pgConfig.PasswordPath) if len(password) == 0 { // The password-less case is included for development environments. @@ -68,7 +68,7 @@ func getPostgresReadDsn(ctx context.Context, pgConfig PostgresConfig) string { // CreatePostgresDbIfNotExists creates DB if it doesn't exist for the passed in config func CreatePostgresDbIfNotExists(ctx context.Context, gormConfig *gorm.Config, pgConfig PostgresConfig) (*gorm.DB, error) { - dialector := postgres.Open(getPostgresDsn(ctx, pgConfig)) + dialector := postgres.Open(GetPostgresDsn(ctx, pgConfig)) gormDb, err := gorm.Open(dialector, gormConfig) if err == nil { return gormDb, nil @@ -83,7 +83,7 @@ func CreatePostgresDbIfNotExists(ctx context.Context, gormConfig *gorm.Config, p // initialize the user-specified database. defaultDbPgConfig := pgConfig defaultDbPgConfig.DbName = defaultDB - defaultDBDialector := postgres.Open(getPostgresDsn(ctx, defaultDbPgConfig)) + defaultDBDialector := postgres.Open(GetPostgresDsn(ctx, defaultDbPgConfig)) gormDb, err = gorm.Open(defaultDBDialector, gormConfig) if err != nil { return nil, err diff --git a/flytestdlib/database/postgres_test.go b/flytestdlib/database/postgres_test.go index eb22c6b3aa..b0412c3331 100644 --- a/flytestdlib/database/postgres_test.go +++ b/flytestdlib/database/postgres_test.go @@ -35,19 +35,19 @@ func TestGetPostgresDsn(t *testing.T) { ExtraOptions: "sslmode=disable", } t.Run("no password", func(t *testing.T) { - dsn := getPostgresDsn(context.TODO(), pgConfig) + dsn := GetPostgresDsn(context.TODO(), pgConfig) assert.Equal(t, "host=localhost port=5432 dbname=postgres user=postgres sslmode=disable", dsn) }) t.Run("with password", func(t *testing.T) { pgConfig.Password = "pass" - dsn := getPostgresDsn(context.TODO(), pgConfig) + dsn := GetPostgresDsn(context.TODO(), pgConfig) assert.Equal(t, "host=localhost port=5432 dbname=postgres user=postgres password=pass sslmode=disable", dsn) }) t.Run("with password, no extra", func(t *testing.T) { pgConfig.Password = "pass" pgConfig.ExtraOptions = "" - dsn := getPostgresDsn(context.TODO(), pgConfig) + dsn := GetPostgresDsn(context.TODO(), pgConfig) assert.Equal(t, "host=localhost port=5432 dbname=postgres user=postgres password=pass ", dsn) }) t.Run("with password path", func(t *testing.T) { @@ -61,7 +61,7 @@ func TestGetPostgresDsn(t *testing.T) { t.Errorf("Couldn't write to temp file: %v", err) } pgConfig.PasswordPath = tmpFile.Name() - dsn := getPostgresDsn(context.TODO(), pgConfig) + dsn := GetPostgresDsn(context.TODO(), pgConfig) assert.Equal(t, "host=localhost port=5432 dbname=postgres user=postgres password=123abc ", dsn) }) } diff --git a/flytestdlib/k8s/namespace.go b/flytestdlib/k8s/namespace.go new file mode 100644 index 0000000000..cdd5944ac4 --- /dev/null +++ b/flytestdlib/k8s/namespace.go @@ -0,0 +1,39 @@ +package k8s + +import ( + "context" + "fmt" + + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/flyteorg/flyte/v2/flytestdlib/logger" +) + +// EnsureNamespaceExists creates the given namespace if it does not already exist. +func EnsureNamespaceExists(ctx context.Context, k8sClient client.Client, name string) error { + ns := &corev1.Namespace{} + err := k8sClient.Get(ctx, types.NamespacedName{Name: name}, ns) + if err == nil { + logger.Infof(ctx, "Namespace '%s' already exists", name) + return nil + } + + if !apierrors.IsNotFound(err) { + return fmt.Errorf("failed to check namespace: %w", err) + } + + logger.Infof(ctx, "Creating namespace '%s'", name) + ns = &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{Name: name}, + } + if err := k8sClient.Create(ctx, ns); err != nil { + return fmt.Errorf("failed to create namespace: %w", err) + } + + logger.Infof(ctx, "Created namespace '%s'", name) + return nil +} diff --git a/flytestdlib/otelutils/factory.go b/flytestdlib/otelutils/factory.go index 5d910c141e..c3a0a3990d 100644 --- a/flytestdlib/otelutils/factory.go +++ b/flytestdlib/otelutils/factory.go @@ -12,7 +12,7 @@ import ( "go.opentelemetry.io/otel/exporters/stdout/stdouttrace" "go.opentelemetry.io/otel/sdk/resource" "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.24.0" + semconv "go.opentelemetry.io/otel/semconv/v1.34.0" rawtrace "go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/trace/noop" diff --git a/flytestdlib/profutils/config.go b/flytestdlib/profutils/config.go new file mode 100644 index 0000000000..dcd29037d3 --- /dev/null +++ b/flytestdlib/profutils/config.go @@ -0,0 +1,20 @@ +package profutils + +import "github.com/flyteorg/flyte/v2/flytestdlib/config" + +//go:generate pflags Config --default-var=defaultConfig + +const configSectionKey = "prof" + +var ( + configSection = config.MustRegisterSection(configSectionKey, defaultConfig) + defaultConfig = &Config{} +) + +type Config struct { + DisableConfigEndpoint bool `config:"DisableConfigEndpoint"` +} + +func GetConfig() *Config { + return configSection.GetConfig().(*Config) +} diff --git a/flytestdlib/profutils/config_flags.go b/flytestdlib/profutils/config_flags.go new file mode 100755 index 0000000000..df4a28ce2e --- /dev/null +++ b/flytestdlib/profutils/config_flags.go @@ -0,0 +1,55 @@ +// Code generated by go generate; DO NOT EDIT. +// This file was generated by robots. + +package profutils + +import ( + "encoding/json" + "reflect" + + "fmt" + + "github.com/spf13/pflag" +) + +// If v is a pointer, it will get its element value or the zero value of the element type. +// If v is not a pointer, it will return it as is. +func (Config) elemValueOrNil(v interface{}) interface{} { + if t := reflect.TypeOf(v); t.Kind() == reflect.Ptr { + if reflect.ValueOf(v).IsNil() { + return reflect.Zero(t.Elem()).Interface() + } else { + return reflect.ValueOf(v).Interface() + } + } else if v == nil { + return reflect.Zero(t).Interface() + } + + return v +} + +func (Config) mustJsonMarshal(v interface{}) string { + raw, err := json.Marshal(v) + if err != nil { + panic(err) + } + + return string(raw) +} + +func (Config) mustMarshalJSON(v json.Marshaler) string { + raw, err := v.MarshalJSON() + if err != nil { + panic(err) + } + + return string(raw) +} + +// GetPFlagSet will return strongly types pflags for all fields in Config and its nested types. The format of the +// flags is json-name.json-sub-name... etc. +func (cfg Config) GetPFlagSet(prefix string) *pflag.FlagSet { + cmdFlags := pflag.NewFlagSet("Config", pflag.ExitOnError) + cmdFlags.Bool(fmt.Sprintf("%v%v", prefix, "DisableConfigEndpoint"), defaultConfig.DisableConfigEndpoint, "") + return cmdFlags +} diff --git a/flytestdlib/profutils/config_flags_test.go b/flytestdlib/profutils/config_flags_test.go new file mode 100755 index 0000000000..b666d6920a --- /dev/null +++ b/flytestdlib/profutils/config_flags_test.go @@ -0,0 +1,116 @@ +// Code generated by go generate; DO NOT EDIT. +// This file was generated by robots. + +package profutils + +import ( + "encoding/json" + "fmt" + "reflect" + "strings" + "testing" + + "github.com/mitchellh/mapstructure" + "github.com/stretchr/testify/assert" +) + +var dereferencableKindsConfig = map[reflect.Kind]struct{}{ + reflect.Array: {}, reflect.Chan: {}, reflect.Map: {}, reflect.Ptr: {}, reflect.Slice: {}, +} + +// Checks if t is a kind that can be dereferenced to get its underlying type. +func canGetElementConfig(t reflect.Kind) bool { + _, exists := dereferencableKindsConfig[t] + return exists +} + +// This decoder hook tests types for json unmarshaling capability. If implemented, it uses json unmarshal to build the +// object. Otherwise, it'll just pass on the original data. +func jsonUnmarshalerHookConfig(_, to reflect.Type, data interface{}) (interface{}, error) { + unmarshalerType := reflect.TypeOf((*json.Unmarshaler)(nil)).Elem() + if to.Implements(unmarshalerType) || reflect.PtrTo(to).Implements(unmarshalerType) || + (canGetElementConfig(to.Kind()) && to.Elem().Implements(unmarshalerType)) { + + raw, err := json.Marshal(data) + if err != nil { + fmt.Printf("Failed to marshal Data: %v. Error: %v. Skipping jsonUnmarshalHook", data, err) + return data, nil + } + + res := reflect.New(to).Interface() + err = json.Unmarshal(raw, &res) + if err != nil { + fmt.Printf("Failed to umarshal Data: %v. Error: %v. Skipping jsonUnmarshalHook", data, err) + return data, nil + } + + return res, nil + } + + return data, nil +} + +func decode_Config(input, result interface{}) error { + config := &mapstructure.DecoderConfig{ + TagName: "json", + WeaklyTypedInput: true, + Result: result, + DecodeHook: mapstructure.ComposeDecodeHookFunc( + mapstructure.StringToTimeDurationHookFunc(), + mapstructure.StringToSliceHookFunc(","), + jsonUnmarshalerHookConfig, + ), + } + + decoder, err := mapstructure.NewDecoder(config) + if err != nil { + return err + } + + return decoder.Decode(input) +} + +func join_Config(arr interface{}, sep string) string { + listValue := reflect.ValueOf(arr) + strs := make([]string, 0, listValue.Len()) + for i := 0; i < listValue.Len(); i++ { + strs = append(strs, fmt.Sprintf("%v", listValue.Index(i))) + } + + return strings.Join(strs, sep) +} + +func testDecodeJson_Config(t *testing.T, val, result interface{}) { + assert.NoError(t, decode_Config(val, result)) +} + +func testDecodeRaw_Config(t *testing.T, vStringSlice, result interface{}) { + assert.NoError(t, decode_Config(vStringSlice, result)) +} + +func TestConfig_GetPFlagSet(t *testing.T) { + val := Config{} + cmdFlags := val.GetPFlagSet("") + assert.True(t, cmdFlags.HasFlags()) +} + +func TestConfig_SetFlags(t *testing.T) { + actual := Config{} + cmdFlags := actual.GetPFlagSet("") + assert.True(t, cmdFlags.HasFlags()) + + t.Run("Test_DisableConfigEndpoint", func(t *testing.T) { + + t.Run("Override", func(t *testing.T) { + testValue := "1" + + cmdFlags.Set("DisableConfigEndpoint", testValue) + if vBool, err := cmdFlags.GetBool("DisableConfigEndpoint"); err == nil { + testDecodeJson_Config(t, fmt.Sprintf("%v", vBool), &actual.DisableConfigEndpoint) + + } else { + assert.FailNow(t, err.Error()) + } + }) + }) +} diff --git a/flytestdlib/profutils/server.go b/flytestdlib/profutils/server.go index ed0aaf0f4e..571893ac93 100644 --- a/flytestdlib/profutils/server.go +++ b/flytestdlib/profutils/server.go @@ -110,14 +110,17 @@ func StartProfilingServer(ctx context.Context, pprofPort int) error { return srv.ListenAndServe() } -func configureGlobalHTTPHandler(handlers map[string]http.Handler) error { +func configureGlobalHTTPHandler(cfg *Config, handlers map[string]http.Handler) error { if handlers == nil { handlers = map[string]http.Handler{} } + handlers[metricsPath] = promhttp.Handler() handlers[healthcheck] = http.HandlerFunc(healtcheckHandler) handlers[versionPath] = http.HandlerFunc(versionHandler) - handlers[configPath] = http.HandlerFunc(configHandler) + if !cfg.DisableConfigEndpoint { + handlers[configPath] = http.HandlerFunc(configHandler) + } for p, h := range handlers { http.Handle(p, h) @@ -126,14 +129,15 @@ func configureGlobalHTTPHandler(handlers map[string]http.Handler) error { return nil } -// Forwards the call to StartProfilingServer +// StartProfilingServerWithDefaultHandlers forwards the call to StartProfilingServer // Also registers: // 1. the prometheus HTTP handler on '/metrics' path shared with the profiling server. // 2. A healthcheck (L7) handler on '/healthcheck'. // 3. A version handler on '/version' provides information about the specific build. // 4. A config handler on '/config' provides a dump of the currently loaded config. func StartProfilingServerWithDefaultHandlers(ctx context.Context, pprofPort int, handlers map[string]http.Handler) error { - if err := configureGlobalHTTPHandler(handlers); err != nil { + cfg := GetConfig() + if err := configureGlobalHTTPHandler(cfg, handlers); err != nil { return err } diff --git a/flytestdlib/profutils/server_test.go b/flytestdlib/profutils/server_test.go index 4210cad72f..f9e622de48 100644 --- a/flytestdlib/profutils/server_test.go +++ b/flytestdlib/profutils/server_test.go @@ -36,7 +36,7 @@ type TestObj struct { } func init() { - if err := configureGlobalHTTPHandler(nil); err != nil { + if err := configureGlobalHTTPHandler(&Config{}, nil); err != nil { panic(err) } } @@ -77,6 +77,9 @@ func TestConfigHandler(t *testing.T) { "type": "json", }, }, + "prof": map[string]interface{}{ + "DisableConfigEndpoint": false, + }, }, m) } diff --git a/gen/go/flyteidl2/common/role.pb.go b/gen/go/flyteidl2/common/role.pb.go index b7a4193faa..d868788ab4 100644 --- a/gen/go/flyteidl2/common/role.pb.go +++ b/gen/go/flyteidl2/common/role.pb.go @@ -47,33 +47,38 @@ const ( RoleType_ROLE_TYPE_SERVERLESS_CONTRIBUTOR RoleType = 8 // The support role would have contributor permissions plus the access to support endpoints RoleType_ROLE_TYPE_SUPPORT RoleType = 9 + // Internal system-provisioned role assigned to all identities by default. + // Grants baseline access required for platform functionality (e.g. image builder). + RoleType_ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS RoleType = 10 ) // Enum value maps for RoleType. var ( RoleType_name = map[int32]string{ - 0: "ROLE_TYPE_NONE", - 1: "ROLE_TYPE_ADMIN", - 2: "ROLE_TYPE_CONTRIBUTOR", - 3: "ROLE_TYPE_VIEWER", - 4: "ROLE_TYPE_CUSTOM", - 5: "ROLE_TYPE_CLUSTER_MANAGER", - 6: "ROLE_TYPE_FLYTE_PROJECT_ADMIN", - 7: "ROLE_TYPE_SERVERLESS_VIEWER", - 8: "ROLE_TYPE_SERVERLESS_CONTRIBUTOR", - 9: "ROLE_TYPE_SUPPORT", + 0: "ROLE_TYPE_NONE", + 1: "ROLE_TYPE_ADMIN", + 2: "ROLE_TYPE_CONTRIBUTOR", + 3: "ROLE_TYPE_VIEWER", + 4: "ROLE_TYPE_CUSTOM", + 5: "ROLE_TYPE_CLUSTER_MANAGER", + 6: "ROLE_TYPE_FLYTE_PROJECT_ADMIN", + 7: "ROLE_TYPE_SERVERLESS_VIEWER", + 8: "ROLE_TYPE_SERVERLESS_CONTRIBUTOR", + 9: "ROLE_TYPE_SUPPORT", + 10: "ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS", } RoleType_value = map[string]int32{ - "ROLE_TYPE_NONE": 0, - "ROLE_TYPE_ADMIN": 1, - "ROLE_TYPE_CONTRIBUTOR": 2, - "ROLE_TYPE_VIEWER": 3, - "ROLE_TYPE_CUSTOM": 4, - "ROLE_TYPE_CLUSTER_MANAGER": 5, - "ROLE_TYPE_FLYTE_PROJECT_ADMIN": 6, - "ROLE_TYPE_SERVERLESS_VIEWER": 7, - "ROLE_TYPE_SERVERLESS_CONTRIBUTOR": 8, - "ROLE_TYPE_SUPPORT": 9, + "ROLE_TYPE_NONE": 0, + "ROLE_TYPE_ADMIN": 1, + "ROLE_TYPE_CONTRIBUTOR": 2, + "ROLE_TYPE_VIEWER": 3, + "ROLE_TYPE_CUSTOM": 4, + "ROLE_TYPE_CLUSTER_MANAGER": 5, + "ROLE_TYPE_FLYTE_PROJECT_ADMIN": 6, + "ROLE_TYPE_SERVERLESS_VIEWER": 7, + "ROLE_TYPE_SERVERLESS_CONTRIBUTOR": 8, + "ROLE_TYPE_SUPPORT": 9, + "ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS": 10, } ) @@ -267,7 +272,7 @@ var file_flyteidl2_common_role_proto_rawDesc = []byte{ 0x6e, 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2a, 0x9a, 0x02, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, + 0x2a, 0xc3, 0x02, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, @@ -284,20 +289,22 @@ var file_flyteidl2_common_role_proto_rawDesc = []byte{ 0x12, 0x24, 0x0a, 0x20, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x4f, 0x52, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x09, 0x42, 0xba, 0x01, - 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x09, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, - 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x59, 0x50, 0x45, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x09, 0x12, 0x27, 0x0a, + 0x23, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, + 0x4d, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x45, 0x44, 0x5f, 0x41, 0x43, + 0x43, 0x45, 0x53, 0x53, 0x10, 0x0a, 0x42, 0xba, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, + 0x09, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, 0x34, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, + 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/go/flyteidl2/logs/dataplane/payload.pb.go b/gen/go/flyteidl2/logs/dataplane/payload.pb.go index 15e52af615..40f1025c39 100644 --- a/gen/go/flyteidl2/logs/dataplane/payload.pb.go +++ b/gen/go/flyteidl2/logs/dataplane/payload.pb.go @@ -402,6 +402,9 @@ type ContainerSelector struct { // The label selector to filter pods. This will only apply to live pods' logs because Listing by prefix // isn't supported. KubernetesPodLabelSelector string `protobuf:"bytes,5,opt,name=kubernetes_pod_label_selector,json=kubernetesPodLabelSelector,proto3" json:"kubernetes_pod_label_selector,omitempty"` + // NodeName is the name of the Kubernetes node to filter pods for. Only pods running on this node will be included. + // +optional + NodeName string `protobuf:"bytes,6,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` } func (x *ContainerSelector) Reset() { @@ -471,6 +474,13 @@ func (x *ContainerSelector) GetKubernetesPodLabelSelector() string { return "" } +func (x *ContainerSelector) GetNodeName() string { + if x != nil { + return x.NodeName + } + return "" +} + type LiveLogsOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -853,7 +863,7 @@ var file_flyteidl2_logs_dataplane_payload_proto_rawDesc = []byte{ 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0xb7, 0x02, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, + 0x65, 0x22, 0xd4, 0x02, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, @@ -872,74 +882,75 @@ var file_flyteidl2_logs_dataplane_payload_proto_rawDesc = []byte{ 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x50, 0x6f, 0x64, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x5e, 0x0a, 0x0f, 0x4c, - 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, - 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x50, 0x6f, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, - 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x07, - 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, - 0x6e, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xf0, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, - 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, - 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x53, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x4c, 0x0a, - 0x10, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x62, 0x0a, 0x11, 0x4c, - 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x0f, 0x4c, 0x69, 0x76, 0x65, + 0x4c, 0x6f, 0x67, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6c, + 0x6f, 0x67, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x50, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, + 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x4f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xf0, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, + 0x65, 0x73, 0x12, 0x18, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x53, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, + 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x10, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, - 0x47, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x12, 0x36, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, - 0x65, 0x73, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x2a, 0x36, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4c, - 0x69, 0x6e, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, - 0x45, 0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x02, - 0x2a, 0x46, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, - 0x0a, 0x11, 0x4c, 0x49, 0x56, 0x45, 0x5f, 0x4f, 0x52, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, - 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x56, 0x45, 0x5f, 0x4f, 0x4e, - 0x4c, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, - 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x42, 0xee, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x42, 0x0c, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, - 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, - 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x4c, 0x44, 0xaa, - 0x02, 0x18, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x4c, 0x6f, 0x67, 0x73, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xca, 0x02, 0x18, 0x46, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x4c, 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xe2, 0x02, 0x24, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x5c, 0x4c, 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, 0x46, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x4c, 0x6f, 0x67, 0x73, 0x3a, 0x3a, - 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x62, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4d, 0x0a, + 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, + 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, 0x47, 0x0a, 0x0d, + 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x36, 0x0a, + 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x52, + 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x2a, 0x36, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, + 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, + 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x02, 0x2a, 0x46, 0x0a, + 0x0a, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x4c, + 0x49, 0x56, 0x45, 0x5f, 0x4f, 0x52, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x56, 0x45, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, + 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x4f, + 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x42, 0xee, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x42, 0x0c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x4c, 0x44, 0xaa, 0x02, 0x18, 0x46, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xca, 0x02, 0x18, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x5c, 0x4c, 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0xe2, 0x02, 0x24, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x4c, + 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, 0x46, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x4c, 0x6f, 0x67, 0x73, 0x3a, 0x3a, 0x44, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/go/flyteidl2/logs/dataplane/payload.pb.validate.go b/gen/go/flyteidl2/logs/dataplane/payload.pb.validate.go index b6538a4763..c21126fc5a 100644 --- a/gen/go/flyteidl2/logs/dataplane/payload.pb.validate.go +++ b/gen/go/flyteidl2/logs/dataplane/payload.pb.validate.go @@ -458,6 +458,8 @@ func (m *ContainerSelector) validate(all bool) error { // no validation rules for KubernetesPodLabelSelector + // no validation rules for NodeName + if len(errors) > 0 { return ContainerSelectorMultiError(errors) } diff --git a/gen/go/flyteidl2/notification/definition.pb.go b/gen/go/flyteidl2/notification/definition.pb.go new file mode 100644 index 0000000000..001231a657 --- /dev/null +++ b/gen/go/flyteidl2/notification/definition.pb.go @@ -0,0 +1,726 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.30.0 +// protoc (unknown) +// source: flyteidl2/notification/definition.proto + +package notification + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + common "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventType int32 + +const ( + EventType_EVENT_TYPE_UNSPECIFIED EventType = 0 + EventType_EVENT_TYPE_RUN_COMPLETED EventType = 1 +) + +// Enum value maps for EventType. +var ( + EventType_name = map[int32]string{ + 0: "EVENT_TYPE_UNSPECIFIED", + 1: "EVENT_TYPE_RUN_COMPLETED", + } + EventType_value = map[string]int32{ + "EVENT_TYPE_UNSPECIFIED": 0, + "EVENT_TYPE_RUN_COMPLETED": 1, + } +) + +func (x EventType) Enum() *EventType { + p := new(EventType) + *p = x + return p +} + +func (x EventType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EventType) Descriptor() protoreflect.EnumDescriptor { + return file_flyteidl2_notification_definition_proto_enumTypes[0].Descriptor() +} + +func (EventType) Type() protoreflect.EnumType { + return &file_flyteidl2_notification_definition_proto_enumTypes[0] +} + +func (x EventType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EventType.Descriptor instead. +func (EventType) EnumDescriptor() ([]byte, []int) { + return file_flyteidl2_notification_definition_proto_rawDescGZIP(), []int{0} +} + +type HttpMethod int32 + +const ( + HttpMethod_HTTP_METHOD_UNSPECIFIED HttpMethod = 0 + HttpMethod_HTTP_METHOD_GET HttpMethod = 1 + HttpMethod_HTTP_METHOD_HEAD HttpMethod = 2 + HttpMethod_HTTP_METHOD_POST HttpMethod = 3 + HttpMethod_HTTP_METHOD_PUT HttpMethod = 4 + HttpMethod_HTTP_METHOD_DELETE HttpMethod = 5 + HttpMethod_HTTP_METHOD_CONNECT HttpMethod = 6 + HttpMethod_HTTP_METHOD_OPTIONS HttpMethod = 7 + HttpMethod_HTTP_METHOD_TRACE HttpMethod = 8 + HttpMethod_HTTP_METHOD_PATCH HttpMethod = 9 +) + +// Enum value maps for HttpMethod. +var ( + HttpMethod_name = map[int32]string{ + 0: "HTTP_METHOD_UNSPECIFIED", + 1: "HTTP_METHOD_GET", + 2: "HTTP_METHOD_HEAD", + 3: "HTTP_METHOD_POST", + 4: "HTTP_METHOD_PUT", + 5: "HTTP_METHOD_DELETE", + 6: "HTTP_METHOD_CONNECT", + 7: "HTTP_METHOD_OPTIONS", + 8: "HTTP_METHOD_TRACE", + 9: "HTTP_METHOD_PATCH", + } + HttpMethod_value = map[string]int32{ + "HTTP_METHOD_UNSPECIFIED": 0, + "HTTP_METHOD_GET": 1, + "HTTP_METHOD_HEAD": 2, + "HTTP_METHOD_POST": 3, + "HTTP_METHOD_PUT": 4, + "HTTP_METHOD_DELETE": 5, + "HTTP_METHOD_CONNECT": 6, + "HTTP_METHOD_OPTIONS": 7, + "HTTP_METHOD_TRACE": 8, + "HTTP_METHOD_PATCH": 9, + } +) + +func (x HttpMethod) Enum() *HttpMethod { + p := new(HttpMethod) + *p = x + return p +} + +func (x HttpMethod) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (HttpMethod) Descriptor() protoreflect.EnumDescriptor { + return file_flyteidl2_notification_definition_proto_enumTypes[1].Descriptor() +} + +func (HttpMethod) Type() protoreflect.EnumType { + return &file_flyteidl2_notification_definition_proto_enumTypes[1] +} + +func (x HttpMethod) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use HttpMethod.Descriptor instead. +func (HttpMethod) EnumDescriptor() ([]byte, []int) { + return file_flyteidl2_notification_definition_proto_rawDescGZIP(), []int{1} +} + +type DeliveryConfigTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Webhook *WebhookDeliveryTemplate `protobuf:"bytes,1,opt,name=webhook,proto3" json:"webhook,omitempty"` + Email *EmailDeliveryTemplate `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *DeliveryConfigTemplate) Reset() { + *x = DeliveryConfigTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeliveryConfigTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeliveryConfigTemplate) ProtoMessage() {} + +func (x *DeliveryConfigTemplate) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeliveryConfigTemplate.ProtoReflect.Descriptor instead. +func (*DeliveryConfigTemplate) Descriptor() ([]byte, []int) { + return file_flyteidl2_notification_definition_proto_rawDescGZIP(), []int{0} +} + +func (x *DeliveryConfigTemplate) GetWebhook() *WebhookDeliveryTemplate { + if x != nil { + return x.Webhook + } + return nil +} + +func (x *DeliveryConfigTemplate) GetEmail() *EmailDeliveryTemplate { + if x != nil { + return x.Email + } + return nil +} + +type RunCompletedNotificationTemplateData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Run *common.RunIdentifier `protobuf:"bytes,1,opt,name=run,proto3" json:"run,omitempty"` + Phase common.ActionPhase `protobuf:"varint,2,opt,name=phase,proto3,enum=flyteidl2.common.ActionPhase" json:"phase,omitempty"` + Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *RunCompletedNotificationTemplateData) Reset() { + *x = RunCompletedNotificationTemplateData{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RunCompletedNotificationTemplateData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunCompletedNotificationTemplateData) ProtoMessage() {} + +func (x *RunCompletedNotificationTemplateData) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunCompletedNotificationTemplateData.ProtoReflect.Descriptor instead. +func (*RunCompletedNotificationTemplateData) Descriptor() ([]byte, []int) { + return file_flyteidl2_notification_definition_proto_rawDescGZIP(), []int{1} +} + +func (x *RunCompletedNotificationTemplateData) GetRun() *common.RunIdentifier { + if x != nil { + return x.Run + } + return nil +} + +func (x *RunCompletedNotificationTemplateData) GetPhase() common.ActionPhase { + if x != nil { + return x.Phase + } + return common.ActionPhase(0) +} + +func (x *RunCompletedNotificationTemplateData) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type WebhookDeliveryTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + Method HttpMethod `protobuf:"varint,2,opt,name=method,proto3,enum=flyteidl2.notification.HttpMethod" json:"method,omitempty"` + Headers map[string]string `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + BodyTemplate string `protobuf:"bytes,4,opt,name=body_template,json=bodyTemplate,proto3" json:"body_template,omitempty"` // this is a Go template that may contain placeholders +} + +func (x *WebhookDeliveryTemplate) Reset() { + *x = WebhookDeliveryTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WebhookDeliveryTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WebhookDeliveryTemplate) ProtoMessage() {} + +func (x *WebhookDeliveryTemplate) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WebhookDeliveryTemplate.ProtoReflect.Descriptor instead. +func (*WebhookDeliveryTemplate) Descriptor() ([]byte, []int) { + return file_flyteidl2_notification_definition_proto_rawDescGZIP(), []int{2} +} + +func (x *WebhookDeliveryTemplate) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *WebhookDeliveryTemplate) GetMethod() HttpMethod { + if x != nil { + return x.Method + } + return HttpMethod_HTTP_METHOD_UNSPECIFIED +} + +func (x *WebhookDeliveryTemplate) GetHeaders() map[string]string { + if x != nil { + return x.Headers + } + return nil +} + +func (x *WebhookDeliveryTemplate) GetBodyTemplate() string { + if x != nil { + return x.BodyTemplate + } + return "" +} + +type EmailRecipient struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *EmailRecipient) Reset() { + *x = EmailRecipient{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EmailRecipient) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmailRecipient) ProtoMessage() {} + +func (x *EmailRecipient) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmailRecipient.ProtoReflect.Descriptor instead. +func (*EmailRecipient) Descriptor() ([]byte, []int) { + return file_flyteidl2_notification_definition_proto_rawDescGZIP(), []int{3} +} + +func (x *EmailRecipient) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *EmailRecipient) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type EmailDeliveryTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Subject string `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` // this is a Go template that may contain placeholders + To []*EmailRecipient `protobuf:"bytes,2,rep,name=to,proto3" json:"to,omitempty"` + Cc []*EmailRecipient `protobuf:"bytes,3,rep,name=cc,proto3" json:"cc,omitempty"` + Bcc []*EmailRecipient `protobuf:"bytes,4,rep,name=bcc,proto3" json:"bcc,omitempty"` + HtmlTemplate string `protobuf:"bytes,5,opt,name=html_template,json=htmlTemplate,proto3" json:"html_template,omitempty"` // this is a Go template that may contain placeholders + TextTemplate string `protobuf:"bytes,6,opt,name=text_template,json=textTemplate,proto3" json:"text_template,omitempty"` // this is a Go template that may contain placeholders +} + +func (x *EmailDeliveryTemplate) Reset() { + *x = EmailDeliveryTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EmailDeliveryTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmailDeliveryTemplate) ProtoMessage() {} + +func (x *EmailDeliveryTemplate) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_notification_definition_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EmailDeliveryTemplate.ProtoReflect.Descriptor instead. +func (*EmailDeliveryTemplate) Descriptor() ([]byte, []int) { + return file_flyteidl2_notification_definition_proto_rawDescGZIP(), []int{4} +} + +func (x *EmailDeliveryTemplate) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *EmailDeliveryTemplate) GetTo() []*EmailRecipient { + if x != nil { + return x.To + } + return nil +} + +func (x *EmailDeliveryTemplate) GetCc() []*EmailRecipient { + if x != nil { + return x.Cc + } + return nil +} + +func (x *EmailDeliveryTemplate) GetBcc() []*EmailRecipient { + if x != nil { + return x.Bcc + } + return nil +} + +func (x *EmailDeliveryTemplate) GetHtmlTemplate() string { + if x != nil { + return x.HtmlTemplate + } + return "" +} + +func (x *EmailDeliveryTemplate) GetTextTemplate() string { + if x != nil { + return x.TextTemplate + } + return "" +} + +var File_flyteidl2_notification_definition_proto protoreflect.FileDescriptor + +var file_flyteidl2_notification_definition_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1c, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x9e, 0x02, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x77, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x44, 0x65, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x07, 0x77, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x43, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6d, + 0x61, 0x69, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, 0x74, 0xba, 0x48, 0x71, 0x1a, + 0x6f, 0x0a, 0x15, 0x61, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x6e, 0x65, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x30, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, + 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, + 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x24, 0x68, 0x61, 0x73, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x29, 0x20, 0x7c, 0x7c, + 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x29, + 0x22, 0xac, 0x01, 0x0a, 0x24, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x03, 0x72, 0x75, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, + 0x03, 0x72, 0x75, 0x6e, 0x12, 0x33, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, 0x61, + 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0xd0, 0x02, 0x0a, 0x17, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x44, 0x65, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x03, 0x75, + 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0xd0, 0x0f, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x44, 0x0a, 0x06, 0x6d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, + 0x70, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, + 0x6b, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x18, + 0xba, 0x48, 0x15, 0x9a, 0x01, 0x12, 0x10, 0x14, 0x22, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x14, + 0x2a, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x32, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x6f, 0x64, 0x79, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x0e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, 0x69, 0x70, + 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0xc1, 0x02, 0x0a, 0x15, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x07, + 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x40, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, + 0x65, 0x6e, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, + 0x6f, 0x12, 0x36, 0x0a, 0x02, 0x63, 0x63, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, 0x69, + 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x02, 0x63, 0x63, 0x12, 0x38, 0x0a, 0x03, 0x62, 0x63, 0x63, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x03, + 0x62, 0x63, 0x63, 0x12, 0x2c, 0x0a, 0x0d, 0x68, 0x74, 0x6d, 0x6c, 0x5f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x0c, 0x68, 0x74, 0x6d, 0x6c, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x45, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x55, + 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x01, 0x2a, 0xf7, 0x01, + 0x0a, 0x0a, 0x48, 0x74, 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1b, 0x0a, 0x17, + 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x54, 0x54, + 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x01, 0x12, 0x14, + 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x48, 0x45, + 0x41, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, + 0x48, 0x4f, 0x44, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x54, + 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x50, 0x55, 0x54, 0x10, 0x04, 0x12, + 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, + 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x5f, + 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x10, 0x06, + 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, + 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x48, 0x54, 0x54, + 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x08, + 0x12, 0x15, 0x0a, 0x11, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, + 0x50, 0x41, 0x54, 0x43, 0x48, 0x10, 0x09, 0x42, 0xe4, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, + 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, + 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x4e, 0x58, 0xaa, 0x02, 0x16, + 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x16, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x5c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, + 0x02, 0x22, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x17, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x3a, 0x3a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_flyteidl2_notification_definition_proto_rawDescOnce sync.Once + file_flyteidl2_notification_definition_proto_rawDescData = file_flyteidl2_notification_definition_proto_rawDesc +) + +func file_flyteidl2_notification_definition_proto_rawDescGZIP() []byte { + file_flyteidl2_notification_definition_proto_rawDescOnce.Do(func() { + file_flyteidl2_notification_definition_proto_rawDescData = protoimpl.X.CompressGZIP(file_flyteidl2_notification_definition_proto_rawDescData) + }) + return file_flyteidl2_notification_definition_proto_rawDescData +} + +var file_flyteidl2_notification_definition_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_flyteidl2_notification_definition_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_flyteidl2_notification_definition_proto_goTypes = []interface{}{ + (EventType)(0), // 0: flyteidl2.notification.EventType + (HttpMethod)(0), // 1: flyteidl2.notification.HttpMethod + (*DeliveryConfigTemplate)(nil), // 2: flyteidl2.notification.DeliveryConfigTemplate + (*RunCompletedNotificationTemplateData)(nil), // 3: flyteidl2.notification.RunCompletedNotificationTemplateData + (*WebhookDeliveryTemplate)(nil), // 4: flyteidl2.notification.WebhookDeliveryTemplate + (*EmailRecipient)(nil), // 5: flyteidl2.notification.EmailRecipient + (*EmailDeliveryTemplate)(nil), // 6: flyteidl2.notification.EmailDeliveryTemplate + nil, // 7: flyteidl2.notification.WebhookDeliveryTemplate.HeadersEntry + (*common.RunIdentifier)(nil), // 8: flyteidl2.common.RunIdentifier + (common.ActionPhase)(0), // 9: flyteidl2.common.ActionPhase +} +var file_flyteidl2_notification_definition_proto_depIdxs = []int32{ + 4, // 0: flyteidl2.notification.DeliveryConfigTemplate.webhook:type_name -> flyteidl2.notification.WebhookDeliveryTemplate + 6, // 1: flyteidl2.notification.DeliveryConfigTemplate.email:type_name -> flyteidl2.notification.EmailDeliveryTemplate + 8, // 2: flyteidl2.notification.RunCompletedNotificationTemplateData.run:type_name -> flyteidl2.common.RunIdentifier + 9, // 3: flyteidl2.notification.RunCompletedNotificationTemplateData.phase:type_name -> flyteidl2.common.ActionPhase + 1, // 4: flyteidl2.notification.WebhookDeliveryTemplate.method:type_name -> flyteidl2.notification.HttpMethod + 7, // 5: flyteidl2.notification.WebhookDeliveryTemplate.headers:type_name -> flyteidl2.notification.WebhookDeliveryTemplate.HeadersEntry + 5, // 6: flyteidl2.notification.EmailDeliveryTemplate.to:type_name -> flyteidl2.notification.EmailRecipient + 5, // 7: flyteidl2.notification.EmailDeliveryTemplate.cc:type_name -> flyteidl2.notification.EmailRecipient + 5, // 8: flyteidl2.notification.EmailDeliveryTemplate.bcc:type_name -> flyteidl2.notification.EmailRecipient + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_flyteidl2_notification_definition_proto_init() } +func file_flyteidl2_notification_definition_proto_init() { + if File_flyteidl2_notification_definition_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_flyteidl2_notification_definition_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeliveryConfigTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_flyteidl2_notification_definition_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RunCompletedNotificationTemplateData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_flyteidl2_notification_definition_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WebhookDeliveryTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_flyteidl2_notification_definition_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EmailRecipient); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_flyteidl2_notification_definition_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EmailDeliveryTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_flyteidl2_notification_definition_proto_rawDesc, + NumEnums: 2, + NumMessages: 6, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_flyteidl2_notification_definition_proto_goTypes, + DependencyIndexes: file_flyteidl2_notification_definition_proto_depIdxs, + EnumInfos: file_flyteidl2_notification_definition_proto_enumTypes, + MessageInfos: file_flyteidl2_notification_definition_proto_msgTypes, + }.Build() + File_flyteidl2_notification_definition_proto = out.File + file_flyteidl2_notification_definition_proto_rawDesc = nil + file_flyteidl2_notification_definition_proto_goTypes = nil + file_flyteidl2_notification_definition_proto_depIdxs = nil +} diff --git a/gen/go/flyteidl2/notification/definition.pb.validate.go b/gen/go/flyteidl2/notification/definition.pb.validate.go new file mode 100644 index 0000000000..4347577e71 --- /dev/null +++ b/gen/go/flyteidl2/notification/definition.pb.validate.go @@ -0,0 +1,762 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: flyteidl2/notification/definition.proto + +package notification + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" + + common "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort + + _ = common.ActionPhase(0) +) + +// Validate checks the field values on DeliveryConfigTemplate with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *DeliveryConfigTemplate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeliveryConfigTemplate with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DeliveryConfigTemplateMultiError, or nil if none found. +func (m *DeliveryConfigTemplate) ValidateAll() error { + return m.validate(true) +} + +func (m *DeliveryConfigTemplate) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeliveryConfigTemplateValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeliveryConfigTemplateValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeliveryConfigTemplateValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if all { + switch v := interface{}(m.GetEmail()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeliveryConfigTemplateValidationError{ + field: "Email", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeliveryConfigTemplateValidationError{ + field: "Email", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEmail()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DeliveryConfigTemplateValidationError{ + field: "Email", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return DeliveryConfigTemplateMultiError(errors) + } + + return nil +} + +// DeliveryConfigTemplateMultiError is an error wrapping multiple validation +// errors returned by DeliveryConfigTemplate.ValidateAll() if the designated +// constraints aren't met. +type DeliveryConfigTemplateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeliveryConfigTemplateMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DeliveryConfigTemplateMultiError) AllErrors() []error { return m } + +// DeliveryConfigTemplateValidationError is the validation error returned by +// DeliveryConfigTemplate.Validate if the designated constraints aren't met. +type DeliveryConfigTemplateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DeliveryConfigTemplateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DeliveryConfigTemplateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DeliveryConfigTemplateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DeliveryConfigTemplateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DeliveryConfigTemplateValidationError) ErrorName() string { + return "DeliveryConfigTemplateValidationError" +} + +// Error satisfies the builtin error interface +func (e DeliveryConfigTemplateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDeliveryConfigTemplate.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DeliveryConfigTemplateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DeliveryConfigTemplateValidationError{} + +// Validate checks the field values on RunCompletedNotificationTemplateData +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *RunCompletedNotificationTemplateData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RunCompletedNotificationTemplateData +// with the rules defined in the proto definition for this message. If any +// rules are violated, the result is a list of violation errors wrapped in +// RunCompletedNotificationTemplateDataMultiError, or nil if none found. +func (m *RunCompletedNotificationTemplateData) ValidateAll() error { + return m.validate(true) +} + +func (m *RunCompletedNotificationTemplateData) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetRun()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RunCompletedNotificationTemplateDataValidationError{ + field: "Run", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RunCompletedNotificationTemplateDataValidationError{ + field: "Run", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRun()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RunCompletedNotificationTemplateDataValidationError{ + field: "Run", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Phase + + // no validation rules for Error + + if len(errors) > 0 { + return RunCompletedNotificationTemplateDataMultiError(errors) + } + + return nil +} + +// RunCompletedNotificationTemplateDataMultiError is an error wrapping multiple +// validation errors returned by +// RunCompletedNotificationTemplateData.ValidateAll() if the designated +// constraints aren't met. +type RunCompletedNotificationTemplateDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RunCompletedNotificationTemplateDataMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RunCompletedNotificationTemplateDataMultiError) AllErrors() []error { return m } + +// RunCompletedNotificationTemplateDataValidationError is the validation error +// returned by RunCompletedNotificationTemplateData.Validate if the designated +// constraints aren't met. +type RunCompletedNotificationTemplateDataValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RunCompletedNotificationTemplateDataValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RunCompletedNotificationTemplateDataValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RunCompletedNotificationTemplateDataValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RunCompletedNotificationTemplateDataValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RunCompletedNotificationTemplateDataValidationError) ErrorName() string { + return "RunCompletedNotificationTemplateDataValidationError" +} + +// Error satisfies the builtin error interface +func (e RunCompletedNotificationTemplateDataValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRunCompletedNotificationTemplateData.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RunCompletedNotificationTemplateDataValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RunCompletedNotificationTemplateDataValidationError{} + +// Validate checks the field values on WebhookDeliveryTemplate with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *WebhookDeliveryTemplate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebhookDeliveryTemplate with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// WebhookDeliveryTemplateMultiError, or nil if none found. +func (m *WebhookDeliveryTemplate) ValidateAll() error { + return m.validate(true) +} + +func (m *WebhookDeliveryTemplate) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Url + + // no validation rules for Method + + // no validation rules for Headers + + // no validation rules for BodyTemplate + + if len(errors) > 0 { + return WebhookDeliveryTemplateMultiError(errors) + } + + return nil +} + +// WebhookDeliveryTemplateMultiError is an error wrapping multiple validation +// errors returned by WebhookDeliveryTemplate.ValidateAll() if the designated +// constraints aren't met. +type WebhookDeliveryTemplateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebhookDeliveryTemplateMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WebhookDeliveryTemplateMultiError) AllErrors() []error { return m } + +// WebhookDeliveryTemplateValidationError is the validation error returned by +// WebhookDeliveryTemplate.Validate if the designated constraints aren't met. +type WebhookDeliveryTemplateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WebhookDeliveryTemplateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WebhookDeliveryTemplateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WebhookDeliveryTemplateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WebhookDeliveryTemplateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WebhookDeliveryTemplateValidationError) ErrorName() string { + return "WebhookDeliveryTemplateValidationError" +} + +// Error satisfies the builtin error interface +func (e WebhookDeliveryTemplateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWebhookDeliveryTemplate.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WebhookDeliveryTemplateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WebhookDeliveryTemplateValidationError{} + +// Validate checks the field values on EmailRecipient with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *EmailRecipient) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EmailRecipient with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in EmailRecipientMultiError, +// or nil if none found. +func (m *EmailRecipient) ValidateAll() error { + return m.validate(true) +} + +func (m *EmailRecipient) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Name + + // no validation rules for Address + + if len(errors) > 0 { + return EmailRecipientMultiError(errors) + } + + return nil +} + +// EmailRecipientMultiError is an error wrapping multiple validation errors +// returned by EmailRecipient.ValidateAll() if the designated constraints +// aren't met. +type EmailRecipientMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EmailRecipientMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m EmailRecipientMultiError) AllErrors() []error { return m } + +// EmailRecipientValidationError is the validation error returned by +// EmailRecipient.Validate if the designated constraints aren't met. +type EmailRecipientValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e EmailRecipientValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e EmailRecipientValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e EmailRecipientValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e EmailRecipientValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e EmailRecipientValidationError) ErrorName() string { return "EmailRecipientValidationError" } + +// Error satisfies the builtin error interface +func (e EmailRecipientValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sEmailRecipient.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = EmailRecipientValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = EmailRecipientValidationError{} + +// Validate checks the field values on EmailDeliveryTemplate with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *EmailDeliveryTemplate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EmailDeliveryTemplate with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// EmailDeliveryTemplateMultiError, or nil if none found. +func (m *EmailDeliveryTemplate) ValidateAll() error { + return m.validate(true) +} + +func (m *EmailDeliveryTemplate) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Subject + + for idx, item := range m.GetTo() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("To[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("To[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("To[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetCc() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("Cc[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("Cc[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("Cc[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetBcc() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("Bcc[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("Bcc[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return EmailDeliveryTemplateValidationError{ + field: fmt.Sprintf("Bcc[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for HtmlTemplate + + // no validation rules for TextTemplate + + if len(errors) > 0 { + return EmailDeliveryTemplateMultiError(errors) + } + + return nil +} + +// EmailDeliveryTemplateMultiError is an error wrapping multiple validation +// errors returned by EmailDeliveryTemplate.ValidateAll() if the designated +// constraints aren't met. +type EmailDeliveryTemplateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EmailDeliveryTemplateMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m EmailDeliveryTemplateMultiError) AllErrors() []error { return m } + +// EmailDeliveryTemplateValidationError is the validation error returned by +// EmailDeliveryTemplate.Validate if the designated constraints aren't met. +type EmailDeliveryTemplateValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e EmailDeliveryTemplateValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e EmailDeliveryTemplateValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e EmailDeliveryTemplateValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e EmailDeliveryTemplateValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e EmailDeliveryTemplateValidationError) ErrorName() string { + return "EmailDeliveryTemplateValidationError" +} + +// Error satisfies the builtin error interface +func (e EmailDeliveryTemplateValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sEmailDeliveryTemplate.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = EmailDeliveryTemplateValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = EmailDeliveryTemplateValidationError{} diff --git a/gen/go/flyteidl2/secret/payload.pb.go b/gen/go/flyteidl2/secret/payload.pb.go index 850a9227bc..abbd6e356f 100644 --- a/gen/go/flyteidl2/secret/payload.pb.go +++ b/gen/go/flyteidl2/secret/payload.pb.go @@ -218,6 +218,9 @@ type GetSecretRequest struct { unknownFields protoimpl.UnknownFields Id *SecretIdentifier `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included. + // If false (default), system secrets will be hidden and return NotFound. + IncludeSystemSecrets bool `protobuf:"varint,2,opt,name=include_system_secrets,json=includeSystemSecrets,proto3" json:"include_system_secrets,omitempty"` } func (x *GetSecretRequest) Reset() { @@ -259,6 +262,13 @@ func (x *GetSecretRequest) GetId() *SecretIdentifier { return nil } +func (x *GetSecretRequest) GetIncludeSystemSecrets() bool { + if x != nil { + return x.IncludeSystemSecrets + } + return false +} + // GetSecretProxyResponse returns the looked up secret from the secret service type GetSecretResponse struct { state protoimpl.MessageState @@ -315,6 +325,9 @@ type DeleteSecretRequest struct { // name to be used for looking up the secret Id *SecretIdentifier `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) can be deleted. + // If false (default), attempting to delete a system secret will return NotFound. + IncludeSystemSecrets bool `protobuf:"varint,2,opt,name=include_system_secrets,json=includeSystemSecrets,proto3" json:"include_system_secrets,omitempty"` } func (x *DeleteSecretRequest) Reset() { @@ -356,6 +369,13 @@ func (x *DeleteSecretRequest) GetId() *SecretIdentifier { return nil } +func (x *DeleteSecretRequest) GetIncludeSystemSecrets() bool { + if x != nil { + return x.IncludeSystemSecrets + } + return false +} + // DeleteSecretResponse is an empty response right now on successfully deleting the secret. type DeleteSecretResponse struct { state protoimpl.MessageState @@ -418,6 +438,9 @@ type ListSecretsRequest struct { // The client can use the next token for each cluster to fetch the next page of results. // In multi cluster, inorder to page through next set of results, client needs to send this token in the next request PerClusterTokens map[string]string `protobuf:"bytes,6,rep,name=per_cluster_tokens,json=perClusterTokens,proto3" json:"per_cluster_tokens,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included in results. + // If false (default), system secrets will be filtered out. + IncludeSystemSecrets bool `protobuf:"varint,7,opt,name=include_system_secrets,json=includeSystemSecrets,proto3" json:"include_system_secrets,omitempty"` } func (x *ListSecretsRequest) Reset() { @@ -494,6 +517,13 @@ func (x *ListSecretsRequest) GetPerClusterTokens() map[string]string { return nil } +func (x *ListSecretsRequest) GetIncludeSystemSecrets() bool { + if x != nil { + return x.IncludeSystemSecrets + } + return false +} + // ListSecretsResponse returns paginated results of the accessible secrets at the scope defined in the request. type ListSecretsResponse struct { state protoimpl.MessageState @@ -594,73 +624,83 @@ var file_flyteidl2_secret_payload_proto_rawDesc = []byte{ 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, - 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x45, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, - 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, + 0x45, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x06, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x68, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, - 0x51, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc5, 0x02, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x68, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x3a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x70, 0x65, 0x72, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x43, 0x0a, - 0x15, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x8f, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x69, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x70, - 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, - 0x43, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x42, 0xbd, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x0c, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, - 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x46, 0x53, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0xca, 0x02, - 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x70, 0x65, 0x72, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8f, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x69, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x5f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x70, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0xbd, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x42, 0x0c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, + 0x02, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, + 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x46, 0x53, 0x58, 0xaa, + 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x3a, 0x3a, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/gen/go/flyteidl2/secret/payload.pb.validate.go b/gen/go/flyteidl2/secret/payload.pb.validate.go index 4b90be3747..eab5157a16 100644 --- a/gen/go/flyteidl2/secret/payload.pb.validate.go +++ b/gen/go/flyteidl2/secret/payload.pb.validate.go @@ -610,6 +610,8 @@ func (m *GetSecretRequest) validate(all bool) error { } } + // no validation rules for IncludeSystemSecrets + if len(errors) > 0 { return GetSecretRequestMultiError(errors) } @@ -870,6 +872,8 @@ func (m *DeleteSecretRequest) validate(all bool) error { } } + // no validation rules for IncludeSystemSecrets + if len(errors) > 0 { return DeleteSecretRequestMultiError(errors) } @@ -1086,6 +1090,8 @@ func (m *ListSecretsRequest) validate(all bool) error { // no validation rules for PerClusterTokens + // no validation rules for IncludeSystemSecrets + if len(errors) > 0 { return ListSecretsRequestMultiError(errors) } diff --git a/gen/go/flyteidl2/task/mocks/is_inline_rule_delivery.go b/gen/go/flyteidl2/task/mocks/is_inline_rule_delivery.go new file mode 100644 index 0000000000..6d23c803ef --- /dev/null +++ b/gen/go/flyteidl2/task/mocks/is_inline_rule_delivery.go @@ -0,0 +1,64 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import mock "github.com/stretchr/testify/mock" + +// isInlineRule_Delivery is an autogenerated mock type for the isInlineRule_Delivery type +type isInlineRule_Delivery struct { + mock.Mock +} + +type isInlineRule_Delivery_Expecter struct { + mock *mock.Mock +} + +func (_m *isInlineRule_Delivery) EXPECT() *isInlineRule_Delivery_Expecter { + return &isInlineRule_Delivery_Expecter{mock: &_m.Mock} +} + +// isInlineRule_Delivery provides a mock function with no fields +func (_m *isInlineRule_Delivery) isInlineRule_Delivery() { + _m.Called() +} + +// isInlineRule_Delivery_isInlineRule_Delivery_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'isInlineRule_Delivery' +type isInlineRule_Delivery_isInlineRule_Delivery_Call struct { + *mock.Call +} + +// isInlineRule_Delivery is a helper method to define mock.On call +func (_e *isInlineRule_Delivery_Expecter) isInlineRule_Delivery() *isInlineRule_Delivery_isInlineRule_Delivery_Call { + return &isInlineRule_Delivery_isInlineRule_Delivery_Call{Call: _e.mock.On("isInlineRule_Delivery")} +} + +func (_c *isInlineRule_Delivery_isInlineRule_Delivery_Call) Run(run func()) *isInlineRule_Delivery_isInlineRule_Delivery_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *isInlineRule_Delivery_isInlineRule_Delivery_Call) Return() *isInlineRule_Delivery_isInlineRule_Delivery_Call { + _c.Call.Return() + return _c +} + +func (_c *isInlineRule_Delivery_isInlineRule_Delivery_Call) RunAndReturn(run func()) *isInlineRule_Delivery_isInlineRule_Delivery_Call { + _c.Run(run) + return _c +} + +// newIsInlineRule_Delivery creates a new instance of isInlineRule_Delivery. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func newIsInlineRule_Delivery(t interface { + mock.TestingT + Cleanup(func()) +}) *isInlineRule_Delivery { + mock := &isInlineRule_Delivery{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/gen/go/flyteidl2/task/mocks/is_run_spec_notification_settings.go b/gen/go/flyteidl2/task/mocks/is_run_spec_notification_settings.go new file mode 100644 index 0000000000..0537392fbc --- /dev/null +++ b/gen/go/flyteidl2/task/mocks/is_run_spec_notification_settings.go @@ -0,0 +1,64 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import mock "github.com/stretchr/testify/mock" + +// isRunSpec_NotificationSettings is an autogenerated mock type for the isRunSpec_NotificationSettings type +type isRunSpec_NotificationSettings struct { + mock.Mock +} + +type isRunSpec_NotificationSettings_Expecter struct { + mock *mock.Mock +} + +func (_m *isRunSpec_NotificationSettings) EXPECT() *isRunSpec_NotificationSettings_Expecter { + return &isRunSpec_NotificationSettings_Expecter{mock: &_m.Mock} +} + +// isRunSpec_NotificationSettings provides a mock function with no fields +func (_m *isRunSpec_NotificationSettings) isRunSpec_NotificationSettings() { + _m.Called() +} + +// isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'isRunSpec_NotificationSettings' +type isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call struct { + *mock.Call +} + +// isRunSpec_NotificationSettings is a helper method to define mock.On call +func (_e *isRunSpec_NotificationSettings_Expecter) isRunSpec_NotificationSettings() *isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call { + return &isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call{Call: _e.mock.On("isRunSpec_NotificationSettings")} +} + +func (_c *isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call) Run(run func()) *isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call) Return() *isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call { + _c.Call.Return() + return _c +} + +func (_c *isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call) RunAndReturn(run func()) *isRunSpec_NotificationSettings_isRunSpec_NotificationSettings_Call { + _c.Run(run) + return _c +} + +// newIsRunSpec_NotificationSettings creates a new instance of isRunSpec_NotificationSettings. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func newIsRunSpec_NotificationSettings(t interface { + mock.TestingT + Cleanup(func()) +}) *isRunSpec_NotificationSettings { + mock := &isRunSpec_NotificationSettings{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/gen/go/flyteidl2/task/run.pb.go b/gen/go/flyteidl2/task/run.pb.go index 2cc31e9bf9..809431f5e7 100644 --- a/gen/go/flyteidl2/task/run.pb.go +++ b/gen/go/flyteidl2/task/run.pb.go @@ -7,7 +7,10 @@ package task import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + common "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" core "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/core" + notification "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/notification" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" @@ -367,6 +370,13 @@ type RunSpec struct { SecurityContext *core.SecurityContext `protobuf:"bytes,8,opt,name=security_context,json=securityContext,proto3" json:"security_context,omitempty"` // CacheConfig contains configurations that influence the behavior of cache reads and writes CacheConfig *CacheConfig `protobuf:"bytes,9,opt,name=cache_config,json=cacheConfig,proto3" json:"cache_config,omitempty"` + // Optionally, you can send a notification when your run completes. + // + // Types that are assignable to NotificationSettings: + // + // *RunSpec_NotificationRuleName + // *RunSpec_NotificationRules + NotificationSettings isRunSpec_NotificationSettings `protobuf_oneof:"notification_settings"` } func (x *RunSpec) Reset() { @@ -465,102 +475,315 @@ func (x *RunSpec) GetCacheConfig() *CacheConfig { return nil } +func (m *RunSpec) GetNotificationSettings() isRunSpec_NotificationSettings { + if m != nil { + return m.NotificationSettings + } + return nil +} + +func (x *RunSpec) GetNotificationRuleName() string { + if x, ok := x.GetNotificationSettings().(*RunSpec_NotificationRuleName); ok { + return x.NotificationRuleName + } + return "" +} + +func (x *RunSpec) GetNotificationRules() *InlineRuleList { + if x, ok := x.GetNotificationSettings().(*RunSpec_NotificationRules); ok { + return x.NotificationRules + } + return nil +} + +type isRunSpec_NotificationSettings interface { + isRunSpec_NotificationSettings() +} + +type RunSpec_NotificationRuleName struct { + NotificationRuleName string `protobuf:"bytes,10,opt,name=notification_rule_name,json=notificationRuleName,proto3,oneof"` // either refer to a previously stored notification rule +} + +type RunSpec_NotificationRules struct { + NotificationRules *InlineRuleList `protobuf:"bytes,11,opt,name=notification_rules,json=notificationRules,proto3,oneof"` // either define an inline one-off rule +} + +func (*RunSpec_NotificationRuleName) isRunSpec_NotificationSettings() {} + +func (*RunSpec_NotificationRules) isRunSpec_NotificationSettings() {} + +type InlineRuleList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rules []*InlineRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` +} + +func (x *InlineRuleList) Reset() { + *x = InlineRuleList{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_task_run_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InlineRuleList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InlineRuleList) ProtoMessage() {} + +func (x *InlineRuleList) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_task_run_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InlineRuleList.ProtoReflect.Descriptor instead. +func (*InlineRuleList) Descriptor() ([]byte, []int) { + return file_flyteidl2_task_run_proto_rawDescGZIP(), []int{6} +} + +func (x *InlineRuleList) GetRules() []*InlineRule { + if x != nil { + return x.Rules + } + return nil +} + +type InlineRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OnPhases []common.ActionPhase `protobuf:"varint,1,rep,packed,name=on_phases,json=onPhases,proto3,enum=flyteidl2.common.ActionPhase" json:"on_phases,omitempty"` + // Types that are assignable to Delivery: + // + // *InlineRule_DeliveryConfigName + // *InlineRule_DeliveryTemplate + Delivery isInlineRule_Delivery `protobuf_oneof:"delivery"` +} + +func (x *InlineRule) Reset() { + *x = InlineRule{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_task_run_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InlineRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InlineRule) ProtoMessage() {} + +func (x *InlineRule) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_task_run_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InlineRule.ProtoReflect.Descriptor instead. +func (*InlineRule) Descriptor() ([]byte, []int) { + return file_flyteidl2_task_run_proto_rawDescGZIP(), []int{7} +} + +func (x *InlineRule) GetOnPhases() []common.ActionPhase { + if x != nil { + return x.OnPhases + } + return nil +} + +func (m *InlineRule) GetDelivery() isInlineRule_Delivery { + if m != nil { + return m.Delivery + } + return nil +} + +func (x *InlineRule) GetDeliveryConfigName() string { + if x, ok := x.GetDelivery().(*InlineRule_DeliveryConfigName); ok { + return x.DeliveryConfigName + } + return "" +} + +func (x *InlineRule) GetDeliveryTemplate() *notification.DeliveryConfigTemplate { + if x, ok := x.GetDelivery().(*InlineRule_DeliveryTemplate); ok { + return x.DeliveryTemplate + } + return nil +} + +type isInlineRule_Delivery interface { + isInlineRule_Delivery() +} + +type InlineRule_DeliveryConfigName struct { + // (run org + delivery_config_name) will be used as a delivery config id + DeliveryConfigName string `protobuf:"bytes,2,opt,name=delivery_config_name,json=deliveryConfigName,proto3,oneof"` +} + +type InlineRule_DeliveryTemplate struct { + // template can only have fields defined in flyteidl2.notification.RunCompletedNotificationTemplateData + DeliveryTemplate *notification.DeliveryConfigTemplate `protobuf:"bytes,3,opt,name=delivery_template,json=deliveryTemplate,proto3,oneof"` +} + +func (*InlineRule_DeliveryConfigName) isInlineRule_Delivery() {} + +func (*InlineRule_DeliveryTemplate) isInlineRule_Delivery() {} + var File_flyteidl2_task_run_proto protoreflect.FileDescriptor var file_flyteidl2_task_run_proto_rawDesc = []byte{ 0x0a, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x72, 0x75, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x1a, 0x1d, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6c, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7f, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, + 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7f, 0x0a, 0x06, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x89, 0x01, + 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x04, 0x45, 0x6e, 0x76, 0x73, 0x12, 0x34, 0x0a, - 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4b, - 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x0e, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x61, 0x77, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x86, 0x01, - 0x0a, 0x0b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, - 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, - 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x52, 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x22, 0x81, 0x04, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x53, 0x70, - 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x28, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x2e, 0x45, 0x6e, 0x76, 0x73, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x40, 0x0a, 0x0d, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, - 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x10, 0x72, 0x61, 0x77, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, - 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x0e, - 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x4a, - 0x0a, 0x10, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, - 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2a, 0x7c, 0x0a, 0x10, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x22, - 0x0a, 0x1e, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x53, - 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, - 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, - 0x01, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, - 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, - 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x42, 0xad, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x42, - 0x08, 0x52, 0x75, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, 0x32, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, - 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, - 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, - 0x6b, 0xa2, 0x02, 0x03, 0x46, 0x54, 0x58, 0xaa, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0xca, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0xe2, 0x02, 0x1a, 0x46, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x3a, 0x3a, 0x54, 0x61, 0x73, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x04, 0x45, 0x6e, 0x76, + 0x73, 0x12, 0x34, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x0e, 0x52, 0x61, 0x77, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x61, 0x77, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, + 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x4c, + 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x22, 0xa3, 0x05, 0x0a, 0x07, 0x52, + 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x45, 0x6e, 0x76, 0x73, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, + 0x40, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x62, 0x6c, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x2b, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, + 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x10, 0x72, 0x61, 0x77, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, + 0x61, 0x73, 0x6b, 0x2e, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x52, 0x0e, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0f, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, + 0x0a, 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x0b, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, + 0x0a, 0x16, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x14, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x75, + 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, + 0x61, 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x11, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x42, 0x17, 0x0a, 0x15, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x22, 0x4c, 0x0a, 0x0e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x87, + 0x02, 0x0a, 0x0a, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x53, 0x0a, + 0x09, 0x6f, 0x6e, 0x5f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x42, + 0x17, 0xba, 0x48, 0x14, 0x92, 0x01, 0x11, 0x08, 0x01, 0x18, 0x01, 0x22, 0x0b, 0x82, 0x01, 0x08, + 0x18, 0x05, 0x18, 0x06, 0x18, 0x07, 0x18, 0x08, 0x52, 0x08, 0x6f, 0x6e, 0x50, 0x68, 0x61, 0x73, + 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x79, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x69, 0x76, + 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x48, 0x00, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x11, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x79, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x2a, 0x7c, 0x0a, 0x10, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x1e, + 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, + 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x01, 0x12, + 0x25, 0x0a, 0x21, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, + 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x4f, + 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x42, 0xad, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x42, 0x08, 0x52, + 0x75, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, + 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, + 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0xa2, + 0x02, 0x03, 0x46, 0x54, 0x58, 0xaa, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0xca, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0xe2, 0x02, 0x1a, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x3a, 0x3a, 0x54, 0x61, 0x73, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -576,7 +799,7 @@ func file_flyteidl2_task_run_proto_rawDescGZIP() []byte { } var file_flyteidl2_task_run_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_flyteidl2_task_run_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_flyteidl2_task_run_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_flyteidl2_task_run_proto_goTypes = []interface{}{ (CacheLookupScope)(0), // 0: flyteidl2.task.CacheLookupScope (*Labels)(nil), // 1: flyteidl2.task.Labels @@ -585,29 +808,37 @@ var file_flyteidl2_task_run_proto_goTypes = []interface{}{ (*RawDataStorage)(nil), // 4: flyteidl2.task.RawDataStorage (*CacheConfig)(nil), // 5: flyteidl2.task.CacheConfig (*RunSpec)(nil), // 6: flyteidl2.task.RunSpec - nil, // 7: flyteidl2.task.Labels.ValuesEntry - nil, // 8: flyteidl2.task.Annotations.ValuesEntry - (*core.KeyValuePair)(nil), // 9: flyteidl2.core.KeyValuePair - (*wrapperspb.BoolValue)(nil), // 10: google.protobuf.BoolValue - (*core.SecurityContext)(nil), // 11: flyteidl2.core.SecurityContext + (*InlineRuleList)(nil), // 7: flyteidl2.task.InlineRuleList + (*InlineRule)(nil), // 8: flyteidl2.task.InlineRule + nil, // 9: flyteidl2.task.Labels.ValuesEntry + nil, // 10: flyteidl2.task.Annotations.ValuesEntry + (*core.KeyValuePair)(nil), // 11: flyteidl2.core.KeyValuePair + (*wrapperspb.BoolValue)(nil), // 12: google.protobuf.BoolValue + (*core.SecurityContext)(nil), // 13: flyteidl2.core.SecurityContext + (common.ActionPhase)(0), // 14: flyteidl2.common.ActionPhase + (*notification.DeliveryConfigTemplate)(nil), // 15: flyteidl2.notification.DeliveryConfigTemplate } var file_flyteidl2_task_run_proto_depIdxs = []int32{ - 7, // 0: flyteidl2.task.Labels.values:type_name -> flyteidl2.task.Labels.ValuesEntry - 8, // 1: flyteidl2.task.Annotations.values:type_name -> flyteidl2.task.Annotations.ValuesEntry - 9, // 2: flyteidl2.task.Envs.values:type_name -> flyteidl2.core.KeyValuePair + 9, // 0: flyteidl2.task.Labels.values:type_name -> flyteidl2.task.Labels.ValuesEntry + 10, // 1: flyteidl2.task.Annotations.values:type_name -> flyteidl2.task.Annotations.ValuesEntry + 11, // 2: flyteidl2.task.Envs.values:type_name -> flyteidl2.core.KeyValuePair 0, // 3: flyteidl2.task.CacheConfig.cache_lookup_scope:type_name -> flyteidl2.task.CacheLookupScope 1, // 4: flyteidl2.task.RunSpec.labels:type_name -> flyteidl2.task.Labels 2, // 5: flyteidl2.task.RunSpec.annotations:type_name -> flyteidl2.task.Annotations 3, // 6: flyteidl2.task.RunSpec.envs:type_name -> flyteidl2.task.Envs - 10, // 7: flyteidl2.task.RunSpec.interruptible:type_name -> google.protobuf.BoolValue + 12, // 7: flyteidl2.task.RunSpec.interruptible:type_name -> google.protobuf.BoolValue 4, // 8: flyteidl2.task.RunSpec.raw_data_storage:type_name -> flyteidl2.task.RawDataStorage - 11, // 9: flyteidl2.task.RunSpec.security_context:type_name -> flyteidl2.core.SecurityContext + 13, // 9: flyteidl2.task.RunSpec.security_context:type_name -> flyteidl2.core.SecurityContext 5, // 10: flyteidl2.task.RunSpec.cache_config:type_name -> flyteidl2.task.CacheConfig - 11, // [11:11] is the sub-list for method output_type - 11, // [11:11] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 7, // 11: flyteidl2.task.RunSpec.notification_rules:type_name -> flyteidl2.task.InlineRuleList + 8, // 12: flyteidl2.task.InlineRuleList.rules:type_name -> flyteidl2.task.InlineRule + 14, // 13: flyteidl2.task.InlineRule.on_phases:type_name -> flyteidl2.common.ActionPhase + 15, // 14: flyteidl2.task.InlineRule.delivery_template:type_name -> flyteidl2.notification.DeliveryConfigTemplate + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_flyteidl2_task_run_proto_init() } @@ -688,6 +919,38 @@ func file_flyteidl2_task_run_proto_init() { return nil } } + file_flyteidl2_task_run_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InlineRuleList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_flyteidl2_task_run_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InlineRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_flyteidl2_task_run_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*RunSpec_NotificationRuleName)(nil), + (*RunSpec_NotificationRules)(nil), + } + file_flyteidl2_task_run_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*InlineRule_DeliveryConfigName)(nil), + (*InlineRule_DeliveryTemplate)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -695,7 +958,7 @@ func file_flyteidl2_task_run_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_flyteidl2_task_run_proto_rawDesc, NumEnums: 1, - NumMessages: 8, + NumMessages: 10, NumExtensions: 0, NumServices: 0, }, diff --git a/gen/go/flyteidl2/task/run.pb.validate.go b/gen/go/flyteidl2/task/run.pb.validate.go index bd3fba7e93..ed92822b9a 100644 --- a/gen/go/flyteidl2/task/run.pb.validate.go +++ b/gen/go/flyteidl2/task/run.pb.validate.go @@ -17,6 +17,8 @@ import ( "unicode/utf8" "google.golang.org/protobuf/types/known/anypb" + + common "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" ) // ensure the imports are used @@ -33,6 +35,8 @@ var ( _ = (*mail.Address)(nil) _ = anypb.Any{} _ = sort.Sort + + _ = common.ActionPhase(0) ) // Validate checks the field values on Labels with the rules defined in the @@ -801,6 +805,64 @@ func (m *RunSpec) validate(all bool) error { } } + switch v := m.NotificationSettings.(type) { + case *RunSpec_NotificationRuleName: + if v == nil { + err := RunSpecValidationError{ + field: "NotificationSettings", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + // no validation rules for NotificationRuleName + case *RunSpec_NotificationRules: + if v == nil { + err := RunSpecValidationError{ + field: "NotificationSettings", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetNotificationRules()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RunSpecValidationError{ + field: "NotificationRules", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RunSpecValidationError{ + field: "NotificationRules", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNotificationRules()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RunSpecValidationError{ + field: "NotificationRules", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + if len(errors) > 0 { return RunSpecMultiError(errors) } @@ -877,3 +939,294 @@ var _ interface { Cause() error ErrorName() string } = RunSpecValidationError{} + +// Validate checks the field values on InlineRuleList with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *InlineRuleList) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InlineRuleList with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in InlineRuleListMultiError, +// or nil if none found. +func (m *InlineRuleList) ValidateAll() error { + return m.validate(true) +} + +func (m *InlineRuleList) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetRules() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InlineRuleListValidationError{ + field: fmt.Sprintf("Rules[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InlineRuleListValidationError{ + field: fmt.Sprintf("Rules[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return InlineRuleListValidationError{ + field: fmt.Sprintf("Rules[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return InlineRuleListMultiError(errors) + } + + return nil +} + +// InlineRuleListMultiError is an error wrapping multiple validation errors +// returned by InlineRuleList.ValidateAll() if the designated constraints +// aren't met. +type InlineRuleListMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InlineRuleListMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InlineRuleListMultiError) AllErrors() []error { return m } + +// InlineRuleListValidationError is the validation error returned by +// InlineRuleList.Validate if the designated constraints aren't met. +type InlineRuleListValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e InlineRuleListValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e InlineRuleListValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e InlineRuleListValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e InlineRuleListValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e InlineRuleListValidationError) ErrorName() string { return "InlineRuleListValidationError" } + +// Error satisfies the builtin error interface +func (e InlineRuleListValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sInlineRuleList.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = InlineRuleListValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = InlineRuleListValidationError{} + +// Validate checks the field values on InlineRule with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *InlineRule) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InlineRule with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in InlineRuleMultiError, or +// nil if none found. +func (m *InlineRule) ValidateAll() error { + return m.validate(true) +} + +func (m *InlineRule) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + switch v := m.Delivery.(type) { + case *InlineRule_DeliveryConfigName: + if v == nil { + err := InlineRuleValidationError{ + field: "Delivery", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + // no validation rules for DeliveryConfigName + case *InlineRule_DeliveryTemplate: + if v == nil { + err := InlineRuleValidationError{ + field: "Delivery", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetDeliveryTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InlineRuleValidationError{ + field: "DeliveryTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InlineRuleValidationError{ + field: "DeliveryTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeliveryTemplate()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return InlineRuleValidationError{ + field: "DeliveryTemplate", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + _ = v // ensures v is used + } + + if len(errors) > 0 { + return InlineRuleMultiError(errors) + } + + return nil +} + +// InlineRuleMultiError is an error wrapping multiple validation errors +// returned by InlineRule.ValidateAll() if the designated constraints aren't met. +type InlineRuleMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InlineRuleMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m InlineRuleMultiError) AllErrors() []error { return m } + +// InlineRuleValidationError is the validation error returned by +// InlineRule.Validate if the designated constraints aren't met. +type InlineRuleValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e InlineRuleValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e InlineRuleValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e InlineRuleValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e InlineRuleValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e InlineRuleValidationError) ErrorName() string { return "InlineRuleValidationError" } + +// Error satisfies the builtin error interface +func (e InlineRuleValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sInlineRule.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = InlineRuleValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = InlineRuleValidationError{} diff --git a/gen/go/flyteidl2/workflow/events_proxy_service.pb.go b/gen/go/flyteidl2/workflow/events_proxy_service.pb.go new file mode 100644 index 0000000000..ec8b69cd5d --- /dev/null +++ b/gen/go/flyteidl2/workflow/events_proxy_service.pb.go @@ -0,0 +1,232 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.30.0 +// protoc (unknown) +// source: flyteidl2/workflow/events_proxy_service.proto + +package workflow + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// RecordRequest is the request message for recording the events for the actions. +type RecordRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The events to record. + Events []*ActionEvent `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` +} + +func (x *RecordRequest) Reset() { + *x = RecordRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_workflow_events_proxy_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordRequest) ProtoMessage() {} + +func (x *RecordRequest) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_workflow_events_proxy_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordRequest.ProtoReflect.Descriptor instead. +func (*RecordRequest) Descriptor() ([]byte, []int) { + return file_flyteidl2_workflow_events_proxy_service_proto_rawDescGZIP(), []int{0} +} + +func (x *RecordRequest) GetEvents() []*ActionEvent { + if x != nil { + return x.Events + } + return nil +} + +// RecordResponse is the response message recording an event for an action. +type RecordResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RecordResponse) Reset() { + *x = RecordResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_flyteidl2_workflow_events_proxy_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordResponse) ProtoMessage() {} + +func (x *RecordResponse) ProtoReflect() protoreflect.Message { + mi := &file_flyteidl2_workflow_events_proxy_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordResponse.ProtoReflect.Descriptor instead. +func (*RecordResponse) Descriptor() ([]byte, []int) { + return file_flyteidl2_workflow_events_proxy_service_proto_rawDescGZIP(), []int{1} +} + +var File_flyteidl2_workflow_events_proxy_service_proto protoreflect.FileDescriptor + +var file_flyteidl2_workflow_events_proxy_service_proto_rawDesc = []byte{ + 0x0a, 0x2d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x52, 0x0a, 0x0d, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x10, 0x0a, + 0x0e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0x67, 0x0a, 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, + 0x21, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd4, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x42, 0x17, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x48, 0x02, 0x50, 0x01, + 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, + 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, + 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_flyteidl2_workflow_events_proxy_service_proto_rawDescOnce sync.Once + file_flyteidl2_workflow_events_proxy_service_proto_rawDescData = file_flyteidl2_workflow_events_proxy_service_proto_rawDesc +) + +func file_flyteidl2_workflow_events_proxy_service_proto_rawDescGZIP() []byte { + file_flyteidl2_workflow_events_proxy_service_proto_rawDescOnce.Do(func() { + file_flyteidl2_workflow_events_proxy_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_flyteidl2_workflow_events_proxy_service_proto_rawDescData) + }) + return file_flyteidl2_workflow_events_proxy_service_proto_rawDescData +} + +var file_flyteidl2_workflow_events_proxy_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_flyteidl2_workflow_events_proxy_service_proto_goTypes = []interface{}{ + (*RecordRequest)(nil), // 0: flyteidl2.workflow.RecordRequest + (*RecordResponse)(nil), // 1: flyteidl2.workflow.RecordResponse + (*ActionEvent)(nil), // 2: flyteidl2.workflow.ActionEvent +} +var file_flyteidl2_workflow_events_proxy_service_proto_depIdxs = []int32{ + 2, // 0: flyteidl2.workflow.RecordRequest.events:type_name -> flyteidl2.workflow.ActionEvent + 0, // 1: flyteidl2.workflow.EventsProxyService.Record:input_type -> flyteidl2.workflow.RecordRequest + 1, // 2: flyteidl2.workflow.EventsProxyService.Record:output_type -> flyteidl2.workflow.RecordResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_flyteidl2_workflow_events_proxy_service_proto_init() } +func file_flyteidl2_workflow_events_proxy_service_proto_init() { + if File_flyteidl2_workflow_events_proxy_service_proto != nil { + return + } + file_flyteidl2_workflow_run_definition_proto_init() + if !protoimpl.UnsafeEnabled { + file_flyteidl2_workflow_events_proxy_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_flyteidl2_workflow_events_proxy_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_flyteidl2_workflow_events_proxy_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_flyteidl2_workflow_events_proxy_service_proto_goTypes, + DependencyIndexes: file_flyteidl2_workflow_events_proxy_service_proto_depIdxs, + MessageInfos: file_flyteidl2_workflow_events_proxy_service_proto_msgTypes, + }.Build() + File_flyteidl2_workflow_events_proxy_service_proto = out.File + file_flyteidl2_workflow_events_proxy_service_proto_rawDesc = nil + file_flyteidl2_workflow_events_proxy_service_proto_goTypes = nil + file_flyteidl2_workflow_events_proxy_service_proto_depIdxs = nil +} diff --git a/gen/go/flyteidl2/workflow/events_proxy_service.pb.validate.go b/gen/go/flyteidl2/workflow/events_proxy_service.pb.validate.go new file mode 100644 index 0000000000..2da97fc43f --- /dev/null +++ b/gen/go/flyteidl2/workflow/events_proxy_service.pb.validate.go @@ -0,0 +1,270 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: flyteidl2/workflow/events_proxy_service.proto + +package workflow + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +) + +// Validate checks the field values on RecordRequest with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *RecordRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RecordRequest with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in RecordRequestMultiError, or +// nil if none found. +func (m *RecordRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RecordRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetEvents() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RecordRequestValidationError{ + field: fmt.Sprintf("Events[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RecordRequestValidationError{ + field: fmt.Sprintf("Events[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RecordRequestValidationError{ + field: fmt.Sprintf("Events[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return RecordRequestMultiError(errors) + } + + return nil +} + +// RecordRequestMultiError is an error wrapping multiple validation errors +// returned by RecordRequest.ValidateAll() if the designated constraints +// aren't met. +type RecordRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RecordRequestMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RecordRequestMultiError) AllErrors() []error { return m } + +// RecordRequestValidationError is the validation error returned by +// RecordRequest.Validate if the designated constraints aren't met. +type RecordRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RecordRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RecordRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RecordRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RecordRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RecordRequestValidationError) ErrorName() string { return "RecordRequestValidationError" } + +// Error satisfies the builtin error interface +func (e RecordRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRecordRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RecordRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RecordRequestValidationError{} + +// Validate checks the field values on RecordResponse with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *RecordResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RecordResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in RecordResponseMultiError, +// or nil if none found. +func (m *RecordResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RecordResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return RecordResponseMultiError(errors) + } + + return nil +} + +// RecordResponseMultiError is an error wrapping multiple validation errors +// returned by RecordResponse.ValidateAll() if the designated constraints +// aren't met. +type RecordResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RecordResponseMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m RecordResponseMultiError) AllErrors() []error { return m } + +// RecordResponseValidationError is the validation error returned by +// RecordResponse.Validate if the designated constraints aren't met. +type RecordResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RecordResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RecordResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RecordResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RecordResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RecordResponseValidationError) ErrorName() string { return "RecordResponseValidationError" } + +// Error satisfies the builtin error interface +func (e RecordResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRecordResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RecordResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RecordResponseValidationError{} diff --git a/gen/go/flyteidl2/workflow/events_proxy_service_grpc.pb.go b/gen/go/flyteidl2/workflow/events_proxy_service_grpc.pb.go new file mode 100644 index 0000000000..55e78244dd --- /dev/null +++ b/gen/go/flyteidl2/workflow/events_proxy_service_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: flyteidl2/workflow/events_proxy_service.proto + +package workflow + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + EventsProxyService_Record_FullMethodName = "/flyteidl2.workflow.EventsProxyService/Record" +) + +// EventsProxyServiceClient is the client API for EventsProxyService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type EventsProxyServiceClient interface { + // record the events for an action. + Record(ctx context.Context, in *RecordRequest, opts ...grpc.CallOption) (*RecordResponse, error) +} + +type eventsProxyServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewEventsProxyServiceClient(cc grpc.ClientConnInterface) EventsProxyServiceClient { + return &eventsProxyServiceClient{cc} +} + +func (c *eventsProxyServiceClient) Record(ctx context.Context, in *RecordRequest, opts ...grpc.CallOption) (*RecordResponse, error) { + out := new(RecordResponse) + err := c.cc.Invoke(ctx, EventsProxyService_Record_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// EventsProxyServiceServer is the server API for EventsProxyService service. +// All implementations should embed UnimplementedEventsProxyServiceServer +// for forward compatibility +type EventsProxyServiceServer interface { + // record the events for an action. + Record(context.Context, *RecordRequest) (*RecordResponse, error) +} + +// UnimplementedEventsProxyServiceServer should be embedded to have forward compatible implementations. +type UnimplementedEventsProxyServiceServer struct { +} + +func (UnimplementedEventsProxyServiceServer) Record(context.Context, *RecordRequest) (*RecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Record not implemented") +} + +// UnsafeEventsProxyServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to EventsProxyServiceServer will +// result in compilation errors. +type UnsafeEventsProxyServiceServer interface { + mustEmbedUnimplementedEventsProxyServiceServer() +} + +func RegisterEventsProxyServiceServer(s grpc.ServiceRegistrar, srv EventsProxyServiceServer) { + s.RegisterService(&EventsProxyService_ServiceDesc, srv) +} + +func _EventsProxyService_Record_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EventsProxyServiceServer).Record(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EventsProxyService_Record_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EventsProxyServiceServer).Record(ctx, req.(*RecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// EventsProxyService_ServiceDesc is the grpc.ServiceDesc for EventsProxyService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var EventsProxyService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "flyteidl2.workflow.EventsProxyService", + HandlerType: (*EventsProxyServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Record", + Handler: _EventsProxyService_Record_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "flyteidl2/workflow/events_proxy_service.proto", +} diff --git a/gen/go/flyteidl2/workflow/mocks/events_proxy_service_client.go b/gen/go/flyteidl2/workflow/mocks/events_proxy_service_client.go new file mode 100644 index 0000000000..c66a4c7d0c --- /dev/null +++ b/gen/go/flyteidl2/workflow/mocks/events_proxy_service_client.go @@ -0,0 +1,114 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + context "context" + + grpc "google.golang.org/grpc" + + mock "github.com/stretchr/testify/mock" + + workflow "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" +) + +// EventsProxyServiceClient is an autogenerated mock type for the EventsProxyServiceClient type +type EventsProxyServiceClient struct { + mock.Mock +} + +type EventsProxyServiceClient_Expecter struct { + mock *mock.Mock +} + +func (_m *EventsProxyServiceClient) EXPECT() *EventsProxyServiceClient_Expecter { + return &EventsProxyServiceClient_Expecter{mock: &_m.Mock} +} + +// Record provides a mock function with given fields: ctx, in, opts +func (_m *EventsProxyServiceClient) Record(ctx context.Context, in *workflow.RecordRequest, opts ...grpc.CallOption) (*workflow.RecordResponse, error) { + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, ctx, in) + _ca = append(_ca, _va...) + ret := _m.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for Record") + } + + var r0 *workflow.RecordResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *workflow.RecordRequest, ...grpc.CallOption) (*workflow.RecordResponse, error)); ok { + return rf(ctx, in, opts...) + } + if rf, ok := ret.Get(0).(func(context.Context, *workflow.RecordRequest, ...grpc.CallOption) *workflow.RecordResponse); ok { + r0 = rf(ctx, in, opts...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*workflow.RecordResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *workflow.RecordRequest, ...grpc.CallOption) error); ok { + r1 = rf(ctx, in, opts...) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// EventsProxyServiceClient_Record_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Record' +type EventsProxyServiceClient_Record_Call struct { + *mock.Call +} + +// Record is a helper method to define mock.On call +// - ctx context.Context +// - in *workflow.RecordRequest +// - opts ...grpc.CallOption +func (_e *EventsProxyServiceClient_Expecter) Record(ctx interface{}, in interface{}, opts ...interface{}) *EventsProxyServiceClient_Record_Call { + return &EventsProxyServiceClient_Record_Call{Call: _e.mock.On("Record", + append([]interface{}{ctx, in}, opts...)...)} +} + +func (_c *EventsProxyServiceClient_Record_Call) Run(run func(ctx context.Context, in *workflow.RecordRequest, opts ...grpc.CallOption)) *EventsProxyServiceClient_Record_Call { + _c.Call.Run(func(args mock.Arguments) { + variadicArgs := make([]grpc.CallOption, len(args)-2) + for i, a := range args[2:] { + if a != nil { + variadicArgs[i] = a.(grpc.CallOption) + } + } + run(args[0].(context.Context), args[1].(*workflow.RecordRequest), variadicArgs...) + }) + return _c +} + +func (_c *EventsProxyServiceClient_Record_Call) Return(_a0 *workflow.RecordResponse, _a1 error) *EventsProxyServiceClient_Record_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *EventsProxyServiceClient_Record_Call) RunAndReturn(run func(context.Context, *workflow.RecordRequest, ...grpc.CallOption) (*workflow.RecordResponse, error)) *EventsProxyServiceClient_Record_Call { + _c.Call.Return(run) + return _c +} + +// NewEventsProxyServiceClient creates a new instance of EventsProxyServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewEventsProxyServiceClient(t interface { + mock.TestingT + Cleanup(func()) +}) *EventsProxyServiceClient { + mock := &EventsProxyServiceClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/gen/go/flyteidl2/workflow/mocks/events_proxy_service_server.go b/gen/go/flyteidl2/workflow/mocks/events_proxy_service_server.go new file mode 100644 index 0000000000..db1cffcb65 --- /dev/null +++ b/gen/go/flyteidl2/workflow/mocks/events_proxy_service_server.go @@ -0,0 +1,96 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + context "context" + + workflow "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" + mock "github.com/stretchr/testify/mock" +) + +// EventsProxyServiceServer is an autogenerated mock type for the EventsProxyServiceServer type +type EventsProxyServiceServer struct { + mock.Mock +} + +type EventsProxyServiceServer_Expecter struct { + mock *mock.Mock +} + +func (_m *EventsProxyServiceServer) EXPECT() *EventsProxyServiceServer_Expecter { + return &EventsProxyServiceServer_Expecter{mock: &_m.Mock} +} + +// Record provides a mock function with given fields: _a0, _a1 +func (_m *EventsProxyServiceServer) Record(_a0 context.Context, _a1 *workflow.RecordRequest) (*workflow.RecordResponse, error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for Record") + } + + var r0 *workflow.RecordResponse + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *workflow.RecordRequest) (*workflow.RecordResponse, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *workflow.RecordRequest) *workflow.RecordResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*workflow.RecordResponse) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *workflow.RecordRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// EventsProxyServiceServer_Record_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Record' +type EventsProxyServiceServer_Record_Call struct { + *mock.Call +} + +// Record is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *workflow.RecordRequest +func (_e *EventsProxyServiceServer_Expecter) Record(_a0 interface{}, _a1 interface{}) *EventsProxyServiceServer_Record_Call { + return &EventsProxyServiceServer_Record_Call{Call: _e.mock.On("Record", _a0, _a1)} +} + +func (_c *EventsProxyServiceServer_Record_Call) Run(run func(_a0 context.Context, _a1 *workflow.RecordRequest)) *EventsProxyServiceServer_Record_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*workflow.RecordRequest)) + }) + return _c +} + +func (_c *EventsProxyServiceServer_Record_Call) Return(_a0 *workflow.RecordResponse, _a1 error) *EventsProxyServiceServer_Record_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *EventsProxyServiceServer_Record_Call) RunAndReturn(run func(context.Context, *workflow.RecordRequest) (*workflow.RecordResponse, error)) *EventsProxyServiceServer_Record_Call { + _c.Call.Return(run) + return _c +} + +// NewEventsProxyServiceServer creates a new instance of EventsProxyServiceServer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewEventsProxyServiceServer(t interface { + mock.TestingT + Cleanup(func()) +}) *EventsProxyServiceServer { + mock := &EventsProxyServiceServer{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/gen/go/flyteidl2/workflow/mocks/unsafe_events_proxy_service_server.go b/gen/go/flyteidl2/workflow/mocks/unsafe_events_proxy_service_server.go new file mode 100644 index 0000000000..31add9d207 --- /dev/null +++ b/gen/go/flyteidl2/workflow/mocks/unsafe_events_proxy_service_server.go @@ -0,0 +1,64 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import mock "github.com/stretchr/testify/mock" + +// UnsafeEventsProxyServiceServer is an autogenerated mock type for the UnsafeEventsProxyServiceServer type +type UnsafeEventsProxyServiceServer struct { + mock.Mock +} + +type UnsafeEventsProxyServiceServer_Expecter struct { + mock *mock.Mock +} + +func (_m *UnsafeEventsProxyServiceServer) EXPECT() *UnsafeEventsProxyServiceServer_Expecter { + return &UnsafeEventsProxyServiceServer_Expecter{mock: &_m.Mock} +} + +// mustEmbedUnimplementedEventsProxyServiceServer provides a mock function with no fields +func (_m *UnsafeEventsProxyServiceServer) mustEmbedUnimplementedEventsProxyServiceServer() { + _m.Called() +} + +// UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'mustEmbedUnimplementedEventsProxyServiceServer' +type UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call struct { + *mock.Call +} + +// mustEmbedUnimplementedEventsProxyServiceServer is a helper method to define mock.On call +func (_e *UnsafeEventsProxyServiceServer_Expecter) mustEmbedUnimplementedEventsProxyServiceServer() *UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call { + return &UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call{Call: _e.mock.On("mustEmbedUnimplementedEventsProxyServiceServer")} +} + +func (_c *UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call) Run(run func()) *UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call) Return() *UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call { + _c.Call.Return() + return _c +} + +func (_c *UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call) RunAndReturn(run func()) *UnsafeEventsProxyServiceServer_mustEmbedUnimplementedEventsProxyServiceServer_Call { + _c.Run(run) + return _c +} + +// NewUnsafeEventsProxyServiceServer creates a new instance of UnsafeEventsProxyServiceServer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewUnsafeEventsProxyServiceServer(t interface { + mock.TestingT + Cleanup(func()) +}) *UnsafeEventsProxyServiceServer { + mock := &UnsafeEventsProxyServiceServer{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/gen/go/flyteidl2/workflow/workflowconnect/events_proxy_service.connect.go b/gen/go/flyteidl2/workflow/workflowconnect/events_proxy_service.connect.go new file mode 100644 index 0000000000..d2cd3b3fd7 --- /dev/null +++ b/gen/go/flyteidl2/workflow/workflowconnect/events_proxy_service.connect.go @@ -0,0 +1,116 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: flyteidl2/workflow/events_proxy_service.proto + +package workflowconnect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + workflow "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // EventsProxyServiceName is the fully-qualified name of the EventsProxyService service. + EventsProxyServiceName = "flyteidl2.workflow.EventsProxyService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // EventsProxyServiceRecordProcedure is the fully-qualified name of the EventsProxyService's Record + // RPC. + EventsProxyServiceRecordProcedure = "/flyteidl2.workflow.EventsProxyService/Record" +) + +// These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. +var ( + eventsProxyServiceServiceDescriptor = workflow.File_flyteidl2_workflow_events_proxy_service_proto.Services().ByName("EventsProxyService") + eventsProxyServiceRecordMethodDescriptor = eventsProxyServiceServiceDescriptor.Methods().ByName("Record") +) + +// EventsProxyServiceClient is a client for the flyteidl2.workflow.EventsProxyService service. +type EventsProxyServiceClient interface { + // record the events for an action. + Record(context.Context, *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) +} + +// NewEventsProxyServiceClient constructs a client for the flyteidl2.workflow.EventsProxyService +// service. By default, it uses the Connect protocol with the binary Protobuf Codec, asks for +// gzipped responses, and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply +// the connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewEventsProxyServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) EventsProxyServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + return &eventsProxyServiceClient{ + record: connect.NewClient[workflow.RecordRequest, workflow.RecordResponse]( + httpClient, + baseURL+EventsProxyServiceRecordProcedure, + connect.WithSchema(eventsProxyServiceRecordMethodDescriptor), + connect.WithClientOptions(opts...), + ), + } +} + +// eventsProxyServiceClient implements EventsProxyServiceClient. +type eventsProxyServiceClient struct { + record *connect.Client[workflow.RecordRequest, workflow.RecordResponse] +} + +// Record calls flyteidl2.workflow.EventsProxyService.Record. +func (c *eventsProxyServiceClient) Record(ctx context.Context, req *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) { + return c.record.CallUnary(ctx, req) +} + +// EventsProxyServiceHandler is an implementation of the flyteidl2.workflow.EventsProxyService +// service. +type EventsProxyServiceHandler interface { + // record the events for an action. + Record(context.Context, *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) +} + +// NewEventsProxyServiceHandler builds an HTTP handler from the service implementation. It returns +// the path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewEventsProxyServiceHandler(svc EventsProxyServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + eventsProxyServiceRecordHandler := connect.NewUnaryHandler( + EventsProxyServiceRecordProcedure, + svc.Record, + connect.WithSchema(eventsProxyServiceRecordMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + return "/flyteidl2.workflow.EventsProxyService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case EventsProxyServiceRecordProcedure: + eventsProxyServiceRecordHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedEventsProxyServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedEventsProxyServiceHandler struct{} + +func (UnimplementedEventsProxyServiceHandler) Record(context.Context, *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("flyteidl2.workflow.EventsProxyService.Record is not implemented")) +} diff --git a/gen/go/flyteidl2/workflow/workflowconnect/mocks/events_proxy_service_client.go b/gen/go/flyteidl2/workflow/workflowconnect/mocks/events_proxy_service_client.go new file mode 100644 index 0000000000..ccd21a5976 --- /dev/null +++ b/gen/go/flyteidl2/workflow/workflowconnect/mocks/events_proxy_service_client.go @@ -0,0 +1,99 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + context "context" + + connect "connectrpc.com/connect" + + mock "github.com/stretchr/testify/mock" + + workflow "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" +) + +// EventsProxyServiceClient is an autogenerated mock type for the EventsProxyServiceClient type +type EventsProxyServiceClient struct { + mock.Mock +} + +type EventsProxyServiceClient_Expecter struct { + mock *mock.Mock +} + +func (_m *EventsProxyServiceClient) EXPECT() *EventsProxyServiceClient_Expecter { + return &EventsProxyServiceClient_Expecter{mock: &_m.Mock} +} + +// Record provides a mock function with given fields: _a0, _a1 +func (_m *EventsProxyServiceClient) Record(_a0 context.Context, _a1 *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for Record") + } + + var r0 *connect.Response[workflow.RecordResponse] + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[workflow.RecordRequest]) *connect.Response[workflow.RecordResponse]); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*connect.Response[workflow.RecordResponse]) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[workflow.RecordRequest]) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// EventsProxyServiceClient_Record_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Record' +type EventsProxyServiceClient_Record_Call struct { + *mock.Call +} + +// Record is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *connect.Request[workflow.RecordRequest] +func (_e *EventsProxyServiceClient_Expecter) Record(_a0 interface{}, _a1 interface{}) *EventsProxyServiceClient_Record_Call { + return &EventsProxyServiceClient_Record_Call{Call: _e.mock.On("Record", _a0, _a1)} +} + +func (_c *EventsProxyServiceClient_Record_Call) Run(run func(_a0 context.Context, _a1 *connect.Request[workflow.RecordRequest])) *EventsProxyServiceClient_Record_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*connect.Request[workflow.RecordRequest])) + }) + return _c +} + +func (_c *EventsProxyServiceClient_Record_Call) Return(_a0 *connect.Response[workflow.RecordResponse], _a1 error) *EventsProxyServiceClient_Record_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *EventsProxyServiceClient_Record_Call) RunAndReturn(run func(context.Context, *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error)) *EventsProxyServiceClient_Record_Call { + _c.Call.Return(run) + return _c +} + +// NewEventsProxyServiceClient creates a new instance of EventsProxyServiceClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewEventsProxyServiceClient(t interface { + mock.TestingT + Cleanup(func()) +}) *EventsProxyServiceClient { + mock := &EventsProxyServiceClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/gen/go/flyteidl2/workflow/workflowconnect/mocks/events_proxy_service_handler.go b/gen/go/flyteidl2/workflow/workflowconnect/mocks/events_proxy_service_handler.go new file mode 100644 index 0000000000..048744d5cc --- /dev/null +++ b/gen/go/flyteidl2/workflow/workflowconnect/mocks/events_proxy_service_handler.go @@ -0,0 +1,99 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + context "context" + + connect "connectrpc.com/connect" + + mock "github.com/stretchr/testify/mock" + + workflow "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" +) + +// EventsProxyServiceHandler is an autogenerated mock type for the EventsProxyServiceHandler type +type EventsProxyServiceHandler struct { + mock.Mock +} + +type EventsProxyServiceHandler_Expecter struct { + mock *mock.Mock +} + +func (_m *EventsProxyServiceHandler) EXPECT() *EventsProxyServiceHandler_Expecter { + return &EventsProxyServiceHandler_Expecter{mock: &_m.Mock} +} + +// Record provides a mock function with given fields: _a0, _a1 +func (_m *EventsProxyServiceHandler) Record(_a0 context.Context, _a1 *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error) { + ret := _m.Called(_a0, _a1) + + if len(ret) == 0 { + panic("no return value specified for Record") + } + + var r0 *connect.Response[workflow.RecordResponse] + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[workflow.RecordRequest]) *connect.Response[workflow.RecordResponse]); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*connect.Response[workflow.RecordResponse]) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[workflow.RecordRequest]) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// EventsProxyServiceHandler_Record_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Record' +type EventsProxyServiceHandler_Record_Call struct { + *mock.Call +} + +// Record is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *connect.Request[workflow.RecordRequest] +func (_e *EventsProxyServiceHandler_Expecter) Record(_a0 interface{}, _a1 interface{}) *EventsProxyServiceHandler_Record_Call { + return &EventsProxyServiceHandler_Record_Call{Call: _e.mock.On("Record", _a0, _a1)} +} + +func (_c *EventsProxyServiceHandler_Record_Call) Run(run func(_a0 context.Context, _a1 *connect.Request[workflow.RecordRequest])) *EventsProxyServiceHandler_Record_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*connect.Request[workflow.RecordRequest])) + }) + return _c +} + +func (_c *EventsProxyServiceHandler_Record_Call) Return(_a0 *connect.Response[workflow.RecordResponse], _a1 error) *EventsProxyServiceHandler_Record_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *EventsProxyServiceHandler_Record_Call) RunAndReturn(run func(context.Context, *connect.Request[workflow.RecordRequest]) (*connect.Response[workflow.RecordResponse], error)) *EventsProxyServiceHandler_Record_Call { + _c.Call.Return(run) + return _c +} + +// NewEventsProxyServiceHandler creates a new instance of EventsProxyServiceHandler. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewEventsProxyServiceHandler(t interface { + mock.TestingT + Cleanup(func()) +}) *EventsProxyServiceHandler { + mock := &EventsProxyServiceHandler{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/gen/go/gateway/flyteidl2/notification/definition.swagger.json b/gen/go/gateway/flyteidl2/notification/definition.swagger.json new file mode 100644 index 0000000000..be3a7d4d0a --- /dev/null +++ b/gen/go/gateway/flyteidl2/notification/definition.swagger.json @@ -0,0 +1,50 @@ +{ + "swagger": "2.0", + "info": { + "title": "flyteidl2/notification/definition.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + } + } +} diff --git a/gen/go/gateway/flyteidl2/secret/secret.swagger.json b/gen/go/gateway/flyteidl2/secret/secret.swagger.json index 98ebefbba2..90f7a4a117 100644 --- a/gen/go/gateway/flyteidl2/secret/secret.swagger.json +++ b/gen/go/gateway/flyteidl2/secret/secret.swagger.json @@ -76,6 +76,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "include_system_secrets", + "description": "If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included in results.\nIf false (default), system secrets will be filtered out.", + "in": "query", + "required": false, + "type": "boolean" } ], "tags": [ @@ -157,6 +164,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "include_system_secrets", + "description": "If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included.\nIf false (default), system secrets will be hidden and return NotFound.", + "in": "query", + "required": false, + "type": "boolean" } ], "tags": [ @@ -206,6 +220,13 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "include_system_secrets", + "description": "If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) can be deleted.\nIf false (default), attempting to delete a system secret will return NotFound.", + "in": "query", + "required": false, + "type": "boolean" } ], "tags": [ diff --git a/gen/go/gateway/flyteidl2/workflow/events_proxy_service.swagger.json b/gen/go/gateway/flyteidl2/workflow/events_proxy_service.swagger.json new file mode 100644 index 0000000000..b074888d8b --- /dev/null +++ b/gen/go/gateway/flyteidl2/workflow/events_proxy_service.swagger.json @@ -0,0 +1,55 @@ +{ + "swagger": "2.0", + "info": { + "title": "flyteidl2/workflow/events_proxy_service.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "EventsProxyService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "googlerpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + } + } +} diff --git a/gen/python/flyteidl2/common/role_pb2.py b/gen/python/flyteidl2/common/role_pb2.py index 5fb64ac339..eedf2fb1d3 100644 --- a/gen/python/flyteidl2/common/role_pb2.py +++ b/gen/python/flyteidl2/common/role_pb2.py @@ -16,7 +16,7 @@ from flyteidl2.common import identifier_pb2 as flyteidl2_dot_common_dot_identifier__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lyteidl2/common/role.proto\x12\x10\x66lyteidl2.common\x1a\x1b\x62uf/validate/validate.proto\x1a$flyteidl2/common/authorization.proto\x1a!flyteidl2/common/identifier.proto\"\xaa\x02\n\x04Role\x12\x38\n\x02id\x18\x01 \x01(\x0b\x32 .flyteidl2.common.RoleIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12\x42\n\x0bpermissions\x18\x02 \x03(\x0b\x32\x1c.flyteidl2.common.PermissionB\x02\x18\x01R\x0bpermissions\x12\x37\n\trole_spec\x18\x03 \x01(\x0b\x32\x1a.flyteidl2.common.RoleSpecR\x08roleSpec\x12\x37\n\trole_type\x18\x04 \x01(\x0e\x32\x1a.flyteidl2.common.RoleTypeR\x08roleType\x12\x32\n\x07\x61\x63tions\x18\x05 \x03(\x0e\x32\x18.flyteidl2.common.ActionR\x07\x61\x63tions\",\n\x08RoleSpec\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription*\x9a\x02\n\x08RoleType\x12\x12\n\x0eROLE_TYPE_NONE\x10\x00\x12\x13\n\x0fROLE_TYPE_ADMIN\x10\x01\x12\x19\n\x15ROLE_TYPE_CONTRIBUTOR\x10\x02\x12\x14\n\x10ROLE_TYPE_VIEWER\x10\x03\x12\x14\n\x10ROLE_TYPE_CUSTOM\x10\x04\x12\x1d\n\x19ROLE_TYPE_CLUSTER_MANAGER\x10\x05\x12!\n\x1dROLE_TYPE_FLYTE_PROJECT_ADMIN\x10\x06\x12\x1f\n\x1bROLE_TYPE_SERVERLESS_VIEWER\x10\x07\x12$\n ROLE_TYPE_SERVERLESS_CONTRIBUTOR\x10\x08\x12\x15\n\x11ROLE_TYPE_SUPPORT\x10\tB\xba\x01\n\x14\x63om.flyteidl2.commonB\tRoleProtoH\x02P\x01Z4github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common\xa2\x02\x03\x46\x43X\xaa\x02\x10\x46lyteidl2.Common\xca\x02\x10\x46lyteidl2\\Common\xe2\x02\x1c\x46lyteidl2\\Common\\GPBMetadata\xea\x02\x11\x46lyteidl2::Commonb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lyteidl2/common/role.proto\x12\x10\x66lyteidl2.common\x1a\x1b\x62uf/validate/validate.proto\x1a$flyteidl2/common/authorization.proto\x1a!flyteidl2/common/identifier.proto\"\xaa\x02\n\x04Role\x12\x38\n\x02id\x18\x01 \x01(\x0b\x32 .flyteidl2.common.RoleIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12\x42\n\x0bpermissions\x18\x02 \x03(\x0b\x32\x1c.flyteidl2.common.PermissionB\x02\x18\x01R\x0bpermissions\x12\x37\n\trole_spec\x18\x03 \x01(\x0b\x32\x1a.flyteidl2.common.RoleSpecR\x08roleSpec\x12\x37\n\trole_type\x18\x04 \x01(\x0e\x32\x1a.flyteidl2.common.RoleTypeR\x08roleType\x12\x32\n\x07\x61\x63tions\x18\x05 \x03(\x0e\x32\x18.flyteidl2.common.ActionR\x07\x61\x63tions\",\n\x08RoleSpec\x12 \n\x0b\x64\x65scription\x18\x01 \x01(\tR\x0b\x64\x65scription*\xc3\x02\n\x08RoleType\x12\x12\n\x0eROLE_TYPE_NONE\x10\x00\x12\x13\n\x0fROLE_TYPE_ADMIN\x10\x01\x12\x19\n\x15ROLE_TYPE_CONTRIBUTOR\x10\x02\x12\x14\n\x10ROLE_TYPE_VIEWER\x10\x03\x12\x14\n\x10ROLE_TYPE_CUSTOM\x10\x04\x12\x1d\n\x19ROLE_TYPE_CLUSTER_MANAGER\x10\x05\x12!\n\x1dROLE_TYPE_FLYTE_PROJECT_ADMIN\x10\x06\x12\x1f\n\x1bROLE_TYPE_SERVERLESS_VIEWER\x10\x07\x12$\n ROLE_TYPE_SERVERLESS_CONTRIBUTOR\x10\x08\x12\x15\n\x11ROLE_TYPE_SUPPORT\x10\t\x12\'\n#ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS\x10\nB\xba\x01\n\x14\x63om.flyteidl2.commonB\tRoleProtoH\x02P\x01Z4github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common\xa2\x02\x03\x46\x43X\xaa\x02\x10\x46lyteidl2.Common\xca\x02\x10\x46lyteidl2\\Common\xe2\x02\x1c\x46lyteidl2\\Common\\GPBMetadata\xea\x02\x11\x46lyteidl2::Commonb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -29,7 +29,7 @@ _ROLE.fields_by_name['permissions']._options = None _ROLE.fields_by_name['permissions']._serialized_options = b'\030\001' _globals['_ROLETYPE']._serialized_start=499 - _globals['_ROLETYPE']._serialized_end=781 + _globals['_ROLETYPE']._serialized_end=822 _globals['_ROLE']._serialized_start=152 _globals['_ROLE']._serialized_end=450 _globals['_ROLESPEC']._serialized_start=452 diff --git a/gen/python/flyteidl2/common/role_pb2.pyi b/gen/python/flyteidl2/common/role_pb2.pyi index 31df8c4a81..c30002b5d2 100644 --- a/gen/python/flyteidl2/common/role_pb2.pyi +++ b/gen/python/flyteidl2/common/role_pb2.pyi @@ -21,6 +21,7 @@ class RoleType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ROLE_TYPE_SERVERLESS_VIEWER: _ClassVar[RoleType] ROLE_TYPE_SERVERLESS_CONTRIBUTOR: _ClassVar[RoleType] ROLE_TYPE_SUPPORT: _ClassVar[RoleType] + ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS: _ClassVar[RoleType] ROLE_TYPE_NONE: RoleType ROLE_TYPE_ADMIN: RoleType ROLE_TYPE_CONTRIBUTOR: RoleType @@ -31,6 +32,7 @@ ROLE_TYPE_FLYTE_PROJECT_ADMIN: RoleType ROLE_TYPE_SERVERLESS_VIEWER: RoleType ROLE_TYPE_SERVERLESS_CONTRIBUTOR: RoleType ROLE_TYPE_SUPPORT: RoleType +ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS: RoleType class Role(_message.Message): __slots__ = ["id", "permissions", "role_spec", "role_type", "actions"] diff --git a/gen/python/flyteidl2/logs/dataplane/payload_pb2.py b/gen/python/flyteidl2/logs/dataplane/payload_pb2.py index 040635a30b..c9ae98c5c5 100644 --- a/gen/python/flyteidl2/logs/dataplane/payload_pb2.py +++ b/gen/python/flyteidl2/logs/dataplane/payload_pb2.py @@ -16,7 +16,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&flyteidl2/logs/dataplane/payload.proto\x12\x18\x66lyteidl2.logs.dataplane\x1a\x1b\x62uf/validate/validate.proto\x1a\x1b\x66lyteidl2/common/list.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"o\n\x0bPodResource\x12%\n\tnamespace\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tnamespace\x12\x1b\n\x04name\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12\x1c\n\tcontainer\x18\x03 \x01(\tR\tcontainer\"\xdb\x05\n\x0eLoggingContext\x12*\n\x0c\x63luster_name\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x63lusterName\x12:\n\x14kubernetes_namespace\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x13kubernetesNamespace\x12\x37\n\x13kubernetes_pod_name\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x11kubernetesPodName\x12\x43\n\x19kubernetes_container_name\x18\x06 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x17kubernetesContainerName\x12[\n\x1c\x65xecution_attempt_start_time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x19\x65xecutionAttemptStartTime\x12W\n\x1a\x65xecution_attempt_end_time\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x17\x65xecutionAttemptEndTime\x12u\n\x15kubernetes_pod_labels\x18\t \x03(\x0b\x32\x41.flyteidl2.logs.dataplane.LoggingContext.KubernetesPodLabelsEntryR\x13kubernetesPodLabels\x12\x36\n\x05order\x18\n \x01(\x0e\x32 .flyteidl2.common.Sort.DirectionR\x05order\x12*\n\x11number_of_batches\x18\x0b \x01(\x04R\x0fnumberOfBatches\x1a\x46\n\x18KubernetesPodLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03\"\xf2\x01\n\x13\x43ontainerIdentifier\x12*\n\x0c\x63luster_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x63lusterName\x12:\n\x14kubernetes_namespace\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x13kubernetesNamespace\x12\x37\n\x13kubernetes_pod_name\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x11kubernetesPodName\x12:\n\x19kubernetes_container_name\x18\x04 \x01(\tR\x17kubernetesContainerName\"\xb7\x02\n\x11\x43ontainerSelector\x12*\n\x0c\x63luster_name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x63lusterName\x12:\n\x14kubernetes_namespace\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x13kubernetesNamespace\x12;\n\x1akubernetes_pod_name_prefix\x18\x03 \x01(\tR\x17kubernetesPodNamePrefix\x12:\n\x19kubernetes_container_name\x18\x04 \x01(\tR\x17kubernetesContainerName\x12\x41\n\x1dkubernetes_pod_label_selector\x18\x05 \x01(\tR\x1akubernetesPodLabelSelector\"^\n\x0fLiveLogsOptions\x12$\n\x0elog_pod_status\x18\x01 \x01(\x08R\x0clogPodStatus\x12%\n\x0elog_timestamps\x18\x02 \x01(\x08R\rlogTimestamps\"\xaa\x01\n\x07LogLine\x12\x38\n\ttimestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12K\n\noriginator\x18\x03 \x01(\x0e\x32+.flyteidl2.logs.dataplane.LogLineOriginatorR\noriginator\"\xf0\x01\n\x08LogLines\x12\x18\n\x05lines\x18\x01 \x03(\tB\x02\x18\x01R\x05lines\x12\'\n\x0f\x63ontainer_index\x18\x02 \x01(\rR\x0e\x63ontainerIndex\x12S\n\tcontainer\x18\x03 \x01(\x0b\x32-.flyteidl2.logs.dataplane.ContainerIdentifierB\x06\xbaH\x03\xc8\x01\x01R\tcontainer\x12L\n\x10structured_lines\x18\x04 \x03(\x0b\x32!.flyteidl2.logs.dataplane.LogLineR\x0fstructuredLines\"b\n\x11LogContainersList\x12M\n\ncontainers\x18\x01 \x03(\x0b\x32-.flyteidl2.logs.dataplane.ContainerIdentifierR\ncontainers\"G\n\rLogLinesBatch\x12\x36\n\x04logs\x18\x01 \x03(\x0b\x32\".flyteidl2.logs.dataplane.LogLinesR\x04logs*6\n\x11LogLineOriginator\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x08\n\x04USER\x10\x01\x12\n\n\x06SYSTEM\x10\x02*F\n\nLogsSource\x12\x15\n\x11LIVE_OR_PERSISTED\x10\x00\x12\r\n\tLIVE_ONLY\x10\x01\x12\x12\n\x0ePERSISTED_ONLY\x10\x02\x42\xee\x01\n\x1c\x63om.flyteidl2.logs.dataplaneB\x0cPayloadProtoH\x02P\x01Z None: ... class ContainerSelector(_message.Message): - __slots__ = ["cluster_name", "kubernetes_namespace", "kubernetes_pod_name_prefix", "kubernetes_container_name", "kubernetes_pod_label_selector"] + __slots__ = ["cluster_name", "kubernetes_namespace", "kubernetes_pod_name_prefix", "kubernetes_container_name", "kubernetes_pod_label_selector", "node_name"] CLUSTER_NAME_FIELD_NUMBER: _ClassVar[int] KUBERNETES_NAMESPACE_FIELD_NUMBER: _ClassVar[int] KUBERNETES_POD_NAME_PREFIX_FIELD_NUMBER: _ClassVar[int] KUBERNETES_CONTAINER_NAME_FIELD_NUMBER: _ClassVar[int] KUBERNETES_POD_LABEL_SELECTOR_FIELD_NUMBER: _ClassVar[int] + NODE_NAME_FIELD_NUMBER: _ClassVar[int] cluster_name: str kubernetes_namespace: str kubernetes_pod_name_prefix: str kubernetes_container_name: str kubernetes_pod_label_selector: str - def __init__(self, cluster_name: _Optional[str] = ..., kubernetes_namespace: _Optional[str] = ..., kubernetes_pod_name_prefix: _Optional[str] = ..., kubernetes_container_name: _Optional[str] = ..., kubernetes_pod_label_selector: _Optional[str] = ...) -> None: ... + node_name: str + def __init__(self, cluster_name: _Optional[str] = ..., kubernetes_namespace: _Optional[str] = ..., kubernetes_pod_name_prefix: _Optional[str] = ..., kubernetes_container_name: _Optional[str] = ..., kubernetes_pod_label_selector: _Optional[str] = ..., node_name: _Optional[str] = ...) -> None: ... class LiveLogsOptions(_message.Message): __slots__ = ["log_pod_status", "log_timestamps"] diff --git a/gen/python/flyteidl2/notification/__init__.py b/gen/python/flyteidl2/notification/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/gen/python/flyteidl2/notification/definition_pb2.py b/gen/python/flyteidl2/notification/definition_pb2.py new file mode 100644 index 0000000000..481970ebad --- /dev/null +++ b/gen/python/flyteidl2/notification/definition_pb2.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: flyteidl2/notification/definition.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from flyteidl2.common import identifier_pb2 as flyteidl2_dot_common_dot_identifier__pb2 +from flyteidl2.common import phase_pb2 as flyteidl2_dot_common_dot_phase__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'flyteidl2/notification/definition.proto\x12\x16\x66lyteidl2.notification\x1a\x1b\x62uf/validate/validate.proto\x1a!flyteidl2/common/identifier.proto\x1a\x1c\x66lyteidl2/common/phase.proto\"\x9e\x02\n\x16\x44\x65liveryConfigTemplate\x12I\n\x07webhook\x18\x01 \x01(\x0b\x32/.flyteidl2.notification.WebhookDeliveryTemplateR\x07webhook\x12\x43\n\x05\x65mail\x18\x02 \x01(\x0b\x32-.flyteidl2.notification.EmailDeliveryTemplateR\x05\x65mail:t\xbaHq\x1ao\n\x15\x61t_least_one_required\x12\x30\x61t least one of the delivery options must be set\x1a$has(this.webhook) || has(this.email)\"\xac\x01\n$RunCompletedNotificationTemplateData\x12\x39\n\x03run\x18\x01 \x01(\x0b\x32\x1f.flyteidl2.common.RunIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x03run\x12\x33\n\x05phase\x18\x02 \x01(\x0e\x32\x1d.flyteidl2.common.ActionPhaseR\x05phase\x12\x14\n\x05\x65rror\x18\x03 \x01(\tR\x05\x65rror\"\xd0\x02\n\x17WebhookDeliveryTemplate\x12\x1c\n\x03url\x18\x01 \x01(\tB\n\xbaH\x07r\x05\x10\x01\x18\xd0\x0fR\x03url\x12\x44\n\x06method\x18\x02 \x01(\x0e\x32\".flyteidl2.notification.HttpMethodB\x08\xbaH\x05\x82\x01\x02 \x00R\x06method\x12p\n\x07headers\x18\x03 \x03(\x0b\x32<.flyteidl2.notification.WebhookDeliveryTemplate.HeadersEntryB\x18\xbaH\x15\x9a\x01\x12\x10\x14\"\x06r\x04\x10\x01\x18\x14*\x06r\x04\x10\x01\x18\x32R\x07headers\x12#\n\rbody_template\x18\x04 \x01(\tR\x0c\x62odyTemplate\x1a:\n\x0cHeadersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\">\n\x0e\x45mailRecipient\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07\x61\x64\x64ress\x18\x02 \x01(\tR\x07\x61\x64\x64ress\"\xc1\x02\n\x15\x45mailDeliveryTemplate\x12!\n\x07subject\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07subject\x12@\n\x02to\x18\x02 \x03(\x0b\x32&.flyteidl2.notification.EmailRecipientB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x02to\x12\x36\n\x02\x63\x63\x18\x03 \x03(\x0b\x32&.flyteidl2.notification.EmailRecipientR\x02\x63\x63\x12\x38\n\x03\x62\x63\x63\x18\x04 \x03(\x0b\x32&.flyteidl2.notification.EmailRecipientR\x03\x62\x63\x63\x12,\n\rhtml_template\x18\x05 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0chtmlTemplate\x12#\n\rtext_template\x18\x06 \x01(\tR\x0ctextTemplate*E\n\tEventType\x12\x1a\n\x16\x45VENT_TYPE_UNSPECIFIED\x10\x00\x12\x1c\n\x18\x45VENT_TYPE_RUN_COMPLETED\x10\x01*\xf7\x01\n\nHttpMethod\x12\x1b\n\x17HTTP_METHOD_UNSPECIFIED\x10\x00\x12\x13\n\x0fHTTP_METHOD_GET\x10\x01\x12\x14\n\x10HTTP_METHOD_HEAD\x10\x02\x12\x14\n\x10HTTP_METHOD_POST\x10\x03\x12\x13\n\x0fHTTP_METHOD_PUT\x10\x04\x12\x16\n\x12HTTP_METHOD_DELETE\x10\x05\x12\x17\n\x13HTTP_METHOD_CONNECT\x10\x06\x12\x17\n\x13HTTP_METHOD_OPTIONS\x10\x07\x12\x15\n\x11HTTP_METHOD_TRACE\x10\x08\x12\x15\n\x11HTTP_METHOD_PATCH\x10\tB\xe4\x01\n\x1a\x63om.flyteidl2.notificationB\x0f\x44\x65\x66initionProtoH\x02P\x01Z:github.com/flyteorg/flyte/v2/gen/go/flyteidl2/notification\xa2\x02\x03\x46NX\xaa\x02\x16\x46lyteidl2.Notification\xca\x02\x16\x46lyteidl2\\Notification\xe2\x02\"Flyteidl2\\Notification\\GPBMetadata\xea\x02\x17\x46lyteidl2::Notificationb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flyteidl2.notification.definition_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\032com.flyteidl2.notificationB\017DefinitionProtoH\002P\001Z:github.com/flyteorg/flyte/v2/gen/go/flyteidl2/notification\242\002\003FNX\252\002\026Flyteidl2.Notification\312\002\026Flyteidl2\\Notification\342\002\"Flyteidl2\\Notification\\GPBMetadata\352\002\027Flyteidl2::Notification' + _DELIVERYCONFIGTEMPLATE._options = None + _DELIVERYCONFIGTEMPLATE._serialized_options = b'\272Hq\032o\n\025at_least_one_required\0220at least one of the delivery options must be set\032$has(this.webhook) || has(this.email)' + _RUNCOMPLETEDNOTIFICATIONTEMPLATEDATA.fields_by_name['run']._options = None + _RUNCOMPLETEDNOTIFICATIONTEMPLATEDATA.fields_by_name['run']._serialized_options = b'\272H\003\310\001\001' + _WEBHOOKDELIVERYTEMPLATE_HEADERSENTRY._options = None + _WEBHOOKDELIVERYTEMPLATE_HEADERSENTRY._serialized_options = b'8\001' + _WEBHOOKDELIVERYTEMPLATE.fields_by_name['url']._options = None + _WEBHOOKDELIVERYTEMPLATE.fields_by_name['url']._serialized_options = b'\272H\007r\005\020\001\030\320\017' + _WEBHOOKDELIVERYTEMPLATE.fields_by_name['method']._options = None + _WEBHOOKDELIVERYTEMPLATE.fields_by_name['method']._serialized_options = b'\272H\005\202\001\002 \000' + _WEBHOOKDELIVERYTEMPLATE.fields_by_name['headers']._options = None + _WEBHOOKDELIVERYTEMPLATE.fields_by_name['headers']._serialized_options = b'\272H\025\232\001\022\020\024\"\006r\004\020\001\030\024*\006r\004\020\001\0302' + _EMAILDELIVERYTEMPLATE.fields_by_name['subject']._options = None + _EMAILDELIVERYTEMPLATE.fields_by_name['subject']._serialized_options = b'\272H\004r\002\020\001' + _EMAILDELIVERYTEMPLATE.fields_by_name['to']._options = None + _EMAILDELIVERYTEMPLATE.fields_by_name['to']._serialized_options = b'\272H\005\222\001\002\010\001' + _EMAILDELIVERYTEMPLATE.fields_by_name['html_template']._options = None + _EMAILDELIVERYTEMPLATE.fields_by_name['html_template']._serialized_options = b'\272H\004r\002\020\001' + _globals['_EVENTTYPE']._serialized_start=1352 + _globals['_EVENTTYPE']._serialized_end=1421 + _globals['_HTTPMETHOD']._serialized_start=1424 + _globals['_HTTPMETHOD']._serialized_end=1671 + _globals['_DELIVERYCONFIGTEMPLATE']._serialized_start=162 + _globals['_DELIVERYCONFIGTEMPLATE']._serialized_end=448 + _globals['_RUNCOMPLETEDNOTIFICATIONTEMPLATEDATA']._serialized_start=451 + _globals['_RUNCOMPLETEDNOTIFICATIONTEMPLATEDATA']._serialized_end=623 + _globals['_WEBHOOKDELIVERYTEMPLATE']._serialized_start=626 + _globals['_WEBHOOKDELIVERYTEMPLATE']._serialized_end=962 + _globals['_WEBHOOKDELIVERYTEMPLATE_HEADERSENTRY']._serialized_start=904 + _globals['_WEBHOOKDELIVERYTEMPLATE_HEADERSENTRY']._serialized_end=962 + _globals['_EMAILRECIPIENT']._serialized_start=964 + _globals['_EMAILRECIPIENT']._serialized_end=1026 + _globals['_EMAILDELIVERYTEMPLATE']._serialized_start=1029 + _globals['_EMAILDELIVERYTEMPLATE']._serialized_end=1350 +# @@protoc_insertion_point(module_scope) diff --git a/gen/python/flyteidl2/notification/definition_pb2.pyi b/gen/python/flyteidl2/notification/definition_pb2.pyi new file mode 100644 index 0000000000..c93cc42aa7 --- /dev/null +++ b/gen/python/flyteidl2/notification/definition_pb2.pyi @@ -0,0 +1,101 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from flyteidl2.common import identifier_pb2 as _identifier_pb2 +from flyteidl2.common import phase_pb2 as _phase_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class EventType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + EVENT_TYPE_UNSPECIFIED: _ClassVar[EventType] + EVENT_TYPE_RUN_COMPLETED: _ClassVar[EventType] + +class HttpMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = [] + HTTP_METHOD_UNSPECIFIED: _ClassVar[HttpMethod] + HTTP_METHOD_GET: _ClassVar[HttpMethod] + HTTP_METHOD_HEAD: _ClassVar[HttpMethod] + HTTP_METHOD_POST: _ClassVar[HttpMethod] + HTTP_METHOD_PUT: _ClassVar[HttpMethod] + HTTP_METHOD_DELETE: _ClassVar[HttpMethod] + HTTP_METHOD_CONNECT: _ClassVar[HttpMethod] + HTTP_METHOD_OPTIONS: _ClassVar[HttpMethod] + HTTP_METHOD_TRACE: _ClassVar[HttpMethod] + HTTP_METHOD_PATCH: _ClassVar[HttpMethod] +EVENT_TYPE_UNSPECIFIED: EventType +EVENT_TYPE_RUN_COMPLETED: EventType +HTTP_METHOD_UNSPECIFIED: HttpMethod +HTTP_METHOD_GET: HttpMethod +HTTP_METHOD_HEAD: HttpMethod +HTTP_METHOD_POST: HttpMethod +HTTP_METHOD_PUT: HttpMethod +HTTP_METHOD_DELETE: HttpMethod +HTTP_METHOD_CONNECT: HttpMethod +HTTP_METHOD_OPTIONS: HttpMethod +HTTP_METHOD_TRACE: HttpMethod +HTTP_METHOD_PATCH: HttpMethod + +class DeliveryConfigTemplate(_message.Message): + __slots__ = ["webhook", "email"] + WEBHOOK_FIELD_NUMBER: _ClassVar[int] + EMAIL_FIELD_NUMBER: _ClassVar[int] + webhook: WebhookDeliveryTemplate + email: EmailDeliveryTemplate + def __init__(self, webhook: _Optional[_Union[WebhookDeliveryTemplate, _Mapping]] = ..., email: _Optional[_Union[EmailDeliveryTemplate, _Mapping]] = ...) -> None: ... + +class RunCompletedNotificationTemplateData(_message.Message): + __slots__ = ["run", "phase", "error"] + RUN_FIELD_NUMBER: _ClassVar[int] + PHASE_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + run: _identifier_pb2.RunIdentifier + phase: _phase_pb2.ActionPhase + error: str + def __init__(self, run: _Optional[_Union[_identifier_pb2.RunIdentifier, _Mapping]] = ..., phase: _Optional[_Union[_phase_pb2.ActionPhase, str]] = ..., error: _Optional[str] = ...) -> None: ... + +class WebhookDeliveryTemplate(_message.Message): + __slots__ = ["url", "method", "headers", "body_template"] + class HeadersEntry(_message.Message): + __slots__ = ["key", "value"] + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + URL_FIELD_NUMBER: _ClassVar[int] + METHOD_FIELD_NUMBER: _ClassVar[int] + HEADERS_FIELD_NUMBER: _ClassVar[int] + BODY_TEMPLATE_FIELD_NUMBER: _ClassVar[int] + url: str + method: HttpMethod + headers: _containers.ScalarMap[str, str] + body_template: str + def __init__(self, url: _Optional[str] = ..., method: _Optional[_Union[HttpMethod, str]] = ..., headers: _Optional[_Mapping[str, str]] = ..., body_template: _Optional[str] = ...) -> None: ... + +class EmailRecipient(_message.Message): + __slots__ = ["name", "address"] + NAME_FIELD_NUMBER: _ClassVar[int] + ADDRESS_FIELD_NUMBER: _ClassVar[int] + name: str + address: str + def __init__(self, name: _Optional[str] = ..., address: _Optional[str] = ...) -> None: ... + +class EmailDeliveryTemplate(_message.Message): + __slots__ = ["subject", "to", "cc", "bcc", "html_template", "text_template"] + SUBJECT_FIELD_NUMBER: _ClassVar[int] + TO_FIELD_NUMBER: _ClassVar[int] + CC_FIELD_NUMBER: _ClassVar[int] + BCC_FIELD_NUMBER: _ClassVar[int] + HTML_TEMPLATE_FIELD_NUMBER: _ClassVar[int] + TEXT_TEMPLATE_FIELD_NUMBER: _ClassVar[int] + subject: str + to: _containers.RepeatedCompositeFieldContainer[EmailRecipient] + cc: _containers.RepeatedCompositeFieldContainer[EmailRecipient] + bcc: _containers.RepeatedCompositeFieldContainer[EmailRecipient] + html_template: str + text_template: str + def __init__(self, subject: _Optional[str] = ..., to: _Optional[_Iterable[_Union[EmailRecipient, _Mapping]]] = ..., cc: _Optional[_Iterable[_Union[EmailRecipient, _Mapping]]] = ..., bcc: _Optional[_Iterable[_Union[EmailRecipient, _Mapping]]] = ..., html_template: _Optional[str] = ..., text_template: _Optional[str] = ...) -> None: ... diff --git a/gen/python/flyteidl2/notification/definition_pb2_grpc.py b/gen/python/flyteidl2/notification/definition_pb2_grpc.py new file mode 100644 index 0000000000..2daafffebf --- /dev/null +++ b/gen/python/flyteidl2/notification/definition_pb2_grpc.py @@ -0,0 +1,4 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + diff --git a/gen/python/flyteidl2/secret/payload_pb2.py b/gen/python/flyteidl2/secret/payload_pb2.py index 290b403727..dba4e7c91c 100644 --- a/gen/python/flyteidl2/secret/payload_pb2.py +++ b/gen/python/flyteidl2/secret/payload_pb2.py @@ -15,7 +15,7 @@ from flyteidl2.secret import definition_pb2 as flyteidl2_dot_secret_dot_definition__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66lyteidl2/secret/payload.proto\x12\x10\x66lyteidl2.secret\x1a\x1b\x62uf/validate/validate.proto\x1a!flyteidl2/secret/definition.proto\"\x90\x01\n\x13\x43reateSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12=\n\x0bsecret_spec\x18\x02 \x01(\x0b\x32\x1c.flyteidl2.secret.SecretSpecR\nsecretSpec\"\x16\n\x14\x43reateSecretResponse\"\x90\x01\n\x13UpdateSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12=\n\x0bsecret_spec\x18\x02 \x01(\x0b\x32\x1c.flyteidl2.secret.SecretSpecR\nsecretSpec\"\x16\n\x14UpdateSecretResponse\"N\n\x10GetSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\"E\n\x11GetSecretResponse\x12\x30\n\x06secret\x18\x01 \x01(\x0b\x32\x18.flyteidl2.secret.SecretR\x06secret\"Q\n\x13\x44\x65leteSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\"\x16\n\x14\x44\x65leteSecretResponse\"\xc5\x02\n\x12ListSecretsRequest\x12\"\n\x0corganization\x18\x01 \x01(\tR\x0corganization\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\x14\n\x05limit\x18\x04 \x01(\x05R\x05limit\x12\x14\n\x05token\x18\x05 \x01(\tR\x05token\x12h\n\x12per_cluster_tokens\x18\x06 \x03(\x0b\x32:.flyteidl2.secret.ListSecretsRequest.PerClusterTokensEntryR\x10perClusterTokens\x1a\x43\n\x15PerClusterTokensEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x8f\x02\n\x13ListSecretsResponse\x12\x32\n\x07secrets\x18\x01 \x03(\x0b\x32\x18.flyteidl2.secret.SecretR\x07secrets\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12i\n\x12per_cluster_tokens\x18\x03 \x03(\x0b\x32;.flyteidl2.secret.ListSecretsResponse.PerClusterTokensEntryR\x10perClusterTokens\x1a\x43\n\x15PerClusterTokensEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\xbd\x01\n\x14\x63om.flyteidl2.secretB\x0cPayloadProtoH\x02P\x01Z4github.com/flyteorg/flyte/v2/gen/go/flyteidl2/secret\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl2.Secret\xca\x02\x10\x46lyteidl2\\Secret\xe2\x02\x1c\x46lyteidl2\\Secret\\GPBMetadata\xea\x02\x11\x46lyteidl2::Secretb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x66lyteidl2/secret/payload.proto\x12\x10\x66lyteidl2.secret\x1a\x1b\x62uf/validate/validate.proto\x1a!flyteidl2/secret/definition.proto\"\x90\x01\n\x13\x43reateSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12=\n\x0bsecret_spec\x18\x02 \x01(\x0b\x32\x1c.flyteidl2.secret.SecretSpecR\nsecretSpec\"\x16\n\x14\x43reateSecretResponse\"\x90\x01\n\x13UpdateSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12=\n\x0bsecret_spec\x18\x02 \x01(\x0b\x32\x1c.flyteidl2.secret.SecretSpecR\nsecretSpec\"\x16\n\x14UpdateSecretResponse\"\x84\x01\n\x10GetSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12\x34\n\x16include_system_secrets\x18\x02 \x01(\x08R\x14includeSystemSecrets\"E\n\x11GetSecretResponse\x12\x30\n\x06secret\x18\x01 \x01(\x0b\x32\x18.flyteidl2.secret.SecretR\x06secret\"\x87\x01\n\x13\x44\x65leteSecretRequest\x12:\n\x02id\x18\x01 \x01(\x0b\x32\".flyteidl2.secret.SecretIdentifierB\x06\xbaH\x03\xc8\x01\x01R\x02id\x12\x34\n\x16include_system_secrets\x18\x02 \x01(\x08R\x14includeSystemSecrets\"\x16\n\x14\x44\x65leteSecretResponse\"\xfb\x02\n\x12ListSecretsRequest\x12\"\n\x0corganization\x18\x01 \x01(\tR\x0corganization\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x18\n\x07project\x18\x03 \x01(\tR\x07project\x12\x14\n\x05limit\x18\x04 \x01(\x05R\x05limit\x12\x14\n\x05token\x18\x05 \x01(\tR\x05token\x12h\n\x12per_cluster_tokens\x18\x06 \x03(\x0b\x32:.flyteidl2.secret.ListSecretsRequest.PerClusterTokensEntryR\x10perClusterTokens\x12\x34\n\x16include_system_secrets\x18\x07 \x01(\x08R\x14includeSystemSecrets\x1a\x43\n\x15PerClusterTokensEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x8f\x02\n\x13ListSecretsResponse\x12\x32\n\x07secrets\x18\x01 \x03(\x0b\x32\x18.flyteidl2.secret.SecretR\x07secrets\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12i\n\x12per_cluster_tokens\x18\x03 \x03(\x0b\x32;.flyteidl2.secret.ListSecretsResponse.PerClusterTokensEntryR\x10perClusterTokens\x1a\x43\n\x15PerClusterTokensEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\xbd\x01\n\x14\x63om.flyteidl2.secretB\x0cPayloadProtoH\x02P\x01Z4github.com/flyteorg/flyte/v2/gen/go/flyteidl2/secret\xa2\x02\x03\x46SX\xaa\x02\x10\x46lyteidl2.Secret\xca\x02\x10\x46lyteidl2\\Secret\xe2\x02\x1c\x46lyteidl2\\Secret\\GPBMetadata\xea\x02\x11\x46lyteidl2::Secretb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -43,20 +43,20 @@ _globals['_UPDATESECRETREQUEST']._serialized_end=432 _globals['_UPDATESECRETRESPONSE']._serialized_start=434 _globals['_UPDATESECRETRESPONSE']._serialized_end=456 - _globals['_GETSECRETREQUEST']._serialized_start=458 - _globals['_GETSECRETREQUEST']._serialized_end=536 - _globals['_GETSECRETRESPONSE']._serialized_start=538 - _globals['_GETSECRETRESPONSE']._serialized_end=607 - _globals['_DELETESECRETREQUEST']._serialized_start=609 - _globals['_DELETESECRETREQUEST']._serialized_end=690 - _globals['_DELETESECRETRESPONSE']._serialized_start=692 - _globals['_DELETESECRETRESPONSE']._serialized_end=714 - _globals['_LISTSECRETSREQUEST']._serialized_start=717 - _globals['_LISTSECRETSREQUEST']._serialized_end=1042 - _globals['_LISTSECRETSREQUEST_PERCLUSTERTOKENSENTRY']._serialized_start=975 - _globals['_LISTSECRETSREQUEST_PERCLUSTERTOKENSENTRY']._serialized_end=1042 - _globals['_LISTSECRETSRESPONSE']._serialized_start=1045 - _globals['_LISTSECRETSRESPONSE']._serialized_end=1316 - _globals['_LISTSECRETSRESPONSE_PERCLUSTERTOKENSENTRY']._serialized_start=975 - _globals['_LISTSECRETSRESPONSE_PERCLUSTERTOKENSENTRY']._serialized_end=1042 + _globals['_GETSECRETREQUEST']._serialized_start=459 + _globals['_GETSECRETREQUEST']._serialized_end=591 + _globals['_GETSECRETRESPONSE']._serialized_start=593 + _globals['_GETSECRETRESPONSE']._serialized_end=662 + _globals['_DELETESECRETREQUEST']._serialized_start=665 + _globals['_DELETESECRETREQUEST']._serialized_end=800 + _globals['_DELETESECRETRESPONSE']._serialized_start=802 + _globals['_DELETESECRETRESPONSE']._serialized_end=824 + _globals['_LISTSECRETSREQUEST']._serialized_start=827 + _globals['_LISTSECRETSREQUEST']._serialized_end=1206 + _globals['_LISTSECRETSREQUEST_PERCLUSTERTOKENSENTRY']._serialized_start=1139 + _globals['_LISTSECRETSREQUEST_PERCLUSTERTOKENSENTRY']._serialized_end=1206 + _globals['_LISTSECRETSRESPONSE']._serialized_start=1209 + _globals['_LISTSECRETSRESPONSE']._serialized_end=1480 + _globals['_LISTSECRETSRESPONSE_PERCLUSTERTOKENSENTRY']._serialized_start=1139 + _globals['_LISTSECRETSRESPONSE_PERCLUSTERTOKENSENTRY']._serialized_end=1206 # @@protoc_insertion_point(module_scope) diff --git a/gen/python/flyteidl2/secret/payload_pb2.pyi b/gen/python/flyteidl2/secret/payload_pb2.pyi index b7327b198a..231c0262ee 100644 --- a/gen/python/flyteidl2/secret/payload_pb2.pyi +++ b/gen/python/flyteidl2/secret/payload_pb2.pyi @@ -32,10 +32,12 @@ class UpdateSecretResponse(_message.Message): def __init__(self) -> None: ... class GetSecretRequest(_message.Message): - __slots__ = ["id"] + __slots__ = ["id", "include_system_secrets"] ID_FIELD_NUMBER: _ClassVar[int] + INCLUDE_SYSTEM_SECRETS_FIELD_NUMBER: _ClassVar[int] id: _definition_pb2.SecretIdentifier - def __init__(self, id: _Optional[_Union[_definition_pb2.SecretIdentifier, _Mapping]] = ...) -> None: ... + include_system_secrets: bool + def __init__(self, id: _Optional[_Union[_definition_pb2.SecretIdentifier, _Mapping]] = ..., include_system_secrets: bool = ...) -> None: ... class GetSecretResponse(_message.Message): __slots__ = ["secret"] @@ -44,17 +46,19 @@ class GetSecretResponse(_message.Message): def __init__(self, secret: _Optional[_Union[_definition_pb2.Secret, _Mapping]] = ...) -> None: ... class DeleteSecretRequest(_message.Message): - __slots__ = ["id"] + __slots__ = ["id", "include_system_secrets"] ID_FIELD_NUMBER: _ClassVar[int] + INCLUDE_SYSTEM_SECRETS_FIELD_NUMBER: _ClassVar[int] id: _definition_pb2.SecretIdentifier - def __init__(self, id: _Optional[_Union[_definition_pb2.SecretIdentifier, _Mapping]] = ...) -> None: ... + include_system_secrets: bool + def __init__(self, id: _Optional[_Union[_definition_pb2.SecretIdentifier, _Mapping]] = ..., include_system_secrets: bool = ...) -> None: ... class DeleteSecretResponse(_message.Message): __slots__ = [] def __init__(self) -> None: ... class ListSecretsRequest(_message.Message): - __slots__ = ["organization", "domain", "project", "limit", "token", "per_cluster_tokens"] + __slots__ = ["organization", "domain", "project", "limit", "token", "per_cluster_tokens", "include_system_secrets"] class PerClusterTokensEntry(_message.Message): __slots__ = ["key", "value"] KEY_FIELD_NUMBER: _ClassVar[int] @@ -68,13 +72,15 @@ class ListSecretsRequest(_message.Message): LIMIT_FIELD_NUMBER: _ClassVar[int] TOKEN_FIELD_NUMBER: _ClassVar[int] PER_CLUSTER_TOKENS_FIELD_NUMBER: _ClassVar[int] + INCLUDE_SYSTEM_SECRETS_FIELD_NUMBER: _ClassVar[int] organization: str domain: str project: str limit: int token: str per_cluster_tokens: _containers.ScalarMap[str, str] - def __init__(self, organization: _Optional[str] = ..., domain: _Optional[str] = ..., project: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., per_cluster_tokens: _Optional[_Mapping[str, str]] = ...) -> None: ... + include_system_secrets: bool + def __init__(self, organization: _Optional[str] = ..., domain: _Optional[str] = ..., project: _Optional[str] = ..., limit: _Optional[int] = ..., token: _Optional[str] = ..., per_cluster_tokens: _Optional[_Mapping[str, str]] = ..., include_system_secrets: bool = ...) -> None: ... class ListSecretsResponse(_message.Message): __slots__ = ["secrets", "token", "per_cluster_tokens"] diff --git a/gen/python/flyteidl2/task/run_pb2.py b/gen/python/flyteidl2/task/run_pb2.py index f94fc763bd..ae1b2f2cce 100644 --- a/gen/python/flyteidl2/task/run_pb2.py +++ b/gen/python/flyteidl2/task/run_pb2.py @@ -11,12 +11,15 @@ _sym_db = _symbol_database.Default() +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from flyteidl2.common import phase_pb2 as flyteidl2_dot_common_dot_phase__pb2 from flyteidl2.core import literals_pb2 as flyteidl2_dot_core_dot_literals__pb2 from flyteidl2.core import security_pb2 as flyteidl2_dot_core_dot_security__pb2 +from flyteidl2.notification import definition_pb2 as flyteidl2_dot_notification_dot_definition__pb2 from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lyteidl2/task/run.proto\x12\x0e\x66lyteidl2.task\x1a\x1d\x66lyteidl2/core/literals.proto\x1a\x1d\x66lyteidl2/core/security.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x7f\n\x06Labels\x12:\n\x06values\x18\x01 \x03(\x0b\x32\".flyteidl2.task.Labels.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x89\x01\n\x0b\x41nnotations\x12?\n\x06values\x18\x01 \x03(\x0b\x32\'.flyteidl2.task.Annotations.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"<\n\x04\x45nvs\x12\x34\n\x06values\x18\x01 \x03(\x0b\x32\x1c.flyteidl2.core.KeyValuePairR\x06values\"8\n\x0eRawDataStorage\x12&\n\x0fraw_data_prefix\x18\x01 \x01(\tR\rrawDataPrefix\"\x86\x01\n\x0b\x43\x61\x63heConfig\x12\'\n\x0foverwrite_cache\x18\x01 \x01(\x08R\x0eoverwriteCache\x12N\n\x12\x63\x61\x63he_lookup_scope\x18\x02 \x01(\x0e\x32 .flyteidl2.task.CacheLookupScopeR\x10\x63\x61\x63heLookupScope\"\x81\x04\n\x07RunSpec\x12.\n\x06labels\x18\x01 \x01(\x0b\x32\x16.flyteidl2.task.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x02 \x01(\x0b\x32\x1b.flyteidl2.task.AnnotationsR\x0b\x61nnotations\x12(\n\x04\x65nvs\x18\x03 \x01(\x0b\x32\x14.flyteidl2.task.EnvsR\x04\x65nvs\x12@\n\rinterruptible\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12+\n\x0foverwrite_cache\x18\x05 \x01(\x08\x42\x02\x18\x01R\x0eoverwriteCache\x12\x18\n\x07\x63luster\x18\x06 \x01(\tR\x07\x63luster\x12H\n\x10raw_data_storage\x18\x07 \x01(\x0b\x32\x1e.flyteidl2.task.RawDataStorageR\x0erawDataStorage\x12J\n\x10security_context\x18\x08 \x01(\x0b\x32\x1f.flyteidl2.core.SecurityContextR\x0fsecurityContext\x12>\n\x0c\x63\x61\x63he_config\x18\t \x01(\x0b\x32\x1b.flyteidl2.task.CacheConfigR\x0b\x63\x61\x63heConfig*|\n\x10\x43\x61\x63heLookupScope\x12\"\n\x1e\x43\x41\x43HE_LOOKUP_SCOPE_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x43\x41\x43HE_LOOKUP_SCOPE_GLOBAL\x10\x01\x12%\n!CACHE_LOOKUP_SCOPE_PROJECT_DOMAIN\x10\x02\x42\xad\x01\n\x12\x63om.flyteidl2.taskB\x08RunProtoH\x02P\x01Z2github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task\xa2\x02\x03\x46TX\xaa\x02\x0e\x46lyteidl2.Task\xca\x02\x0e\x46lyteidl2\\Task\xe2\x02\x1a\x46lyteidl2\\Task\\GPBMetadata\xea\x02\x0f\x46lyteidl2::Taskb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lyteidl2/task/run.proto\x12\x0e\x66lyteidl2.task\x1a\x1b\x62uf/validate/validate.proto\x1a\x1c\x66lyteidl2/common/phase.proto\x1a\x1d\x66lyteidl2/core/literals.proto\x1a\x1d\x66lyteidl2/core/security.proto\x1a\'flyteidl2/notification/definition.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x7f\n\x06Labels\x12:\n\x06values\x18\x01 \x03(\x0b\x32\".flyteidl2.task.Labels.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\x89\x01\n\x0b\x41nnotations\x12?\n\x06values\x18\x01 \x03(\x0b\x32\'.flyteidl2.task.Annotations.ValuesEntryR\x06values\x1a\x39\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"<\n\x04\x45nvs\x12\x34\n\x06values\x18\x01 \x03(\x0b\x32\x1c.flyteidl2.core.KeyValuePairR\x06values\"8\n\x0eRawDataStorage\x12&\n\x0fraw_data_prefix\x18\x01 \x01(\tR\rrawDataPrefix\"\x86\x01\n\x0b\x43\x61\x63heConfig\x12\'\n\x0foverwrite_cache\x18\x01 \x01(\x08R\x0eoverwriteCache\x12N\n\x12\x63\x61\x63he_lookup_scope\x18\x02 \x01(\x0e\x32 .flyteidl2.task.CacheLookupScopeR\x10\x63\x61\x63heLookupScope\"\xa3\x05\n\x07RunSpec\x12.\n\x06labels\x18\x01 \x01(\x0b\x32\x16.flyteidl2.task.LabelsR\x06labels\x12=\n\x0b\x61nnotations\x18\x02 \x01(\x0b\x32\x1b.flyteidl2.task.AnnotationsR\x0b\x61nnotations\x12(\n\x04\x65nvs\x18\x03 \x01(\x0b\x32\x14.flyteidl2.task.EnvsR\x04\x65nvs\x12@\n\rinterruptible\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.BoolValueR\rinterruptible\x12+\n\x0foverwrite_cache\x18\x05 \x01(\x08\x42\x02\x18\x01R\x0eoverwriteCache\x12\x18\n\x07\x63luster\x18\x06 \x01(\tR\x07\x63luster\x12H\n\x10raw_data_storage\x18\x07 \x01(\x0b\x32\x1e.flyteidl2.task.RawDataStorageR\x0erawDataStorage\x12J\n\x10security_context\x18\x08 \x01(\x0b\x32\x1f.flyteidl2.core.SecurityContextR\x0fsecurityContext\x12>\n\x0c\x63\x61\x63he_config\x18\t \x01(\x0b\x32\x1b.flyteidl2.task.CacheConfigR\x0b\x63\x61\x63heConfig\x12\x36\n\x16notification_rule_name\x18\n \x01(\tH\x00R\x14notificationRuleName\x12O\n\x12notification_rules\x18\x0b \x01(\x0b\x32\x1e.flyteidl2.task.InlineRuleListH\x00R\x11notificationRulesB\x17\n\x15notification_settings\"L\n\x0eInlineRuleList\x12:\n\x05rules\x18\x01 \x03(\x0b\x32\x1a.flyteidl2.task.InlineRuleB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05rules\"\x87\x02\n\nInlineRule\x12S\n\ton_phases\x18\x01 \x03(\x0e\x32\x1d.flyteidl2.common.ActionPhaseB\x17\xbaH\x14\x92\x01\x11\x08\x01\x18\x01\"\x0b\x82\x01\x08\x18\x05\x18\x06\x18\x07\x18\x08R\x08onPhases\x12\x32\n\x14\x64\x65livery_config_name\x18\x02 \x01(\tH\x00R\x12\x64\x65liveryConfigName\x12]\n\x11\x64\x65livery_template\x18\x03 \x01(\x0b\x32..flyteidl2.notification.DeliveryConfigTemplateH\x00R\x10\x64\x65liveryTemplateB\x11\n\x08\x64\x65livery\x12\x05\xbaH\x02\x08\x01*|\n\x10\x43\x61\x63heLookupScope\x12\"\n\x1e\x43\x41\x43HE_LOOKUP_SCOPE_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x43\x41\x43HE_LOOKUP_SCOPE_GLOBAL\x10\x01\x12%\n!CACHE_LOOKUP_SCOPE_PROJECT_DOMAIN\x10\x02\x42\xad\x01\n\x12\x63om.flyteidl2.taskB\x08RunProtoH\x02P\x01Z2github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task\xa2\x02\x03\x46TX\xaa\x02\x0e\x46lyteidl2.Task\xca\x02\x0e\x46lyteidl2\\Task\xe2\x02\x1a\x46lyteidl2\\Task\\GPBMetadata\xea\x02\x0f\x46lyteidl2::Taskb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -30,22 +33,32 @@ _ANNOTATIONS_VALUESENTRY._serialized_options = b'8\001' _RUNSPEC.fields_by_name['overwrite_cache']._options = None _RUNSPEC.fields_by_name['overwrite_cache']._serialized_options = b'\030\001' - _globals['_CACHELOOKUPSCOPE']._serialized_start=1180 - _globals['_CACHELOOKUPSCOPE']._serialized_end=1304 - _globals['_LABELS']._serialized_start=138 - _globals['_LABELS']._serialized_end=265 - _globals['_LABELS_VALUESENTRY']._serialized_start=208 - _globals['_LABELS_VALUESENTRY']._serialized_end=265 - _globals['_ANNOTATIONS']._serialized_start=268 - _globals['_ANNOTATIONS']._serialized_end=405 - _globals['_ANNOTATIONS_VALUESENTRY']._serialized_start=208 - _globals['_ANNOTATIONS_VALUESENTRY']._serialized_end=265 - _globals['_ENVS']._serialized_start=407 - _globals['_ENVS']._serialized_end=467 - _globals['_RAWDATASTORAGE']._serialized_start=469 - _globals['_RAWDATASTORAGE']._serialized_end=525 - _globals['_CACHECONFIG']._serialized_start=528 - _globals['_CACHECONFIG']._serialized_end=662 - _globals['_RUNSPEC']._serialized_start=665 - _globals['_RUNSPEC']._serialized_end=1178 + _INLINERULELIST.fields_by_name['rules']._options = None + _INLINERULELIST.fields_by_name['rules']._serialized_options = b'\272H\005\222\001\002\010\001' + _INLINERULE.oneofs_by_name['delivery']._options = None + _INLINERULE.oneofs_by_name['delivery']._serialized_options = b'\272H\002\010\001' + _INLINERULE.fields_by_name['on_phases']._options = None + _INLINERULE.fields_by_name['on_phases']._serialized_options = b'\272H\024\222\001\021\010\001\030\001\"\013\202\001\010\030\005\030\006\030\007\030\010' + _globals['_CACHELOOKUPSCOPE']._serialized_start=1786 + _globals['_CACHELOOKUPSCOPE']._serialized_end=1910 + _globals['_LABELS']._serialized_start=238 + _globals['_LABELS']._serialized_end=365 + _globals['_LABELS_VALUESENTRY']._serialized_start=308 + _globals['_LABELS_VALUESENTRY']._serialized_end=365 + _globals['_ANNOTATIONS']._serialized_start=368 + _globals['_ANNOTATIONS']._serialized_end=505 + _globals['_ANNOTATIONS_VALUESENTRY']._serialized_start=308 + _globals['_ANNOTATIONS_VALUESENTRY']._serialized_end=365 + _globals['_ENVS']._serialized_start=507 + _globals['_ENVS']._serialized_end=567 + _globals['_RAWDATASTORAGE']._serialized_start=569 + _globals['_RAWDATASTORAGE']._serialized_end=625 + _globals['_CACHECONFIG']._serialized_start=628 + _globals['_CACHECONFIG']._serialized_end=762 + _globals['_RUNSPEC']._serialized_start=765 + _globals['_RUNSPEC']._serialized_end=1440 + _globals['_INLINERULELIST']._serialized_start=1442 + _globals['_INLINERULELIST']._serialized_end=1518 + _globals['_INLINERULE']._serialized_start=1521 + _globals['_INLINERULE']._serialized_end=1784 # @@protoc_insertion_point(module_scope) diff --git a/gen/python/flyteidl2/task/run_pb2.pyi b/gen/python/flyteidl2/task/run_pb2.pyi index 15a60b7eeb..083e606e2a 100644 --- a/gen/python/flyteidl2/task/run_pb2.pyi +++ b/gen/python/flyteidl2/task/run_pb2.pyi @@ -1,5 +1,8 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from flyteidl2.common import phase_pb2 as _phase_pb2 from flyteidl2.core import literals_pb2 as _literals_pb2 from flyteidl2.core import security_pb2 as _security_pb2 +from flyteidl2.notification import definition_pb2 as _definition_pb2 from google.protobuf import wrappers_pb2 as _wrappers_pb2 from google.protobuf.internal import containers as _containers from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper @@ -65,7 +68,7 @@ class CacheConfig(_message.Message): def __init__(self, overwrite_cache: bool = ..., cache_lookup_scope: _Optional[_Union[CacheLookupScope, str]] = ...) -> None: ... class RunSpec(_message.Message): - __slots__ = ["labels", "annotations", "envs", "interruptible", "overwrite_cache", "cluster", "raw_data_storage", "security_context", "cache_config"] + __slots__ = ["labels", "annotations", "envs", "interruptible", "overwrite_cache", "cluster", "raw_data_storage", "security_context", "cache_config", "notification_rule_name", "notification_rules"] LABELS_FIELD_NUMBER: _ClassVar[int] ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] ENVS_FIELD_NUMBER: _ClassVar[int] @@ -75,6 +78,8 @@ class RunSpec(_message.Message): RAW_DATA_STORAGE_FIELD_NUMBER: _ClassVar[int] SECURITY_CONTEXT_FIELD_NUMBER: _ClassVar[int] CACHE_CONFIG_FIELD_NUMBER: _ClassVar[int] + NOTIFICATION_RULE_NAME_FIELD_NUMBER: _ClassVar[int] + NOTIFICATION_RULES_FIELD_NUMBER: _ClassVar[int] labels: Labels annotations: Annotations envs: Envs @@ -84,4 +89,22 @@ class RunSpec(_message.Message): raw_data_storage: RawDataStorage security_context: _security_pb2.SecurityContext cache_config: CacheConfig - def __init__(self, labels: _Optional[_Union[Labels, _Mapping]] = ..., annotations: _Optional[_Union[Annotations, _Mapping]] = ..., envs: _Optional[_Union[Envs, _Mapping]] = ..., interruptible: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., overwrite_cache: bool = ..., cluster: _Optional[str] = ..., raw_data_storage: _Optional[_Union[RawDataStorage, _Mapping]] = ..., security_context: _Optional[_Union[_security_pb2.SecurityContext, _Mapping]] = ..., cache_config: _Optional[_Union[CacheConfig, _Mapping]] = ...) -> None: ... + notification_rule_name: str + notification_rules: InlineRuleList + def __init__(self, labels: _Optional[_Union[Labels, _Mapping]] = ..., annotations: _Optional[_Union[Annotations, _Mapping]] = ..., envs: _Optional[_Union[Envs, _Mapping]] = ..., interruptible: _Optional[_Union[_wrappers_pb2.BoolValue, _Mapping]] = ..., overwrite_cache: bool = ..., cluster: _Optional[str] = ..., raw_data_storage: _Optional[_Union[RawDataStorage, _Mapping]] = ..., security_context: _Optional[_Union[_security_pb2.SecurityContext, _Mapping]] = ..., cache_config: _Optional[_Union[CacheConfig, _Mapping]] = ..., notification_rule_name: _Optional[str] = ..., notification_rules: _Optional[_Union[InlineRuleList, _Mapping]] = ...) -> None: ... + +class InlineRuleList(_message.Message): + __slots__ = ["rules"] + RULES_FIELD_NUMBER: _ClassVar[int] + rules: _containers.RepeatedCompositeFieldContainer[InlineRule] + def __init__(self, rules: _Optional[_Iterable[_Union[InlineRule, _Mapping]]] = ...) -> None: ... + +class InlineRule(_message.Message): + __slots__ = ["on_phases", "delivery_config_name", "delivery_template"] + ON_PHASES_FIELD_NUMBER: _ClassVar[int] + DELIVERY_CONFIG_NAME_FIELD_NUMBER: _ClassVar[int] + DELIVERY_TEMPLATE_FIELD_NUMBER: _ClassVar[int] + on_phases: _containers.RepeatedScalarFieldContainer[_phase_pb2.ActionPhase] + delivery_config_name: str + delivery_template: _definition_pb2.DeliveryConfigTemplate + def __init__(self, on_phases: _Optional[_Iterable[_Union[_phase_pb2.ActionPhase, str]]] = ..., delivery_config_name: _Optional[str] = ..., delivery_template: _Optional[_Union[_definition_pb2.DeliveryConfigTemplate, _Mapping]] = ...) -> None: ... diff --git a/gen/python/flyteidl2/workflow/events_proxy_service_pb2.py b/gen/python/flyteidl2/workflow/events_proxy_service_pb2.py new file mode 100644 index 0000000000..dfcbbd65e7 --- /dev/null +++ b/gen/python/flyteidl2/workflow/events_proxy_service_pb2.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: flyteidl2/workflow/events_proxy_service.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from flyteidl2.workflow import run_definition_pb2 as flyteidl2_dot_workflow_dot_run__definition__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-flyteidl2/workflow/events_proxy_service.proto\x12\x12\x66lyteidl2.workflow\x1a\x1b\x62uf/validate/validate.proto\x1a\'flyteidl2/workflow/run_definition.proto\"R\n\rRecordRequest\x12\x41\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x1f.flyteidl2.workflow.ActionEventB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x06\x65vents\"\x10\n\x0eRecordResponse2g\n\x12\x45ventsProxyService\x12Q\n\x06Record\x12!.flyteidl2.workflow.RecordRequest\x1a\".flyteidl2.workflow.RecordResponse\"\x00\x42\xd4\x01\n\x16\x63om.flyteidl2.workflowB\x17\x45ventsProxyServiceProtoH\x02P\x01Z6github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow\xa2\x02\x03\x46WX\xaa\x02\x12\x46lyteidl2.Workflow\xca\x02\x12\x46lyteidl2\\Workflow\xe2\x02\x1e\x46lyteidl2\\Workflow\\GPBMetadata\xea\x02\x13\x46lyteidl2::Workflowb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flyteidl2.workflow.events_proxy_service_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.flyteidl2.workflowB\027EventsProxyServiceProtoH\002P\001Z6github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow\242\002\003FWX\252\002\022Flyteidl2.Workflow\312\002\022Flyteidl2\\Workflow\342\002\036Flyteidl2\\Workflow\\GPBMetadata\352\002\023Flyteidl2::Workflow' + _RECORDREQUEST.fields_by_name['events']._options = None + _RECORDREQUEST.fields_by_name['events']._serialized_options = b'\272H\005\222\001\002\010\001' + _globals['_RECORDREQUEST']._serialized_start=139 + _globals['_RECORDREQUEST']._serialized_end=221 + _globals['_RECORDRESPONSE']._serialized_start=223 + _globals['_RECORDRESPONSE']._serialized_end=239 + _globals['_EVENTSPROXYSERVICE']._serialized_start=241 + _globals['_EVENTSPROXYSERVICE']._serialized_end=344 +# @@protoc_insertion_point(module_scope) diff --git a/gen/python/flyteidl2/workflow/events_proxy_service_pb2.pyi b/gen/python/flyteidl2/workflow/events_proxy_service_pb2.pyi new file mode 100644 index 0000000000..f4fefe39db --- /dev/null +++ b/gen/python/flyteidl2/workflow/events_proxy_service_pb2.pyi @@ -0,0 +1,18 @@ +from buf.validate import validate_pb2 as _validate_pb2 +from flyteidl2.workflow import run_definition_pb2 as _run_definition_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class RecordRequest(_message.Message): + __slots__ = ["events"] + EVENTS_FIELD_NUMBER: _ClassVar[int] + events: _containers.RepeatedCompositeFieldContainer[_run_definition_pb2.ActionEvent] + def __init__(self, events: _Optional[_Iterable[_Union[_run_definition_pb2.ActionEvent, _Mapping]]] = ...) -> None: ... + +class RecordResponse(_message.Message): + __slots__ = [] + def __init__(self) -> None: ... diff --git a/gen/python/flyteidl2/workflow/events_proxy_service_pb2_grpc.py b/gen/python/flyteidl2/workflow/events_proxy_service_pb2_grpc.py new file mode 100644 index 0000000000..19730b1de8 --- /dev/null +++ b/gen/python/flyteidl2/workflow/events_proxy_service_pb2_grpc.py @@ -0,0 +1,70 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from flyteidl2.workflow import events_proxy_service_pb2 as flyteidl2_dot_workflow_dot_events__proxy__service__pb2 + + +class EventsProxyServiceStub(object): + """EventsProxyService provides an interface for forwarding the events to Run Service or Redis stream. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Record = channel.unary_unary( + '/flyteidl2.workflow.EventsProxyService/Record', + request_serializer=flyteidl2_dot_workflow_dot_events__proxy__service__pb2.RecordRequest.SerializeToString, + response_deserializer=flyteidl2_dot_workflow_dot_events__proxy__service__pb2.RecordResponse.FromString, + ) + + +class EventsProxyServiceServicer(object): + """EventsProxyService provides an interface for forwarding the events to Run Service or Redis stream. + """ + + def Record(self, request, context): + """record the events for an action. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_EventsProxyServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Record': grpc.unary_unary_rpc_method_handler( + servicer.Record, + request_deserializer=flyteidl2_dot_workflow_dot_events__proxy__service__pb2.RecordRequest.FromString, + response_serializer=flyteidl2_dot_workflow_dot_events__proxy__service__pb2.RecordResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'flyteidl2.workflow.EventsProxyService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class EventsProxyService(object): + """EventsProxyService provides an interface for forwarding the events to Run Service or Redis stream. + """ + + @staticmethod + def Record(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/flyteidl2.workflow.EventsProxyService/Record', + flyteidl2_dot_workflow_dot_events__proxy__service__pb2.RecordRequest.SerializeToString, + flyteidl2_dot_workflow_dot_events__proxy__service__pb2.RecordResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/gen/rust/Cargo.lock b/gen/rust/Cargo.lock index 32a6ded346..9be97fd372 100644 --- a/gen/rust/Cargo.lock +++ b/gen/rust/Cargo.lock @@ -582,9 +582,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "linux-raw-sys" @@ -1812,18 +1812,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.40" +version = "0.8.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5" +checksum = "96e13bc581734df6250836c59a5f44f3c57db9f9acb9dc8e3eaabdaf6170254d" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.40" +version = "0.8.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" +checksum = "3545ea9e86d12ab9bba9fcd99b54c1556fd3199007def5a03c375623d05fac1c" dependencies = [ "proc-macro2", "quote", diff --git a/gen/rust/src/flyteidl2.common.rs b/gen/rust/src/flyteidl2.common.rs index cdc95ba128..9a320d12ea 100644 --- a/gen/rust/src/flyteidl2.common.rs +++ b/gen/rust/src/flyteidl2.common.rs @@ -170,6 +170,67 @@ pub struct TriggerIdentifier { #[prost(uint64, tag="2")] pub revision: u64, } +/// ActionPhase represents the execution state of an action. +/// +/// Phase transitions follow this typical flow: +/// QUEUED -> WAITING_FOR_RESOURCES -> INITIALIZING -> RUNNING -> {SUCCEEDED|FAILED|ABORTED|TIMED_OUT} +#[pyo3::pyclass(dict, get_all, set_all)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum ActionPhase { + /// Default/unknown phase + Unspecified = 0, + /// Action has been accepted and is waiting to be scheduled + Queued = 1, + /// Action is scheduled but waiting for compute resources to become available + WaitingForResources = 2, + /// Resources have been allocated and the action is being set up + Initializing = 3, + /// Action is actively executing + Running = 4, + /// Action completed successfully + Succeeded = 5, + /// Action failed during execution + Failed = 6, + /// Action was manually terminated or cancelled + Aborted = 7, + /// Action exceeded its execution time limit + TimedOut = 8, +} +impl ActionPhase { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ActionPhase::Unspecified => "ACTION_PHASE_UNSPECIFIED", + ActionPhase::Queued => "ACTION_PHASE_QUEUED", + ActionPhase::WaitingForResources => "ACTION_PHASE_WAITING_FOR_RESOURCES", + ActionPhase::Initializing => "ACTION_PHASE_INITIALIZING", + ActionPhase::Running => "ACTION_PHASE_RUNNING", + ActionPhase::Succeeded => "ACTION_PHASE_SUCCEEDED", + ActionPhase::Failed => "ACTION_PHASE_FAILED", + ActionPhase::Aborted => "ACTION_PHASE_ABORTED", + ActionPhase::TimedOut => "ACTION_PHASE_TIMED_OUT", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "ACTION_PHASE_UNSPECIFIED" => Some(Self::Unspecified), + "ACTION_PHASE_QUEUED" => Some(Self::Queued), + "ACTION_PHASE_WAITING_FOR_RESOURCES" => Some(Self::WaitingForResources), + "ACTION_PHASE_INITIALIZING" => Some(Self::Initializing), + "ACTION_PHASE_RUNNING" => Some(Self::Running), + "ACTION_PHASE_SUCCEEDED" => Some(Self::Succeeded), + "ACTION_PHASE_FAILED" => Some(Self::Failed), + "ACTION_PHASE_ABORTED" => Some(Self::Aborted), + "ACTION_PHASE_TIMED_OUT" => Some(Self::TimedOut), + _ => None, + } + } +} #[pyo3::pyclass(dict, get_all, set_all)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -413,6 +474,9 @@ pub enum RoleType { ServerlessContributor = 8, /// The support role would have contributor permissions plus the access to support endpoints Support = 9, + /// Internal system-provisioned role assigned to all identities by default. + /// Grants baseline access required for platform functionality (e.g. image builder). + SystemProvisionedAccess = 10, } impl RoleType { /// String value of the enum field names used in the ProtoBuf definition. @@ -431,6 +495,7 @@ impl RoleType { RoleType::ServerlessViewer => "ROLE_TYPE_SERVERLESS_VIEWER", RoleType::ServerlessContributor => "ROLE_TYPE_SERVERLESS_CONTRIBUTOR", RoleType::Support => "ROLE_TYPE_SUPPORT", + RoleType::SystemProvisionedAccess => "ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -446,6 +511,7 @@ impl RoleType { "ROLE_TYPE_SERVERLESS_VIEWER" => Some(Self::ServerlessViewer), "ROLE_TYPE_SERVERLESS_CONTRIBUTOR" => Some(Self::ServerlessContributor), "ROLE_TYPE_SUPPORT" => Some(Self::Support), + "ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS" => Some(Self::SystemProvisionedAccess), _ => None, } } @@ -540,67 +606,6 @@ pub mod identity { ApplicationId(super::ApplicationIdentifier), } } -/// ActionPhase represents the execution state of an action. -/// -/// Phase transitions follow this typical flow: -/// QUEUED -> WAITING_FOR_RESOURCES -> INITIALIZING -> RUNNING -> {SUCCEEDED|FAILED|ABORTED|TIMED_OUT} -#[pyo3::pyclass(dict, get_all, set_all)] -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] -#[repr(i32)] -pub enum ActionPhase { - /// Default/unknown phase - Unspecified = 0, - /// Action has been accepted and is waiting to be scheduled - Queued = 1, - /// Action is scheduled but waiting for compute resources to become available - WaitingForResources = 2, - /// Resources have been allocated and the action is being set up - Initializing = 3, - /// Action is actively executing - Running = 4, - /// Action completed successfully - Succeeded = 5, - /// Action failed during execution - Failed = 6, - /// Action was manually terminated or cancelled - Aborted = 7, - /// Action exceeded its execution time limit - TimedOut = 8, -} -impl ActionPhase { - /// String value of the enum field names used in the ProtoBuf definition. - /// - /// The values are not transformed in any way and thus are considered stable - /// (if the ProtoBuf definition does not change) and safe for programmatic use. - pub fn as_str_name(&self) -> &'static str { - match self { - ActionPhase::Unspecified => "ACTION_PHASE_UNSPECIFIED", - ActionPhase::Queued => "ACTION_PHASE_QUEUED", - ActionPhase::WaitingForResources => "ACTION_PHASE_WAITING_FOR_RESOURCES", - ActionPhase::Initializing => "ACTION_PHASE_INITIALIZING", - ActionPhase::Running => "ACTION_PHASE_RUNNING", - ActionPhase::Succeeded => "ACTION_PHASE_SUCCEEDED", - ActionPhase::Failed => "ACTION_PHASE_FAILED", - ActionPhase::Aborted => "ACTION_PHASE_ABORTED", - ActionPhase::TimedOut => "ACTION_PHASE_TIMED_OUT", - } - } - /// Creates an enum from field names used in the ProtoBuf definition. - pub fn from_str_name(value: &str) -> ::core::option::Option { - match value { - "ACTION_PHASE_UNSPECIFIED" => Some(Self::Unspecified), - "ACTION_PHASE_QUEUED" => Some(Self::Queued), - "ACTION_PHASE_WAITING_FOR_RESOURCES" => Some(Self::WaitingForResources), - "ACTION_PHASE_INITIALIZING" => Some(Self::Initializing), - "ACTION_PHASE_RUNNING" => Some(Self::Running), - "ACTION_PHASE_SUCCEEDED" => Some(Self::Succeeded), - "ACTION_PHASE_FAILED" => Some(Self::Failed), - "ACTION_PHASE_ABORTED" => Some(Self::Aborted), - "ACTION_PHASE_TIMED_OUT" => Some(Self::TimedOut), - _ => None, - } - } -} /// Runtime information. This is loosely defined to allow for extensibility. #[pyo3::pyclass(dict, get_all, set_all)] #[allow(clippy::derive_partial_eq_without_eq)] @@ -1260,112 +1265,454 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x02, 0x01, 0x03, 0x12, 0x04, 0x9a, 0x01, 0x14, 0x15, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, 0x08, 0x12, 0x04, 0x9a, 0x01, 0x16, 0x3a, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0f, 0x02, 0x01, 0x08, 0x87, 0x09, 0x06, 0x04, 0x12, 0x04, 0x9a, 0x01, 0x17, 0x39, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, 0x0a, 0xce, 0x27, 0x0a, 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, + 0x74, 0x6f, 0x33, 0x0a, 0xb3, 0x0c, 0x0a, 0x1c, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2a, 0x90, 0x02, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, + 0x48, 0x41, 0x53, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x26, 0x0a, + 0x22, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x57, 0x41, + 0x49, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x53, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, + 0x4e, 0x47, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, + 0x48, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x1a, + 0x0a, 0x16, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x53, + 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, + 0x44, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, + 0x41, 0x53, 0x45, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x1a, 0x0a, + 0x16, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x54, 0x49, + 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x08, 0x42, 0xb9, 0x01, 0x0a, 0x14, 0x63, 0x6f, + 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x42, 0x0a, 0x50, 0x68, 0x61, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, + 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0xa9, 0x08, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x25, 0x01, + 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, + 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x09, + 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0xd9, 0x01, 0x0a, 0x02, 0x05, 0x00, + 0x12, 0x04, 0x0a, 0x00, 0x25, 0x01, 0x1a, 0xcc, 0x01, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x68, 0x61, 0x73, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x0a, 0x0a, 0x20, 0x50, 0x68, 0x61, 0x73, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x3a, + 0x0a, 0x20, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x57, 0x41, 0x49, 0x54, + 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x53, 0x20, 0x2d, 0x3e, 0x20, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, + 0x47, 0x20, 0x2d, 0x3e, 0x20, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x20, 0x2d, 0x3e, 0x20, + 0x7b, 0x53, 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x7c, 0x46, 0x41, 0x49, 0x4c, 0x45, + 0x44, 0x7c, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x7c, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, + 0x4f, 0x55, 0x54, 0x7d, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x05, + 0x10, 0x0a, 0x24, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x02, 0x1f, 0x1a, 0x17, + 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, + 0x20, 0x70, 0x68, 0x61, 0x73, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x0c, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, + 0x0c, 0x1d, 0x1e, 0x0a, 0x46, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x1a, + 0x1a, 0x39, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, + 0x65, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x69, 0x73, 0x20, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, + 0x20, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x01, 0x02, 0x12, 0x03, 0x0f, 0x18, 0x19, 0x0a, 0x58, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, + 0x03, 0x12, 0x02, 0x29, 0x1a, 0x4b, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, + 0x20, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, + 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, + 0x74, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, + 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x12, 0x02, 0x24, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x12, 0x27, 0x28, 0x0a, 0x4b, 0x0a, + 0x04, 0x05, 0x00, 0x02, 0x03, 0x12, 0x03, 0x15, 0x02, 0x20, 0x1a, 0x3e, 0x20, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, + 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x62, 0x65, 0x69, + 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, 0x20, 0x75, 0x70, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x03, 0x01, 0x12, 0x03, 0x15, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, + 0x02, 0x12, 0x03, 0x15, 0x1e, 0x1f, 0x0a, 0x2b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x03, + 0x18, 0x02, 0x1b, 0x1a, 0x1e, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6e, 0x67, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x18, 0x02, + 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x18, 0x19, 0x1a, 0x0a, + 0x2c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, 0x03, 0x1b, 0x02, 0x1d, 0x1a, 0x1f, 0x20, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1b, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x1b, 0x1b, 0x1c, 0x0a, 0x2d, 0x0a, 0x04, 0x05, 0x00, 0x02, + 0x06, 0x12, 0x03, 0x1e, 0x02, 0x1a, 0x1a, 0x20, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, + 0x01, 0x12, 0x03, 0x1e, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x02, 0x12, + 0x03, 0x1e, 0x18, 0x19, 0x0a, 0x3a, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x07, 0x12, 0x03, 0x21, 0x02, + 0x1b, 0x1a, 0x2d, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6d, + 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x21, 0x02, 0x16, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x02, 0x12, 0x03, 0x21, 0x19, 0x1a, 0x0a, 0x37, 0x0a, 0x04, + 0x05, 0x00, 0x02, 0x08, 0x12, 0x03, 0x24, 0x02, 0x1d, 0x1a, 0x2a, 0x20, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, + 0x24, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x02, 0x12, 0x03, 0x24, 0x1b, + 0x1c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xce, 0x27, 0x0a, 0x24, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2b, 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x68, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x4a, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x6f, + 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x07, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x64, 0x0a, + 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x22, 0x66, 0x0a, 0x0a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x50, 0x6c, 0x61, + 0x6e, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, + 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x83, 0x03, 0x0a, 0x08, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, + 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, + 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x12, 0x35, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x48, 0x00, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x12, 0x3f, 0x0a, 0x0b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x6c, + 0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x75, 0x6e, + 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x22, 0x78, 0x0a, 0x0a, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0xb0, 0x04, 0x0a, 0x06, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x0d, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x13, + 0x0a, 0x0b, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x02, 0x1a, + 0x02, 0x08, 0x01, 0x12, 0x15, 0x0a, 0x0d, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x15, 0x0a, 0x0d, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x04, 0x1a, 0x02, 0x08, + 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x49, 0x45, 0x57, + 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, + 0x10, 0x05, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x49, 0x45, + 0x57, 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, + 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, 0x5f, 0x49, 0x4e, + 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x41, 0x43, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, + 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x08, 0x12, 0x1d, 0x0a, + 0x19, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x54, + 0x45, 0x52, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x09, 0x12, 0x1d, 0x0a, 0x19, + 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x45, + 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0a, 0x12, 0x1d, 0x0a, 0x19, 0x41, + 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x54, 0x45, 0x52, + 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x0b, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, + 0x54, 0x45, 0x52, 0x10, 0x0c, 0x12, 0x2c, 0x0a, 0x28, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x44, 0x49, 0x54, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, + 0x45, 0x4c, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, + 0x53, 0x10, 0x0d, 0x12, 0x2a, 0x0a, 0x26, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x44, + 0x49, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, + 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x0e, 0x12, + 0x21, 0x0a, 0x1d, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x44, 0x49, 0x54, 0x5f, 0x55, + 0x4e, 0x55, 0x53, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, + 0x10, 0x0f, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x55, 0x50, + 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4c, 0x4f, 0x47, 0x53, + 0x10, 0x10, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x49, 0x45, + 0x57, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x10, 0x11, 0x42, 0xc1, + 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, + 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, + 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, + 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x4a, 0x8d, 0x19, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x60, 0x01, 0x0a, 0x08, 0x0a, + 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, + 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, + 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x0a, 0x0a, 0x02, + 0x04, 0x00, 0x12, 0x04, 0x09, 0x00, 0x0b, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, + 0x03, 0x09, 0x08, 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x02, + 0x3c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0a, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0a, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x0a, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, + 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0a, 0x13, 0x3a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, + 0x01, 0x12, 0x04, 0x0d, 0x00, 0x10, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, + 0x0d, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0e, 0x02, 0x12, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0e, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0e, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x47, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, + 0x12, 0x03, 0x0f, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x0f, 0x0f, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0f, 0x1e, + 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x08, 0x12, 0x03, 0x0f, 0x20, 0x46, 0x0a, + 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x0f, 0x21, 0x45, + 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x12, 0x00, 0x15, 0x01, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x02, 0x01, 0x12, 0x03, 0x12, 0x08, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, + 0x12, 0x03, 0x13, 0x02, 0x3c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x13, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x13, 0x09, + 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x13, 0x10, 0x11, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, 0x13, 0x12, 0x3b, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x13, 0x13, 0x3a, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x14, 0x02, 0x3b, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, 0x03, 0x14, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x01, 0x01, 0x12, 0x03, 0x14, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, + 0x03, 0x12, 0x03, 0x14, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x08, 0x12, + 0x03, 0x14, 0x14, 0x3a, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, + 0x12, 0x03, 0x14, 0x15, 0x39, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x17, 0x00, 0x1a, + 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x17, 0x08, 0x10, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x18, 0x02, 0x3c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, + 0x02, 0x00, 0x05, 0x12, 0x03, 0x18, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x18, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x18, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x08, 0x12, 0x03, 0x18, + 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x03, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, + 0x03, 0x18, 0x13, 0x3a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x19, 0x02, + 0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x06, 0x12, 0x03, 0x19, 0x02, 0x09, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, 0x19, 0x0a, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x19, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x03, 0x02, 0x01, 0x08, 0x12, 0x03, 0x19, 0x16, 0x3c, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x03, 0x02, + 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x19, 0x17, 0x3b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, + 0x12, 0x04, 0x1c, 0x00, 0x1f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x1c, + 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x1d, 0x02, 0x3c, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x1d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1d, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1d, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x00, 0x08, 0x12, 0x03, 0x1d, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x00, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1d, 0x13, 0x3a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, + 0x01, 0x12, 0x03, 0x1e, 0x02, 0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, + 0x03, 0x1e, 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1e, + 0x0a, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1e, 0x14, 0x15, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x08, 0x12, 0x03, 0x1e, 0x16, 0x3c, 0x0a, 0x0f, + 0x0a, 0x08, 0x04, 0x04, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x1e, 0x17, 0x3b, 0x0a, + 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x21, 0x00, 0x2a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x05, 0x01, 0x12, 0x03, 0x21, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x05, 0x08, 0x00, 0x12, + 0x04, 0x22, 0x02, 0x29, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x08, 0x00, 0x01, 0x12, 0x03, + 0x22, 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x23, 0x04, 0x22, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x23, 0x04, 0x10, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x23, 0x11, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x23, 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, + 0x02, 0x01, 0x12, 0x03, 0x24, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x06, + 0x12, 0x03, 0x24, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x24, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x24, 0x14, + 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x02, 0x12, 0x03, 0x25, 0x04, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, 0x06, 0x12, 0x03, 0x25, 0x04, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x05, 0x02, 0x02, 0x01, 0x12, 0x03, 0x25, 0x0c, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x25, 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x03, + 0x12, 0x03, 0x26, 0x04, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x06, 0x12, 0x03, + 0x26, 0x04, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x01, 0x12, 0x03, 0x26, 0x0d, + 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x03, 0x12, 0x03, 0x26, 0x18, 0x19, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x04, 0x12, 0x03, 0x27, 0x04, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x05, 0x02, 0x04, 0x06, 0x12, 0x03, 0x27, 0x04, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x04, 0x01, 0x12, 0x03, 0x27, 0x0f, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, + 0x03, 0x12, 0x03, 0x27, 0x1d, 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x05, 0x12, 0x03, + 0x28, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x06, 0x12, 0x03, 0x28, 0x04, + 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x01, 0x12, 0x03, 0x28, 0x16, 0x1d, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x03, 0x12, 0x03, 0x28, 0x20, 0x21, 0x0a, 0x0a, 0x0a, + 0x02, 0x05, 0x00, 0x12, 0x04, 0x2c, 0x00, 0x59, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, + 0x12, 0x03, 0x2c, 0x05, 0x0b, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x2d, + 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2d, 0x02, 0x0d, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x2d, 0x10, 0x11, 0x0a, 0x0b, + 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x2e, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x2e, 0x02, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x01, 0x02, 0x12, 0x03, 0x2e, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x2e, 0x14, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x05, 0x00, 0x02, 0x01, 0x03, 0x01, 0x12, + 0x03, 0x2e, 0x15, 0x26, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x2f, 0x02, + 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x2f, 0x02, 0x0d, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x2f, 0x10, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x2f, 0x12, 0x25, 0x0a, 0x0d, 0x0a, 0x06, 0x05, + 0x00, 0x02, 0x02, 0x03, 0x01, 0x12, 0x03, 0x2f, 0x13, 0x24, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, + 0x02, 0x03, 0x12, 0x03, 0x30, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x01, + 0x12, 0x03, 0x30, 0x02, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, + 0x30, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x30, 0x14, + 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x05, 0x00, 0x02, 0x03, 0x03, 0x01, 0x12, 0x03, 0x30, 0x15, 0x26, + 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x03, 0x31, 0x02, 0x28, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x31, 0x02, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x31, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x04, 0x03, 0x12, 0x03, 0x31, 0x14, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x05, 0x00, 0x02, 0x04, 0x03, + 0x01, 0x12, 0x03, 0x31, 0x15, 0x26, 0x0a, 0x3b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, 0x03, + 0x34, 0x02, 0x22, 0x1a, 0x2e, 0x20, 0x52, 0x65, 0x61, 0x64, 0x20, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x2c, 0x20, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x20, 0x70, 0x6c, 0x61, + 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x34, 0x02, + 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x34, 0x20, 0x21, 0x0a, + 0x24, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x06, 0x12, 0x03, 0x37, 0x02, 0x23, 0x1a, 0x17, 0x20, 0x56, + 0x69, 0x65, 0x77, 0x20, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, + 0x37, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x02, 0x12, 0x03, 0x37, 0x21, + 0x22, 0x0a, 0x4f, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x07, 0x12, 0x03, 0x3a, 0x02, 0x26, 0x1a, 0x42, + 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x20, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x2c, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x20, 0x70, 0x6c, 0x61, 0x6e, + 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x3a, 0x02, 0x21, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x02, 0x12, 0x03, 0x3a, 0x24, 0x25, 0x0a, 0x3c, + 0x0a, 0x04, 0x05, 0x00, 0x02, 0x08, 0x12, 0x03, 0x3d, 0x02, 0x25, 0x1a, 0x2f, 0x20, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x20, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x61, 0x73, 0x6b, + 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x3d, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x08, 0x02, 0x12, 0x03, 0x3d, 0x23, 0x24, 0x0a, 0x42, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x09, + 0x12, 0x03, 0x40, 0x02, 0x20, 0x1a, 0x35, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x09, 0x01, 0x12, 0x03, 0x40, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x09, 0x02, 0x12, 0x03, 0x40, 0x1e, 0x1f, 0x0a, 0x3c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0a, + 0x12, 0x03, 0x43, 0x02, 0x21, 0x1a, 0x2f, 0x20, 0x41, 0x64, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x2c, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0a, 0x01, 0x12, + 0x03, 0x43, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0a, 0x02, 0x12, 0x03, 0x43, + 0x1e, 0x20, 0x0a, 0x34, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0b, 0x12, 0x03, 0x46, 0x02, 0x21, 0x1a, + 0x27, 0x20, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, + 0x2c, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2d, 0x77, 0x69, 0x64, 0x65, 0x20, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0b, + 0x01, 0x12, 0x03, 0x46, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0b, 0x02, 0x12, + 0x03, 0x46, 0x1e, 0x20, 0x0a, 0x26, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0c, 0x12, 0x03, 0x49, 0x02, + 0x1d, 0x1a, 0x19, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x0c, 0x01, 0x12, 0x03, 0x49, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x0c, 0x02, 0x12, 0x03, 0x49, 0x1a, 0x1c, 0x0a, 0x7b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0d, + 0x12, 0x03, 0x4c, 0x02, 0x30, 0x1a, 0x6e, 0x20, 0x45, 0x64, 0x69, 0x74, 0x20, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x2c, 0x20, 0x57, 0x4f, 0x52, 0x4b, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x45, 0x58, 0x45, + 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x2c, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0d, 0x01, 0x12, 0x03, + 0x4c, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0d, 0x02, 0x12, 0x03, 0x4c, 0x2d, + 0x2f, 0x0a, 0x61, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0e, 0x12, 0x03, 0x4f, 0x02, 0x2e, 0x1a, 0x54, + 0x20, 0x45, 0x64, 0x69, 0x74, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x4c, 0x55, 0x53, + 0x54, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x4d, + 0x45, 0x4e, 0x54, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0e, 0x01, 0x12, 0x03, 0x4f, + 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0e, 0x02, 0x12, 0x03, 0x4f, 0x2b, 0x2d, + 0x0a, 0x91, 0x01, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0f, 0x12, 0x03, 0x52, 0x02, 0x25, 0x1a, 0x83, + 0x01, 0x20, 0x45, 0x64, 0x69, 0x74, 0x20, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, + 0x45, 0x55, 0x45, 0x2c, 0x20, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, + 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x2c, 0x20, 0x51, 0x55, + 0x41, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, + 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x50, 0x4c, 0x55, 0x47, 0x49, 0x4e, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x52, + 0x49, 0x44, 0x45, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0f, 0x01, 0x12, 0x03, 0x52, + 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0f, 0x02, 0x12, 0x03, 0x52, 0x22, 0x24, + 0x0a, 0x1f, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x10, 0x12, 0x03, 0x55, 0x02, 0x22, 0x1a, 0x12, 0x20, + 0x56, 0x69, 0x65, 0x77, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6c, 0x6f, 0x67, 0x73, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x10, 0x01, 0x12, 0x03, 0x55, 0x02, 0x1c, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x10, 0x02, 0x12, 0x03, 0x55, 0x1f, 0x21, 0x0a, 0x59, 0x0a, + 0x04, 0x05, 0x00, 0x02, 0x11, 0x12, 0x03, 0x58, 0x02, 0x1e, 0x1a, 0x4c, 0x20, 0x56, 0x69, 0x65, + 0x77, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x68, 0x75, 0x6d, 0x61, + 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x20, 0x61, 0x70, 0x70, 0x73, 0x20, 0x28, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x20, 0x63, 0x72, 0x65, 0x64, 0x73, 0x29, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x11, + 0x01, 0x12, 0x03, 0x58, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x11, 0x02, 0x12, + 0x03, 0x58, 0x1b, 0x1d, 0x0a, 0x54, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x5c, 0x00, 0x60, 0x01, + 0x1a, 0x48, 0x20, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x65, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, + 0x63, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, + 0x01, 0x12, 0x03, 0x5c, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, + 0x5d, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, 0x03, 0x5d, 0x02, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x5d, 0x0b, 0x13, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x5d, 0x16, 0x17, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x5f, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x01, 0x04, 0x12, 0x03, 0x5f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, + 0x06, 0x12, 0x03, 0x5f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x5f, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x5f, + 0x1c, 0x1d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xa6, 0x0b, 0x0a, 0x1d, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2b, - 0x0a, 0x0c, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x68, 0x0a, 0x06, 0x44, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x0c, 0x6f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa3, 0x01, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x08, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x64, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x06, 0xba, 0x48, - 0x03, 0xc8, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x66, 0x0a, - 0x0a, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x1b, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x83, 0x03, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, - 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x35, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x0d, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x07, + 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x48, 0x00, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x3f, 0x0a, - 0x0b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, - 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x3f, - 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, - 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x78, 0x0a, 0x0a, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0xb0, 0x04, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, - 0x00, 0x12, 0x15, 0x0a, 0x0d, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x10, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x13, 0x0a, 0x0b, 0x41, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x02, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x15, 0x0a, - 0x0d, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x03, - 0x1a, 0x02, 0x08, 0x01, 0x12, 0x15, 0x0a, 0x0d, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, - 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x04, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, - 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x05, 0x12, 0x20, 0x0a, 0x1c, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x4c, 0x59, 0x54, - 0x45, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x06, 0x12, 0x23, - 0x0a, 0x1f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x45, - 0x52, 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, - 0x59, 0x10, 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, - 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x08, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x4f, - 0x4a, 0x45, 0x43, 0x54, 0x10, 0x09, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, - 0x4f, 0x4e, 0x53, 0x10, 0x0a, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x10, 0x0b, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, - 0x41, 0x4e, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x0c, 0x12, - 0x2c, 0x0a, 0x28, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x44, 0x49, 0x54, 0x5f, 0x45, - 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x45, 0x44, - 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x0d, 0x12, 0x2a, 0x0a, - 0x26, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x44, 0x49, 0x54, 0x5f, 0x43, 0x4c, 0x55, - 0x53, 0x54, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x54, - 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x0e, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x43, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x44, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x55, 0x53, 0x45, 0x44, 0x5f, - 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x10, 0x0f, 0x12, 0x1e, 0x0a, 0x1a, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, - 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x4c, 0x4f, 0x47, 0x53, 0x10, 0x10, 0x12, 0x1a, 0x0a, 0x16, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x49, 0x44, 0x45, 0x4e, - 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x10, 0x11, 0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, + 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, + 0xba, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, @@ -1375,1126 +1722,799 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0x8d, 0x19, 0x0a, - 0x06, 0x12, 0x04, 0x00, 0x00, 0x60, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, + 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0x8c, 0x06, 0x0a, + 0x06, 0x12, 0x04, 0x00, 0x00, 0x1a, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, - 0x2b, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, - 0x0b, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x09, 0x00, - 0x0b, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x09, 0x08, 0x14, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x02, 0x3c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x0a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, - 0x12, 0x03, 0x0a, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, - 0x0a, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, - 0x12, 0x03, 0x0a, 0x13, 0x3a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x0d, 0x00, 0x10, - 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x0d, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0e, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x00, 0x05, 0x12, 0x03, 0x0e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x0e, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x0e, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, - 0x47, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x0e, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0f, 0x0f, 0x1b, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0f, 0x1e, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x01, 0x08, 0x12, 0x03, 0x0f, 0x20, 0x46, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, - 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x0f, 0x21, 0x45, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, - 0x12, 0x04, 0x12, 0x00, 0x15, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x12, - 0x08, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x13, 0x02, 0x3c, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x13, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x13, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x13, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x00, 0x08, 0x12, 0x03, 0x13, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, - 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x13, 0x13, 0x3a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x14, 0x02, 0x3b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, - 0x03, 0x14, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x14, - 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x14, 0x12, 0x13, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x08, 0x12, 0x03, 0x14, 0x14, 0x3a, 0x0a, 0x0f, - 0x0a, 0x08, 0x04, 0x02, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x14, 0x15, 0x39, 0x0a, - 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x17, 0x00, 0x1a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x03, 0x01, 0x12, 0x03, 0x17, 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, - 0x03, 0x18, 0x02, 0x3c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x18, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x18, 0x09, 0x0d, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x18, 0x10, 0x11, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x08, 0x12, 0x03, 0x18, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, - 0x04, 0x03, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x18, 0x13, 0x3a, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x19, 0x02, 0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x03, 0x02, 0x01, 0x06, 0x12, 0x03, 0x19, 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, - 0x01, 0x01, 0x12, 0x03, 0x19, 0x0a, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, - 0x12, 0x03, 0x19, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x08, 0x12, 0x03, - 0x19, 0x16, 0x3c, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x03, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, - 0x03, 0x19, 0x17, 0x3b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x1c, 0x00, 0x1f, 0x01, - 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x1c, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x1d, 0x02, 0x3c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, - 0x00, 0x05, 0x12, 0x03, 0x1d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x1d, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x1d, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, 0x1d, 0x12, - 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, - 0x1d, 0x13, 0x3a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x1e, 0x02, 0x3d, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x1e, 0x02, 0x09, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1e, 0x0a, 0x11, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1e, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, - 0x02, 0x01, 0x08, 0x12, 0x03, 0x1e, 0x16, 0x3c, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x01, - 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x1e, 0x17, 0x3b, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, - 0x04, 0x21, 0x00, 0x2a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x21, 0x08, - 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x05, 0x08, 0x00, 0x12, 0x04, 0x22, 0x02, 0x29, 0x03, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x08, 0x00, 0x01, 0x12, 0x03, 0x22, 0x08, 0x10, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x23, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x23, 0x04, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x23, 0x11, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x23, 0x20, 0x21, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, 0x03, 0x24, 0x04, - 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x06, 0x12, 0x03, 0x24, 0x04, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x24, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x24, 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x05, 0x02, 0x02, 0x12, 0x03, 0x25, 0x04, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, - 0x06, 0x12, 0x03, 0x25, 0x04, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, 0x01, 0x12, - 0x03, 0x25, 0x0c, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, 0x03, 0x12, 0x03, 0x25, - 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x03, 0x12, 0x03, 0x26, 0x04, 0x1a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x06, 0x12, 0x03, 0x26, 0x04, 0x0c, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x05, 0x02, 0x03, 0x01, 0x12, 0x03, 0x26, 0x0d, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x05, 0x02, 0x03, 0x03, 0x12, 0x03, 0x26, 0x18, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, - 0x04, 0x12, 0x03, 0x27, 0x04, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x06, 0x12, - 0x03, 0x27, 0x04, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x01, 0x12, 0x03, 0x27, - 0x0f, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x03, 0x12, 0x03, 0x27, 0x1d, 0x1e, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x05, 0x12, 0x03, 0x28, 0x04, 0x22, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x05, 0x02, 0x05, 0x06, 0x12, 0x03, 0x28, 0x04, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x05, 0x02, 0x05, 0x01, 0x12, 0x03, 0x28, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, - 0x05, 0x03, 0x12, 0x03, 0x28, 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x2c, - 0x00, 0x59, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x2c, 0x05, 0x0b, 0x0a, - 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x2d, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2d, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, - 0x02, 0x00, 0x02, 0x12, 0x03, 0x2d, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, - 0x12, 0x03, 0x2e, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, - 0x2e, 0x02, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x2e, 0x12, - 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x2e, 0x14, 0x27, 0x0a, - 0x0d, 0x0a, 0x06, 0x05, 0x00, 0x02, 0x01, 0x03, 0x01, 0x12, 0x03, 0x2e, 0x15, 0x26, 0x0a, 0x0b, - 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x2f, 0x02, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x2f, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x02, 0x02, 0x12, 0x03, 0x2f, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x03, - 0x12, 0x03, 0x2f, 0x12, 0x25, 0x0a, 0x0d, 0x0a, 0x06, 0x05, 0x00, 0x02, 0x02, 0x03, 0x01, 0x12, - 0x03, 0x2f, 0x13, 0x24, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x03, 0x12, 0x03, 0x30, 0x02, - 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x30, 0x02, 0x0f, 0x0a, - 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x30, 0x12, 0x13, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x30, 0x14, 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x05, - 0x00, 0x02, 0x03, 0x03, 0x01, 0x12, 0x03, 0x30, 0x15, 0x26, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x04, 0x12, 0x03, 0x31, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, - 0x12, 0x03, 0x31, 0x02, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, - 0x31, 0x12, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x31, 0x14, - 0x27, 0x0a, 0x0d, 0x0a, 0x06, 0x05, 0x00, 0x02, 0x04, 0x03, 0x01, 0x12, 0x03, 0x31, 0x15, 0x26, - 0x0a, 0x3b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, 0x03, 0x34, 0x02, 0x22, 0x1a, 0x2e, 0x20, - 0x52, 0x65, 0x61, 0x64, 0x20, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x73, 0x2c, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x34, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x34, 0x20, 0x21, 0x0a, 0x24, 0x0a, 0x04, 0x05, 0x00, 0x02, - 0x06, 0x12, 0x03, 0x37, 0x02, 0x23, 0x1a, 0x17, 0x20, 0x56, 0x69, 0x65, 0x77, 0x20, 0x46, 0x6c, - 0x79, 0x74, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x37, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x06, 0x02, 0x12, 0x03, 0x37, 0x21, 0x22, 0x0a, 0x4f, 0x0a, 0x04, 0x05, - 0x00, 0x02, 0x07, 0x12, 0x03, 0x3a, 0x02, 0x26, 0x1a, 0x42, 0x20, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x73, 0x2c, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x3a, 0x02, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, - 0x02, 0x07, 0x02, 0x12, 0x03, 0x3a, 0x24, 0x25, 0x0a, 0x3c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x08, - 0x12, 0x03, 0x3d, 0x02, 0x25, 0x1a, 0x2f, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x6e, - 0x65, 0x77, 0x20, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x01, 0x12, - 0x03, 0x3d, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x02, 0x12, 0x03, 0x3d, - 0x23, 0x24, 0x0a, 0x42, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x09, 0x12, 0x03, 0x40, 0x02, 0x20, 0x1a, - 0x35, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x01, 0x12, - 0x03, 0x40, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x02, 0x12, 0x03, 0x40, - 0x1e, 0x1f, 0x0a, 0x3c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0a, 0x12, 0x03, 0x43, 0x02, 0x21, 0x1a, - 0x2f, 0x20, 0x41, 0x64, 0x64, 0x20, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x72, 0x6f, - 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0a, 0x01, 0x12, 0x03, 0x43, 0x02, 0x1b, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0a, 0x02, 0x12, 0x03, 0x43, 0x1e, 0x20, 0x0a, 0x34, 0x0a, 0x04, - 0x05, 0x00, 0x02, 0x0b, 0x12, 0x03, 0x46, 0x02, 0x21, 0x1a, 0x27, 0x20, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x20, 0x62, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x2d, 0x77, 0x69, 0x64, 0x65, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0b, 0x01, 0x12, 0x03, 0x46, 0x02, 0x1b, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0b, 0x02, 0x12, 0x03, 0x46, 0x1e, 0x20, 0x0a, 0x26, - 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0c, 0x12, 0x03, 0x49, 0x02, 0x1d, 0x1a, 0x19, 0x20, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0c, 0x01, 0x12, - 0x03, 0x49, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0c, 0x02, 0x12, 0x03, 0x49, - 0x1a, 0x1c, 0x0a, 0x7b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0d, 0x12, 0x03, 0x4c, 0x02, 0x30, 0x1a, - 0x6e, 0x20, 0x45, 0x64, 0x69, 0x74, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x54, - 0x41, 0x53, 0x4b, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x2c, 0x20, 0x57, 0x4f, - 0x52, 0x4b, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x45, 0x58, 0x54, - 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0d, 0x01, 0x12, 0x03, 0x4c, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x0d, 0x02, 0x12, 0x03, 0x4c, 0x2d, 0x2f, 0x0a, 0x61, 0x0a, 0x04, 0x05, - 0x00, 0x02, 0x0e, 0x12, 0x03, 0x4f, 0x02, 0x2e, 0x1a, 0x54, 0x20, 0x45, 0x64, 0x69, 0x74, 0x20, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x4c, 0x55, 0x53, 0x54, - 0x45, 0x52, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0e, 0x01, 0x12, 0x03, 0x4f, 0x02, 0x28, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x0e, 0x02, 0x12, 0x03, 0x4f, 0x2b, 0x2d, 0x0a, 0x91, 0x01, 0x0a, 0x04, 0x05, - 0x00, 0x02, 0x0f, 0x12, 0x03, 0x52, 0x02, 0x25, 0x1a, 0x83, 0x01, 0x20, 0x45, 0x64, 0x69, 0x74, - 0x20, 0x75, 0x6e, 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x45, 0x58, - 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x2c, 0x20, 0x45, - 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, - 0x5f, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x2c, 0x20, 0x51, 0x55, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x5f, - 0x4f, 0x46, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x50, 0x4c, - 0x55, 0x47, 0x49, 0x4e, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x52, 0x49, 0x44, 0x45, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0f, 0x01, 0x12, 0x03, 0x52, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x0f, 0x02, 0x12, 0x03, 0x52, 0x22, 0x24, 0x0a, 0x1f, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x10, 0x12, 0x03, 0x55, 0x02, 0x22, 0x1a, 0x12, 0x20, 0x56, 0x69, 0x65, 0x77, 0x20, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x10, 0x01, 0x12, 0x03, 0x55, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x10, 0x02, 0x12, 0x03, 0x55, 0x1f, 0x21, 0x0a, 0x59, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x11, 0x12, - 0x03, 0x58, 0x02, 0x1e, 0x1a, 0x4c, 0x20, 0x56, 0x69, 0x65, 0x77, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x70, - 0x70, 0x73, 0x20, 0x28, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x72, 0x65, 0x64, 0x73, - 0x29, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x11, 0x01, 0x12, 0x03, 0x58, 0x02, 0x18, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x11, 0x02, 0x12, 0x03, 0x58, 0x1b, 0x1d, 0x0a, 0x54, - 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x5c, 0x00, 0x60, 0x01, 0x1a, 0x48, 0x20, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x6e, - 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x5c, 0x08, 0x12, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x5d, 0x02, 0x18, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, 0x03, 0x5d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x5d, 0x0b, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, - 0x00, 0x03, 0x12, 0x03, 0x5d, 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, - 0x03, 0x5f, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x04, 0x12, 0x03, 0x5f, - 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x06, 0x12, 0x03, 0x5f, 0x0b, 0x11, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x5f, 0x12, 0x19, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x5f, 0x1c, 0x1d, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xa6, 0x0b, 0x0a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa3, - 0x01, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x92, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0xba, 0x01, 0x0a, 0x14, 0x63, 0x6f, - 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x42, 0x0b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, - 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0x8c, 0x06, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x1a, - 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, - 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2e, 0x0a, 0x09, 0x0a, 0x02, 0x03, - 0x02, 0x12, 0x03, 0x06, 0x00, 0x2b, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x08, 0x00, 0x4b, - 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x4b, 0x0a, 0x44, 0x0a, 0x02, 0x04, - 0x00, 0x12, 0x04, 0x0b, 0x00, 0x12, 0x01, 0x1a, 0x38, 0x20, 0x41, 0x20, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x20, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x02, 0x41, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x0c, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x0c, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x0c, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x0c, - 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, - 0x0c, 0x1b, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0e, 0x02, 0x26, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x0e, 0x02, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0e, 0x0b, 0x18, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0e, 0x19, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x0e, 0x24, 0x25, 0x0a, 0x33, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, - 0x12, 0x03, 0x11, 0x02, 0x19, 0x1a, 0x26, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x3a, 0x20, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, - 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x11, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x11, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x02, 0x03, 0x12, 0x03, 0x11, 0x17, 0x18, 0x0a, 0x5a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x15, - 0x00, 0x1a, 0x01, 0x1a, 0x4e, 0x20, 0x41, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x20, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x73, 0x20, 0x61, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x28, 0x61, 0x20, 0x73, 0x65, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x20, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x15, 0x08, 0x15, 0x0a, - 0x65, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x17, 0x02, 0x44, 0x1a, 0x58, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x17, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x17, - 0x11, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x17, 0x1b, 0x1c, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, 0x03, 0x17, 0x1d, 0x43, 0x0a, 0x0f, - 0x0a, 0x08, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x17, 0x1e, 0x42, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x19, 0x02, 0x46, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, 0x19, 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x01, 0x01, 0x12, 0x03, 0x19, 0x12, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, - 0x03, 0x12, 0x03, 0x19, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x08, 0x12, - 0x03, 0x19, 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, - 0x12, 0x03, 0x19, 0x20, 0x44, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x86, 0x17, - 0x0a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, - 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaa, 0x02, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x38, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, - 0x6c, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, - 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x09, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x72, 0x6f, 0x6c, - 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x37, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x6c, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, - 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, - 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2a, 0x9a, 0x02, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, - 0x0e, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, - 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, - 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x4f, 0x52, 0x10, - 0x02, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, - 0x49, 0x45, 0x57, 0x45, 0x52, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x4f, 0x4c, 0x45, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x04, 0x12, 0x1d, 0x0a, - 0x19, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, - 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52, 0x10, 0x05, 0x12, 0x21, 0x0a, 0x1d, - 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x59, 0x54, 0x45, 0x5f, - 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x06, 0x12, - 0x1f, 0x0a, 0x1b, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, - 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x45, 0x52, 0x10, 0x07, - 0x12, 0x24, 0x0a, 0x20, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, - 0x55, 0x54, 0x4f, 0x52, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x09, 0x42, 0xb8, 0x01, - 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x09, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, - 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, - 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0xb3, 0x0f, 0x0a, 0x06, 0x12, 0x04, 0x00, - 0x00, 0x39, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, - 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, - 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2e, 0x0a, 0x09, 0x0a, - 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x2b, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x08, - 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x4b, 0x0a, 0xf1, 0x01, - 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x0d, 0x00, 0x28, 0x01, 0x1a, 0xe4, 0x01, 0x20, 0x41, 0x20, - 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x2d, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x72, 0x6f, - 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x42, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2d, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x05, 0x0d, 0x0a, 0x33, 0x0a, - 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0f, 0x02, 0x15, 0x1a, 0x26, 0x20, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x10, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0f, 0x13, 0x14, 0x0a, 0x52, - 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x11, 0x02, 0x16, 0x1a, 0x45, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, - 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x73, 0x65, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x11, 0x02, 0x11, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x11, 0x14, 0x15, 0x0a, 0x92, - 0x01, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x13, 0x02, 0x1c, 0x1a, 0x84, 0x01, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, - 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x69, 0x65, 0x77, - 0x20, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x76, 0x69, 0x65, 0x77, - 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x02, - 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x13, 0x1a, 0x1b, 0x0a, - 0x68, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x03, 0x12, 0x03, 0x15, 0x02, 0x17, 0x1a, 0x5b, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x68, - 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x03, 0x01, 0x12, 0x03, 0x15, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x02, - 0x12, 0x03, 0x15, 0x15, 0x16, 0x0a, 0x46, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x03, 0x18, - 0x02, 0x17, 0x1a, 0x39, 0x20, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x61, - 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2d, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x18, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x18, 0x15, 0x16, 0x0a, 0x53, 0x0a, 0x04, 0x05, 0x00, 0x02, - 0x05, 0x12, 0x03, 0x1b, 0x02, 0x20, 0x1a, 0x46, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6c, - 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1b, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x1b, 0x1e, 0x1f, 0x0a, 0x4d, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x06, 0x12, 0x03, 0x1e, 0x02, 0x24, 0x1a, 0x40, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x20, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x28, 0x73, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x06, 0x01, 0x12, 0x03, 0x1e, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x02, - 0x12, 0x03, 0x1e, 0x22, 0x23, 0x0a, 0x2d, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x07, 0x12, 0x03, 0x21, - 0x02, 0x22, 0x1a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x20, - 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x6c, - 0x65, 0x73, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x21, - 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x02, 0x12, 0x03, 0x21, 0x20, 0x21, - 0x0a, 0x32, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x08, 0x12, 0x03, 0x24, 0x02, 0x27, 0x1a, 0x25, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, - 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x6c, - 0x65, 0x73, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x24, - 0x02, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x02, 0x12, 0x03, 0x24, 0x25, 0x26, - 0x0a, 0x67, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x09, 0x12, 0x03, 0x27, 0x02, 0x18, 0x1a, 0x5a, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x72, 0x6f, 0x6c, 0x65, - 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6c, 0x75, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x09, 0x01, 0x12, 0x03, 0x27, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x02, - 0x12, 0x03, 0x27, 0x16, 0x17, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x2a, 0x00, 0x34, - 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x2a, 0x08, 0x0c, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x2b, 0x02, 0x3f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x2b, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x2b, 0x11, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x2b, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x2b, - 0x18, 0x3e, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, - 0x2b, 0x19, 0x3d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x2d, 0x02, 0x3a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x2d, 0x02, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x2d, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x2d, 0x16, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x2d, 0x24, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, - 0x08, 0x12, 0x03, 0x2d, 0x26, 0x39, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x02, 0x01, 0x08, 0x03, - 0x12, 0x03, 0x2d, 0x27, 0x38, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x2f, - 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x2f, 0x02, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x2f, 0x0b, 0x14, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x2f, 0x17, 0x18, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x31, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x03, 0x06, 0x12, 0x03, 0x31, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x31, 0x0b, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, - 0x31, 0x17, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x33, 0x02, 0x1e, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x04, 0x12, 0x03, 0x33, 0x02, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, 0x33, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x33, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x04, 0x03, 0x12, 0x03, 0x33, 0x1c, 0x1d, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, - 0x36, 0x00, 0x39, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x36, 0x08, 0x10, - 0x0a, 0x42, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x38, 0x02, 0x19, 0x1a, 0x35, 0x20, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2c, 0x20, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, - 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x6f, - 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x38, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x38, 0x09, 0x14, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x38, 0x17, 0x18, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x88, 0x16, 0x0a, 0x1f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, - 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x72, 0x6f, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x30, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, - 0x70, 0x65, 0x63, 0x12, 0x30, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x08, - 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, - 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, - 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x68, 0x6f, 0x74, 0x6f, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x68, 0x6f, 0x74, - 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x75, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x04, - 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x70, - 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x41, 0x0a, 0x07, 0x41, - 0x70, 0x70, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, - 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, - 0x01, 0x0a, 0x10, 0x45, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x2c, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x12, 0x41, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x2e, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x2b, 0x0a, 0x08, 0x0a, 0x01, + 0x08, 0x12, 0x03, 0x08, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, + 0x4b, 0x0a, 0x44, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0b, 0x00, 0x12, 0x01, 0x1a, 0x38, 0x20, + 0x41, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, + 0x0b, 0x08, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x02, 0x41, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0c, 0x02, 0x12, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x08, 0x12, 0x03, 0x0c, 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, 0x00, + 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x0c, 0x1b, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x01, 0x12, 0x03, 0x0e, 0x02, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, + 0x03, 0x0e, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0e, + 0x0b, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0e, 0x19, 0x21, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0e, 0x24, 0x25, 0x0a, 0x33, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x11, 0x02, 0x19, 0x1a, 0x26, 0x20, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3a, 0x20, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x65, + 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x11, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x11, 0x09, 0x14, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x11, 0x17, 0x18, 0x0a, 0x5a, 0x0a, + 0x02, 0x04, 0x01, 0x12, 0x04, 0x15, 0x00, 0x1a, 0x01, 0x1a, 0x4e, 0x20, 0x41, 0x20, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x28, + 0x61, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x29, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, + 0x12, 0x03, 0x15, 0x08, 0x15, 0x0a, 0x65, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x17, + 0x02, 0x44, 0x1a, 0x58, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x64, 0x65, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x61, 0x6e, 0x20, + 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x17, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x17, 0x11, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x17, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, + 0x03, 0x17, 0x1d, 0x43, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, + 0x12, 0x03, 0x17, 0x1e, 0x42, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x19, + 0x02, 0x46, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, 0x19, 0x02, 0x11, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x19, 0x12, 0x1a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x19, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x01, 0x08, 0x12, 0x03, 0x19, 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, + 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x19, 0x20, 0x44, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, 0x0a, 0xf7, 0x18, 0x0a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaa, 0x02, 0x0a, 0x04, + 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, + 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x37, 0x0a, 0x09, 0x72, + 0x6f, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, + 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0xc3, 0x02, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, + 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, + 0x42, 0x55, 0x54, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x4f, 0x4c, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x45, 0x52, 0x10, 0x03, 0x12, 0x14, 0x0a, + 0x10, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, + 0x4d, 0x10, 0x04, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52, + 0x10, 0x05, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x46, 0x4c, 0x59, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x41, 0x44, + 0x4d, 0x49, 0x4e, 0x10, 0x06, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x56, 0x49, + 0x45, 0x57, 0x45, 0x52, 0x10, 0x07, 0x12, 0x24, 0x0a, 0x20, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x43, + 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x4f, 0x52, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, + 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, + 0x54, 0x10, 0x09, 0x12, 0x27, 0x0a, 0x23, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, + 0x4e, 0x45, 0x44, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x0a, 0x42, 0xb8, 0x01, 0x0a, + 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x09, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, + 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, + 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0xfb, 0x10, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, + 0x3d, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, + 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, + 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2e, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x2b, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x08, 0x00, + 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x4b, 0x0a, 0xf1, 0x01, 0x0a, + 0x02, 0x05, 0x00, 0x12, 0x04, 0x0d, 0x00, 0x2c, 0x01, 0x1a, 0xe4, 0x01, 0x20, 0x41, 0x20, 0x72, + 0x6f, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x2d, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x6e, 0x64, + 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, + 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x72, 0x6f, 0x6c, + 0x65, 0x2e, 0x0a, 0x20, 0x42, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, + 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, + 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2d, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, + 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x05, 0x0d, 0x0a, 0x33, 0x0a, 0x04, + 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0f, 0x02, 0x15, 0x1a, 0x26, 0x20, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x10, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0f, 0x13, 0x14, 0x0a, 0x52, 0x0a, + 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x11, 0x02, 0x16, 0x1a, 0x45, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, + 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x73, 0x65, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x11, 0x02, 0x11, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x11, 0x14, 0x15, 0x0a, 0x92, 0x01, + 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x13, 0x02, 0x1c, 0x1a, 0x84, 0x01, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, 0x72, + 0x6f, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, + 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x02, 0x17, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x13, 0x1a, 0x1b, 0x0a, 0x68, + 0x0a, 0x04, 0x05, 0x00, 0x02, 0x03, 0x12, 0x03, 0x15, 0x02, 0x17, 0x1a, 0x5b, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x68, 0x61, + 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x73, + 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, + 0x01, 0x12, 0x03, 0x15, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x02, 0x12, + 0x03, 0x15, 0x15, 0x16, 0x0a, 0x46, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x03, 0x18, 0x02, + 0x17, 0x1a, 0x39, 0x20, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x20, + 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x75, 0x73, 0x65, 0x72, 0x2d, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x18, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x04, 0x02, 0x12, 0x03, 0x18, 0x15, 0x16, 0x0a, 0x53, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, + 0x12, 0x03, 0x1b, 0x02, 0x20, 0x1a, 0x46, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, + 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1b, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x1b, 0x1e, 0x1f, 0x0a, 0x4d, 0x0a, 0x04, 0x05, 0x00, 0x02, + 0x06, 0x12, 0x03, 0x1e, 0x02, 0x24, 0x1a, 0x40, 0x20, 0x52, 0x6f, 0x6c, 0x65, 0x20, 0x77, 0x69, + 0x74, 0x68, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x28, 0x73, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, + 0x01, 0x12, 0x03, 0x1e, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x02, 0x12, + 0x03, 0x1e, 0x22, 0x23, 0x0a, 0x2d, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x07, 0x12, 0x03, 0x21, 0x02, + 0x22, 0x1a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x20, 0x72, + 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x6c, 0x65, + 0x73, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x21, 0x02, + 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x02, 0x12, 0x03, 0x21, 0x20, 0x21, 0x0a, + 0x32, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x08, 0x12, 0x03, 0x24, 0x02, 0x27, 0x1a, 0x25, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, 0x72, + 0x6f, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x6c, 0x65, + 0x73, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x24, 0x02, + 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x02, 0x12, 0x03, 0x24, 0x25, 0x26, 0x0a, + 0x67, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x09, 0x12, 0x03, 0x27, 0x02, 0x18, 0x1a, 0x5a, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, + 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x20, 0x70, 0x6c, 0x75, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, + 0x01, 0x12, 0x03, 0x27, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x09, 0x02, 0x12, + 0x03, 0x27, 0x16, 0x17, 0x0a, 0xa9, 0x01, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x0a, 0x12, 0x03, 0x2b, + 0x02, 0x2b, 0x1a, 0x9b, 0x01, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, + 0x64, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, + 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x20, 0x62, 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x20, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x29, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0a, 0x01, 0x12, 0x03, 0x2b, 0x02, 0x25, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x0a, 0x02, 0x12, 0x03, 0x2b, 0x28, 0x2a, 0x0a, 0x0a, 0x0a, 0x02, + 0x04, 0x00, 0x12, 0x04, 0x2e, 0x00, 0x38, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, + 0x03, 0x2e, 0x08, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x2f, 0x02, + 0x3f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x2f, 0x02, 0x10, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2f, 0x11, 0x13, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2f, 0x16, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x2f, 0x18, 0x3e, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, + 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x2f, 0x19, 0x3d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x01, 0x12, 0x03, 0x31, 0x02, 0x3a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, + 0x12, 0x03, 0x31, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, + 0x31, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x31, 0x16, + 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x31, 0x24, 0x25, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x31, 0x26, 0x39, 0x0a, 0x0d, 0x0a, + 0x06, 0x04, 0x00, 0x02, 0x01, 0x08, 0x03, 0x12, 0x03, 0x31, 0x27, 0x38, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x33, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x02, 0x06, 0x12, 0x03, 0x33, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, + 0x12, 0x03, 0x33, 0x0b, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, + 0x33, 0x17, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x35, 0x02, 0x19, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x35, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x35, 0x0b, 0x14, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x35, 0x17, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x04, 0x12, 0x03, 0x37, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x04, + 0x12, 0x03, 0x37, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, + 0x37, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x37, 0x12, + 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x37, 0x1c, 0x1d, 0x0a, + 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x3a, 0x00, 0x3d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x01, 0x01, 0x12, 0x03, 0x3a, 0x08, 0x10, 0x0a, 0x42, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, + 0x03, 0x3c, 0x02, 0x19, 0x1a, 0x35, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2c, + 0x20, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x3c, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x3c, 0x17, 0x18, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x88, 0x16, + 0x0a, 0x1f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xd0, 0x01, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x30, 0x0a, 0x05, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x6c, + 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x08, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x68, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, + 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x75, 0x0a, 0x0b, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, - 0x6c, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0xa6, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x42, 0x0b, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, - 0x6c, 0x42, 0xbc, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x0d, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, - 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, - 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, - 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x4a, 0xe6, 0x0b, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x3f, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, - 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, - 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x27, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, 0x25, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x09, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x09, 0x00, 0x4b, - 0x0a, 0x50, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0c, 0x00, 0x14, 0x01, 0x1a, 0x44, 0x20, 0x45, - 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, - 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x0c, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0d, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0d, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x0d, 0x11, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, - 0x12, 0x03, 0x0d, 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0f, - 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0f, 0x0b, 0x0f, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0f, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x11, 0x02, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x02, 0x04, 0x12, 0x03, 0x11, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, - 0x12, 0x03, 0x11, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, - 0x11, 0x10, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x11, 0x18, - 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x08, 0x12, 0x03, 0x11, 0x1a, 0x2d, 0x0a, - 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x02, 0x02, 0x08, 0x03, 0x12, 0x03, 0x11, 0x1b, 0x2c, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x13, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x13, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x03, 0x06, 0x12, 0x03, 0x13, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x13, 0x12, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, - 0x13, 0x1d, 0x1e, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x16, 0x00, 0x24, 0x01, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x16, 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x01, 0x02, 0x00, 0x12, 0x03, 0x17, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x17, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x17, 0x09, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x17, - 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x19, 0x02, 0x17, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x19, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x19, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x19, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, - 0x02, 0x12, 0x03, 0x1b, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x05, 0x12, - 0x03, 0x1b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x1b, - 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x1b, 0x11, 0x12, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x1d, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x1d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1d, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x03, 0x03, 0x12, 0x03, 0x1d, 0x18, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, - 0x03, 0x1f, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x05, 0x12, 0x03, 0x1f, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x14, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x1f, 0x17, 0x18, 0x0a, 0x0b, - 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x21, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x05, 0x04, 0x12, 0x03, 0x21, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x05, 0x05, 0x12, 0x03, 0x21, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, - 0x12, 0x03, 0x21, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, - 0x21, 0x1b, 0x1c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x06, 0x12, 0x03, 0x23, 0x02, 0x17, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x05, 0x12, 0x03, 0x23, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, 0x23, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x23, 0x15, 0x16, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, - 0x12, 0x04, 0x26, 0x00, 0x2a, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x26, - 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x27, 0x02, 0x1f, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x27, 0x02, 0x17, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x27, 0x18, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x27, 0x1d, 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x29, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, - 0x03, 0x29, 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x29, - 0x0a, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x29, 0x11, 0x12, - 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x2c, 0x00, 0x30, 0x01, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x03, 0x01, 0x12, 0x03, 0x2c, 0x08, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, - 0x12, 0x03, 0x2d, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, - 0x2d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2d, 0x09, - 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2d, 0x10, 0x11, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x2f, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x03, 0x02, 0x01, 0x05, 0x12, 0x03, 0x2f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, - 0x02, 0x01, 0x01, 0x12, 0x03, 0x2f, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, - 0x03, 0x12, 0x03, 0x2f, 0x18, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x32, 0x00, - 0x38, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x32, 0x08, 0x18, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x04, 0x08, 0x00, 0x12, 0x04, 0x33, 0x02, 0x37, 0x03, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x04, 0x08, 0x00, 0x01, 0x12, 0x03, 0x33, 0x08, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, - 0x08, 0x00, 0x02, 0x12, 0x03, 0x34, 0x04, 0x30, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x08, 0x00, - 0x02, 0x87, 0x09, 0x01, 0x12, 0x03, 0x34, 0x04, 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, - 0x00, 0x12, 0x03, 0x35, 0x04, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x35, 0x04, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x35, - 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x35, 0x10, 0x11, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x36, 0x04, 0x20, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x36, 0x04, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x36, 0x10, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, - 0x01, 0x03, 0x12, 0x03, 0x36, 0x1e, 0x1f, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x3a, - 0x00, 0x3f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x3a, 0x08, 0x10, 0x0a, - 0x0c, 0x0a, 0x04, 0x04, 0x05, 0x08, 0x00, 0x12, 0x04, 0x3b, 0x02, 0x3e, 0x03, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x05, 0x08, 0x00, 0x01, 0x12, 0x03, 0x3b, 0x08, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x05, 0x02, 0x00, 0x12, 0x03, 0x3c, 0x04, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, - 0x06, 0x12, 0x03, 0x3c, 0x04, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x3c, 0x1a, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3c, - 0x24, 0x25, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, 0x03, 0x3d, 0x04, 0x34, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3d, 0x04, 0x20, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3d, 0x21, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3d, 0x32, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, 0x0a, 0xb3, 0x0c, 0x0a, 0x1c, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2a, 0x90, 0x02, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x68, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, - 0x53, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, - 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x53, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, - 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, - 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, - 0x53, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x55, 0x43, - 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, - 0x06, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, - 0x45, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x1a, 0x0a, 0x16, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, - 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x08, 0x42, 0xb9, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, + 0x65, 0x63, 0x22, 0x41, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x45, 0x6e, 0x72, 0x69, 0x63, 0x68, + 0x65, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2c, 0x0a, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x42, 0x0a, 0x50, 0x68, 0x61, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, - 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, - 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x4a, 0xa9, 0x08, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x25, 0x01, 0x0a, 0x08, - 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, - 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, - 0x08, 0x0b, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0xd9, 0x01, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, - 0x0a, 0x00, 0x25, 0x01, 0x1a, 0xcc, 0x01, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, - 0x61, 0x73, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x0a, 0x0a, 0x20, 0x50, 0x68, 0x61, 0x73, 0x65, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x0a, 0x20, - 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x20, 0x2d, 0x3e, 0x20, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, - 0x47, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x53, 0x20, - 0x2d, 0x3e, 0x20, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x20, - 0x2d, 0x3e, 0x20, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x20, 0x2d, 0x3e, 0x20, 0x7b, 0x53, - 0x55, 0x43, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x7c, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x7c, - 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x7c, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, - 0x54, 0x7d, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x05, 0x10, 0x0a, - 0x24, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x02, 0x1f, 0x1a, 0x17, 0x20, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x70, - 0x68, 0x61, 0x73, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, - 0x0c, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0c, 0x1d, - 0x1e, 0x0a, 0x46, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x1a, 0x1a, 0x39, - 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x73, - 0x20, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x01, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, - 0x12, 0x03, 0x0f, 0x18, 0x19, 0x0a, 0x58, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x12, - 0x02, 0x29, 0x1a, 0x4b, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x77, 0x61, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x12, 0x02, 0x24, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x12, 0x27, 0x28, 0x0a, 0x4b, 0x0a, 0x04, 0x05, - 0x00, 0x02, 0x03, 0x12, 0x03, 0x15, 0x02, 0x20, 0x1a, 0x3e, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, - 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, - 0x20, 0x73, 0x65, 0x74, 0x20, 0x75, 0x70, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, - 0x01, 0x12, 0x03, 0x15, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x02, 0x12, - 0x03, 0x15, 0x1e, 0x1f, 0x0a, 0x2b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x03, 0x18, 0x02, - 0x1b, 0x1a, 0x1e, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x18, 0x02, 0x16, 0x0a, - 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x18, 0x19, 0x1a, 0x0a, 0x2c, 0x0a, - 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, 0x03, 0x1b, 0x02, 0x1d, 0x1a, 0x1f, 0x20, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1b, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x05, 0x02, 0x12, 0x03, 0x1b, 0x1b, 0x1c, 0x0a, 0x2d, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x06, 0x12, - 0x03, 0x1e, 0x02, 0x1a, 0x1a, 0x20, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x20, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x01, 0x12, - 0x03, 0x1e, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x06, 0x02, 0x12, 0x03, 0x1e, - 0x18, 0x19, 0x0a, 0x3a, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x07, 0x12, 0x03, 0x21, 0x02, 0x1b, 0x1a, - 0x2d, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x6f, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x21, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x07, 0x02, 0x12, 0x03, 0x21, 0x19, 0x1a, 0x0a, 0x37, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x08, 0x12, 0x03, 0x24, 0x02, 0x1d, 0x1a, 0x2a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x24, 0x02, - 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x08, 0x02, 0x12, 0x03, 0x24, 0x1b, 0x1c, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xda, 0x09, 0x0a, 0x26, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xbe, 0x01, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6c, 0x61, 0x76, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6c, 0x61, 0x76, 0x6f, 0x72, 0x22, 0x36, 0x0a, - 0x0b, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, - 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x4c, 0x59, 0x54, 0x45, - 0x5f, 0x53, 0x44, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x49, 0x4f, 0x4e, 0x5f, - 0x53, 0x44, 0x4b, 0x10, 0x02, 0x42, 0xc2, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x13, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, - 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0x8f, 0x06, 0x0a, 0x06, 0x12, - 0x04, 0x00, 0x00, 0x17, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, - 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, - 0x04, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x56, - 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x17, 0x01, 0x1a, 0x4a, 0x20, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x6c, - 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x07, - 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x04, 0x00, 0x12, 0x04, 0x08, 0x02, 0x0c, 0x03, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x04, 0x00, 0x01, 0x12, 0x03, 0x08, 0x07, 0x12, 0x0a, 0x0d, - 0x0a, 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x09, 0x04, 0x0e, 0x0a, 0x0e, 0x0a, - 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x09, 0x04, 0x09, 0x0a, 0x0e, 0x0a, - 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x09, 0x0c, 0x0d, 0x0a, 0x0d, 0x0a, - 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0a, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0a, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, - 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x0a, 0x10, 0x11, 0x0a, 0x0d, 0x0a, 0x06, - 0x04, 0x00, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x00, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0b, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, - 0x00, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x10, 0x11, 0x0a, 0x1f, 0x0a, 0x04, 0x04, - 0x00, 0x02, 0x00, 0x12, 0x03, 0x0f, 0x02, 0x17, 0x1a, 0x12, 0x20, 0x54, 0x79, 0x70, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x0e, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x0f, 0x15, 0x16, 0x0a, 0xb9, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, - 0x03, 0x13, 0x02, 0x15, 0x1a, 0xab, 0x01, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x20, - 0x41, 0x6c, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x48, 0x6f, 0x77, 0x65, - 0x76, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x73, - 0x65, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, - 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x20, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x13, 0x02, 0x08, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x13, 0x09, 0x10, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x13, 0x13, 0x14, 0x0a, 0x74, 0x0a, 0x04, - 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x16, 0x02, 0x14, 0x1a, 0x67, 0x2b, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x49, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2c, - 0x20, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x2e, 0x2e, 0x20, 0x65, 0x74, 0x63, 0x2e, 0x29, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x16, 0x02, 0x08, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x16, 0x09, 0x0f, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x16, 0x12, 0x13, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xfa, 0x1b, 0x0a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x3e, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x2e, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x2a, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, - 0x0a, 0x0a, 0x44, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0d, - 0x0a, 0x09, 0x41, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x22, 0x81, 0x02, - 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x6f, 0x72, - 0x74, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, - 0x72, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x32, - 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x61, 0x77, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0e, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, - 0x6f, 0x72, 0x74, 0x52, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x22, 0xcd, 0x02, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x0a, 0x09, 0x70, + 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, + 0xa6, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x07, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, + 0x00, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x42, 0x0b, 0x0a, 0x09, 0x70, + 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x42, 0xbc, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x08, 0x46, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, - 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x01, - 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, - 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, - 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x0d, 0x0a, - 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, - 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, - 0x41, 0x4c, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, - 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x49, 0x4e, 0x10, 0x07, - 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x44, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x0c, 0x12, - 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x4e, 0x44, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, - 0x10, 0x0d, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x5f, 0x43, - 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x45, 0x4e, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x10, - 0x0e, 0x42, 0xb8, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x09, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, - 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0xaa, 0x14, 0x0a, - 0x06, 0x12, 0x04, 0x00, 0x00, 0x50, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, - 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x04, 0x00, 0x4b, - 0x0a, 0x38, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x15, 0x01, 0x1a, 0x2c, 0x20, 0x53, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, - 0x01, 0x12, 0x03, 0x07, 0x08, 0x0c, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x04, 0x00, 0x12, 0x04, - 0x08, 0x02, 0x0c, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x04, 0x00, 0x01, 0x12, 0x03, 0x08, - 0x07, 0x10, 0x0a, 0x43, 0x0a, 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x04, - 0x13, 0x1a, 0x34, 0x20, 0x42, 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x0a, 0x04, 0x0e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, - 0x00, 0x02, 0x12, 0x03, 0x0a, 0x11, 0x12, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, - 0x01, 0x12, 0x03, 0x0b, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x0b, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, - 0x02, 0x12, 0x03, 0x0b, 0x10, 0x11, 0x0a, 0x4d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, - 0x10, 0x02, 0x11, 0x1a, 0x40, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, - 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x73, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x2b, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, - 0x10, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x10, 0x09, - 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x10, 0x0f, 0x10, 0x0a, - 0x58, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x14, 0x02, 0x1a, 0x1a, 0x4b, 0x20, 0x49, - 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, - 0x73, 0x6f, 0x72, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x2b, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x01, 0x06, 0x12, 0x03, 0x14, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, - 0x12, 0x03, 0x14, 0x0c, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, - 0x14, 0x18, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x17, 0x00, 0x32, 0x01, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x17, 0x08, 0x13, 0x0a, 0x4b, 0x0a, 0x04, 0x04, - 0x01, 0x02, 0x00, 0x12, 0x03, 0x1a, 0x02, 0x13, 0x1a, 0x3e, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, - 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x2b, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x05, 0x12, 0x03, 0x1a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x1a, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1a, - 0x11, 0x12, 0x0a, 0x8e, 0x01, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x1f, 0x02, 0x13, - 0x1a, 0x80, 0x01, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x0a, 0x20, 0x69, 0x6e, 0x20, 0x61, - 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1f, 0x02, - 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x0e, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1f, 0x11, 0x12, 0x0a, 0x82, 0x01, - 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x24, 0x02, 0x27, 0x1a, 0x75, 0x20, 0x44, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x73, 0x6f, - 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x73, - 0x74, 0x65, 0x61, 0x64, 0x2e, 0x0a, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, - 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x24, 0x02, 0x06, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x24, 0x07, 0x0e, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x24, 0x11, 0x12, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x02, 0x08, 0x12, 0x03, 0x24, 0x13, 0x26, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x01, - 0x02, 0x02, 0x08, 0x03, 0x12, 0x03, 0x24, 0x14, 0x25, 0x0a, 0x60, 0x0a, 0x04, 0x04, 0x01, 0x02, - 0x03, 0x12, 0x03, 0x28, 0x02, 0x1e, 0x1a, 0x53, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x72, 0x70, - 0x63, 0x20, 0x67, 0x65, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x0a, - 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x03, 0x04, 0x12, 0x03, 0x28, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x03, 0x06, 0x12, 0x03, 0x28, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x28, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, - 0x28, 0x1c, 0x1d, 0x0a, 0x73, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, 0x2c, 0x02, 0x22, - 0x1a, 0x66, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x72, - 0x61, 0x77, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x73, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, - 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x52, 0x45, 0x53, 0x54, 0x20, - 0x67, 0x65, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x0a, 0x20, 0x2b, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, - 0x04, 0x12, 0x03, 0x2c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x05, 0x12, - 0x03, 0x2c, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x2c, - 0x12, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x2c, 0x20, 0x21, - 0x0a, 0x7c, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x31, 0x02, 0x23, 0x1a, 0x6f, 0x20, - 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6c, 0x69, - 0x73, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x73, 0x68, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, - 0x20, 0x53, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x2e, 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x04, 0x12, 0x03, 0x31, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x31, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x05, 0x01, 0x12, 0x03, 0x31, 0x10, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, - 0x03, 0x12, 0x03, 0x31, 0x21, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x34, 0x00, - 0x50, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x34, 0x08, 0x0e, 0x0a, 0x0c, - 0x0a, 0x04, 0x04, 0x02, 0x04, 0x00, 0x12, 0x04, 0x35, 0x02, 0x47, 0x03, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x02, 0x04, 0x00, 0x01, 0x12, 0x03, 0x35, 0x07, 0x0f, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, - 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x36, 0x04, 0x0e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, - 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x36, 0x04, 0x09, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, - 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x36, 0x0c, 0x0d, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, - 0x00, 0x02, 0x01, 0x12, 0x03, 0x37, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x01, 0x01, 0x12, 0x03, 0x37, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x01, 0x02, 0x12, 0x03, 0x37, 0x10, 0x11, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x02, 0x12, 0x03, 0x38, 0x04, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x02, 0x01, 0x12, 0x03, 0x38, 0x04, 0x10, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x02, 0x02, 0x12, 0x03, 0x38, 0x13, 0x14, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x03, 0x12, 0x03, 0x39, 0x04, 0x1e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x03, - 0x01, 0x12, 0x03, 0x39, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x03, - 0x02, 0x12, 0x03, 0x39, 0x1c, 0x1d, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, 0x04, - 0x12, 0x03, 0x3a, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x04, 0x01, - 0x12, 0x03, 0x3a, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x04, 0x02, - 0x12, 0x03, 0x3a, 0x10, 0x11, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, 0x05, 0x12, - 0x03, 0x3b, 0x04, 0x1b, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, - 0x03, 0x3b, 0x04, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x05, 0x02, 0x12, - 0x03, 0x3b, 0x19, 0x1a, 0x0a, 0x32, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, - 0x3c, 0x04, 0x11, 0x22, 0x23, 0x20, 0x43, 0x61, 0x73, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x06, 0x01, 0x12, 0x03, 0x3c, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x06, 0x02, 0x12, 0x03, 0x3c, 0x0f, 0x10, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x07, 0x12, 0x03, 0x3d, 0x04, 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x07, 0x01, 0x12, 0x03, 0x3d, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x07, 0x02, 0x12, 0x03, 0x3d, 0x0f, 0x10, 0x0a, 0x5f, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x08, 0x12, 0x03, 0x44, 0x04, 0x13, 0x32, 0x50, 0x20, 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x4f, 0x4e, - 0x54, 0x41, 0x49, 0x4e, 0x53, 0x20, 0x3d, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x56, 0x41, 0x4c, 0x55, - 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x20, 0x3d, 0x20, 0x39, 0x3b, 0x0a, 0x20, 0x53, - 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x20, 0x3d, 0x20, 0x31, 0x30, 0x3b, - 0x0a, 0x20, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, 0x54, - 0x48, 0x20, 0x3d, 0x20, 0x31, 0x31, 0x3b, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x08, 0x01, 0x12, 0x03, 0x44, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x08, 0x02, 0x12, 0x03, 0x44, 0x10, 0x12, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, - 0x02, 0x09, 0x12, 0x03, 0x45, 0x04, 0x17, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x09, 0x01, 0x12, 0x03, 0x45, 0x04, 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x09, 0x02, 0x12, 0x03, 0x45, 0x14, 0x16, 0x0a, 0x34, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, - 0x0a, 0x12, 0x03, 0x46, 0x04, 0x23, 0x22, 0x25, 0x20, 0x43, 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, - 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, - 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x0a, 0x01, 0x12, 0x03, 0x46, 0x04, 0x1d, 0x0a, 0x0e, 0x0a, - 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x0a, 0x02, 0x12, 0x03, 0x46, 0x20, 0x22, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x49, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x49, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x49, 0x0b, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x49, 0x16, 0x17, 0x0a, 0x23, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x4c, 0x02, - 0x13, 0x1a, 0x16, 0x20, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, - 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x01, 0x05, 0x12, 0x03, 0x4c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, - 0x12, 0x03, 0x4c, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, - 0x4c, 0x11, 0x12, 0x0a, 0x5c, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x4f, 0x02, 0x1d, - 0x1a, 0x4f, 0x20, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x49, - 0x4e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x2e, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x04, 0x12, 0x03, 0x4f, 0x02, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x05, 0x12, 0x03, 0x4f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x4f, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, 0x4f, 0x1b, 0x1c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, 0x0a, 0x90, 0x08, 0x0a, 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2a, 0x6c, 0x0a, 0x10, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x16, 0x0a, 0x12, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x4c, 0x4f, 0x42, - 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x02, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x12, 0x12, 0x0a, - 0x0e, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, - 0x04, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x52, 0x47, 0x10, 0x05, 0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, - 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x42, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, - 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0x9b, - 0x05, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x19, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, - 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, - 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x04, - 0x00, 0x4b, 0x0a, 0x52, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x07, 0x00, 0x19, 0x01, 0x1a, 0x46, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x20, 0x57, 0x65, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x07, - 0x05, 0x15, 0x0a, 0x29, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x09, 0x02, 0x19, 0x1a, - 0x1c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x75, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x09, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x09, 0x17, 0x18, 0x0a, 0x3b, 0x0a, 0x04, 0x05, 0x00, 0x02, - 0x01, 0x12, 0x03, 0x0c, 0x02, 0x0d, 0x1a, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, - 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x0c, - 0x0b, 0x0c, 0x0a, 0x3b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x02, 0x0d, 0x1a, - 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x0b, 0x0c, 0x0a, 0x3c, 0x0a, 0x04, 0x05, - 0x00, 0x02, 0x03, 0x12, 0x03, 0x12, 0x02, 0x0e, 0x1a, 0x2f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, - 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, - 0x03, 0x01, 0x12, 0x03, 0x12, 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, 0x02, - 0x12, 0x03, 0x12, 0x0c, 0x0d, 0x0a, 0x43, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x03, 0x15, - 0x02, 0x15, 0x1a, 0x36, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, - 0x02, 0x04, 0x01, 0x12, 0x03, 0x15, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x04, - 0x02, 0x12, 0x03, 0x15, 0x13, 0x14, 0x0a, 0x38, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, 0x03, - 0x18, 0x02, 0x0a, 0x1a, 0x2b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6f, 0x72, 0x67, + 0x6e, 0x42, 0x0d, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, + 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, + 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0xe6, 0x0b, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, + 0x3f, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, + 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, + 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x27, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, + 0x00, 0x25, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x09, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, + 0x08, 0x0b, 0x12, 0x03, 0x09, 0x00, 0x4b, 0x0a, 0x50, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0c, + 0x00, 0x14, 0x01, 0x1a, 0x44, 0x20, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x20, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x67, 0x61, 0x6e, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, + 0x12, 0x03, 0x0c, 0x08, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0d, + 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0d, 0x02, 0x10, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x11, 0x13, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0d, 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x0f, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x0f, 0x12, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x11, 0x02, 0x2e, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x11, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x11, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x11, 0x10, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x11, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, + 0x08, 0x12, 0x03, 0x11, 0x1a, 0x2d, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x02, 0x02, 0x08, 0x03, + 0x12, 0x03, 0x11, 0x1b, 0x2c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x13, + 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x13, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x13, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x13, 0x12, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x13, 0x1d, 0x1e, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, + 0x12, 0x04, 0x16, 0x00, 0x24, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x16, + 0x08, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x17, 0x02, 0x18, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x17, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x17, 0x09, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x17, 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, + 0x01, 0x12, 0x03, 0x19, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, + 0x03, 0x19, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x19, + 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x19, 0x15, 0x16, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x1b, 0x02, 0x13, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x02, 0x05, 0x12, 0x03, 0x1b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x1b, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x02, 0x03, 0x12, 0x03, 0x1b, 0x11, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, + 0x03, 0x1d, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x1d, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1d, 0x09, 0x15, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x1d, 0x18, 0x19, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, 0x1f, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x04, 0x05, 0x12, 0x03, 0x1f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x04, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, + 0x12, 0x03, 0x1f, 0x17, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x21, + 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x04, 0x12, 0x03, 0x21, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x05, 0x12, 0x03, 0x21, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x21, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, 0x21, 0x1b, 0x1c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x06, 0x12, 0x03, 0x23, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x05, + 0x12, 0x03, 0x23, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, + 0x23, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x23, 0x15, + 0x16, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x26, 0x00, 0x2a, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x26, 0x08, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, + 0x00, 0x12, 0x03, 0x27, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x27, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x27, + 0x18, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x27, 0x1d, 0x1e, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x29, 0x02, 0x13, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, 0x03, 0x29, 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x29, 0x0a, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x29, 0x11, 0x12, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x2c, + 0x00, 0x30, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x2c, 0x08, 0x0f, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x2d, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x2d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x2d, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x2d, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, + 0x2f, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x05, 0x12, 0x03, 0x2f, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, 0x2f, 0x09, 0x15, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x2f, 0x18, 0x19, 0x0a, 0x0a, 0x0a, + 0x02, 0x04, 0x04, 0x12, 0x04, 0x32, 0x00, 0x38, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, + 0x12, 0x03, 0x32, 0x08, 0x18, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x04, 0x08, 0x00, 0x12, 0x04, 0x33, + 0x02, 0x37, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x08, 0x00, 0x01, 0x12, 0x03, 0x33, 0x08, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x08, 0x00, 0x02, 0x12, 0x03, 0x34, 0x04, 0x30, 0x0a, + 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x03, 0x34, 0x04, 0x30, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x35, 0x04, 0x12, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x35, 0x04, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x35, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x35, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, + 0x03, 0x36, 0x04, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x36, + 0x04, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x36, 0x10, 0x1b, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x36, 0x1e, 0x1f, 0x0a, 0x0a, + 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x3a, 0x00, 0x3f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, + 0x01, 0x12, 0x03, 0x3a, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x05, 0x08, 0x00, 0x12, 0x04, + 0x3b, 0x02, 0x3e, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x08, 0x00, 0x01, 0x12, 0x03, 0x3b, + 0x08, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x3c, 0x04, 0x26, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x3c, 0x04, 0x19, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x3c, 0x1a, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3c, 0x24, 0x25, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, + 0x01, 0x12, 0x03, 0x3d, 0x04, 0x34, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x06, 0x12, + 0x03, 0x3d, 0x04, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3d, + 0x21, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3d, 0x32, 0x33, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xda, 0x09, 0x0a, 0x26, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xbe, 0x01, 0x0a, 0x0f, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6c, 0x61, 0x76, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6c, 0x61, 0x76, 0x6f, 0x72, 0x22, 0x36, + 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, + 0x05, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x4c, 0x59, 0x54, + 0x45, 0x5f, 0x53, 0x44, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x49, 0x4f, 0x4e, + 0x5f, 0x53, 0x44, 0x4b, 0x10, 0x02, 0x42, 0xc2, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, + 0x13, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, + 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0x8f, 0x06, 0x0a, 0x06, + 0x12, 0x04, 0x00, 0x00, 0x17, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, + 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, + 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, + 0x56, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x17, 0x01, 0x1a, 0x4a, 0x20, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x6f, 0x73, 0x65, + 0x6c, 0x79, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, + 0x07, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x04, 0x00, 0x12, 0x04, 0x08, 0x02, 0x0c, + 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x04, 0x00, 0x01, 0x12, 0x03, 0x08, 0x07, 0x12, 0x0a, + 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x09, 0x04, 0x0e, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x09, 0x04, 0x09, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x09, 0x0c, 0x0d, 0x0a, 0x0d, + 0x0a, 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0a, 0x04, 0x12, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0a, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x0a, 0x10, 0x11, 0x0a, 0x0d, 0x0a, + 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0b, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, + 0x04, 0x00, 0x04, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x0b, 0x10, 0x11, 0x0a, 0x1f, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0f, 0x02, 0x17, 0x1a, 0x12, 0x20, 0x54, 0x79, 0x70, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x0e, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x0f, 0x15, 0x16, 0x0a, 0xb9, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, + 0x12, 0x03, 0x13, 0x02, 0x15, 0x1a, 0xab, 0x01, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x73, 0x68, + 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, + 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x48, 0x6f, 0x77, + 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x61, + 0x73, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x20, 0x74, 0x6f, 0x20, + 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x20, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x13, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x13, 0x09, 0x10, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x13, 0x13, 0x14, 0x0a, 0x74, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x16, 0x02, 0x14, 0x1a, 0x67, 0x2b, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x49, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, + 0x2c, 0x20, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x2e, 0x2e, 0x20, 0x65, 0x74, 0x63, 0x2e, + 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x16, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x16, 0x09, 0x0f, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x16, 0x12, 0x13, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xfa, 0x1b, 0x0a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x2e, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, + 0x0d, 0x0a, 0x09, 0x41, 0x53, 0x43, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x22, 0x81, + 0x02, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x6f, + 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, + 0x6f, 0x72, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, + 0x32, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x61, 0x77, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0e, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x53, 0x6f, 0x72, 0x74, 0x52, 0x0c, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x73, 0x22, 0xcd, 0x02, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3d, 0x0a, + 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xd5, 0x01, 0x0a, 0x08, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x51, 0x55, 0x41, 0x4c, + 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, + 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, + 0x4e, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, + 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x0d, + 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x04, 0x12, 0x16, 0x0a, + 0x12, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, + 0x55, 0x41, 0x4c, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, + 0x53, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x49, 0x4e, 0x10, + 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x44, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x0c, + 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x4e, 0x44, 0x53, 0x5f, 0x57, 0x49, 0x54, + 0x48, 0x10, 0x0d, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x5f, + 0x43, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x53, 0x45, 0x4e, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, + 0x10, 0x0e, 0x42, 0xb8, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x09, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, + 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, 0xaa, 0x14, + 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x50, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, + 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, 0x0a, 0x01, + 0x08, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x04, 0x00, + 0x4b, 0x0a, 0x38, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x15, 0x01, 0x1a, 0x2c, 0x20, + 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, + 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x00, 0x01, 0x12, 0x03, 0x07, 0x08, 0x0c, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x04, 0x00, 0x12, + 0x04, 0x08, 0x02, 0x0c, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x04, 0x00, 0x01, 0x12, 0x03, + 0x08, 0x07, 0x10, 0x0a, 0x43, 0x0a, 0x06, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, + 0x04, 0x13, 0x1a, 0x34, 0x20, 0x42, 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, + 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x04, 0x0e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x02, 0x12, 0x03, 0x0a, 0x11, 0x12, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x00, 0x04, 0x00, + 0x02, 0x01, 0x12, 0x03, 0x0b, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x0b, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x00, 0x04, 0x00, 0x02, + 0x01, 0x02, 0x12, 0x03, 0x0b, 0x10, 0x11, 0x0a, 0x4d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, + 0x03, 0x10, 0x02, 0x11, 0x1a, 0x40, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x2b, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, + 0x03, 0x10, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x10, + 0x09, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x10, 0x0f, 0x10, + 0x0a, 0x58, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x14, 0x02, 0x1a, 0x1a, 0x4b, 0x20, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, + 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x0a, 0x20, + 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x06, 0x12, 0x03, 0x14, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x01, 0x12, 0x03, 0x14, 0x0c, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, + 0x03, 0x14, 0x18, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x17, 0x00, 0x32, 0x01, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x17, 0x08, 0x13, 0x0a, 0x4b, 0x0a, 0x04, + 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x1a, 0x02, 0x13, 0x1a, 0x3e, 0x20, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x74, 0x6f, + 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x2b, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x1a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x1a, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x1a, 0x11, 0x12, 0x0a, 0x8e, 0x01, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x1f, 0x02, + 0x13, 0x1a, 0x80, 0x01, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x70, 0x61, 0x67, + 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x64, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x0a, 0x20, 0x69, 0x6e, 0x20, + 0x61, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1f, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x0e, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1f, 0x11, 0x12, 0x0a, 0x82, + 0x01, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x24, 0x02, 0x27, 0x1a, 0x75, 0x20, 0x44, + 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x73, + 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x69, 0x6e, + 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x0a, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, + 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, + 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x06, 0x12, 0x03, 0x24, 0x02, + 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x24, 0x07, 0x0e, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x24, 0x11, 0x12, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x02, 0x08, 0x12, 0x03, 0x24, 0x13, 0x26, 0x0a, 0x0d, 0x0a, 0x06, 0x04, + 0x01, 0x02, 0x02, 0x08, 0x03, 0x12, 0x03, 0x24, 0x14, 0x25, 0x0a, 0x60, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x03, 0x12, 0x03, 0x28, 0x02, 0x1e, 0x1a, 0x53, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x72, + 0x70, 0x63, 0x20, 0x67, 0x65, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, + 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x03, 0x04, 0x12, 0x03, 0x28, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x03, 0x06, 0x12, 0x03, 0x28, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, + 0x01, 0x12, 0x03, 0x28, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, + 0x03, 0x28, 0x1c, 0x1d, 0x0a, 0x73, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, 0x2c, 0x02, + 0x22, 0x1a, 0x66, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, + 0x72, 0x61, 0x77, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, + 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x52, 0x45, 0x53, 0x54, + 0x20, 0x67, 0x65, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x0a, 0x20, 0x2b, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x04, 0x04, 0x12, 0x03, 0x2c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x05, + 0x12, 0x03, 0x2c, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, + 0x2c, 0x12, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x2c, 0x20, + 0x21, 0x0a, 0x7c, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x31, 0x02, 0x23, 0x1a, 0x6f, + 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6c, + 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x73, + 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x0a, 0x20, 0x53, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x72, + 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x04, 0x12, 0x03, 0x31, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x31, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x31, 0x10, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x05, 0x03, 0x12, 0x03, 0x31, 0x21, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x34, + 0x00, 0x50, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x34, 0x08, 0x0e, 0x0a, + 0x0c, 0x0a, 0x04, 0x04, 0x02, 0x04, 0x00, 0x12, 0x04, 0x35, 0x02, 0x47, 0x03, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x04, 0x00, 0x01, 0x12, 0x03, 0x35, 0x07, 0x0f, 0x0a, 0x0d, 0x0a, 0x06, 0x04, + 0x02, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x36, 0x04, 0x0e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, + 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x36, 0x04, 0x09, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, + 0x04, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x36, 0x0c, 0x0d, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, + 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x37, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x37, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x37, 0x10, 0x11, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x02, 0x12, 0x03, 0x38, 0x04, 0x15, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x38, 0x04, 0x10, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x02, 0x02, 0x12, 0x03, 0x38, 0x13, 0x14, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x03, 0x12, 0x03, 0x39, 0x04, 0x1e, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, + 0x03, 0x01, 0x12, 0x03, 0x39, 0x04, 0x19, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, + 0x03, 0x02, 0x12, 0x03, 0x39, 0x1c, 0x1d, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, + 0x04, 0x12, 0x03, 0x3a, 0x04, 0x12, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x04, + 0x01, 0x12, 0x03, 0x3a, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x04, + 0x02, 0x12, 0x03, 0x3a, 0x10, 0x11, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, 0x05, + 0x12, 0x03, 0x3b, 0x04, 0x1b, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x05, 0x01, + 0x12, 0x03, 0x3b, 0x04, 0x16, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x05, 0x02, + 0x12, 0x03, 0x3b, 0x19, 0x1a, 0x0a, 0x32, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, 0x02, 0x06, 0x12, + 0x03, 0x3c, 0x04, 0x11, 0x22, 0x23, 0x20, 0x43, 0x61, 0x73, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x3c, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x06, 0x02, 0x12, 0x03, 0x3c, 0x0f, 0x10, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x07, 0x12, 0x03, 0x3d, 0x04, 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x07, 0x01, 0x12, 0x03, 0x3d, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x07, 0x02, 0x12, 0x03, 0x3d, 0x0f, 0x10, 0x0a, 0x5f, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x08, 0x12, 0x03, 0x44, 0x04, 0x13, 0x32, 0x50, 0x20, 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x4f, + 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x20, 0x3d, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x20, 0x3d, 0x20, 0x39, 0x3b, 0x0a, 0x20, + 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x20, 0x3d, 0x20, 0x31, 0x30, + 0x3b, 0x0a, 0x20, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x53, 0x5f, 0x57, 0x49, + 0x54, 0x48, 0x20, 0x3d, 0x20, 0x31, 0x31, 0x3b, 0x0a, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x44, 0x04, 0x0d, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x08, 0x02, 0x12, 0x03, 0x44, 0x10, 0x12, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x02, 0x04, + 0x00, 0x02, 0x09, 0x12, 0x03, 0x45, 0x04, 0x17, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x09, 0x01, 0x12, 0x03, 0x45, 0x04, 0x11, 0x0a, 0x0e, 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x09, 0x02, 0x12, 0x03, 0x45, 0x14, 0x16, 0x0a, 0x34, 0x0a, 0x06, 0x04, 0x02, 0x04, 0x00, + 0x02, 0x0a, 0x12, 0x03, 0x46, 0x04, 0x23, 0x22, 0x25, 0x20, 0x43, 0x61, 0x73, 0x65, 0x20, 0x69, + 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x0a, 0x01, 0x12, 0x03, 0x46, 0x04, 0x1d, 0x0a, 0x0e, + 0x0a, 0x07, 0x04, 0x02, 0x04, 0x00, 0x02, 0x0a, 0x02, 0x12, 0x03, 0x46, 0x20, 0x22, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x49, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x49, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x49, 0x0b, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x49, 0x16, 0x17, 0x0a, 0x23, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x4c, + 0x02, 0x13, 0x1a, 0x16, 0x20, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, + 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x01, 0x05, 0x12, 0x03, 0x4c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, + 0x01, 0x12, 0x03, 0x4c, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, + 0x03, 0x4c, 0x11, 0x12, 0x0a, 0x5c, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x4f, 0x02, + 0x1d, 0x1a, 0x4f, 0x20, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, + 0x49, 0x4e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x04, 0x12, 0x03, 0x4f, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x05, 0x12, 0x03, 0x4f, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x4f, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, 0x4f, 0x1b, 0x1c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, 0x0a, 0x90, 0x08, 0x0a, 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2a, 0x6c, 0x0a, + 0x10, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x4c, 0x4f, + 0x42, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, + 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x03, 0x12, 0x12, + 0x0a, 0x0e, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, + 0x10, 0x04, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x52, 0x47, 0x10, 0x05, 0x42, 0xc1, 0x01, 0x0a, 0x14, + 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x42, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1c, 0x46, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4a, + 0x9b, 0x05, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x19, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, + 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x08, + 0x0a, 0x01, 0x08, 0x12, 0x03, 0x04, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, + 0x04, 0x00, 0x4b, 0x0a, 0x52, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x07, 0x00, 0x19, 0x01, 0x1a, + 0x46, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x20, 0x57, 0x65, + 0x20, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, + 0x07, 0x05, 0x15, 0x0a, 0x29, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x09, 0x02, 0x19, + 0x1a, 0x1c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, + 0x20, 0x75, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x09, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x09, 0x17, 0x18, 0x0a, 0x3b, 0x0a, 0x04, 0x05, 0x00, + 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x0d, 0x1a, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, + 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, + 0x0c, 0x0b, 0x0c, 0x0a, 0x3b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x02, 0x0d, + 0x1a, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x18, 0x02, 0x05, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x18, 0x08, 0x09, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x0b, 0x0c, 0x0a, 0x3c, 0x0a, 0x04, + 0x05, 0x00, 0x02, 0x03, 0x12, 0x03, 0x12, 0x02, 0x0e, 0x1a, 0x2f, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, + 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x03, 0x01, 0x12, 0x03, 0x12, 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x03, + 0x02, 0x12, 0x03, 0x12, 0x0c, 0x0d, 0x0a, 0x43, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x04, 0x12, 0x03, + 0x15, 0x02, 0x15, 0x1a, 0x36, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x15, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x04, 0x02, 0x12, 0x03, 0x15, 0x13, 0x14, 0x0a, 0x38, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x05, 0x12, + 0x03, 0x18, 0x02, 0x0a, 0x1a, 0x2b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6f, 0x72, + 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x18, 0x02, 0x05, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x18, 0x08, 0x09, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, ]; // @@protoc_insertion_point(module) \ No newline at end of file diff --git a/gen/rust/src/flyteidl2.logs.dataplane.rs b/gen/rust/src/flyteidl2.logs.dataplane.rs index fc3d367950..69b91582af 100644 --- a/gen/rust/src/flyteidl2.logs.dataplane.rs +++ b/gen/rust/src/flyteidl2.logs.dataplane.rs @@ -81,6 +81,10 @@ pub struct ContainerSelector { /// isn't supported. #[prost(string, tag="5")] pub kubernetes_pod_label_selector: ::prost::alloc::string::String, + /// NodeName is the name of the Kubernetes node to filter pods for. Only pods running on this node will be included. + /// +optional + #[prost(string, tag="6")] + pub node_name: ::prost::alloc::string::String, } #[pyo3::pyclass(dict, get_all, set_all)] #[allow(clippy::derive_partial_eq_without_eq)] @@ -213,7 +217,7 @@ impl LogsSource { } /// Encoded file descriptor set for the `flyteidl2.logs.dataplane` package pub const FILE_DESCRIPTOR_SET: &[u8] = &[ - 0x0a, 0xa7, 0x3f, 0x0a, 0x26, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, + 0x0a, 0x83, 0x41, 0x0a, 0x26, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, @@ -291,7 +295,7 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb7, 0x02, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xd4, 0x02, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, @@ -310,415 +314,429 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x50, 0x6f, - 0x64, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x5e, - 0x0a, 0x0f, 0x4c, 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x50, 0x6f, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x22, 0xaa, - 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4b, - 0x0a, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, - 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, - 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xf0, 0x01, 0x0a, 0x08, - 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6e, - 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x53, 0x0a, 0x09, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x12, 0x4c, 0x0a, 0x10, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x0f, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x62, - 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, + 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x0f, 0x4c, + 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x67, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, + 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x6f, 0x67, 0x50, 0x6f, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, + 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x07, + 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x6f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, + 0x6e, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xf0, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, + 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x53, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x4c, 0x0a, + 0x10, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x73, 0x22, 0x47, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x36, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, - 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, - 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x2a, 0x36, 0x0a, 0x11, 0x4c, - 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x59, 0x53, 0x54, 0x45, - 0x4d, 0x10, 0x02, 0x2a, 0x46, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x56, 0x45, 0x5f, 0x4f, 0x52, 0x5f, 0x50, 0x45, 0x52, - 0x53, 0x49, 0x53, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x56, 0x45, - 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x45, 0x52, 0x53, 0x49, - 0x53, 0x54, 0x45, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x42, 0xec, 0x01, 0x0a, 0x1c, - 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, - 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x42, 0x0c, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, - 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, - 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, 0x6f, 0x67, 0x73, - 0x2f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x4c, 0x44, - 0xaa, 0x02, 0x18, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x4c, 0x6f, 0x67, - 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xca, 0x02, 0x18, 0x46, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x4c, 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xe2, 0x02, 0x24, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x5c, 0x4c, 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, - 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x4c, 0x6f, 0x67, 0x73, 0x3a, - 0x3a, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x4a, 0xe5, 0x2a, 0x0a, 0x07, 0x12, - 0x05, 0x00, 0x00, 0x8d, 0x01, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, - 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x21, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, - 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x25, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x29, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x08, 0x00, 0x53, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x53, - 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x14, 0x01, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x13, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, - 0x12, 0x03, 0x0c, 0x02, 0x41, 0x1a, 0x1b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x64, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x09, 0x12, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x0c, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, - 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0c, 0x18, 0x3f, 0x0a, 0x1c, 0x0a, 0x04, - 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x02, 0x3c, 0x1a, 0x0f, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x70, 0x6f, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x05, 0x12, 0x03, 0x0f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x0f, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x0f, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x0f, - 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, - 0x03, 0x0f, 0x13, 0x3a, 0x0a, 0x86, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x13, - 0x02, 0x17, 0x1a, 0x79, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2c, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x2e, 0x0a, 0x20, 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x13, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x02, 0x03, 0x12, 0x03, 0x13, 0x15, 0x16, 0x0a, 0xab, 0x01, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, - 0x18, 0x00, 0x24, 0x01, 0x1a, 0x9e, 0x01, 0x20, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, - 0x77, 0x65, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0x20, - 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, - 0x73, 0x61, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, - 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x61, 0x73, - 0x6b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x67, 0x73, - 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x18, 0x08, - 0x16, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x09, 0x12, 0x03, 0x19, 0x02, 0x10, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x01, 0x09, 0x00, 0x12, 0x03, 0x19, 0x0b, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x09, 0x00, 0x01, 0x12, 0x03, 0x19, 0x0b, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x09, 0x00, - 0x02, 0x12, 0x03, 0x19, 0x0b, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x09, 0x01, 0x12, 0x03, - 0x19, 0x0e, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x09, 0x01, 0x01, 0x12, 0x03, 0x19, 0x0e, - 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x09, 0x01, 0x02, 0x12, 0x03, 0x19, 0x0e, 0x0f, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x1b, 0x02, 0x44, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x1b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x1b, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x1b, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, - 0x03, 0x1b, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, - 0x02, 0x12, 0x03, 0x1b, 0x1b, 0x42, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, - 0x1c, 0x02, 0x4c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1c, 0x02, - 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1c, 0x09, 0x1d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1c, 0x20, 0x21, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x01, 0x08, 0x12, 0x03, 0x1c, 0x22, 0x4b, 0x0a, 0x10, 0x0a, 0x09, 0x04, - 0x01, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1c, 0x23, 0x4a, 0x0a, 0x0b, 0x0a, - 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x1d, 0x02, 0x4b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x02, 0x05, 0x12, 0x03, 0x1d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, - 0x01, 0x12, 0x03, 0x1d, 0x09, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, - 0x03, 0x1d, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x08, 0x12, 0x03, 0x1d, - 0x21, 0x4a, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x01, 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, - 0x03, 0x1d, 0x22, 0x49, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x1e, 0x02, - 0x51, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x1e, 0x02, 0x08, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1e, 0x09, 0x22, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, 0x03, 0x1e, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x03, 0x08, 0x12, 0x03, 0x1e, 0x27, 0x50, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x01, 0x02, - 0x03, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1e, 0x28, 0x4f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x01, 0x02, 0x04, 0x12, 0x03, 0x1f, 0x02, 0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, - 0x06, 0x12, 0x03, 0x1f, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, - 0x03, 0x1f, 0x1c, 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x1f, - 0x3b, 0x3c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x20, 0x02, 0x3b, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x20, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x20, 0x1c, 0x36, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, 0x20, 0x39, 0x3a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, - 0x06, 0x12, 0x03, 0x21, 0x02, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x06, 0x12, - 0x03, 0x21, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, 0x21, - 0x16, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x21, 0x2e, 0x2f, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x07, 0x12, 0x03, 0x22, 0x02, 0x23, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x07, 0x06, 0x12, 0x03, 0x22, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x07, 0x01, 0x12, 0x03, 0x22, 0x18, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x07, 0x03, 0x12, 0x03, 0x22, 0x20, 0x22, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x08, 0x12, - 0x03, 0x23, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x05, 0x12, 0x03, 0x23, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x01, 0x12, 0x03, 0x23, 0x09, 0x1a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x03, 0x12, 0x03, 0x23, 0x1d, 0x1f, 0x0a, 0xab, - 0x01, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x28, 0x00, 0x34, 0x01, 0x1a, 0x9e, 0x01, 0x20, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x77, 0x65, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x0a, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x02, 0x01, 0x12, 0x03, 0x28, 0x08, 0x1b, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, - 0x12, 0x03, 0x2a, 0x02, 0x44, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x2a, 0x02, 0x08, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2a, 0x09, 0x15, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2a, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, 0x2a, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, - 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x2a, 0x1b, 0x42, 0x0a, 0x2b, 0x0a, 0x04, 0x04, - 0x02, 0x02, 0x01, 0x12, 0x03, 0x2d, 0x02, 0x4c, 0x1a, 0x1e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, - 0x05, 0x12, 0x03, 0x2d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x2d, 0x09, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x2d, - 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x08, 0x12, 0x03, 0x2d, 0x22, 0x4b, - 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x2d, - 0x23, 0x4a, 0x0a, 0x31, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x30, 0x02, 0x4b, 0x1a, - 0x24, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6f, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, - 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x05, 0x12, 0x03, - 0x30, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x30, 0x09, - 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, 0x30, 0x1f, 0x20, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x08, 0x12, 0x03, 0x30, 0x21, 0x4a, 0x0a, 0x10, 0x0a, - 0x09, 0x04, 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x30, 0x22, 0x49, 0x0a, - 0x37, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x33, 0x02, 0x27, 0x1a, 0x2a, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, - 0x05, 0x12, 0x03, 0x33, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x01, 0x12, - 0x03, 0x33, 0x09, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x03, 0x12, 0x03, 0x33, - 0x25, 0x26, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x36, 0x00, 0x48, 0x01, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x36, 0x08, 0x19, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x03, - 0x02, 0x00, 0x12, 0x03, 0x38, 0x02, 0x44, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x38, 0x02, - 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x38, 0x09, 0x15, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x38, 0x18, 0x19, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x03, 0x02, 0x00, 0x08, 0x12, 0x03, 0x38, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, - 0x03, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x38, 0x1b, 0x42, 0x0a, 0x2b, 0x0a, - 0x04, 0x04, 0x03, 0x02, 0x01, 0x12, 0x03, 0x3b, 0x02, 0x4c, 0x1a, 0x1e, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, - 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, - 0x02, 0x01, 0x05, 0x12, 0x03, 0x3b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x3b, 0x09, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x3b, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x08, 0x12, 0x03, 0x3b, - 0x22, 0x4b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x03, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, - 0x03, 0x3b, 0x23, 0x4a, 0x0a, 0xad, 0x01, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x02, 0x12, 0x03, 0x3f, - 0x02, 0x28, 0x1a, 0x9f, 0x01, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x70, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x70, 0x6f, 0x64, 0x73, 0x27, 0x20, 0x6c, - 0x6f, 0x67, 0x73, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x62, 0x79, 0x0a, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x69, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, - 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x70, 0x6f, - 0x64, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x02, 0x05, 0x12, 0x03, 0x3f, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x12, 0x03, 0x3f, 0x09, 0x23, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x02, 0x03, 0x12, 0x03, 0x3f, 0x26, 0x27, 0x0a, 0x74, - 0x0a, 0x04, 0x04, 0x03, 0x02, 0x03, 0x12, 0x03, 0x43, 0x02, 0x27, 0x1a, 0x67, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, - 0x0a, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x03, 0x05, 0x12, 0x03, 0x43, - 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x03, 0x01, 0x12, 0x03, 0x43, 0x09, 0x22, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x03, 0x03, 0x12, 0x03, 0x43, 0x25, 0x26, 0x0a, 0x85, - 0x01, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x04, 0x12, 0x03, 0x47, 0x02, 0x2b, 0x1a, 0x78, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x64, 0x73, - 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x70, - 0x6f, 0x64, 0x73, 0x27, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x79, 0x20, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x0a, 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x04, 0x05, 0x12, - 0x03, 0x47, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x04, 0x01, 0x12, 0x03, 0x47, - 0x09, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x04, 0x03, 0x12, 0x03, 0x47, 0x29, 0x2a, - 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x4a, 0x00, 0x51, 0x01, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x04, 0x01, 0x12, 0x03, 0x4a, 0x08, 0x17, 0x0a, 0x58, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, - 0x12, 0x03, 0x4c, 0x02, 0x1a, 0x1a, 0x4b, 0x20, 0x4c, 0x6f, 0x67, 0x50, 0x6f, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6f, 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x61, 0x6c, 0x6f, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x73, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x4c, 0x02, 0x06, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4c, 0x07, 0x15, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4c, 0x18, 0x19, 0x0a, 0xa8, 0x01, 0x0a, - 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x50, 0x02, 0x1a, 0x1a, 0x9a, 0x01, 0x20, 0x4c, 0x6f, - 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x20, 0x69, 0x6e, 0x64, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x6f, - 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x73, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x70, 0x72, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x73, 0x20, 0x52, 0x46, 0x43, 0x33, 0x33, 0x33, 0x39, 0x20, 0x6f, 0x72, 0x20, - 0x52, 0x46, 0x43, 0x33, 0x33, 0x33, 0x39, 0x4e, 0x61, 0x6e, 0x6f, 0x0a, 0x20, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6c, 0x6f, 0x67, - 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x05, - 0x12, 0x03, 0x50, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, - 0x50, 0x07, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x50, 0x18, - 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x53, 0x00, 0x5c, 0x01, 0x0a, 0x0a, 0x0a, - 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x53, 0x05, 0x16, 0x0a, 0x39, 0x0a, 0x04, 0x05, 0x00, 0x02, - 0x00, 0x12, 0x03, 0x55, 0x02, 0x0e, 0x1a, 0x2c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, - 0x6f, 0x67, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x55, - 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x55, 0x0c, 0x0d, - 0x0a, 0x46, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x58, 0x02, 0x0b, 0x1a, 0x39, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x58, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, 0x12, - 0x03, 0x58, 0x09, 0x0a, 0x0a, 0x3c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x5b, 0x02, - 0x0d, 0x1a, 0x2f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, + 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x0f, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x22, 0x62, 0x0a, 0x11, 0x4c, + 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x4d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, + 0x47, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x36, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, + 0x65, 0x73, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x2a, 0x36, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4c, + 0x69, 0x6e, 0x65, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x55, 0x53, + 0x45, 0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x10, 0x02, + 0x2a, 0x46, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x15, + 0x0a, 0x11, 0x4c, 0x49, 0x56, 0x45, 0x5f, 0x4f, 0x52, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, + 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x56, 0x45, 0x5f, 0x4f, 0x4e, + 0x4c, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, + 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x42, 0xec, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x42, 0x0c, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x4c, 0x44, 0xaa, 0x02, 0x18, + 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xca, 0x02, 0x18, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x4c, 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0xe2, 0x02, 0x24, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, + 0x4c, 0x6f, 0x67, 0x73, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1a, 0x46, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x4c, 0x6f, 0x67, 0x73, 0x3a, 0x3a, 0x44, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x4a, 0xa4, 0x2c, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, + 0x91, 0x01, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, + 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x21, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, + 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x25, 0x0a, 0x09, 0x0a, + 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x29, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x08, + 0x00, 0x53, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x53, 0x0a, 0x0a, 0x0a, + 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x14, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, + 0x12, 0x03, 0x0a, 0x08, 0x13, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0c, + 0x02, 0x41, 0x1a, 0x1b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x64, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x00, 0x08, 0x12, 0x03, 0x0c, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0c, 0x18, 0x3f, 0x0a, 0x1c, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x01, 0x12, 0x03, 0x0f, 0x02, 0x3c, 0x1a, 0x0f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x64, + 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x0f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x0f, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0f, 0x10, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x0f, 0x12, 0x3b, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0f, 0x13, + 0x3a, 0x0a, 0x86, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x13, 0x02, 0x17, 0x1a, + 0x79, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x74, + 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, + 0x72, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2c, 0x20, 0x65, 0x6c, + 0x73, 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, + 0x72, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x0a, 0x20, + 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x02, 0x05, 0x12, 0x03, 0x13, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, + 0x01, 0x12, 0x03, 0x13, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, + 0x03, 0x13, 0x15, 0x16, 0x0a, 0xab, 0x01, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x18, 0x00, 0x24, + 0x01, 0x1a, 0x9e, 0x01, 0x20, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, + 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, + 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x77, 0x65, 0x72, + 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x53, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, + 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x20, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x69, 0x6e, + 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x18, 0x08, 0x16, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x01, 0x09, 0x12, 0x03, 0x19, 0x02, 0x10, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x09, 0x00, 0x12, 0x03, 0x19, 0x0b, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x09, 0x00, 0x01, + 0x12, 0x03, 0x19, 0x0b, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x09, 0x00, 0x02, 0x12, 0x03, + 0x19, 0x0b, 0x0c, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x09, 0x01, 0x12, 0x03, 0x19, 0x0e, 0x0f, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x09, 0x01, 0x01, 0x12, 0x03, 0x19, 0x0e, 0x0f, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x09, 0x01, 0x02, 0x12, 0x03, 0x19, 0x0e, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x1b, 0x02, 0x44, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x1b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x1b, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x1b, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, 0x03, 0x1b, 0x1a, + 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, + 0x1b, 0x1b, 0x42, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x1c, 0x02, 0x4c, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1c, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1c, 0x09, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1c, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x01, 0x08, 0x12, 0x03, 0x1c, 0x22, 0x4b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x01, 0x02, 0x01, + 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1c, 0x23, 0x4a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x02, 0x12, 0x03, 0x1d, 0x02, 0x4b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x05, + 0x12, 0x03, 0x1d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, + 0x1d, 0x09, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x1d, 0x1f, + 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x08, 0x12, 0x03, 0x1d, 0x21, 0x4a, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x01, 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1d, 0x22, + 0x49, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x1e, 0x02, 0x51, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x05, 0x12, 0x03, 0x1e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1e, 0x09, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x03, 0x03, 0x12, 0x03, 0x1e, 0x25, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, + 0x08, 0x12, 0x03, 0x1e, 0x27, 0x50, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x01, 0x02, 0x03, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1e, 0x28, 0x4f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, + 0x12, 0x03, 0x1f, 0x02, 0x3d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x06, 0x12, 0x03, + 0x1f, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x1f, 0x1c, + 0x38, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x1f, 0x3b, 0x3c, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x05, 0x12, 0x03, 0x20, 0x02, 0x3b, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, 0x20, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x05, 0x01, 0x12, 0x03, 0x20, 0x1c, 0x36, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, + 0x03, 0x12, 0x03, 0x20, 0x39, 0x3a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x06, 0x12, 0x03, + 0x21, 0x02, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x06, 0x12, 0x03, 0x21, 0x02, + 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, 0x21, 0x16, 0x2b, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, 0x21, 0x2e, 0x2f, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x01, 0x02, 0x07, 0x12, 0x03, 0x22, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x07, 0x06, 0x12, 0x03, 0x22, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, + 0x01, 0x12, 0x03, 0x22, 0x18, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x03, 0x12, + 0x03, 0x22, 0x20, 0x22, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x08, 0x12, 0x03, 0x23, 0x02, + 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x05, 0x12, 0x03, 0x23, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x01, 0x12, 0x03, 0x23, 0x09, 0x1a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x08, 0x03, 0x12, 0x03, 0x23, 0x1d, 0x1f, 0x0a, 0xab, 0x01, 0x0a, 0x02, + 0x04, 0x02, 0x12, 0x04, 0x28, 0x00, 0x34, 0x01, 0x1a, 0x9e, 0x01, 0x20, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6c, + 0x6f, 0x67, 0x73, 0x20, 0x77, 0x65, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x2e, 0x20, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x6e, + 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x79, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, + 0x12, 0x03, 0x28, 0x08, 0x1b, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x2a, + 0x02, 0x44, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x2a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2a, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x2a, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, + 0x08, 0x12, 0x03, 0x2a, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x2a, 0x1b, 0x42, 0x0a, 0x2b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, + 0x12, 0x03, 0x2d, 0x02, 0x4c, 0x1a, 0x1e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, + 0x2d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x2d, 0x09, + 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x2d, 0x20, 0x21, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x08, 0x12, 0x03, 0x2d, 0x22, 0x4b, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x02, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x2d, 0x23, 0x4a, 0x0a, + 0x31, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x03, 0x30, 0x02, 0x4b, 0x1a, 0x24, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, + 0x6f, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x05, 0x12, 0x03, 0x30, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x30, 0x09, 0x1c, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, 0x30, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x02, 0x08, 0x12, 0x03, 0x30, 0x21, 0x4a, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, + 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x30, 0x22, 0x49, 0x0a, 0x37, 0x0a, 0x04, + 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x33, 0x02, 0x27, 0x1a, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x05, 0x12, 0x03, + 0x33, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x01, 0x12, 0x03, 0x33, 0x09, + 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x03, 0x12, 0x03, 0x33, 0x25, 0x26, 0x0a, + 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x36, 0x00, 0x4c, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x03, 0x01, 0x12, 0x03, 0x36, 0x08, 0x19, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, + 0x03, 0x38, 0x02, 0x44, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x38, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x38, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x38, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, + 0x02, 0x00, 0x08, 0x12, 0x03, 0x38, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x03, 0x02, 0x00, + 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x38, 0x1b, 0x42, 0x0a, 0x2b, 0x0a, 0x04, 0x04, 0x03, + 0x02, 0x01, 0x12, 0x03, 0x3b, 0x02, 0x4c, 0x1a, 0x1e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x3b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x3b, 0x09, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3b, 0x20, + 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x08, 0x12, 0x03, 0x3b, 0x22, 0x4b, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x03, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x3b, 0x23, + 0x4a, 0x0a, 0xad, 0x01, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x02, 0x12, 0x03, 0x3f, 0x02, 0x28, 0x1a, + 0x9f, 0x01, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x70, 0x6f, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x6e, + 0x6c, 0x79, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x70, 0x6f, 0x64, 0x73, 0x27, 0x20, 0x6c, 0x6f, 0x67, 0x73, + 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x62, 0x79, 0x0a, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x69, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x77, 0x61, 0x79, + 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x64, 0x73, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x02, 0x05, 0x12, 0x03, 0x3f, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x12, 0x03, 0x3f, 0x09, 0x23, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x03, 0x02, 0x02, 0x03, 0x12, 0x03, 0x3f, 0x26, 0x27, 0x0a, 0x74, 0x0a, 0x04, 0x04, + 0x03, 0x02, 0x03, 0x12, 0x03, 0x43, 0x02, 0x27, 0x1a, 0x67, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, + 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x65, 0x73, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, + 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x0a, 0x20, 0x77, + 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x65, 0x64, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x03, 0x05, 0x12, 0x03, 0x43, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x03, 0x01, 0x12, 0x03, 0x43, 0x09, 0x22, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x03, 0x02, 0x03, 0x03, 0x12, 0x03, 0x43, 0x25, 0x26, 0x0a, 0x85, 0x01, 0x0a, 0x04, + 0x04, 0x03, 0x02, 0x04, 0x12, 0x03, 0x47, 0x02, 0x2b, 0x1a, 0x78, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x74, + 0x6f, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x64, 0x73, 0x2e, 0x20, 0x54, + 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x70, + 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x70, 0x6f, 0x64, 0x73, + 0x27, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x79, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x0a, 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, + 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x04, 0x05, 0x12, 0x03, 0x47, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x04, 0x01, 0x12, 0x03, 0x47, 0x09, 0x26, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x04, 0x03, 0x12, 0x03, 0x47, 0x29, 0x2a, 0x0a, 0x8a, 0x01, + 0x0a, 0x04, 0x04, 0x03, 0x02, 0x05, 0x12, 0x03, 0x4b, 0x02, 0x17, 0x1a, 0x7d, 0x20, 0x4e, 0x6f, + 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x64, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x2e, 0x20, 0x4f, 0x6e, + 0x6c, 0x79, 0x20, 0x70, 0x6f, 0x64, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, + 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x77, 0x69, 0x6c, + 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x2e, 0x0a, 0x20, + 0x2b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, + 0x02, 0x05, 0x05, 0x12, 0x03, 0x4b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x05, + 0x01, 0x12, 0x03, 0x4b, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x05, 0x03, 0x12, + 0x03, 0x4b, 0x15, 0x16, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x4e, 0x00, 0x55, 0x01, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x4e, 0x08, 0x17, 0x0a, 0x58, 0x0a, 0x04, + 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x50, 0x02, 0x1a, 0x1a, 0x4b, 0x20, 0x4c, 0x6f, 0x67, 0x50, + 0x6f, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, + 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, + 0x03, 0x50, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x50, + 0x07, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x50, 0x18, 0x19, + 0x0a, 0xa8, 0x01, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x54, 0x02, 0x1a, 0x1a, 0x9a, + 0x01, 0x20, 0x4c, 0x6f, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x20, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, + 0x72, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, + 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x20, 0x49, 0x74, 0x20, + 0x70, 0x72, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73, 0x20, 0x52, 0x46, 0x43, 0x33, 0x33, 0x33, 0x39, + 0x20, 0x6f, 0x72, 0x20, 0x52, 0x46, 0x43, 0x33, 0x33, 0x33, 0x39, 0x4e, 0x61, 0x6e, 0x6f, 0x0a, + 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, + 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, + 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x01, 0x05, 0x12, 0x03, 0x54, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x54, 0x07, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x54, 0x18, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x57, 0x00, 0x60, + 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x57, 0x05, 0x16, 0x0a, 0x39, 0x0a, + 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x59, 0x02, 0x0e, 0x1a, 0x2c, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, + 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x59, 0x02, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, + 0x03, 0x59, 0x0c, 0x0d, 0x0a, 0x46, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x5c, 0x02, + 0x0b, 0x1a, 0x39, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x6c, 0x69, - 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x5b, 0x02, 0x08, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x5b, 0x0b, 0x0c, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x5e, 0x00, 0x67, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, - 0x01, 0x12, 0x03, 0x5e, 0x08, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, - 0x5f, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x5f, 0x02, - 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x5f, 0x1c, 0x25, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x5f, 0x28, 0x29, 0x0a, 0xe2, 0x01, - 0x0a, 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, 0x03, 0x64, 0x02, 0x15, 0x1a, 0xd4, 0x01, 0x20, 0x45, - 0x61, 0x63, 0x68, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x43, 0x52, 0x4c, 0x46, 0x2c, 0x20, 0x43, 0x52, 0x20, 0x6f, 0x72, 0x20, 0x4c, 0x46, 0x2c, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x64, 0x0a, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, - 0x69, 0x73, 0x20, 0x6c, 0x65, 0x74, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, 0x6f, 0x67, - 0x20, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, - 0x28, 0x4c, 0x46, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x61, - 0x20, 0x6e, 0x65, 0x77, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x43, 0x52, 0x4c, 0x46, 0x29, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x05, 0x12, 0x03, 0x64, 0x02, 0x08, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x64, 0x09, 0x10, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x64, 0x13, 0x14, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x05, 0x02, 0x02, 0x12, 0x03, 0x66, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, - 0x02, 0x06, 0x12, 0x03, 0x66, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, 0x01, - 0x12, 0x03, 0x66, 0x14, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, 0x03, 0x12, 0x03, - 0x66, 0x21, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x69, 0x00, 0x7a, 0x01, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x69, 0x08, 0x10, 0x0a, 0xe2, 0x01, 0x0a, 0x04, - 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x6d, 0x02, 0x30, 0x1a, 0xd4, 0x01, 0x20, 0x45, 0x61, 0x63, - 0x68, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x43, 0x52, - 0x4c, 0x46, 0x2c, 0x20, 0x43, 0x52, 0x20, 0x6f, 0x72, 0x20, 0x4c, 0x46, 0x2c, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, - 0x0a, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x6c, 0x65, 0x74, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6b, 0x6e, - 0x6f, 0x77, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x65, - 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x4c, - 0x46, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6e, - 0x65, 0x77, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x43, 0x52, 0x4c, 0x46, 0x29, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x04, 0x12, 0x03, 0x6d, 0x02, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x05, 0x12, 0x03, 0x6d, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x6d, 0x12, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x00, 0x03, 0x12, 0x03, 0x6d, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, - 0x08, 0x12, 0x03, 0x6d, 0x1c, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x06, 0x02, 0x00, 0x08, 0x03, - 0x12, 0x03, 0x6d, 0x1d, 0x2e, 0x0a, 0xf1, 0x01, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, - 0x71, 0x02, 0x1d, 0x1a, 0xe3, 0x01, 0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x49, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, - 0x6d, 0x61, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x0a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x20, 0x62, 0x65, 0x20, 0x30, 0x2e, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, - 0x2c, 0x20, 0x69, 0x74, 0x27, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, - 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, - 0x01, 0x05, 0x12, 0x03, 0x71, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, - 0x12, 0x03, 0x71, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, - 0x71, 0x1b, 0x1c, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x02, 0x12, 0x03, 0x74, 0x02, 0x4b, - 0x1a, 0x1b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x06, 0x02, 0x02, 0x06, 0x12, 0x03, 0x74, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x74, 0x16, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, - 0x02, 0x03, 0x12, 0x03, 0x74, 0x22, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x08, - 0x12, 0x03, 0x74, 0x24, 0x4a, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x06, 0x02, 0x02, 0x08, 0x87, 0x09, - 0x19, 0x12, 0x03, 0x74, 0x25, 0x49, 0x0a, 0xe2, 0x01, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x03, 0x12, - 0x03, 0x79, 0x02, 0x28, 0x1a, 0xd4, 0x01, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x43, 0x52, 0x4c, 0x46, 0x2c, 0x20, 0x43, - 0x52, 0x20, 0x6f, 0x72, 0x20, 0x4c, 0x46, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x0a, 0x20, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65, 0x74, 0x73, - 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, - 0x72, 0x0a, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x76, 0x65, - 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x4c, 0x46, 0x29, 0x20, 0x6f, 0x72, - 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x6c, 0x69, - 0x6e, 0x65, 0x20, 0x28, 0x43, 0x52, 0x4c, 0x46, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x06, 0x02, 0x03, 0x04, 0x12, 0x03, 0x79, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, - 0x03, 0x06, 0x12, 0x03, 0x79, 0x0b, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x79, 0x13, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x03, 0x12, 0x03, - 0x79, 0x26, 0x27, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x04, 0x7c, 0x00, 0x7e, 0x01, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x7c, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x07, 0x02, 0x00, 0x12, 0x03, 0x7d, 0x02, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, - 0x04, 0x12, 0x03, 0x7d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x7d, 0x0b, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x7d, - 0x1f, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x7d, 0x2c, 0x2d, - 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x06, 0x80, 0x01, 0x00, 0x82, 0x01, 0x01, 0x0a, 0x0b, - 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x04, 0x80, 0x01, 0x08, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, - 0x08, 0x02, 0x00, 0x12, 0x04, 0x81, 0x01, 0x02, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, - 0x00, 0x04, 0x12, 0x04, 0x81, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, - 0x06, 0x12, 0x04, 0x81, 0x01, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, - 0x12, 0x04, 0x81, 0x01, 0x14, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, - 0x04, 0x81, 0x01, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, 0x02, 0x05, 0x01, 0x12, 0x06, 0x84, 0x01, 0x00, - 0x8d, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x05, 0x01, 0x01, 0x12, 0x04, 0x84, 0x01, 0x05, 0x0f, - 0x0a, 0x4d, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x00, 0x12, 0x04, 0x86, 0x01, 0x02, 0x18, 0x1a, 0x3f, - 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x6c, 0x6f, 0x67, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, - 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, - 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x00, 0x01, 0x12, 0x04, 0x86, 0x01, 0x02, 0x13, 0x0a, 0x0d, - 0x0a, 0x05, 0x05, 0x01, 0x02, 0x00, 0x02, 0x12, 0x04, 0x86, 0x01, 0x16, 0x17, 0x0a, 0x4a, 0x0a, - 0x04, 0x05, 0x01, 0x02, 0x01, 0x12, 0x04, 0x89, 0x01, 0x02, 0x10, 0x1a, 0x3c, 0x20, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x6f, - 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, - 0x70, 0x6f, 0x64, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, - 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, - 0x01, 0x01, 0x12, 0x04, 0x89, 0x01, 0x02, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, - 0x02, 0x12, 0x04, 0x89, 0x01, 0x0e, 0x0f, 0x0a, 0x2b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x02, 0x12, - 0x04, 0x8c, 0x01, 0x02, 0x15, 0x1a, 0x1d, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x6f, 0x6e, - 0x6c, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x01, 0x12, 0x04, 0x8c, - 0x01, 0x02, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x02, 0x12, 0x04, 0x8c, 0x01, - 0x13, 0x14, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x5c, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x01, 0x02, 0x12, 0x03, 0x5c, 0x09, 0x0a, 0x0a, 0x3c, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, + 0x12, 0x03, 0x5f, 0x02, 0x0d, 0x1a, 0x2f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, + 0x67, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, + 0x03, 0x5f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x5f, + 0x0b, 0x0c, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x62, 0x00, 0x6b, 0x01, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x62, 0x08, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, + 0x02, 0x00, 0x12, 0x03, 0x63, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, + 0x12, 0x03, 0x63, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x63, 0x1c, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x63, 0x28, + 0x29, 0x0a, 0xe2, 0x01, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, 0x03, 0x68, 0x02, 0x15, 0x1a, + 0xd4, 0x01, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x69, 0x74, + 0x68, 0x65, 0x72, 0x20, 0x43, 0x52, 0x4c, 0x46, 0x2c, 0x20, 0x43, 0x52, 0x20, 0x6f, 0x72, 0x20, + 0x4c, 0x46, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x0a, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, + 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65, 0x74, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x77, 0x61, + 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, + 0x69, 0x6e, 0x65, 0x20, 0x28, 0x4c, 0x46, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x70, 0x70, 0x65, + 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x43, + 0x52, 0x4c, 0x46, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x05, 0x12, + 0x03, 0x68, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x68, + 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x68, 0x13, 0x14, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x02, 0x12, 0x03, 0x6a, 0x02, 0x23, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x05, 0x02, 0x02, 0x06, 0x12, 0x03, 0x6a, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x05, 0x02, 0x02, 0x01, 0x12, 0x03, 0x6a, 0x14, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, + 0x02, 0x03, 0x12, 0x03, 0x6a, 0x21, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x6d, + 0x00, 0x7e, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x6d, 0x08, 0x10, 0x0a, + 0xe2, 0x01, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x71, 0x02, 0x30, 0x1a, 0xd4, 0x01, + 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x65, + 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, + 0x72, 0x20, 0x43, 0x52, 0x4c, 0x46, 0x2c, 0x20, 0x43, 0x52, 0x20, 0x6f, 0x72, 0x20, 0x4c, 0x46, + 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x64, 0x0a, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, + 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x20, + 0x54, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65, 0x74, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, + 0x6f, 0x67, 0x20, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x77, 0x61, 0x6e, 0x74, + 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x6e, + 0x65, 0x20, 0x28, 0x4c, 0x46, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, + 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x43, 0x52, 0x4c, + 0x46, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x04, 0x12, 0x03, 0x71, + 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x05, 0x12, 0x03, 0x71, 0x0b, 0x11, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x71, 0x12, 0x17, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x71, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x00, 0x08, 0x12, 0x03, 0x71, 0x1c, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x04, 0x06, + 0x02, 0x00, 0x08, 0x03, 0x12, 0x03, 0x71, 0x1d, 0x2e, 0x0a, 0xf1, 0x01, 0x0a, 0x04, 0x04, 0x06, + 0x02, 0x01, 0x12, 0x03, 0x75, 0x02, 0x1d, 0x1a, 0xe3, 0x01, 0x20, 0x54, 0x68, 0x65, 0x20, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, + 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, + 0x77, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2c, 0x0a, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x61, 0x6c, + 0x77, 0x61, 0x79, 0x73, 0x20, 0x62, 0x65, 0x20, 0x30, 0x2e, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72, + 0x77, 0x69, 0x73, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x27, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x75, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x75, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x75, 0x1b, 0x1c, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x02, 0x12, + 0x03, 0x78, 0x02, 0x4b, 0x1a, 0x1b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x06, 0x12, 0x03, 0x78, 0x02, 0x15, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x78, 0x16, 0x1f, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x02, 0x03, 0x12, 0x03, 0x78, 0x22, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x02, 0x08, 0x12, 0x03, 0x78, 0x24, 0x4a, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x06, 0x02, + 0x02, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x78, 0x25, 0x49, 0x0a, 0xe2, 0x01, 0x0a, 0x04, 0x04, + 0x06, 0x02, 0x03, 0x12, 0x03, 0x7d, 0x02, 0x28, 0x1a, 0xd4, 0x01, 0x20, 0x45, 0x61, 0x63, 0x68, + 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x43, 0x52, 0x4c, + 0x46, 0x2c, 0x20, 0x43, 0x52, 0x20, 0x6f, 0x72, 0x20, 0x4c, 0x46, 0x2c, 0x20, 0x77, 0x68, 0x69, + 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x0a, + 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, + 0x6c, 0x65, 0x74, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6b, 0x6e, 0x6f, + 0x77, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x65, 0x6d, + 0x69, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, + 0x20, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x4c, 0x46, + 0x29, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x28, 0x43, 0x52, 0x4c, 0x46, 0x29, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x04, 0x12, 0x03, 0x7d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x03, 0x06, 0x12, 0x03, 0x7d, 0x0b, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x03, 0x01, 0x12, 0x03, 0x7d, 0x13, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x03, 0x03, 0x12, 0x03, 0x7d, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x06, 0x80, + 0x01, 0x00, 0x82, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x04, 0x80, 0x01, + 0x08, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x04, 0x81, 0x01, 0x02, 0x2e, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x04, 0x12, 0x04, 0x81, 0x01, 0x02, 0x0a, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x04, 0x81, 0x01, 0x0b, 0x1e, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x04, 0x81, 0x01, 0x1f, 0x29, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x04, 0x81, 0x01, 0x2c, 0x2d, 0x0a, 0x0c, 0x0a, 0x02, + 0x04, 0x08, 0x12, 0x06, 0x84, 0x01, 0x00, 0x86, 0x01, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x08, + 0x01, 0x12, 0x04, 0x84, 0x01, 0x08, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, + 0x04, 0x85, 0x01, 0x02, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x04, 0x12, 0x04, + 0x85, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x06, 0x12, 0x04, 0x85, + 0x01, 0x0b, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x04, 0x85, 0x01, + 0x14, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x04, 0x85, 0x01, 0x1b, + 0x1c, 0x0a, 0x0c, 0x0a, 0x02, 0x05, 0x01, 0x12, 0x06, 0x88, 0x01, 0x00, 0x91, 0x01, 0x01, 0x0a, + 0x0b, 0x0a, 0x03, 0x05, 0x01, 0x01, 0x12, 0x04, 0x88, 0x01, 0x05, 0x0f, 0x0a, 0x4d, 0x0a, 0x04, + 0x05, 0x01, 0x02, 0x00, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x18, 0x1a, 0x3f, 0x20, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, + 0x01, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, + 0x02, 0x00, 0x02, 0x12, 0x04, 0x8a, 0x01, 0x16, 0x17, 0x0a, 0x4a, 0x0a, 0x04, 0x05, 0x01, 0x02, + 0x01, 0x12, 0x04, 0x8d, 0x01, 0x02, 0x10, 0x1a, 0x3c, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x6c, 0x69, 0x76, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, + 0x6f, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x70, 0x6f, 0x64, 0x20, + 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x61, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x01, 0x12, 0x04, + 0x8d, 0x01, 0x02, 0x0b, 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x02, 0x12, 0x04, 0x8d, + 0x01, 0x0e, 0x0f, 0x0a, 0x2b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x02, 0x12, 0x04, 0x90, 0x01, 0x02, + 0x15, 0x1a, 0x1d, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x64, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x2e, 0x0a, + 0x0a, 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x01, 0x12, 0x04, 0x90, 0x01, 0x02, 0x10, 0x0a, + 0x0d, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x02, 0x12, 0x04, 0x90, 0x01, 0x13, 0x14, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, ]; // @@protoc_insertion_point(module) \ No newline at end of file diff --git a/gen/rust/src/flyteidl2.notification.rs b/gen/rust/src/flyteidl2.notification.rs new file mode 100644 index 0000000000..4e56ff98ab --- /dev/null +++ b/gen/rust/src/flyteidl2.notification.rs @@ -0,0 +1,422 @@ +// @generated +// This file is @generated by prost-build. +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeliveryConfigTemplate { + #[prost(message, optional, tag="1")] + pub webhook: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub email: ::core::option::Option, +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RunCompletedNotificationTemplateData { + #[prost(message, optional, tag="1")] + pub run: ::core::option::Option, + #[prost(enumeration="super::common::ActionPhase", tag="2")] + pub phase: i32, + #[prost(string, tag="3")] + pub error: ::prost::alloc::string::String, +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WebhookDeliveryTemplate { + #[prost(string, tag="1")] + pub url: ::prost::alloc::string::String, + #[prost(enumeration="HttpMethod", tag="2")] + pub method: i32, + #[prost(map="string, string", tag="3")] + pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// this is a Go template that may contain placeholders + #[prost(string, tag="4")] + pub body_template: ::prost::alloc::string::String, +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EmailRecipient { + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub address: ::prost::alloc::string::String, +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EmailDeliveryTemplate { + /// this is a Go template that may contain placeholders + #[prost(string, tag="1")] + pub subject: ::prost::alloc::string::String, + #[prost(message, repeated, tag="2")] + pub to: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="3")] + pub cc: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="4")] + pub bcc: ::prost::alloc::vec::Vec, + /// this is a Go template that may contain placeholders + #[prost(string, tag="5")] + pub html_template: ::prost::alloc::string::String, + /// this is a Go template that may contain placeholders + #[prost(string, tag="6")] + pub text_template: ::prost::alloc::string::String, +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum EventType { + Unspecified = 0, + RunCompleted = 1, +} +impl EventType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + EventType::Unspecified => "EVENT_TYPE_UNSPECIFIED", + EventType::RunCompleted => "EVENT_TYPE_RUN_COMPLETED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "EVENT_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "EVENT_TYPE_RUN_COMPLETED" => Some(Self::RunCompleted), + _ => None, + } + } +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum HttpMethod { + Unspecified = 0, + Get = 1, + Head = 2, + Post = 3, + Put = 4, + Delete = 5, + Connect = 6, + Options = 7, + Trace = 8, + Patch = 9, +} +impl HttpMethod { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + HttpMethod::Unspecified => "HTTP_METHOD_UNSPECIFIED", + HttpMethod::Get => "HTTP_METHOD_GET", + HttpMethod::Head => "HTTP_METHOD_HEAD", + HttpMethod::Post => "HTTP_METHOD_POST", + HttpMethod::Put => "HTTP_METHOD_PUT", + HttpMethod::Delete => "HTTP_METHOD_DELETE", + HttpMethod::Connect => "HTTP_METHOD_CONNECT", + HttpMethod::Options => "HTTP_METHOD_OPTIONS", + HttpMethod::Trace => "HTTP_METHOD_TRACE", + HttpMethod::Patch => "HTTP_METHOD_PATCH", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "HTTP_METHOD_UNSPECIFIED" => Some(Self::Unspecified), + "HTTP_METHOD_GET" => Some(Self::Get), + "HTTP_METHOD_HEAD" => Some(Self::Head), + "HTTP_METHOD_POST" => Some(Self::Post), + "HTTP_METHOD_PUT" => Some(Self::Put), + "HTTP_METHOD_DELETE" => Some(Self::Delete), + "HTTP_METHOD_CONNECT" => Some(Self::Connect), + "HTTP_METHOD_OPTIONS" => Some(Self::Options), + "HTTP_METHOD_TRACE" => Some(Self::Trace), + "HTTP_METHOD_PATCH" => Some(Self::Patch), + _ => None, + } + } +} +/// Encoded file descriptor set for the `flyteidl2.notification` package +pub const FILE_DESCRIPTOR_SET: &[u8] = &[ + 0x0a, 0xa7, 0x22, 0x0a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x9e, 0x02, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x49, 0x0a, + 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x44, + 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x43, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, 0x74, 0xba, + 0x48, 0x71, 0x1a, 0x6f, 0x0a, 0x15, 0x61, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x6f, + 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x30, 0x61, 0x74, 0x20, + 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x24, 0x68, + 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x29, + 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x29, 0x22, 0xac, 0x01, 0x0a, 0x24, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x03, + 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x03, 0x72, 0x75, 0x6e, 0x12, 0x33, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0xd0, 0x02, 0x0a, 0x17, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x44, 0x65, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1c, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, + 0x72, 0x05, 0x10, 0x01, 0x18, 0xd0, 0x0f, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x44, 0x0a, 0x06, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x12, 0x70, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x57, 0x65, 0x62, + 0x68, 0x6f, 0x6f, 0x6b, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x42, 0x18, 0xba, 0x48, 0x15, 0x9a, 0x01, 0x12, 0x10, 0x14, 0x22, 0x06, 0x72, 0x04, 0x10, + 0x01, 0x18, 0x14, 0x2a, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x32, 0x52, 0x07, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x6f, 0x64, + 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x0e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, + 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xc1, 0x02, 0x0a, 0x15, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, + 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x21, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x40, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, + 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x02, 0x74, 0x6f, 0x12, 0x36, 0x0a, 0x02, 0x63, 0x63, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, + 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x02, 0x63, 0x63, 0x12, 0x38, 0x0a, 0x03, + 0x62, 0x63, 0x63, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, + 0x74, 0x52, 0x03, 0x62, 0x63, 0x63, 0x12, 0x2c, 0x0a, 0x0d, 0x68, 0x74, 0x6d, 0x6c, 0x5f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x68, 0x74, 0x6d, 0x6c, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x78, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2a, 0x45, 0x0a, 0x09, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x01, + 0x2a, 0xf7, 0x01, 0x0a, 0x0a, 0x48, 0x74, 0x74, 0x70, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, + 0x1b, 0x0a, 0x17, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, + 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x47, 0x45, 0x54, 0x10, + 0x01, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, + 0x5f, 0x48, 0x45, 0x41, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x5f, + 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x10, 0x03, 0x12, 0x13, 0x0a, + 0x0f, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x50, 0x55, 0x54, + 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, + 0x44, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, + 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, + 0x54, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, + 0x4f, 0x44, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, + 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x54, 0x52, 0x41, 0x43, + 0x45, 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x48, 0x54, 0x54, 0x50, 0x5f, 0x4d, 0x45, 0x54, 0x48, + 0x4f, 0x44, 0x5f, 0x50, 0x41, 0x54, 0x43, 0x48, 0x10, 0x09, 0x42, 0xe2, 0x01, 0x0a, 0x1a, 0x63, + 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, + 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, + 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x46, 0x4e, 0x58, 0xaa, 0x02, + 0x16, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x16, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x5c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0xe2, 0x02, 0x22, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x17, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x3a, 0x3a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4a, + 0xb0, 0x13, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x5f, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, + 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1f, 0x0a, 0x09, + 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, + 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x26, 0x0a, + 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x08, 0x00, 0x51, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, + 0x03, 0x08, 0x00, 0x51, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x14, 0x01, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x08, 0x1e, 0x0a, 0x0b, 0x0a, 0x03, + 0x04, 0x00, 0x07, 0x12, 0x04, 0x0b, 0x02, 0x0f, 0x04, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x00, 0x07, + 0x87, 0x09, 0x03, 0x00, 0x12, 0x04, 0x0b, 0x02, 0x0f, 0x04, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, + 0x07, 0x87, 0x09, 0x03, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x04, 0x1f, 0x0a, 0x0f, 0x0a, 0x08, 0x04, + 0x00, 0x07, 0x87, 0x09, 0x03, 0x00, 0x02, 0x12, 0x03, 0x0d, 0x04, 0x3f, 0x0a, 0x0f, 0x0a, 0x08, + 0x04, 0x00, 0x07, 0x87, 0x09, 0x03, 0x00, 0x03, 0x12, 0x03, 0x0e, 0x04, 0x36, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x11, 0x02, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x11, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x11, 0x1a, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x11, 0x24, 0x25, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x13, 0x02, + 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x13, 0x02, 0x17, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x13, 0x18, 0x1d, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x13, 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, 0x05, + 0x00, 0x12, 0x04, 0x16, 0x00, 0x19, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, + 0x16, 0x05, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x17, 0x02, 0x1d, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x17, 0x02, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x17, 0x1b, 0x1c, 0x0a, 0x0b, 0x0a, 0x04, + 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x18, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x18, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, + 0x12, 0x03, 0x18, 0x1d, 0x1e, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x1b, 0x00, 0x21, + 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x1b, 0x08, 0x2c, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x1c, 0x02, 0x46, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x1c, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x1c, 0x17, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x1c, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, 0x03, 0x1c, + 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, + 0x1c, 0x20, 0x44, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x1e, 0x02, 0x1f, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, 0x1e, 0x02, 0x14, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1e, 0x15, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1e, 0x1d, 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x02, 0x12, 0x03, 0x20, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x05, + 0x12, 0x03, 0x20, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, + 0x20, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x20, 0x11, + 0x12, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x01, 0x12, 0x04, 0x23, 0x00, 0x2e, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x05, 0x01, 0x01, 0x12, 0x03, 0x23, 0x05, 0x0f, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, + 0x00, 0x12, 0x03, 0x24, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x24, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x00, 0x02, 0x12, 0x03, 0x24, + 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x01, 0x12, 0x03, 0x25, 0x02, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x25, 0x02, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x01, 0x02, 0x01, 0x02, 0x12, 0x03, 0x25, 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x05, + 0x01, 0x02, 0x02, 0x12, 0x03, 0x26, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, + 0x01, 0x12, 0x03, 0x26, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x02, 0x12, + 0x03, 0x26, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x03, 0x12, 0x03, 0x27, 0x02, + 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x03, 0x01, 0x12, 0x03, 0x27, 0x02, 0x12, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x03, 0x02, 0x12, 0x03, 0x27, 0x15, 0x16, 0x0a, 0x0b, 0x0a, + 0x04, 0x05, 0x01, 0x02, 0x04, 0x12, 0x03, 0x28, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, + 0x02, 0x04, 0x01, 0x12, 0x03, 0x28, 0x02, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x04, + 0x02, 0x12, 0x03, 0x28, 0x14, 0x15, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x05, 0x12, 0x03, + 0x29, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x29, 0x02, + 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x05, 0x02, 0x12, 0x03, 0x29, 0x17, 0x18, 0x0a, + 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x06, 0x12, 0x03, 0x2a, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x01, 0x02, 0x06, 0x01, 0x12, 0x03, 0x2a, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, + 0x02, 0x06, 0x02, 0x12, 0x03, 0x2a, 0x18, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x07, + 0x12, 0x03, 0x2b, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x07, 0x01, 0x12, 0x03, + 0x2b, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x07, 0x02, 0x12, 0x03, 0x2b, 0x18, + 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x08, 0x12, 0x03, 0x2c, 0x02, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x01, 0x02, 0x08, 0x01, 0x12, 0x03, 0x2c, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x01, 0x02, 0x08, 0x02, 0x12, 0x03, 0x2c, 0x16, 0x17, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, + 0x02, 0x09, 0x12, 0x03, 0x2d, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x09, 0x01, + 0x12, 0x03, 0x2d, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x09, 0x02, 0x12, 0x03, + 0x2d, 0x16, 0x17, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x30, 0x00, 0x4b, 0x01, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x30, 0x08, 0x1f, 0x0a, 0x0c, 0x0a, 0x04, 0x04, + 0x02, 0x02, 0x00, 0x12, 0x04, 0x31, 0x02, 0x34, 0x05, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x31, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x31, 0x09, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x31, 0x0f, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x04, 0x31, 0x11, + 0x34, 0x04, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x12, 0x04, + 0x31, 0x12, 0x34, 0x03, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, + 0x02, 0x12, 0x03, 0x32, 0x04, 0x0e, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x0e, 0x03, 0x12, 0x03, 0x33, 0x04, 0x11, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, + 0x12, 0x04, 0x36, 0x02, 0x38, 0x05, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, + 0x03, 0x36, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x36, + 0x0d, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x36, 0x16, 0x17, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x08, 0x12, 0x04, 0x36, 0x18, 0x38, 0x04, 0x0a, + 0x10, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x01, 0x08, 0x87, 0x09, 0x10, 0x12, 0x04, 0x36, 0x19, 0x38, + 0x03, 0x0a, 0x11, 0x0a, 0x0a, 0x04, 0x02, 0x02, 0x01, 0x08, 0x87, 0x09, 0x10, 0x04, 0x00, 0x12, + 0x03, 0x37, 0x0d, 0x0e, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x02, 0x12, 0x04, 0x3a, 0x02, + 0x48, 0x05, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x06, 0x12, 0x03, 0x3a, 0x02, 0x15, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x01, 0x12, 0x03, 0x3a, 0x16, 0x1d, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x02, 0x03, 0x12, 0x03, 0x3a, 0x20, 0x21, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x02, 0x08, 0x12, 0x04, 0x3a, 0x22, 0x48, 0x04, 0x0a, 0x10, 0x0a, 0x08, 0x04, + 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, 0x12, 0x04, 0x3a, 0x23, 0x48, 0x03, 0x0a, 0x11, 0x0a, + 0x09, 0x04, 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, 0x04, 0x12, 0x04, 0x3b, 0x04, 0x40, 0x05, + 0x0a, 0x12, 0x0a, 0x0a, 0x04, 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, 0x04, 0x0e, 0x12, 0x04, + 0x3c, 0x06, 0x3f, 0x07, 0x0a, 0x12, 0x0a, 0x0b, 0x04, 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, + 0x04, 0x0e, 0x02, 0x12, 0x03, 0x3d, 0x08, 0x12, 0x0a, 0x12, 0x0a, 0x0b, 0x04, 0x02, 0x02, 0x02, + 0x08, 0x87, 0x09, 0x13, 0x04, 0x0e, 0x03, 0x12, 0x03, 0x3e, 0x08, 0x13, 0x0a, 0x11, 0x0a, 0x09, + 0x04, 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, 0x05, 0x12, 0x04, 0x41, 0x04, 0x46, 0x05, 0x0a, + 0x12, 0x0a, 0x0a, 0x04, 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, 0x05, 0x0e, 0x12, 0x04, 0x42, + 0x06, 0x45, 0x07, 0x0a, 0x12, 0x0a, 0x0b, 0x04, 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, 0x05, + 0x0e, 0x02, 0x12, 0x03, 0x43, 0x08, 0x12, 0x0a, 0x12, 0x0a, 0x0b, 0x04, 0x02, 0x02, 0x02, 0x08, + 0x87, 0x09, 0x13, 0x05, 0x0e, 0x03, 0x12, 0x03, 0x44, 0x08, 0x13, 0x0a, 0x10, 0x0a, 0x09, 0x04, + 0x02, 0x02, 0x02, 0x08, 0x87, 0x09, 0x13, 0x02, 0x12, 0x03, 0x47, 0x04, 0x11, 0x0a, 0x42, 0x0a, + 0x04, 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x4a, 0x02, 0x1b, 0x22, 0x35, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x47, 0x6f, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x05, 0x12, 0x03, 0x4a, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x03, 0x01, 0x12, 0x03, 0x4a, 0x09, 0x16, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x02, 0x03, 0x03, 0x12, 0x03, 0x4a, 0x19, 0x1a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, + 0x03, 0x12, 0x04, 0x4d, 0x00, 0x51, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, + 0x4d, 0x08, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x4e, 0x02, 0x12, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x4e, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4e, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4e, 0x10, 0x11, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, + 0x02, 0x01, 0x12, 0x03, 0x50, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x50, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x50, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x01, 0x03, 0x12, 0x03, 0x50, 0x13, + 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x53, 0x00, 0x5f, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x53, 0x08, 0x1d, 0x0a, 0x42, 0x0a, 0x04, 0x04, 0x04, 0x02, + 0x00, 0x12, 0x03, 0x54, 0x02, 0x3f, 0x22, 0x35, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, + 0x20, 0x61, 0x20, 0x47, 0x6f, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, + 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x54, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x54, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x54, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, + 0x12, 0x03, 0x54, 0x15, 0x3e, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x54, 0x16, 0x3d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, + 0x03, 0x56, 0x02, 0x4f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x04, 0x12, 0x03, 0x56, + 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x56, 0x0b, 0x19, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x56, 0x1a, 0x1c, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x56, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x01, 0x08, 0x12, 0x03, 0x56, 0x21, 0x4e, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, + 0x02, 0x01, 0x08, 0x87, 0x09, 0x12, 0x01, 0x12, 0x03, 0x56, 0x22, 0x4d, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x04, 0x02, 0x02, 0x12, 0x03, 0x58, 0x02, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x02, 0x04, 0x12, 0x03, 0x58, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x06, + 0x12, 0x03, 0x58, 0x0b, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, + 0x58, 0x1a, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x58, 0x1f, + 0x20, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x03, 0x12, 0x03, 0x5a, 0x02, 0x22, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x04, 0x12, 0x03, 0x5a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x03, 0x06, 0x12, 0x03, 0x5a, 0x0b, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x03, 0x01, 0x12, 0x03, 0x5a, 0x1a, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, + 0x03, 0x12, 0x03, 0x5a, 0x20, 0x21, 0x0a, 0x42, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x04, 0x12, 0x03, + 0x5c, 0x02, 0x45, 0x22, 0x35, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, + 0x47, 0x6f, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, + 0x20, 0x6d, 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x04, 0x05, 0x12, 0x03, 0x5c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x04, + 0x01, 0x12, 0x03, 0x5c, 0x09, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x04, 0x03, 0x12, + 0x03, 0x5c, 0x19, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x04, 0x08, 0x12, 0x03, 0x5c, + 0x1b, 0x44, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x04, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, + 0x03, 0x5c, 0x1c, 0x43, 0x0a, 0x42, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x05, 0x12, 0x03, 0x5e, 0x02, + 0x1b, 0x22, 0x35, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x47, 0x6f, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, + 0x61, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x05, + 0x05, 0x12, 0x03, 0x5e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x05, 0x01, 0x12, + 0x03, 0x5e, 0x09, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x05, 0x03, 0x12, 0x03, 0x5e, + 0x19, 0x1a, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +]; +// @@protoc_insertion_point(module) \ No newline at end of file diff --git a/gen/rust/src/flyteidl2.secret.rs b/gen/rust/src/flyteidl2.secret.rs index 944ba8fb0a..130c3c446f 100644 --- a/gen/rust/src/flyteidl2.secret.rs +++ b/gen/rust/src/flyteidl2.secret.rs @@ -232,6 +232,10 @@ pub struct UpdateSecretResponse { pub struct GetSecretRequest { #[prost(message, optional, tag="1")] pub id: ::core::option::Option, + /// If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included. + /// If false (default), system secrets will be hidden and return NotFound. + #[prost(bool, tag="2")] + pub include_system_secrets: bool, } /// GetSecretProxyResponse returns the looked up secret from the secret service #[pyo3::pyclass(dict, get_all, set_all)] @@ -249,6 +253,10 @@ pub struct DeleteSecretRequest { /// name to be used for looking up the secret #[prost(message, optional, tag="1")] pub id: ::core::option::Option, + /// If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) can be deleted. + /// If false (default), attempting to delete a system secret will return NotFound. + #[prost(bool, tag="2")] + pub include_system_secrets: bool, } /// DeleteSecretResponse is an empty response right now on successfully deleting the secret. #[pyo3::pyclass(dict, get_all, set_all)] @@ -284,6 +292,10 @@ pub struct ListSecretsRequest { /// In multi cluster, inorder to page through next set of results, client needs to send this token in the next request #[prost(map="string, string", tag="6")] pub per_cluster_tokens: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included in results. + /// If false (default), system secrets will be filtered out. + #[prost(bool, tag="7")] + pub include_system_secrets: bool, } /// ListSecretsResponse returns paginated results of the accessible secrets at the scope defined in the request. #[pyo3::pyclass(dict, get_all, set_all)] @@ -622,7 +634,7 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x5e, 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x06, 0x12, 0x03, 0x5e, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, 0x03, 0x5e, 0x11, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x5e, 0x23, 0x24, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xdc, 0x26, 0x0a, 0x1e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xa3, 0x2d, 0x0a, 0x1e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, @@ -651,391 +663,443 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x4e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x45, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x51, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, - 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0xc5, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, - 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x68, 0x0a, 0x12, 0x70, - 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, - 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x10, 0x70, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8f, 0x02, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x69, 0x0a, 0x12, - 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x70, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x50, 0x65, 0x72, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0xbb, 0x01, 0x0a, - 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x0c, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x46, 0x53, - 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x3a, 0x3a, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4a, 0xef, 0x1a, 0x0a, 0x06, 0x12, - 0x04, 0x00, 0x00, 0x4d, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, - 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, - 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, - 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, - 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x60, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0a, 0x00, 0x0d, 0x01, - 0x1a, 0x54, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0a, - 0x08, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0b, 0x02, 0x41, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0b, 0x02, 0x12, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x00, 0x08, 0x12, 0x03, 0x0b, 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, 0x00, 0x08, - 0x87, 0x09, 0x19, 0x12, 0x03, 0x0b, 0x1b, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, - 0x12, 0x03, 0x0c, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, - 0x0c, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x0d, - 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0c, 0x1b, 0x1c, 0x0a, - 0x21, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x03, 0x10, 0x00, 0x1f, 0x1a, 0x16, 0x20, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x10, 0x08, 0x1c, 0x0a, 0x60, - 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x13, 0x00, 0x16, 0x01, 0x1a, 0x54, 0x20, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, + 0x22, 0x84, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x87, + 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, + 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x68, 0x0a, 0x12, 0x70, 0x65, 0x72, + 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x72, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x70, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x50, 0x65, 0x72, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8f, + 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x69, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x70, 0x65, 0x72, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x50, + 0x65, 0x72, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0xbb, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x0c, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0xa2, + 0x02, 0x03, 0x46, 0x53, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0xe2, 0x02, 0x1c, 0x46, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4a, 0x92, + 0x20, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x56, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, + 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, + 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, + 0x05, 0x00, 0x2b, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x09, 0x0a, + 0x02, 0x08, 0x0b, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x60, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, + 0x0a, 0x00, 0x0d, 0x01, 0x1a, 0x54, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, + 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, + 0x01, 0x12, 0x03, 0x0a, 0x08, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, + 0x0b, 0x02, 0x41, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0b, 0x02, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x13, 0x15, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0b, 0x18, 0x19, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x0b, 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, + 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x0b, 0x1b, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x06, 0x12, 0x03, 0x0c, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x0c, 0x0d, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x0c, 0x1b, 0x1c, 0x0a, 0x21, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x03, 0x10, 0x00, 0x1f, 0x1a, 0x16, + 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x10, + 0x08, 0x1c, 0x0a, 0x60, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x13, 0x00, 0x16, 0x01, 0x1a, 0x54, + 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x13, 0x08, 0x1b, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x14, 0x02, 0x41, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x14, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x14, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x14, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, + 0x12, 0x03, 0x14, 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, + 0x19, 0x12, 0x03, 0x14, 0x1b, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, + 0x15, 0x02, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, 0x03, 0x15, 0x02, + 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x15, 0x0d, 0x18, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x15, 0x1b, 0x1c, 0x0a, 0x61, 0x0a, + 0x02, 0x04, 0x03, 0x12, 0x03, 0x19, 0x00, 0x1f, 0x1a, 0x56, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x0a, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x19, 0x08, 0x1c, 0x0a, 0x55, 0x0a, 0x02, + 0x04, 0x04, 0x12, 0x04, 0x1c, 0x00, 0x21, 0x01, 0x1a, 0x49, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x6f, + 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x1c, 0x08, 0x18, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x1d, 0x02, 0x41, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1d, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x1d, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x1d, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, + 0x03, 0x1d, 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, + 0x12, 0x03, 0x1d, 0x1b, 0x3f, 0x0a, 0xb3, 0x01, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, + 0x20, 0x02, 0x22, 0x1a, 0xa5, 0x01, 0x20, 0x49, 0x66, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x65, 0x64, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, + 0x20, 0x45, 0x41, 0x47, 0x45, 0x52, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x2c, 0x20, + 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x29, + 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x64, 0x2e, 0x0a, 0x20, 0x49, 0x66, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x28, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x29, 0x2c, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x68, + 0x69, 0x64, 0x64, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x01, 0x05, 0x12, 0x03, 0x20, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x20, 0x07, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x20, 0x20, 0x21, 0x0a, 0x59, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x24, 0x00, 0x26, + 0x01, 0x1a, 0x4d, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x65, 0x64, 0x20, 0x75, 0x70, + 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x0a, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x24, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x25, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, + 0x00, 0x06, 0x12, 0x03, 0x25, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x25, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x25, 0x12, 0x13, 0x0a, 0x65, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x29, 0x00, 0x2f, 0x01, 0x1a, + 0x59, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, - 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x13, 0x08, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, - 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x14, 0x02, 0x41, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x00, 0x06, 0x12, 0x03, 0x14, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x14, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x14, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, 0x14, 0x1a, - 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x14, - 0x1b, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x15, 0x02, 0x1d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, 0x12, 0x03, 0x15, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x15, 0x0d, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x15, 0x1b, 0x1c, 0x0a, 0x61, 0x0a, 0x02, 0x04, 0x03, 0x12, - 0x03, 0x19, 0x00, 0x1f, 0x1a, 0x56, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, - 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x03, 0x01, 0x12, 0x03, 0x19, 0x08, 0x1c, 0x0a, 0x55, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, - 0x1c, 0x00, 0x1e, 0x01, 0x1a, 0x49, 0x20, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x75, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x0a, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x1c, 0x08, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x04, 0x02, 0x00, 0x12, 0x03, 0x1d, 0x02, 0x41, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, - 0x06, 0x12, 0x03, 0x1d, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x1d, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1d, - 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, 0x1d, 0x1a, 0x40, - 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x1d, 0x1b, - 0x3f, 0x0a, 0x59, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x21, 0x00, 0x23, 0x01, 0x1a, 0x4d, 0x20, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x65, 0x64, 0x20, 0x75, 0x70, 0x20, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x05, 0x01, 0x12, 0x03, 0x21, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, - 0x12, 0x03, 0x22, 0x02, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, - 0x22, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x22, 0x09, - 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x22, 0x12, 0x13, 0x0a, - 0x65, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x26, 0x00, 0x29, 0x01, 0x1a, 0x59, 0x20, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x70, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x26, - 0x08, 0x1b, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x28, 0x02, 0x41, 0x1a, - 0x2b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x70, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, 0x03, 0x28, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x28, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x08, 0x12, - 0x03, 0x28, 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x06, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, - 0x12, 0x03, 0x28, 0x1b, 0x3f, 0x0a, 0x65, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x03, 0x2c, 0x00, 0x1f, - 0x1a, 0x5a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x77, 0x20, 0x6f, 0x6e, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x07, 0x01, 0x12, 0x03, 0x2c, 0x08, 0x1c, 0x0a, 0xe7, 0x01, 0x0a, 0x02, 0x04, 0x08, 0x12, - 0x04, 0x31, 0x00, 0x41, 0x01, 0x1a, 0xda, 0x01, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, - 0x73, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2e, 0x0a, 0x20, - 0x57, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x67, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2c, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x6c, - 0x6c, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x6f, 0x72, 0x67, - 0x2c, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x65, - 0x74, 0x63, 0x0a, 0x20, 0x41, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x31, 0x08, 0x1a, 0x0a, 0x40, - 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x33, 0x02, 0x1a, 0x1a, 0x33, 0x20, 0x4f, 0x6e, - 0x6c, 0x79, 0x20, 0x6f, 0x72, 0x67, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x77, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x05, 0x12, 0x03, 0x33, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x03, 0x33, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x03, 0x33, 0x18, 0x19, 0x0a, 0x23, 0x0a, 0x04, 0x04, 0x08, - 0x02, 0x01, 0x12, 0x03, 0x35, 0x02, 0x14, 0x1a, 0x16, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x05, 0x12, 0x03, 0x35, 0x02, 0x08, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x08, 0x02, 0x01, 0x01, 0x12, 0x03, 0x35, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x08, 0x02, 0x01, 0x03, 0x12, 0x03, 0x35, 0x12, 0x13, 0x0a, 0x2b, 0x0a, 0x04, 0x04, 0x08, 0x02, - 0x02, 0x12, 0x03, 0x37, 0x02, 0x15, 0x1a, 0x1e, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x20, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, 0x05, 0x12, - 0x03, 0x37, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, 0x01, 0x12, 0x03, 0x37, - 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, 0x03, 0x12, 0x03, 0x37, 0x13, 0x14, - 0x0a, 0x1f, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x03, 0x12, 0x03, 0x39, 0x02, 0x12, 0x1a, 0x12, 0x20, - 0x4d, 0x61, 0x78, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x03, 0x05, 0x12, 0x03, 0x39, 0x02, 0x07, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x03, 0x01, 0x12, 0x03, 0x39, 0x08, 0x0d, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x08, 0x02, 0x03, 0x03, 0x12, 0x03, 0x39, 0x10, 0x11, 0x0a, 0xac, 0x01, 0x0a, 0x04, - 0x04, 0x08, 0x02, 0x04, 0x12, 0x03, 0x3b, 0x02, 0x13, 0x1a, 0x9e, 0x01, 0x20, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, - 0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x72, 0x65, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, - 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, - 0x02, 0x04, 0x05, 0x12, 0x03, 0x3b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x04, - 0x01, 0x12, 0x03, 0x3b, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x04, 0x03, 0x12, - 0x03, 0x3b, 0x11, 0x12, 0x0a, 0x8b, 0x03, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x05, 0x12, 0x03, 0x40, - 0x02, 0x2d, 0x1a, 0xfd, 0x02, 0x20, 0x50, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x70, 0x65, 0x72, - 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6c, 0x6c, - 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, - 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, - 0x63, 0x68, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, - 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x49, - 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, - 0x20, 0x69, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x67, 0x65, - 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x73, 0x65, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x05, 0x06, 0x12, 0x03, 0x40, 0x02, 0x15, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x05, 0x01, 0x12, 0x03, 0x40, 0x16, 0x28, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x08, 0x02, 0x05, 0x03, 0x12, 0x03, 0x40, 0x2b, 0x2c, 0x0a, 0x7a, 0x0a, 0x02, - 0x04, 0x09, 0x12, 0x04, 0x44, 0x00, 0x4d, 0x01, 0x1a, 0x6e, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x20, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, - 0x03, 0x44, 0x08, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x45, 0x02, - 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x04, 0x12, 0x03, 0x45, 0x02, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x06, 0x12, 0x03, 0x45, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x03, 0x45, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x09, 0x02, 0x00, 0x03, 0x12, 0x03, 0x45, 0x1c, 0x1d, 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x09, 0x02, - 0x01, 0x12, 0x03, 0x47, 0x02, 0x13, 0x1a, 0x32, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x70, 0x61, 0x67, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, - 0x02, 0x01, 0x05, 0x12, 0x03, 0x47, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x47, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x47, 0x11, 0x12, 0x0a, 0x8b, 0x03, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x02, 0x12, 0x03, 0x4c, - 0x02, 0x2d, 0x1a, 0xfd, 0x02, 0x20, 0x50, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x70, 0x65, 0x72, - 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6c, 0x6c, - 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, - 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, - 0x63, 0x68, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, - 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x49, - 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, - 0x20, 0x69, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x67, 0x65, - 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x73, 0x65, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x06, 0x12, 0x03, 0x4c, 0x02, 0x15, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x01, 0x12, 0x03, 0x4c, 0x16, 0x28, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x03, 0x12, 0x03, 0x4c, 0x2b, 0x2c, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xea, 0x0c, 0x0a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x1e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x90, 0x05, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x79, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, + 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x75, 0x73, + 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x75, + 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, + 0x01, 0x12, 0x03, 0x29, 0x08, 0x1b, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, + 0x2b, 0x02, 0x41, 0x1a, 0x2b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, + 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, + 0x67, 0x20, 0x75, 0x70, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, 0x03, 0x2b, 0x02, 0x12, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2b, 0x13, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2b, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x00, 0x08, 0x12, 0x03, 0x2b, 0x1a, 0x40, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x06, 0x02, 0x00, + 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x2b, 0x1b, 0x3f, 0x0a, 0xb9, 0x01, 0x0a, 0x04, 0x04, 0x06, + 0x02, 0x01, 0x12, 0x03, 0x2e, 0x02, 0x22, 0x1a, 0xab, 0x01, 0x20, 0x49, 0x66, 0x20, 0x74, 0x72, + 0x75, 0x65, 0x2c, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, 0x28, + 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x45, 0x41, 0x47, 0x45, 0x52, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, + 0x45, 0x59, 0x2c, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x4b, 0x45, 0x59, 0x29, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x49, 0x66, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x28, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x29, 0x2c, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, + 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x77, + 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4e, 0x6f, 0x74, 0x46, 0x6f, + 0x75, 0x6e, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, + 0x2e, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x2e, 0x07, + 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x2e, 0x20, 0x21, 0x0a, + 0x65, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x03, 0x32, 0x00, 0x1f, 0x1a, 0x5a, 0x20, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x77, + 0x20, 0x6f, 0x6e, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, + 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x32, + 0x08, 0x1c, 0x0a, 0xe7, 0x01, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x37, 0x00, 0x4a, 0x01, 0x1a, + 0xda, 0x01, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2e, 0x0a, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x6f, + 0x72, 0x67, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x69, + 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x6f, 0x72, 0x67, 0x2c, 0x20, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x65, 0x74, 0x63, 0x0a, 0x20, 0x41, 0x6e, + 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x08, 0x01, 0x12, 0x03, 0x37, 0x08, 0x1a, 0x0a, 0x40, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, + 0x12, 0x03, 0x39, 0x02, 0x1a, 0x1a, 0x33, 0x20, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x72, 0x67, + 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x77, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, + 0x02, 0x00, 0x05, 0x12, 0x03, 0x39, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x39, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x39, 0x18, 0x19, 0x0a, 0x23, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x01, 0x12, 0x03, 0x3b, 0x02, + 0x14, 0x1a, 0x16, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x64, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x01, 0x05, 0x12, 0x03, 0x3b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x3b, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x3b, 0x12, 0x13, 0x0a, 0x2b, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x02, 0x12, 0x03, 0x3d, 0x02, 0x15, + 0x1a, 0x1e, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, 0x05, 0x12, 0x03, 0x3d, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, 0x01, 0x12, 0x03, 0x3d, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x08, 0x02, 0x02, 0x03, 0x12, 0x03, 0x3d, 0x13, 0x14, 0x0a, 0x1f, 0x0a, 0x04, 0x04, 0x08, + 0x02, 0x03, 0x12, 0x03, 0x3f, 0x02, 0x12, 0x1a, 0x12, 0x20, 0x4d, 0x61, 0x78, 0x20, 0x70, 0x61, + 0x67, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x08, 0x02, 0x03, 0x05, 0x12, 0x03, 0x3f, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x03, 0x01, 0x12, 0x03, 0x3f, 0x08, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x03, 0x03, + 0x12, 0x03, 0x3f, 0x10, 0x11, 0x0a, 0xac, 0x01, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x04, 0x12, 0x03, + 0x41, 0x02, 0x13, 0x1a, 0x9e, 0x01, 0x20, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x61, + 0x72, 0x65, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, + 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, + 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x04, 0x05, 0x12, 0x03, 0x41, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x04, 0x01, 0x12, 0x03, 0x41, 0x09, 0x0e, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x04, 0x03, 0x12, 0x03, 0x41, 0x11, 0x12, 0x0a, 0x8b, + 0x03, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x05, 0x12, 0x03, 0x46, 0x02, 0x2d, 0x1a, 0xfd, 0x02, 0x20, + 0x50, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, + 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, + 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x49, 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, + 0x67, 0x68, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6e, + 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x08, 0x02, 0x05, 0x06, 0x12, 0x03, 0x46, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, + 0x02, 0x05, 0x01, 0x12, 0x03, 0x46, 0x16, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x05, + 0x03, 0x12, 0x03, 0x46, 0x2b, 0x2c, 0x0a, 0xb0, 0x01, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x06, 0x12, + 0x03, 0x49, 0x02, 0x22, 0x1a, 0xa2, 0x01, 0x20, 0x49, 0x66, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, + 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x65, 0x64, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, + 0x2e, 0x20, 0x45, 0x41, 0x47, 0x45, 0x52, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x2c, + 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, + 0x29, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, + 0x49, 0x66, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x28, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x29, 0x2c, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x06, 0x05, 0x12, 0x03, 0x49, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x06, 0x01, + 0x12, 0x03, 0x49, 0x07, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x06, 0x03, 0x12, 0x03, + 0x49, 0x20, 0x21, 0x0a, 0x7a, 0x0a, 0x02, 0x04, 0x09, 0x12, 0x04, 0x4d, 0x00, 0x56, 0x01, 0x1a, + 0x6e, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x03, 0x4d, 0x08, 0x1b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, + 0x09, 0x02, 0x00, 0x12, 0x03, 0x4e, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, + 0x04, 0x12, 0x03, 0x4e, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x4e, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4e, + 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4e, 0x1c, 0x1d, + 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x01, 0x12, 0x03, 0x50, 0x02, 0x13, 0x1a, 0x32, 0x20, + 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, + 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x05, 0x12, 0x03, 0x50, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x01, 0x12, 0x03, 0x50, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x09, 0x02, 0x01, 0x03, 0x12, 0x03, 0x50, 0x11, 0x12, 0x0a, 0x8b, 0x03, 0x0a, 0x04, + 0x04, 0x09, 0x02, 0x02, 0x12, 0x03, 0x55, 0x02, 0x2d, 0x1a, 0xfd, 0x02, 0x20, 0x50, 0x65, 0x72, + 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x20, + 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, + 0x0a, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x66, + 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x75, 0x73, + 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x49, 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, + 0x74, 0x6f, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, + 0x6e, 0x65, 0x78, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, + 0x02, 0x06, 0x12, 0x03, 0x55, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x01, + 0x12, 0x03, 0x55, 0x16, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x02, 0x03, 0x12, 0x03, + 0x55, 0x2b, 0x2c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xea, 0x0c, 0x0a, 0x1d, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, + 0x1e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x90, 0x05, + 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x79, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, - 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x12, 0x88, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x66, 0x6c, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x12, 0x88, 0x01, 0x0a, 0x0c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x1a, 0x1e, - 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7c, - 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x85, 0x01, 0x0a, - 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x25, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x1a, 0x1e, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x7c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x12, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x2e, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x73, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x42, 0xba, 0x01, 0x0a, 0x14, 0x63, 0x6f, - 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x42, 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0xa2, 0x02, 0x03, 0x46, 0x53, 0x58, 0xaa, 0x02, 0x10, - 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4a, 0xa0, 0x05, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x1f, - 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, - 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x28, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x26, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x07, 0x00, 0x4b, - 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x09, 0x00, 0x1f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, - 0x06, 0x00, 0x01, 0x12, 0x03, 0x09, 0x08, 0x15, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, - 0x12, 0x04, 0x0a, 0x02, 0x0f, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x0a, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0a, - 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0a, 0x31, 0x45, - 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x04, 0x12, 0x04, 0x0b, 0x04, 0x0e, 0x06, 0x0a, - 0x11, 0x0a, 0x09, 0x06, 0x00, 0x02, 0x00, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x12, 0x04, 0x0b, 0x04, - 0x0e, 0x06, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x00, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x04, - 0x12, 0x03, 0x0c, 0x06, 0x1d, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x00, 0x04, 0xb0, 0xca, - 0xbc, 0x22, 0x07, 0x12, 0x03, 0x0d, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, - 0x12, 0x04, 0x10, 0x02, 0x15, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x10, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x10, - 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x10, 0x31, 0x45, - 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x04, 0x12, 0x04, 0x11, 0x04, 0x14, 0x06, 0x0a, - 0x11, 0x0a, 0x09, 0x06, 0x00, 0x02, 0x01, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x12, 0x04, 0x11, 0x04, - 0x14, 0x06, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x01, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x03, - 0x12, 0x03, 0x12, 0x06, 0x2b, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x01, 0x04, 0xb0, 0xca, - 0xbc, 0x22, 0x07, 0x12, 0x03, 0x13, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, - 0x12, 0x04, 0x16, 0x02, 0x18, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, - 0x03, 0x16, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x16, - 0x10, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x16, 0x2b, 0x3c, - 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x17, 0x04, 0x47, 0x0a, 0x10, - 0x0a, 0x09, 0x06, 0x00, 0x02, 0x02, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x12, 0x03, 0x17, 0x04, 0x47, - 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x02, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x02, 0x12, 0x03, - 0x17, 0x20, 0x45, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x04, 0x19, 0x02, 0x1b, - 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x19, 0x06, 0x12, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x19, 0x13, 0x26, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x19, 0x31, 0x45, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x1a, 0x04, 0x4a, 0x0a, 0x10, 0x0a, 0x09, 0x06, 0x00, 0x02, - 0x03, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x12, 0x03, 0x1a, 0x04, 0x4a, 0x0a, 0x11, 0x0a, 0x0a, 0x06, - 0x00, 0x02, 0x03, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x05, 0x12, 0x03, 0x1a, 0x20, 0x48, 0x0a, 0x0c, - 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, 0x12, 0x04, 0x1c, 0x02, 0x1e, 0x03, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x1c, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x04, 0x02, 0x12, 0x03, 0x1c, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, - 0x03, 0x12, 0x03, 0x1c, 0x2f, 0x42, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x04, 0x12, - 0x03, 0x1d, 0x04, 0x38, 0x0a, 0x10, 0x0a, 0x09, 0x06, 0x00, 0x02, 0x04, 0x04, 0xb0, 0xca, 0xbc, - 0x22, 0x12, 0x03, 0x1d, 0x04, 0x38, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x04, 0x04, 0xb0, - 0xca, 0xbc, 0x22, 0x02, 0x12, 0x03, 0x1d, 0x20, 0x36, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, + 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x73, 0x0a, 0x0b, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, + 0x0f, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x42, 0xba, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0xa2, 0x02, + 0x03, 0x46, 0x53, 0x58, 0xaa, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0xca, 0x02, 0x10, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0xe2, 0x02, 0x1c, 0x46, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x46, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4a, 0xa0, 0x05, + 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x1f, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, + 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x19, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x28, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, + 0x00, 0x26, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x09, 0x0a, 0x02, + 0x08, 0x0b, 0x12, 0x03, 0x07, 0x00, 0x4b, 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x09, + 0x00, 0x1f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x09, 0x08, 0x15, 0x0a, + 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x04, 0x0a, 0x02, 0x0f, 0x03, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0a, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x0a, 0x31, 0x45, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x04, + 0x12, 0x04, 0x0b, 0x04, 0x0e, 0x06, 0x0a, 0x11, 0x0a, 0x09, 0x06, 0x00, 0x02, 0x00, 0x04, 0xb0, + 0xca, 0xbc, 0x22, 0x12, 0x04, 0x0b, 0x04, 0x0e, 0x06, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, + 0x00, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x04, 0x12, 0x03, 0x0c, 0x06, 0x1d, 0x0a, 0x11, 0x0a, 0x0a, + 0x06, 0x00, 0x02, 0x00, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x07, 0x12, 0x03, 0x0d, 0x06, 0x0f, 0x0a, + 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x04, 0x10, 0x02, 0x15, 0x03, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x10, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x10, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x10, 0x31, 0x45, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x04, + 0x12, 0x04, 0x11, 0x04, 0x14, 0x06, 0x0a, 0x11, 0x0a, 0x09, 0x06, 0x00, 0x02, 0x01, 0x04, 0xb0, + 0xca, 0xbc, 0x22, 0x12, 0x04, 0x11, 0x04, 0x14, 0x06, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, + 0x01, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x03, 0x12, 0x03, 0x12, 0x06, 0x2b, 0x0a, 0x11, 0x0a, 0x0a, + 0x06, 0x00, 0x02, 0x01, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x07, 0x12, 0x03, 0x13, 0x06, 0x0f, 0x0a, + 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x04, 0x16, 0x02, 0x18, 0x03, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x16, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x16, 0x10, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x02, 0x03, 0x12, 0x03, 0x16, 0x2b, 0x3c, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x04, + 0x12, 0x03, 0x17, 0x04, 0x47, 0x0a, 0x10, 0x0a, 0x09, 0x06, 0x00, 0x02, 0x02, 0x04, 0xb0, 0xca, + 0xbc, 0x22, 0x12, 0x03, 0x17, 0x04, 0x47, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x02, 0x04, + 0xb0, 0xca, 0xbc, 0x22, 0x02, 0x12, 0x03, 0x17, 0x20, 0x45, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, + 0x02, 0x03, 0x12, 0x04, 0x19, 0x02, 0x1b, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, + 0x01, 0x12, 0x03, 0x19, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, + 0x03, 0x19, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x19, + 0x31, 0x45, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x1a, 0x04, 0x4a, + 0x0a, 0x10, 0x0a, 0x09, 0x06, 0x00, 0x02, 0x03, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x12, 0x03, 0x1a, + 0x04, 0x4a, 0x0a, 0x11, 0x0a, 0x0a, 0x06, 0x00, 0x02, 0x03, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x05, + 0x12, 0x03, 0x1a, 0x20, 0x48, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, 0x12, 0x04, 0x1c, + 0x02, 0x1e, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x1c, 0x06, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x1c, 0x12, 0x24, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x1c, 0x2f, 0x42, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x04, 0x04, 0x12, 0x03, 0x1d, 0x04, 0x38, 0x0a, 0x10, 0x0a, 0x09, 0x06, + 0x00, 0x02, 0x04, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x12, 0x03, 0x1d, 0x04, 0x38, 0x0a, 0x11, 0x0a, + 0x0a, 0x06, 0x00, 0x02, 0x04, 0x04, 0xb0, 0xca, 0xbc, 0x22, 0x02, 0x12, 0x03, 0x1d, 0x20, 0x36, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, ]; include!("flyteidl2.secret.tonic.rs"); // @@protoc_insertion_point(module) \ No newline at end of file diff --git a/gen/rust/src/flyteidl2.task.rs b/gen/rust/src/flyteidl2.task.rs index 8b0377a36c..800596925c 100644 --- a/gen/rust/src/flyteidl2.task.rs +++ b/gen/rust/src/flyteidl2.task.rs @@ -89,6 +89,54 @@ pub struct RunSpec { /// CacheConfig contains configurations that influence the behavior of cache reads and writes #[prost(message, optional, tag="9")] pub cache_config: ::core::option::Option, + /// Optionally, you can send a notification when your run completes. + #[prost(oneof="run_spec::NotificationSettings", tags="10, 11")] + pub notification_settings: ::core::option::Option, +} +/// Nested message and enum types in `RunSpec`. +pub mod run_spec { + /// Optionally, you can send a notification when your run completes. + #[pyo3::pyclass(dict, get_all, set_all)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum NotificationSettings { + /// either refer to a previously stored notification rule + #[prost(string, tag="10")] + NotificationRuleName(::prost::alloc::string::String), + /// either define an inline one-off rule + #[prost(message, tag="11")] + NotificationRules(super::InlineRuleList), + } +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InlineRuleList { + #[prost(message, repeated, tag="1")] + pub rules: ::prost::alloc::vec::Vec, +} +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InlineRule { + #[prost(enumeration="super::common::ActionPhase", repeated, packed="false", tag="1")] + pub on_phases: ::prost::alloc::vec::Vec, + #[prost(oneof="inline_rule::Delivery", tags="2, 3")] + pub delivery: ::core::option::Option, +} +/// Nested message and enum types in `InlineRule`. +pub mod inline_rule { + #[pyo3::pyclass(dict, get_all, set_all)] + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Delivery { + /// (run org + delivery_config_name) will be used as a delivery config id + #[prost(string, tag="2")] + DeliveryConfigName(::prost::alloc::string::String), + /// template can only have fields defined in flyteidl2.notification.RunCompletedNotificationTemplateData + #[prost(message, tag="3")] + DeliveryTemplate(super::super::notification::DeliveryConfigTemplate), + } } #[pyo3::pyclass(dict, get_all, set_all)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] @@ -732,105 +780,145 @@ pub mod list_versions_response { } /// Encoded file descriptor set for the `flyteidl2.task` package pub const FILE_DESCRIPTOR_SET: &[u8] = &[ - 0x0a, 0x98, 0x2b, 0x0a, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, + 0x0a, 0xc8, 0x38, 0x0a, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x72, 0x75, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x1a, 0x1d, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6c, 0x69, - 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7f, 0x0a, 0x06, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2e, 0x56, 0x61, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x1a, 0x1b, 0x62, + 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x68, 0x61, + 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x7f, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x3f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x89, 0x01, 0x0a, - 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x39, 0x0a, - 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x04, 0x45, 0x6e, 0x76, 0x73, - 0x12, 0x34, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x0e, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x61, 0x77, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x22, 0x81, 0x04, 0x0a, 0x07, 0x52, 0x75, - 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x45, 0x6e, 0x76, 0x73, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x40, - 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x12, 0x2b, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x6f, - 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x10, 0x72, 0x61, 0x77, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, - 0x73, 0x6b, 0x2e, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x0e, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x12, 0x4a, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0f, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, - 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x0b, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2a, 0x7c, 0x0a, - 0x10, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, - 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, - 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x47, 0x4c, 0x4f, 0x42, - 0x41, 0x4c, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, - 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, - 0x43, 0x54, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x42, 0xab, 0x01, 0x0a, 0x12, - 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, - 0x73, 0x6b, 0x42, 0x08, 0x52, 0x75, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, - 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, - 0x73, 0x6b, 0xa2, 0x02, 0x03, 0x46, 0x54, 0x58, 0xaa, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0xca, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0xe2, 0x02, 0x1a, 0x46, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x54, 0x61, 0x73, 0x6b, 0x4a, 0xc7, 0x1f, 0x0a, 0x06, 0x12, 0x04, - 0x00, 0x00, 0x5f, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, - 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x17, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, - 0x04, 0x00, 0x27, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x27, 0x0a, 0x09, - 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x28, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, - 0x08, 0x00, 0x49, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x49, 0x0a, 0xd1, - 0x01, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0d, 0x00, 0x10, 0x01, 0x1a, 0xc4, 0x01, 0x20, 0x4c, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3c, 0x0a, 0x04, + 0x45, 0x6e, 0x76, 0x73, 0x12, 0x34, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, + 0x69, 0x72, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x0e, 0x52, 0x61, + 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, + 0x72, 0x61, 0x77, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6f, + 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x4e, 0x0a, + 0x12, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x10, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x22, 0xa3, 0x05, + 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x45, 0x6e, 0x76, 0x73, 0x52, 0x04, 0x65, 0x6e, + 0x76, 0x73, 0x12, 0x40, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, + 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, + 0x69, 0x62, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x0f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x0e, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x10, 0x72, + 0x61, 0x77, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x0e, 0x72, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x36, 0x0a, 0x16, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x14, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x42, 0x17, 0x0a, 0x15, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x22, 0x4c, 0x0a, 0x0e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, 0x65, + 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, + 0x73, 0x22, 0x87, 0x02, 0x0a, 0x0a, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x75, 0x6c, 0x65, + 0x12, 0x53, 0x0a, 0x09, 0x6f, 0x6e, 0x5f, 0x70, 0x68, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x68, 0x61, + 0x73, 0x65, 0x42, 0x17, 0xba, 0x48, 0x14, 0x92, 0x01, 0x11, 0x08, 0x01, 0x18, 0x01, 0x22, 0x0b, + 0x82, 0x01, 0x08, 0x18, 0x05, 0x18, 0x06, 0x18, 0x07, 0x18, 0x08, 0x52, 0x08, 0x6f, 0x6e, 0x50, + 0x68, 0x61, 0x73, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, + 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5d, 0x0a, 0x11, 0x64, 0x65, 0x6c, + 0x69, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, + 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x11, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x69, + 0x76, 0x65, 0x72, 0x79, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x2a, 0x7c, 0x0a, 0x10, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, + 0x22, 0x0a, 0x1e, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, + 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, + 0x4b, 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, + 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, + 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x42, 0xab, 0x01, 0x0a, 0x12, 0x63, 0x6f, + 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, + 0x42, 0x08, 0x52, 0x75, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, + 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, + 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, + 0xa2, 0x02, 0x03, 0x46, 0x54, 0x58, 0xaa, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0xca, 0x02, 0x0e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0xe2, 0x02, 0x1a, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x54, 0x61, 0x73, 0x6b, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x3a, 0x3a, 0x54, 0x61, 0x73, 0x6b, 0x4a, 0x99, 0x28, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, + 0x88, 0x01, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, + 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x17, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, + 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x26, 0x0a, 0x09, 0x0a, + 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x27, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, + 0x07, 0x00, 0x27, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x04, 0x12, 0x03, 0x08, 0x00, 0x31, 0x0a, 0x09, + 0x0a, 0x02, 0x03, 0x05, 0x12, 0x03, 0x09, 0x00, 0x28, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, + 0x0b, 0x00, 0x49, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x0b, 0x00, 0x49, 0x0a, 0xd1, + 0x01, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x10, 0x00, 0x13, 0x01, 0x1a, 0xc4, 0x01, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, @@ -843,16 +931,16 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x08, 0x0e, 0x0a, 0x4c, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0f, 0x02, 0x21, 0x1a, 0x3f, 0x20, 0x4d, 0x61, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x10, 0x08, 0x0e, 0x0a, 0x4c, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x12, 0x02, 0x21, 0x1a, 0x3f, 0x20, 0x4d, 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0f, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x16, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, - 0x03, 0x12, 0x03, 0x0f, 0x1f, 0x20, 0x0a, 0xdb, 0x01, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x15, - 0x00, 0x18, 0x01, 0x1a, 0xce, 0x01, 0x20, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x12, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x12, 0x16, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x12, 0x1f, 0x20, 0x0a, 0xdb, 0x01, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x18, + 0x00, 0x1b, 0x01, 0x1a, 0xce, 0x01, 0x20, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, @@ -865,16 +953,16 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x15, 0x08, 0x13, - 0x0a, 0x51, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x17, 0x02, 0x21, 0x1a, 0x44, 0x20, + 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x18, 0x08, 0x13, + 0x0a, 0x51, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x1a, 0x02, 0x21, 0x1a, 0x44, 0x20, 0x4d, 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x17, 0x02, - 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x17, 0x16, 0x1c, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x17, 0x1f, 0x20, 0x0a, 0xef, 0x01, - 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x1d, 0x00, 0x20, 0x01, 0x1a, 0xe2, 0x01, 0x20, 0x45, 0x6e, + 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1a, 0x02, + 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1a, 0x16, 0x1c, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1a, 0x1f, 0x20, 0x0a, 0xef, 0x01, + 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x20, 0x00, 0x23, 0x01, 0x1a, 0xe2, 0x01, 0x20, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, @@ -889,30 +977,30 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x65, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x1d, 0x08, 0x0c, 0x0a, 0x5b, 0x0a, 0x04, 0x04, - 0x02, 0x02, 0x00, 0x12, 0x03, 0x1f, 0x02, 0x32, 0x1a, 0x4e, 0x20, 0x4d, 0x61, 0x70, 0x20, 0x6f, + 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x20, 0x08, 0x0c, 0x0a, 0x5b, 0x0a, 0x04, 0x04, + 0x02, 0x02, 0x00, 0x12, 0x03, 0x22, 0x02, 0x32, 0x1a, 0x4e, 0x20, 0x4d, 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, - 0x04, 0x12, 0x03, 0x1f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x1f, 0x0b, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1f, - 0x27, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1f, 0x30, 0x31, - 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x22, 0x00, 0x26, 0x01, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x03, 0x01, 0x12, 0x03, 0x22, 0x08, 0x16, 0x0a, 0x76, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, - 0x12, 0x03, 0x25, 0x02, 0x1d, 0x1a, 0x69, 0x20, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x66, + 0x04, 0x12, 0x03, 0x22, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x22, 0x0b, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x22, + 0x27, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x22, 0x30, 0x31, + 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x25, 0x00, 0x29, 0x01, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x03, 0x01, 0x12, 0x03, 0x25, 0x08, 0x16, 0x0a, 0x76, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, + 0x12, 0x03, 0x28, 0x02, 0x1d, 0x1a, 0x69, 0x20, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x0a, 0x20, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x73, 0x33, 0x3a, 0x2f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x33, 0x3a, 0x2f, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x25, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x25, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x25, 0x1b, 0x1c, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, - 0x12, 0x04, 0x28, 0x00, 0x36, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x28, - 0x05, 0x15, 0x0a, 0x89, 0x01, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x2b, 0x02, 0x25, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x28, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x28, 0x1b, 0x1c, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, + 0x12, 0x04, 0x2b, 0x00, 0x39, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x2b, + 0x05, 0x15, 0x0a, 0x89, 0x01, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x2e, 0x02, 0x25, 0x1a, 0x7c, 0x20, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x63, 0x61, 0x63, 0x68, @@ -921,9 +1009,9 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x0a, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x29, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2b, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, - 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x2b, 0x23, 0x24, 0x0a, 0xc0, 0x02, 0x0a, 0x04, 0x05, - 0x00, 0x02, 0x01, 0x12, 0x03, 0x30, 0x02, 0x20, 0x1a, 0xb2, 0x02, 0x20, 0x43, 0x41, 0x43, 0x48, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2e, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x2e, 0x23, 0x24, 0x0a, 0xc0, 0x02, 0x0a, 0x04, 0x05, + 0x00, 0x02, 0x01, 0x12, 0x03, 0x33, 0x02, 0x20, 0x1a, 0xb2, 0x02, 0x20, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x73, 0x20, 0x74, 0x6f, @@ -943,9 +1031,9 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2e, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x69, 0x74, 0x20, 0x72, 0x69, 0x73, 0x6b, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x30, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, - 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x30, 0x1e, 0x1f, 0x0a, 0xc6, 0x02, 0x0a, 0x04, 0x05, 0x00, - 0x02, 0x02, 0x12, 0x03, 0x35, 0x02, 0x28, 0x1a, 0xb8, 0x02, 0x20, 0x43, 0x41, 0x43, 0x48, 0x45, + 0x05, 0x05, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x33, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x33, 0x1e, 0x1f, 0x0a, 0xc6, 0x02, 0x0a, 0x04, 0x05, 0x00, + 0x02, 0x02, 0x12, 0x03, 0x38, 0x02, 0x28, 0x1a, 0xb8, 0x02, 0x20, 0x43, 0x41, 0x43, 0x48, 0x45, 0x5f, 0x4c, 0x4f, 0x4f, 0x4b, 0x55, 0x50, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x73, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x6f, @@ -965,25 +1053,25 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x28, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2d, 0x77, 0x69, 0x64, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x29, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x35, 0x02, 0x23, - 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x35, 0x26, 0x27, 0x0a, 0x67, - 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x39, 0x00, 0x40, 0x01, 0x1a, 0x5b, 0x20, 0x43, 0x61, 0x63, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x38, 0x02, 0x23, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x38, 0x26, 0x27, 0x0a, 0x67, + 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x3c, 0x00, 0x43, 0x01, 0x1a, 0x5b, 0x20, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, - 0x39, 0x08, 0x13, 0x0a, 0x58, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x3b, 0x02, 0x1b, + 0x3c, 0x08, 0x13, 0x0a, 0x58, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x3e, 0x02, 0x1b, 0x1a, 0x4b, 0x20, 0x49, 0x66, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3b, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x3b, 0x07, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, - 0x00, 0x03, 0x12, 0x03, 0x3b, 0x19, 0x1a, 0x0a, 0xb5, 0x01, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, - 0x12, 0x03, 0x3f, 0x02, 0x2a, 0x1a, 0xa7, 0x01, 0x20, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, + 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3e, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x3e, 0x07, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x3e, 0x19, 0x1a, 0x0a, 0xb5, 0x01, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, + 0x12, 0x03, 0x42, 0x02, 0x2a, 0x1a, 0xa7, 0x01, 0x20, 0x43, 0x61, 0x63, 0x68, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x20, 0x49, 0x66, 0x20, @@ -994,37 +1082,37 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x29, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3f, 0x02, 0x12, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3f, 0x13, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3f, 0x28, 0x29, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, - 0x04, 0x42, 0x00, 0x5f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x42, 0x08, - 0x0f, 0x0a, 0x2a, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x44, 0x02, 0x14, 0x1a, 0x1d, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x06, 0x12, 0x03, 0x42, 0x02, 0x12, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x42, 0x13, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x42, 0x28, 0x29, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, + 0x04, 0x45, 0x00, 0x69, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x45, 0x08, + 0x0f, 0x0a, 0x2a, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x47, 0x02, 0x14, 0x1a, 0x1d, 0x20, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x44, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x44, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, - 0x00, 0x03, 0x12, 0x03, 0x44, 0x12, 0x13, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, - 0x03, 0x47, 0x02, 0x1e, 0x1a, 0x22, 0x20, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x47, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x47, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x47, 0x12, 0x13, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, + 0x03, 0x4a, 0x02, 0x1e, 0x1a, 0x22, 0x20, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, - 0x06, 0x12, 0x03, 0x47, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, - 0x03, 0x47, 0x0e, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x47, - 0x1c, 0x1d, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x02, 0x12, 0x03, 0x4a, 0x02, 0x10, 0x1a, + 0x06, 0x12, 0x03, 0x4a, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x4a, 0x0e, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, 0x4a, + 0x1c, 0x1d, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x02, 0x12, 0x03, 0x4d, 0x02, 0x10, 0x1a, 0x1b, 0x20, 0x45, 0x6e, 0x76, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x05, 0x02, 0x02, 0x06, 0x12, 0x03, 0x4a, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, - 0x02, 0x02, 0x01, 0x12, 0x03, 0x4a, 0x07, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, - 0x03, 0x12, 0x03, 0x4a, 0x0e, 0x0f, 0x0a, 0x6d, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x03, 0x12, 0x03, - 0x4d, 0x02, 0x2e, 0x1a, 0x60, 0x20, 0x45, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x6f, + 0x04, 0x05, 0x02, 0x02, 0x06, 0x12, 0x03, 0x4d, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x4d, 0x07, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x02, + 0x03, 0x12, 0x03, 0x4d, 0x0e, 0x0f, 0x0a, 0x6d, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x03, 0x12, 0x03, + 0x50, 0x02, 0x2e, 0x1a, 0x60, 0x20, 0x45, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x06, 0x12, 0x03, - 0x4d, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x01, 0x12, 0x03, 0x4d, 0x1c, - 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x03, 0x12, 0x03, 0x4d, 0x2c, 0x2d, 0x0a, - 0x94, 0x01, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x04, 0x12, 0x03, 0x51, 0x02, 0x2f, 0x1a, 0x86, 0x01, + 0x50, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x01, 0x12, 0x03, 0x50, 0x1c, + 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x03, 0x03, 0x12, 0x03, 0x50, 0x2c, 0x2d, 0x0a, + 0x94, 0x01, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x04, 0x12, 0x03, 0x54, 0x02, 0x2f, 0x1a, 0x86, 0x01, 0x20, 0x49, 0x66, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x76, 0x65, @@ -1034,11 +1122,11 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x73, 0x65, 0x20, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x05, 0x12, - 0x03, 0x51, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x01, 0x12, 0x03, 0x51, - 0x07, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x03, 0x12, 0x03, 0x51, 0x19, 0x1a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x08, 0x12, 0x03, 0x51, 0x1b, 0x2e, 0x0a, 0x0d, - 0x0a, 0x06, 0x04, 0x05, 0x02, 0x04, 0x08, 0x03, 0x12, 0x03, 0x51, 0x1c, 0x2d, 0x0a, 0xa2, 0x01, - 0x0a, 0x04, 0x04, 0x05, 0x02, 0x05, 0x12, 0x03, 0x55, 0x02, 0x15, 0x1a, 0x94, 0x01, 0x20, 0x74, + 0x03, 0x54, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x01, 0x12, 0x03, 0x54, + 0x07, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x03, 0x12, 0x03, 0x54, 0x19, 0x1a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x04, 0x08, 0x12, 0x03, 0x54, 0x1b, 0x2e, 0x0a, 0x0d, + 0x0a, 0x06, 0x04, 0x05, 0x02, 0x04, 0x08, 0x03, 0x12, 0x03, 0x54, 0x1c, 0x2d, 0x0a, 0xa2, 0x01, + 0x0a, 0x04, 0x04, 0x05, 0x02, 0x05, 0x12, 0x03, 0x58, 0x02, 0x15, 0x1a, 0x94, 0x01, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x65, @@ -1048,36 +1136,103 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x75, 0x6c, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x64, 0x65, 0x6e, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x05, 0x12, 0x03, 0x55, 0x02, 0x08, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x01, 0x12, 0x03, 0x55, 0x09, 0x10, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x03, 0x12, 0x03, 0x55, 0x13, 0x14, 0x0a, 0x6e, 0x0a, 0x04, - 0x04, 0x05, 0x02, 0x06, 0x12, 0x03, 0x58, 0x02, 0x26, 0x1a, 0x61, 0x20, 0x45, 0x6e, 0x63, 0x61, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x05, 0x12, 0x03, 0x58, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x01, 0x12, 0x03, 0x58, 0x09, 0x10, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x05, 0x02, 0x05, 0x03, 0x12, 0x03, 0x58, 0x13, 0x14, 0x0a, 0x6e, 0x0a, 0x04, + 0x04, 0x05, 0x02, 0x06, 0x12, 0x03, 0x5b, 0x02, 0x26, 0x1a, 0x61, 0x20, 0x45, 0x6e, 0x63, 0x61, 0x70, 0x73, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x70, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x66, 0x66, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x20, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x2c, 0x20, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2c, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2c, 0x20, 0x65, 0x74, 0x63, 0x2e, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x05, 0x02, 0x06, 0x06, 0x12, 0x03, 0x58, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, - 0x02, 0x06, 0x01, 0x12, 0x03, 0x58, 0x11, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x06, - 0x03, 0x12, 0x03, 0x58, 0x24, 0x25, 0x0a, 0x4d, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x07, 0x12, 0x03, - 0x5b, 0x02, 0x36, 0x1a, 0x40, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, + 0x04, 0x05, 0x02, 0x06, 0x06, 0x12, 0x03, 0x5b, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x06, 0x01, 0x12, 0x03, 0x5b, 0x11, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x06, + 0x03, 0x12, 0x03, 0x5b, 0x24, 0x25, 0x0a, 0x4d, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x07, 0x12, 0x03, + 0x5e, 0x02, 0x36, 0x1a, 0x40, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x07, 0x06, 0x12, 0x03, - 0x5b, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x07, 0x01, 0x12, 0x03, 0x5b, 0x21, - 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x07, 0x03, 0x12, 0x03, 0x5b, 0x34, 0x35, 0x0a, - 0x68, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x08, 0x12, 0x03, 0x5e, 0x02, 0x1f, 0x1a, 0x5b, 0x20, 0x43, + 0x5e, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x07, 0x01, 0x12, 0x03, 0x5e, 0x21, + 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x07, 0x03, 0x12, 0x03, 0x5e, 0x34, 0x35, 0x0a, + 0x68, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x08, 0x12, 0x03, 0x61, 0x02, 0x1f, 0x1a, 0x5b, 0x20, 0x43, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x63, 0x68, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, - 0x08, 0x06, 0x12, 0x03, 0x5e, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x08, 0x01, - 0x12, 0x03, 0x5e, 0x0e, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x08, 0x03, 0x12, 0x03, - 0x5e, 0x1d, 0x1e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xe8, 0x29, 0x0a, 0x1b, + 0x08, 0x06, 0x12, 0x03, 0x61, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x08, 0x01, + 0x12, 0x03, 0x61, 0x0e, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x08, 0x03, 0x12, 0x03, + 0x61, 0x1d, 0x1e, 0x0a, 0x50, 0x0a, 0x04, 0x04, 0x05, 0x08, 0x00, 0x12, 0x04, 0x64, 0x02, 0x68, + 0x03, 0x1a, 0x42, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, + 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x08, 0x00, 0x01, 0x12, 0x03, + 0x64, 0x08, 0x1d, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x09, 0x12, 0x03, 0x65, 0x04, 0x27, + 0x22, 0x37, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x20, + 0x74, 0x6f, 0x20, 0x61, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x20, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, + 0x09, 0x05, 0x12, 0x03, 0x65, 0x04, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x09, 0x01, + 0x12, 0x03, 0x65, 0x0b, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x09, 0x03, 0x12, 0x03, + 0x65, 0x24, 0x26, 0x0a, 0x33, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x0a, 0x12, 0x03, 0x67, 0x04, 0x2b, + 0x22, 0x26, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x2d, 0x6f, + 0x66, 0x66, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x0a, + 0x06, 0x12, 0x03, 0x67, 0x04, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x0a, 0x01, 0x12, + 0x03, 0x67, 0x13, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x0a, 0x03, 0x12, 0x03, 0x67, + 0x28, 0x2a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x6b, 0x00, 0x6d, 0x01, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x6b, 0x08, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, + 0x02, 0x00, 0x12, 0x03, 0x6c, 0x02, 0x4e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x04, + 0x12, 0x03, 0x6c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, 0x03, + 0x6c, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x6c, 0x16, + 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x6c, 0x1e, 0x1f, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x08, 0x12, 0x03, 0x6c, 0x20, 0x4d, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x06, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x01, 0x12, 0x03, 0x6c, 0x21, 0x4c, 0x0a, + 0x0b, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x05, 0x6f, 0x00, 0x88, 0x01, 0x01, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x07, 0x01, 0x12, 0x03, 0x6f, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, + 0x12, 0x04, 0x70, 0x02, 0x7d, 0x05, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x04, 0x12, + 0x03, 0x70, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x03, 0x70, + 0x0b, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x70, 0x1e, 0x27, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x70, 0x2a, 0x2b, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x08, 0x12, 0x04, 0x70, 0x2c, 0x7d, 0x04, 0x0a, 0x10, 0x0a, + 0x08, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x12, 0x04, 0x70, 0x2d, 0x7d, 0x03, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x01, 0x12, 0x03, 0x71, 0x04, + 0x10, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x03, 0x12, 0x03, + 0x72, 0x04, 0x10, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x04, + 0x12, 0x04, 0x73, 0x04, 0x7c, 0x05, 0x0a, 0x12, 0x0a, 0x0a, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x12, 0x04, 0x10, 0x12, 0x04, 0x74, 0x06, 0x7b, 0x07, 0x0a, 0x13, 0x0a, 0x0c, 0x04, 0x07, + 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x04, 0x10, 0x03, 0x00, 0x12, 0x03, 0x76, 0x0a, 0x0b, 0x0a, + 0x13, 0x0a, 0x0c, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x04, 0x10, 0x03, 0x01, 0x12, + 0x03, 0x77, 0x0a, 0x0b, 0x0a, 0x13, 0x0a, 0x0c, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, + 0x04, 0x10, 0x03, 0x02, 0x12, 0x03, 0x78, 0x0a, 0x0b, 0x0a, 0x13, 0x0a, 0x0c, 0x04, 0x07, 0x02, + 0x00, 0x08, 0x87, 0x09, 0x12, 0x04, 0x10, 0x03, 0x03, 0x12, 0x03, 0x79, 0x0a, 0x0b, 0x0a, 0x0d, + 0x0a, 0x04, 0x04, 0x07, 0x08, 0x00, 0x12, 0x05, 0x7f, 0x02, 0x87, 0x01, 0x03, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x07, 0x08, 0x00, 0x01, 0x12, 0x03, 0x7f, 0x08, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x07, 0x08, 0x00, 0x02, 0x12, 0x04, 0x80, 0x01, 0x04, 0x30, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x07, + 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x04, 0x80, 0x01, 0x04, 0x30, 0x0a, 0x55, 0x0a, 0x04, + 0x04, 0x07, 0x02, 0x01, 0x12, 0x04, 0x83, 0x01, 0x04, 0x24, 0x1a, 0x47, 0x20, 0x28, 0x72, 0x75, + 0x6e, 0x20, 0x6f, 0x72, 0x67, 0x20, 0x2b, 0x20, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x20, 0x77, 0x69, + 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, + 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, + 0x69, 0x64, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x05, 0x12, 0x04, 0x83, 0x01, + 0x04, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x01, 0x12, 0x04, 0x83, 0x01, 0x0b, + 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, 0x04, 0x83, 0x01, 0x22, 0x23, + 0x0a, 0x74, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x02, 0x12, 0x04, 0x86, 0x01, 0x04, 0x48, 0x1a, 0x66, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6f, 0x6e, + 0x6c, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x06, 0x12, + 0x04, 0x86, 0x01, 0x04, 0x31, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x01, 0x12, 0x04, + 0x86, 0x01, 0x32, 0x43, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x03, 0x12, 0x04, 0x86, + 0x01, 0x46, 0x47, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xe8, 0x29, 0x0a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x1a, 0x1b, 0x62, 0x75, 0x66, diff --git a/gen/rust/src/flyteidl2.workflow.rs b/gen/rust/src/flyteidl2.workflow.rs index b1e13cfdf2..5458b6483d 100644 --- a/gen/rust/src/flyteidl2.workflow.rs +++ b/gen/rust/src/flyteidl2.workflow.rs @@ -798,6 +798,25 @@ pub struct ActionUpdate { #[prost(string, tag="4")] pub output_uri: ::prost::alloc::string::String, } +// ============================================================================ +// Record +// ============================================================================ + +/// RecordRequest is the request message for recording the events for the actions. +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct RecordRequest { + /// The events to record. + #[prost(message, repeated, tag="1")] + pub events: ::prost::alloc::vec::Vec, +} +/// RecordResponse is the response message recording an event for an action. +#[pyo3::pyclass(dict, get_all, set_all)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct RecordResponse { +} /// Request message for recording an action. #[pyo3::pyclass(dict, get_all, set_all)] #[allow(clippy::derive_partial_eq_without_eq)] @@ -3469,2203 +3488,2288 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = &[ 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x05, 0x12, 0x03, 0x69, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x01, 0x12, 0x03, 0x69, 0x09, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x03, - 0x12, 0x03, 0x69, 0x16, 0x17, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xa7, 0x43, + 0x12, 0x03, 0x69, 0x16, 0x17, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xcb, 0x0a, 0x0a, 0x2d, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x75, - 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x78, + 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, + 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x52, 0x0a, 0x0d, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x10, 0x0a, + 0x0e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0x67, 0x0a, 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, + 0x21, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd2, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x42, 0x17, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0x93, 0x06, + 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x1a, 0x19, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, + 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, + 0x00, 0x31, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x07, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, + 0x08, 0x0b, 0x12, 0x03, 0x07, 0x00, 0x4d, 0x0a, 0x70, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0a, + 0x00, 0x0d, 0x01, 0x1a, 0x64, 0x20, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x52, 0x75, 0x6e, 0x20, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x65, 0x64, 0x69, 0x73, + 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, + 0x12, 0x03, 0x0a, 0x08, 0x1a, 0x0a, 0x2f, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0c, + 0x02, 0x37, 0x1a, 0x22, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x0c, 0x06, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0c, + 0x0d, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x25, 0x33, + 0x0a, 0x83, 0x02, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x14, 0x00, 0x17, 0x01, 0x1a, 0x50, 0x20, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x69, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x32, + 0xa4, 0x01, 0x20, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x0a, + 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x0a, 0x20, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x14, + 0x08, 0x15, 0x0a, 0x24, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x16, 0x02, 0x63, 0x1a, + 0x17, 0x20, 0x54, 0x68, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x04, 0x12, 0x03, 0x16, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x16, 0x0b, 0x29, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x16, + 0x2a, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x16, 0x33, 0x34, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x16, 0x35, 0x62, 0x0a, 0x10, + 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x12, 0x01, 0x12, 0x03, 0x16, 0x36, 0x61, + 0x0a, 0x55, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x03, 0x1a, 0x00, 0x19, 0x1a, 0x4a, 0x20, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, + 0x1a, 0x08, 0x16, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xa7, 0x43, 0x0a, 0x2d, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x75, 0x6e, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xff, 0x02, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x55, 0x72, 0x69, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x61, 0x73, + 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x73, + 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, + 0x37, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x93, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, + 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5e, 0x0a, 0x19, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x1a, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xa6, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x55, 0x72, 0x69, 0x12, 0x34, 0x0a, 0x04, 0x74, - 0x61, 0x73, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, - 0x61, 0x73, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x74, 0x61, 0x73, - 0x6b, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x06, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x93, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5e, 0x0a, - 0x19, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, - 0x1a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x1a, 0x55, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x20, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x22, 0x59, 0x0a, 0x18, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x05, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x06, 0xba, 0x48, - 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x98, 0x01, 0x0a, 0x19, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5c, 0x0a, 0x19, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0x50, 0x0a, 0x1a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, - 0x8a, 0x01, 0x0a, 0x1f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x32, 0xfb, 0x05, 0x0a, - 0x12, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x63, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x59, + 0x0a, 0x18, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x05, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x98, 0x01, 0x0a, 0x19, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x5c, 0x0a, 0x19, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0x50, 0x0a, 0x1a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x07, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x8a, 0x01, + 0x0a, 0x1f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x66, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x32, 0xfb, 0x05, 0x0a, 0x12, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x63, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x12, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x12, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2d, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, - 0x01, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x18, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x33, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, + 0x01, 0x12, 0x75, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x66, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x33, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x12, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x12, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x88, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x32, 0x2e, 0x66, 0x6c, + 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x33, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0xd2, 0x01, 0x0a, 0x16, 0x63, - 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x17, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, - 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, - 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, - 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, - 0x9d, 0x2a, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, 0x9f, 0x01, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, - 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, - 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, - 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x31, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, 0x21, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x09, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x09, 0x00, 0x4d, - 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0b, 0x00, 0x1d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, - 0x06, 0x00, 0x01, 0x12, 0x03, 0x0b, 0x08, 0x1a, 0x0a, 0x23, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, - 0x12, 0x03, 0x0d, 0x02, 0x49, 0x1a, 0x16, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, - 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0d, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, - 0x00, 0x03, 0x12, 0x03, 0x0d, 0x31, 0x45, 0x0a, 0x3e, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, - 0x03, 0x10, 0x02, 0x69, 0x1a, 0x31, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, 0x20, - 0x6e, 0x65, 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, - 0x12, 0x03, 0x10, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, - 0x10, 0x19, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x10, 0x20, - 0x39, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x10, 0x44, 0x4a, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x10, 0x4b, 0x65, 0x0a, 0x2e, 0x0a, - 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x03, 0x13, 0x02, 0x5b, 0x1a, 0x21, 0x20, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x13, 0x19, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, - 0x02, 0x03, 0x12, 0x03, 0x13, 0x3d, 0x57, 0x0a, 0x49, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, - 0x03, 0x16, 0x02, 0x7b, 0x1a, 0x3c, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x16, 0x06, 0x1e, - 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x16, 0x1f, 0x25, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x16, 0x26, 0x45, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x16, 0x50, 0x56, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x03, 0x03, 0x12, 0x03, 0x16, 0x57, 0x77, 0x0a, 0x34, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, - 0x12, 0x03, 0x19, 0x02, 0x5b, 0x1a, 0x27, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, - 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x19, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x19, 0x19, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x04, 0x03, 0x12, 0x03, 0x19, 0x3d, 0x57, 0x0a, 0x44, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x05, - 0x12, 0x03, 0x1c, 0x02, 0x78, 0x1a, 0x37, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, - 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1c, 0x06, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x05, 0x05, 0x12, 0x03, 0x1c, 0x1e, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x05, 0x02, 0x12, 0x03, 0x1c, 0x25, 0x43, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, - 0x06, 0x12, 0x03, 0x1c, 0x4e, 0x54, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x03, 0x12, - 0x03, 0x1c, 0x55, 0x74, 0x0a, 0x36, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x20, 0x00, 0x37, 0x01, - 0x1a, 0x2a, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x88, 0x01, + 0x0a, 0x17, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x32, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0xd2, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x42, 0x17, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x75, 0x6e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0x9d, 0x2a, + 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, 0x9f, 0x01, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, + 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, + 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, + 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x31, 0x0a, 0x09, + 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, 0x21, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, + 0x09, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x09, 0x00, 0x4d, 0x0a, 0x0a, + 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0b, 0x00, 0x1d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, + 0x01, 0x12, 0x03, 0x0b, 0x08, 0x1a, 0x0a, 0x23, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, + 0x0d, 0x02, 0x49, 0x1a, 0x16, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x00, 0x02, 0x12, 0x03, 0x0d, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x0d, 0x31, 0x45, 0x0a, 0x3e, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x03, 0x10, + 0x02, 0x69, 0x1a, 0x31, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, 0x20, 0x6e, 0x65, + 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x10, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x10, 0x19, + 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x10, 0x20, 0x39, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x10, 0x44, 0x4a, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x10, 0x4b, 0x65, 0x0a, 0x2e, 0x0a, 0x04, 0x06, + 0x00, 0x02, 0x02, 0x12, 0x03, 0x13, 0x02, 0x5b, 0x1a, 0x21, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x02, 0x02, 0x12, 0x03, 0x13, 0x19, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, + 0x12, 0x03, 0x13, 0x3d, 0x57, 0x0a, 0x49, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x03, 0x16, + 0x02, 0x7b, 0x1a, 0x3c, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x16, 0x06, 0x1e, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x16, 0x1f, 0x25, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x16, 0x26, 0x45, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x03, 0x06, 0x12, 0x03, 0x16, 0x50, 0x56, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, + 0x03, 0x12, 0x03, 0x16, 0x57, 0x77, 0x0a, 0x34, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, 0x12, 0x03, + 0x19, 0x02, 0x5b, 0x1a, 0x27, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, 0x20, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x19, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x04, 0x02, 0x12, 0x03, 0x19, 0x19, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, + 0x03, 0x12, 0x03, 0x19, 0x3d, 0x57, 0x0a, 0x44, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x05, 0x12, 0x03, + 0x1c, 0x02, 0x78, 0x1a, 0x37, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x20, 0x61, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1c, 0x06, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x05, 0x05, 0x12, 0x03, 0x1c, 0x1e, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, + 0x02, 0x12, 0x03, 0x1c, 0x25, 0x43, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x06, 0x12, + 0x03, 0x1c, 0x4e, 0x54, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x1c, + 0x55, 0x74, 0x0a, 0x36, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x20, 0x00, 0x37, 0x01, 0x1a, 0x2a, + 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, + 0x01, 0x12, 0x03, 0x20, 0x08, 0x1b, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, + 0x22, 0x02, 0x59, 0x1a, 0x13, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x22, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x22, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x22, + 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x22, 0x32, 0x58, + 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x22, 0x33, + 0x57, 0x0a, 0x77, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x25, 0x02, 0x14, 0x1a, 0x6a, + 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, + 0x20, 0x74, 0x6f, 0x20, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6f, + 0x74, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x05, 0x12, 0x03, 0x25, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x01, 0x12, 0x03, 0x25, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, + 0x03, 0x25, 0x12, 0x13, 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x28, 0x02, + 0x13, 0x1a, 0x32, 0x20, 0x54, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, + 0x73, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, + 0x28, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x28, 0x09, + 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x28, 0x11, 0x12, 0x0a, + 0x3d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x2b, 0x02, 0x15, 0x1a, 0x30, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x2b, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x03, 0x03, 0x12, 0x03, 0x2b, 0x13, 0x14, 0x0a, 0x29, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, + 0x12, 0x03, 0x2e, 0x02, 0x17, 0x1a, 0x1c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, 0x2e, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x2e, 0x09, 0x12, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x2e, 0x15, 0x16, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, 0x30, 0x02, 0x36, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x30, 0x08, 0x0c, 0x0a, 0x80, 0x01, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x05, 0x12, 0x03, 0x33, 0x04, 0x2c, 0x1a, 0x73, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x68, + 0x61, 0x79, 0x74, 0x68, 0x61, 0x6d, 0x29, 0x3a, 0x20, 0x55, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x77, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, 0x73, + 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x0a, 0x20, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x29, 0x2e, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x33, 0x04, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x05, 0x01, 0x12, 0x03, 0x33, 0x22, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, + 0x03, 0x12, 0x03, 0x33, 0x29, 0x2b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, + 0x34, 0x04, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x06, 0x12, 0x03, 0x34, 0x04, + 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x34, 0x23, 0x28, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x34, 0x2b, 0x2d, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, 0x03, 0x35, 0x04, 0x36, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x07, 0x06, 0x12, 0x03, 0x35, 0x04, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, + 0x01, 0x12, 0x03, 0x35, 0x27, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x03, 0x12, + 0x03, 0x35, 0x33, 0x35, 0x0a, 0x37, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x3a, 0x00, 0x40, 0x01, + 0x1a, 0x2b, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x3a, 0x08, 0x1c, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x01, 0x02, + 0x00, 0x12, 0x03, 0x3c, 0x02, 0x59, 0x1a, 0x10, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x3c, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x3c, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3c, + 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, 0x03, 0x3c, 0x32, 0x58, + 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x3c, 0x33, + 0x57, 0x0a, 0x1a, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x3f, 0x02, 0x46, 0x1a, 0x0d, + 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3f, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3f, 0x14, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x3f, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x08, + 0x12, 0x03, 0x3f, 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x01, 0x08, 0x87, 0x09, + 0x19, 0x12, 0x03, 0x3f, 0x20, 0x44, 0x0a, 0x51, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x43, 0x00, + 0x46, 0x01, 0x1a, 0x45, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, + 0x12, 0x03, 0x43, 0x08, 0x21, 0x0a, 0x37, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x45, + 0x02, 0x22, 0x1a, 0x2a, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x45, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x45, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x45, 0x20, 0x21, 0x0a, 0x52, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, + 0x49, 0x00, 0x4c, 0x01, 0x1a, 0x46, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x03, 0x01, 0x12, 0x03, 0x49, 0x08, 0x22, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, + 0x12, 0x03, 0x4b, 0x02, 0x24, 0x1a, 0x2b, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x4b, 0x02, 0x16, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4b, 0x17, 0x1f, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4b, 0x22, 0x23, 0x0a, 0x35, 0x0a, 0x02, + 0x04, 0x04, 0x12, 0x04, 0x4f, 0x00, 0x55, 0x01, 0x1a, 0x29, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x4f, 0x08, 0x21, 0x0a, + 0x20, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x51, 0x02, 0x59, 0x1a, 0x13, 0x20, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x51, 0x02, 0x23, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x51, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x51, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, 0x51, 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, + 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x51, 0x33, 0x57, 0x0a, 0x2c, 0x0a, 0x04, 0x04, 0x04, + 0x02, 0x01, 0x12, 0x03, 0x54, 0x02, 0x54, 0x1a, 0x1f, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, + 0x06, 0x12, 0x03, 0x54, 0x02, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x54, 0x22, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x54, + 0x2b, 0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x08, 0x12, 0x03, 0x54, 0x2d, 0x53, + 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x54, 0x2e, + 0x52, 0x0a, 0x36, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x58, 0x00, 0x5e, 0x01, 0x1a, 0x2a, 0x20, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, + 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, + 0x12, 0x03, 0x58, 0x08, 0x22, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x5a, + 0x02, 0x59, 0x1a, 0x10, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x69, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x5a, + 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x5a, 0x24, 0x2d, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x5a, 0x30, 0x31, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x08, 0x12, 0x03, 0x5a, 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, + 0x04, 0x05, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x5a, 0x33, 0x57, 0x0a, 0x1a, 0x0a, + 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, 0x03, 0x5d, 0x02, 0x46, 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, + 0x01, 0x06, 0x12, 0x03, 0x5d, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x5d, 0x14, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x5d, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x08, 0x12, 0x03, 0x5d, 0x1f, + 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x05, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x5d, + 0x20, 0x44, 0x0a, 0x50, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x61, 0x00, 0x67, 0x01, 0x1a, 0x44, + 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, + 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, + 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x61, 0x08, 0x27, + 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x63, 0x02, 0x28, 0x1a, 0x29, 0x20, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x63, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x63, 0x1c, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x63, + 0x26, 0x27, 0x0a, 0x4c, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x66, 0x02, 0x12, 0x1a, + 0x3f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x69, 0x74, + 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x66, 0x02, 0x07, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x66, 0x08, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x66, 0x10, 0x11, 0x0a, 0x51, 0x0a, 0x02, 0x04, 0x07, + 0x12, 0x04, 0x6a, 0x00, 0x70, 0x01, 0x1a, 0x45, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x6a, 0x08, 0x28, 0x0a, 0x37, 0x0a, 0x04, 0x04, 0x07, 0x02, + 0x00, 0x12, 0x03, 0x6c, 0x02, 0x2a, 0x1a, 0x2a, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x03, 0x6c, 0x02, 0x1c, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x6c, 0x1d, 0x25, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x6c, 0x28, 0x29, 0x0a, 0x4c, 0x0a, 0x04, + 0x04, 0x07, 0x02, 0x01, 0x12, 0x03, 0x6f, 0x02, 0x12, 0x1a, 0x3f, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, + 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x01, 0x05, 0x12, 0x03, 0x6f, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, + 0x01, 0x12, 0x03, 0x6f, 0x08, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, + 0x03, 0x6f, 0x10, 0x11, 0x0a, 0x3c, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x73, 0x00, 0x76, 0x01, + 0x1a, 0x30, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, - 0x04, 0x00, 0x01, 0x12, 0x03, 0x20, 0x08, 0x1b, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, - 0x12, 0x03, 0x22, 0x02, 0x59, 0x1a, 0x13, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x22, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x22, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x22, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x22, - 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, - 0x22, 0x33, 0x57, 0x0a, 0x77, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x25, 0x02, 0x14, - 0x1a, 0x6a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x20, 0x6f, 0x66, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x20, - 0x69, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x6f, 0x6f, 0x74, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x25, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x01, 0x12, 0x03, 0x25, 0x09, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, - 0x03, 0x12, 0x03, 0x25, 0x12, 0x13, 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, - 0x28, 0x02, 0x13, 0x1a, 0x32, 0x20, 0x54, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x6c, 0x6f, - 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, - 0x12, 0x03, 0x28, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, - 0x28, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x28, 0x11, - 0x12, 0x0a, 0x3d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x2b, 0x02, 0x15, 0x1a, 0x30, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x2b, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x2b, 0x13, 0x14, 0x0a, 0x29, 0x0a, 0x04, 0x04, 0x00, - 0x02, 0x04, 0x12, 0x03, 0x2e, 0x02, 0x17, 0x1a, 0x1c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, - 0x2e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x2e, 0x09, - 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x2e, 0x15, 0x16, 0x0a, - 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, 0x30, 0x02, 0x36, 0x03, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x30, 0x08, 0x0c, 0x0a, 0x80, 0x01, 0x0a, 0x04, - 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, 0x33, 0x04, 0x2c, 0x1a, 0x73, 0x20, 0x54, 0x4f, 0x44, 0x4f, - 0x28, 0x68, 0x61, 0x79, 0x74, 0x68, 0x61, 0x6d, 0x29, 0x3a, 0x20, 0x55, 0x6e, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x77, 0x65, 0x20, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x70, 0x61, 0x74, - 0x68, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x0a, - 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x62, 0x75, 0x66, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x29, 0x2e, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x33, 0x04, 0x21, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x33, 0x22, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x05, 0x03, 0x12, 0x03, 0x33, 0x29, 0x2b, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, - 0x12, 0x03, 0x34, 0x04, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x06, 0x12, 0x03, - 0x34, 0x04, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x34, 0x23, - 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x34, 0x2b, 0x2d, 0x0a, - 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, 0x03, 0x35, 0x04, 0x36, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x07, 0x06, 0x12, 0x03, 0x35, 0x04, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x07, 0x01, 0x12, 0x03, 0x35, 0x27, 0x30, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, - 0x03, 0x12, 0x03, 0x35, 0x33, 0x35, 0x0a, 0x37, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x3a, 0x00, - 0x40, 0x01, 0x1a, 0x2b, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x3a, 0x08, 0x1c, 0x0a, 0x1d, 0x0a, 0x04, 0x04, - 0x01, 0x02, 0x00, 0x12, 0x03, 0x3c, 0x02, 0x59, 0x1a, 0x10, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x3c, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x3c, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x3c, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, 0x03, 0x3c, - 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, - 0x3c, 0x33, 0x57, 0x0a, 0x1a, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x3f, 0x02, 0x46, - 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3f, 0x02, 0x13, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3f, 0x14, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3f, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, - 0x01, 0x08, 0x12, 0x03, 0x3f, 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x01, 0x02, 0x01, 0x08, - 0x87, 0x09, 0x19, 0x12, 0x03, 0x3f, 0x20, 0x44, 0x0a, 0x51, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, - 0x43, 0x00, 0x46, 0x01, 0x1a, 0x45, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x02, 0x01, 0x12, 0x03, 0x43, 0x08, 0x21, 0x0a, 0x37, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, - 0x03, 0x45, 0x02, 0x22, 0x1a, 0x2a, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x45, 0x02, 0x15, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x45, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x45, 0x20, 0x21, 0x0a, 0x52, 0x0a, 0x02, 0x04, 0x03, - 0x12, 0x04, 0x49, 0x00, 0x4c, 0x01, 0x1a, 0x46, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x49, 0x08, 0x22, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x03, - 0x02, 0x00, 0x12, 0x03, 0x4b, 0x02, 0x24, 0x1a, 0x2b, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x4b, - 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4b, 0x17, 0x1f, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4b, 0x22, 0x23, 0x0a, 0x35, - 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x4f, 0x00, 0x55, 0x01, 0x1a, 0x29, 0x20, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x4f, 0x08, - 0x21, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x51, 0x02, 0x59, 0x1a, 0x13, - 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x51, 0x02, - 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x51, 0x24, 0x2d, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x51, 0x30, 0x31, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, 0x51, 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, 0x04, - 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x51, 0x33, 0x57, 0x0a, 0x2c, 0x0a, 0x04, - 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x54, 0x02, 0x54, 0x1a, 0x1f, 0x20, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, - 0x02, 0x01, 0x06, 0x12, 0x03, 0x54, 0x02, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, - 0x01, 0x12, 0x03, 0x54, 0x22, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, - 0x03, 0x54, 0x2b, 0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x08, 0x12, 0x03, 0x54, - 0x2d, 0x53, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, - 0x54, 0x2e, 0x52, 0x0a, 0x36, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x58, 0x00, 0x5e, 0x01, 0x1a, - 0x2a, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x05, 0x01, 0x12, 0x03, 0x58, 0x08, 0x22, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, - 0x03, 0x5a, 0x02, 0x59, 0x1a, 0x10, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x69, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x5a, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x5a, - 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x5a, 0x30, 0x31, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x08, 0x12, 0x03, 0x5a, 0x32, 0x58, 0x0a, 0x0f, - 0x0a, 0x08, 0x04, 0x05, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x5a, 0x33, 0x57, 0x0a, - 0x1a, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x01, 0x12, 0x03, 0x5d, 0x02, 0x46, 0x1a, 0x0d, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x05, 0x02, 0x01, 0x06, 0x12, 0x03, 0x5d, 0x02, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, - 0x01, 0x01, 0x12, 0x03, 0x5d, 0x14, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x03, - 0x12, 0x03, 0x5d, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x01, 0x08, 0x12, 0x03, - 0x5d, 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x05, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, - 0x03, 0x5d, 0x20, 0x44, 0x0a, 0x50, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x61, 0x00, 0x67, 0x01, - 0x1a, 0x44, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x61, - 0x08, 0x27, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x63, 0x02, 0x28, 0x1a, - 0x29, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x63, 0x02, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x63, 0x1c, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x63, 0x26, 0x27, 0x0a, 0x4c, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x66, 0x02, - 0x12, 0x1a, 0x3f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x66, 0x02, 0x07, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x66, 0x08, 0x0d, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x66, 0x10, 0x11, 0x0a, 0x51, 0x0a, 0x02, - 0x04, 0x07, 0x12, 0x04, 0x6a, 0x00, 0x70, 0x01, 0x1a, 0x45, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x6a, 0x08, 0x28, 0x0a, 0x37, 0x0a, 0x04, 0x04, - 0x07, 0x02, 0x00, 0x12, 0x03, 0x6c, 0x02, 0x2a, 0x1a, 0x2a, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x73, 0x08, 0x20, 0x0a, 0x19, + 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x75, 0x02, 0x52, 0x1a, 0x0c, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x00, 0x06, 0x12, 0x03, 0x75, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x75, 0x21, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x75, 0x29, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x08, 0x12, 0x03, 0x75, 0x2b, + 0x51, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x08, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x75, + 0x2c, 0x50, 0x0a, 0x3d, 0x0a, 0x02, 0x04, 0x09, 0x12, 0x04, 0x79, 0x00, 0x7f, 0x01, 0x1a, 0x31, + 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x03, 0x79, 0x08, 0x21, 0x0a, 0x1d, 0x0a, + 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x7b, 0x02, 0x59, 0x1a, 0x10, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x09, 0x02, 0x00, 0x06, 0x12, 0x03, 0x7b, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x7b, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x7b, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x08, 0x12, + 0x03, 0x7b, 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x09, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, + 0x12, 0x03, 0x7b, 0x33, 0x57, 0x0a, 0x1a, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x01, 0x12, 0x03, 0x7e, + 0x02, 0x46, 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x06, 0x12, 0x03, 0x7e, 0x02, 0x13, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x01, 0x12, 0x03, 0x7e, 0x14, 0x1a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x09, 0x02, 0x01, 0x03, 0x12, 0x03, 0x7e, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x09, 0x02, 0x01, 0x08, 0x12, 0x03, 0x7e, 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x09, 0x02, + 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x7e, 0x20, 0x44, 0x0a, 0x4c, 0x0a, 0x02, 0x04, 0x0a, + 0x12, 0x06, 0x82, 0x01, 0x00, 0x85, 0x01, 0x01, 0x1a, 0x3e, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0a, 0x01, 0x12, + 0x04, 0x82, 0x01, 0x08, 0x21, 0x0a, 0x1b, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x00, 0x12, 0x04, 0x84, + 0x01, 0x02, 0x5c, 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x04, 0x12, 0x04, 0x84, 0x01, 0x02, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x06, 0x12, 0x04, 0x84, 0x01, 0x0b, 0x29, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x01, 0x12, 0x04, 0x84, 0x01, 0x2a, 0x30, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x03, 0x12, 0x04, 0x84, 0x01, 0x33, 0x34, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x12, 0x04, 0x84, 0x01, 0x35, 0x5b, 0x0a, 0x10, 0x0a, + 0x08, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x84, 0x01, 0x36, 0x5a, 0x0a, + 0x4d, 0x0a, 0x02, 0x04, 0x0b, 0x12, 0x06, 0x88, 0x01, 0x00, 0x8b, 0x01, 0x01, 0x1a, 0x3f, 0x20, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, + 0x0a, 0x03, 0x04, 0x0b, 0x01, 0x12, 0x04, 0x88, 0x01, 0x08, 0x22, 0x0a, 0x1b, 0x0a, 0x04, 0x04, + 0x0b, 0x02, 0x00, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x46, 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, + 0x06, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x01, + 0x12, 0x04, 0x8a, 0x01, 0x14, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x03, 0x12, + 0x04, 0x8a, 0x01, 0x1d, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x08, 0x12, 0x04, + 0x8a, 0x01, 0x1f, 0x45, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0b, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, + 0x12, 0x04, 0x8a, 0x01, 0x20, 0x44, 0x0a, 0xb8, 0x01, 0x0a, 0x02, 0x04, 0x0c, 0x12, 0x06, 0x8f, + 0x01, 0x00, 0x95, 0x01, 0x01, 0x1a, 0xa9, 0x01, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, + 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x29, 0x2e, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, 0x2d, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, + 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0c, 0x01, 0x12, 0x04, 0x8f, 0x01, 0x08, 0x26, 0x0a, 0x3e, + 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x00, 0x12, 0x04, 0x91, 0x01, 0x02, 0x4e, 0x1a, 0x30, 0x20, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x06, 0x12, 0x04, 0x91, 0x01, 0x02, 0x1a, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0c, 0x02, 0x00, 0x01, 0x12, 0x04, 0x91, 0x01, 0x1b, 0x22, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0c, 0x02, 0x00, 0x03, 0x12, 0x04, 0x91, 0x01, 0x25, 0x26, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0c, 0x02, 0x00, 0x08, 0x12, 0x04, 0x91, 0x01, 0x27, 0x4d, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0c, + 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x91, 0x01, 0x28, 0x4c, 0x0a, 0x4d, 0x0a, 0x04, + 0x04, 0x0c, 0x02, 0x01, 0x12, 0x04, 0x94, 0x01, 0x02, 0x12, 0x1a, 0x3f, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, + 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0c, 0x02, 0x01, 0x05, 0x12, 0x04, 0x94, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, + 0x02, 0x01, 0x01, 0x12, 0x04, 0x94, 0x01, 0x08, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, + 0x01, 0x03, 0x12, 0x04, 0x94, 0x01, 0x10, 0x11, 0x0a, 0xba, 0x01, 0x0a, 0x02, 0x04, 0x0d, 0x12, + 0x06, 0x99, 0x01, 0x00, 0x9f, 0x01, 0x01, 0x1a, 0xab, 0x01, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x03, 0x6c, - 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x6c, 0x1d, 0x25, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x6c, 0x28, 0x29, 0x0a, 0x4c, - 0x0a, 0x04, 0x04, 0x07, 0x02, 0x01, 0x12, 0x03, 0x6f, 0x02, 0x12, 0x1a, 0x3f, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x07, 0x02, 0x01, 0x05, 0x12, 0x03, 0x6f, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, - 0x02, 0x01, 0x01, 0x12, 0x03, 0x6f, 0x08, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, - 0x03, 0x12, 0x03, 0x6f, 0x10, 0x11, 0x0a, 0x3c, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x73, 0x00, - 0x76, 0x01, 0x1a, 0x30, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x73, 0x08, 0x20, - 0x0a, 0x19, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x75, 0x02, 0x52, 0x1a, 0x0c, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x08, 0x02, 0x00, 0x06, 0x12, 0x03, 0x75, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x75, 0x21, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, - 0x12, 0x03, 0x75, 0x29, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x08, 0x12, 0x03, - 0x75, 0x2b, 0x51, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x08, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, - 0x03, 0x75, 0x2c, 0x50, 0x0a, 0x3d, 0x0a, 0x02, 0x04, 0x09, 0x12, 0x04, 0x79, 0x00, 0x7f, 0x01, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, 0x2d, 0x20, 0x77, 0x68, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x69, 0x73, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6c, 0x73, 0x6f, + 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x61, 0x62, + 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0d, 0x01, 0x12, 0x04, 0x99, 0x01, + 0x08, 0x27, 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x00, 0x12, 0x04, 0x9b, 0x01, 0x02, 0x50, 0x1a, 0x31, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x03, 0x79, 0x08, 0x21, 0x0a, - 0x1d, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x7b, 0x02, 0x59, 0x1a, 0x10, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x06, 0x12, 0x03, 0x7b, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x03, 0x7b, 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, - 0x02, 0x00, 0x03, 0x12, 0x03, 0x7b, 0x30, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, - 0x08, 0x12, 0x03, 0x7b, 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x09, 0x02, 0x00, 0x08, 0x87, - 0x09, 0x19, 0x12, 0x03, 0x7b, 0x33, 0x57, 0x0a, 0x1a, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x01, 0x12, - 0x03, 0x7e, 0x02, 0x46, 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x06, 0x12, 0x03, 0x7e, 0x02, - 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x01, 0x12, 0x03, 0x7e, 0x14, 0x1a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x01, 0x03, 0x12, 0x03, 0x7e, 0x1d, 0x1e, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x09, 0x02, 0x01, 0x08, 0x12, 0x03, 0x7e, 0x1f, 0x45, 0x0a, 0x0f, 0x0a, 0x08, 0x04, - 0x09, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x7e, 0x20, 0x44, 0x0a, 0x4c, 0x0a, 0x02, - 0x04, 0x0a, 0x12, 0x06, 0x82, 0x01, 0x00, 0x85, 0x01, 0x01, 0x1a, 0x3e, 0x20, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0a, - 0x01, 0x12, 0x04, 0x82, 0x01, 0x08, 0x21, 0x0a, 0x1b, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x00, 0x12, - 0x04, 0x84, 0x01, 0x02, 0x5c, 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x04, 0x12, 0x04, 0x84, - 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x06, 0x12, 0x04, 0x84, 0x01, - 0x0b, 0x29, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x01, 0x12, 0x04, 0x84, 0x01, 0x2a, - 0x30, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x03, 0x12, 0x04, 0x84, 0x01, 0x33, 0x34, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x12, 0x04, 0x84, 0x01, 0x35, 0x5b, 0x0a, - 0x10, 0x0a, 0x08, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x84, 0x01, 0x36, - 0x5a, 0x0a, 0x4d, 0x0a, 0x02, 0x04, 0x0b, 0x12, 0x06, 0x88, 0x01, 0x00, 0x8b, 0x01, 0x01, 0x1a, - 0x3f, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0a, - 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0b, 0x01, 0x12, 0x04, 0x88, 0x01, 0x08, 0x22, 0x0a, 0x1b, 0x0a, - 0x04, 0x04, 0x0b, 0x02, 0x00, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x46, 0x1a, 0x0d, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, - 0x02, 0x00, 0x06, 0x12, 0x04, 0x8a, 0x01, 0x02, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, - 0x00, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x14, 0x1a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, - 0x03, 0x12, 0x04, 0x8a, 0x01, 0x1d, 0x1e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, 0x08, - 0x12, 0x04, 0x8a, 0x01, 0x1f, 0x45, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0b, 0x02, 0x00, 0x08, 0x87, - 0x09, 0x19, 0x12, 0x04, 0x8a, 0x01, 0x20, 0x44, 0x0a, 0xb8, 0x01, 0x0a, 0x02, 0x04, 0x0c, 0x12, - 0x06, 0x8f, 0x01, 0x00, 0x95, 0x01, 0x01, 0x1a, 0xa9, 0x01, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, 0x2d, 0x20, 0x77, 0x68, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x69, - 0x73, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, - 0x65, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0c, 0x01, 0x12, 0x04, 0x8f, 0x01, 0x08, 0x26, - 0x0a, 0x3e, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x00, 0x12, 0x04, 0x91, 0x01, 0x02, 0x4e, 0x1a, 0x30, - 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x06, 0x12, 0x04, 0x91, 0x01, 0x02, 0x1a, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x01, 0x12, 0x04, 0x91, 0x01, 0x1b, 0x22, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x03, 0x12, 0x04, 0x91, 0x01, 0x25, 0x26, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0c, 0x02, 0x00, 0x08, 0x12, 0x04, 0x91, 0x01, 0x27, 0x4d, 0x0a, 0x10, 0x0a, 0x08, - 0x04, 0x0c, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x91, 0x01, 0x28, 0x4c, 0x0a, 0x4d, - 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x01, 0x12, 0x04, 0x94, 0x01, 0x02, 0x12, 0x1a, 0x3f, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0c, 0x02, 0x01, 0x05, 0x12, 0x04, 0x94, 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0c, 0x02, 0x01, 0x01, 0x12, 0x04, 0x94, 0x01, 0x08, 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0c, 0x02, 0x01, 0x03, 0x12, 0x04, 0x94, 0x01, 0x10, 0x11, 0x0a, 0xba, 0x01, 0x0a, 0x02, 0x04, - 0x0d, 0x12, 0x06, 0x99, 0x01, 0x00, 0x9f, 0x01, 0x01, 0x1a, 0xab, 0x01, 0x20, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x2e, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x20, 0x2d, 0x20, - 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, - 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0d, 0x01, 0x12, 0x04, - 0x99, 0x01, 0x08, 0x27, 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x00, 0x12, 0x04, 0x9b, 0x01, - 0x02, 0x50, 0x1a, 0x31, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x06, 0x12, 0x04, - 0x9b, 0x01, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9b, - 0x01, 0x1c, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9b, 0x01, - 0x27, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x08, 0x12, 0x04, 0x9b, 0x01, 0x29, - 0x4f, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0d, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x9b, - 0x01, 0x2a, 0x4e, 0x0a, 0x4d, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0x9e, 0x01, 0x02, - 0x12, 0x1a, 0x3f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x05, 0x12, 0x04, 0x9e, 0x01, 0x02, - 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x01, 0x12, 0x04, 0x9e, 0x01, 0x08, 0x0d, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x03, 0x12, 0x04, 0x9e, 0x01, 0x10, 0x11, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xc2, 0x21, 0x0a, 0x26, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x71, - 0x75, 0x65, 0x75, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, - 0x61, 0x73, 0x6b, 0x2f, 0x72, 0x75, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa7, 0x04, 0x0a, 0x14, 0x45, 0x6e, 0x71, 0x75, 0x65, - 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x74, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x06, 0x12, 0x04, 0x9b, 0x01, + 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9b, 0x01, 0x1c, + 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9b, 0x01, 0x27, 0x28, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x08, 0x12, 0x04, 0x9b, 0x01, 0x29, 0x4f, 0x0a, + 0x10, 0x0a, 0x08, 0x04, 0x0d, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x9b, 0x01, 0x2a, + 0x4e, 0x0a, 0x4d, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0x9e, 0x01, 0x02, 0x12, 0x1a, + 0x3f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x77, 0x69, 0x74, + 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x05, 0x12, 0x04, 0x9e, 0x01, 0x02, 0x07, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x01, 0x12, 0x04, 0x9e, 0x01, 0x08, 0x0d, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x03, 0x12, 0x04, 0x9e, 0x01, 0x10, 0x11, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xc2, 0x21, 0x0a, 0x26, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x71, 0x75, 0x65, + 0x75, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, + 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x2f, 0x72, 0x75, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, + 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa7, 0x04, 0x0a, 0x14, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, + 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x01, 0x52, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x75, 0x6e, + 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x52, 0x75, 0x6e, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x24, 0x0a, + 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x55, 0x72, 0x69, 0x12, 0x2f, 0x0a, 0x0f, 0x72, 0x75, 0x6e, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x42, 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, + 0x72, 0x61, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, + 0x0a, 0x15, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x15, 0x41, 0x62, 0x6f, 0x72, 0x74, + 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, + 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x62, 0x6f, 0x72, + 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x18, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, + 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x08, 0x72, - 0x75, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x52, - 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x24, 0x0a, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x55, 0x72, 0x69, 0x12, 0x2f, 0x0a, 0x0f, 0x72, 0x75, 0x6e, 0x5f, 0x6f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x75, 0x6e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x42, 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x37, 0x0a, 0x05, - 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x05, - 0x74, 0x72, 0x61, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0x0a, 0x04, 0x73, 0x70, - 0x65, 0x63, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x17, 0x0a, 0x15, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7f, 0x0a, 0x15, 0x41, 0x62, 0x6f, - 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6e, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x62, - 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x18, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, - 0xd5, 0x02, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x66, 0x0a, 0x0d, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x28, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0e, 0x41, 0x62, 0x6f, 0x72, - 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x12, 0x29, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, - 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x11, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x22, 0x1b, 0x0a, 0x19, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xd5, 0x02, + 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x66, + 0x0a, 0x0d, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x28, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, + 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x12, 0x29, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, - 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x64, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x72, 0x0a, 0x11, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, - 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcc, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x42, 0x11, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, - 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, - 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0xab, 0x14, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x4f, - 0x24, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, - 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, 0x03, - 0x02, 0x12, 0x03, 0x06, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, - 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x04, 0x12, 0x03, 0x08, 0x00, 0x31, 0x0a, 0x08, 0x0a, 0x01, - 0x08, 0x12, 0x03, 0x0a, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x0a, 0x00, - 0x4d, 0x0a, 0x60, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0d, 0x00, 0x16, 0x01, 0x1a, 0x54, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x08, 0x14, 0x0a, - 0x30, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0f, 0x02, 0x4c, 0x1a, 0x23, 0x20, 0x71, - 0x75, 0x65, 0x75, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x06, 0x13, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0f, 0x14, 0x28, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0f, 0x33, 0x48, 0x0a, 0x22, 0x0a, 0x04, 0x06, - 0x00, 0x02, 0x01, 0x12, 0x03, 0x12, 0x02, 0x4f, 0x1a, 0x15, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, - 0x20, 0x61, 0x20, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x12, 0x06, 0x14, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x12, 0x15, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x12, 0x35, 0x4b, 0x0a, 0x79, 0x0a, 0x04, 0x06, 0x00, 0x02, - 0x02, 0x12, 0x03, 0x15, 0x02, 0x58, 0x1a, 0x6c, 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x20, - 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x15, - 0x06, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x15, 0x18, 0x30, - 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x15, 0x3b, 0x54, 0x0a, 0x34, - 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x19, 0x00, 0x36, 0x01, 0x1a, 0x28, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x71, 0x75, 0x65, 0x75, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x19, 0x08, 0x1c, - 0x0a, 0x34, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x1b, 0x02, 0x59, 0x1a, 0x27, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x1b, 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1b, - 0x24, 0x2d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1b, 0x30, 0x31, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x1b, 0x32, 0x58, 0x0a, 0x0f, - 0x0a, 0x08, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x1b, 0x33, 0x57, 0x0a, - 0xad, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x1f, 0x02, 0x29, 0x1a, 0x9f, 0x01, - 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x20, 0x28, 0x65, 0x78, 0x2e, 0x20, 0x6f, 0x72, 0x67, 0x2c, 0x0a, 0x20, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x29, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x20, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x1f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1f, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x01, 0x03, 0x12, 0x03, 0x1f, 0x27, 0x28, 0x0a, 0x72, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, - 0x03, 0x22, 0x02, 0x1c, 0x1a, 0x65, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, - 0x72, 0x75, 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x75, 0x74, 0x69, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x6f, 0x77, 0x6e, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x22, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x02, 0x01, 0x12, 0x03, 0x22, 0x0f, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, - 0x12, 0x03, 0x22, 0x1a, 0x1b, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x25, - 0x02, 0x41, 0x1a, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x6f, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x25, 0x02, 0x08, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x25, 0x09, 0x12, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x25, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x03, 0x08, 0x12, 0x03, 0x25, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, - 0x03, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x25, 0x18, 0x3f, 0x0a, 0x48, 0x0a, 0x04, 0x04, - 0x00, 0x02, 0x04, 0x12, 0x03, 0x28, 0x02, 0x47, 0x1a, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x75, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x6f, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, - 0x28, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x28, 0x09, - 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x28, 0x1b, 0x1c, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x08, 0x12, 0x03, 0x28, 0x1d, 0x46, 0x0a, 0x10, 0x0a, - 0x09, 0x04, 0x00, 0x02, 0x04, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x28, 0x1e, 0x45, 0x0a, - 0x3b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x13, 0x1a, 0x2e, 0x20, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x69, 0x66, 0x20, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x05, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x05, 0x01, 0x12, 0x03, 0x2b, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, - 0x03, 0x12, 0x03, 0x2b, 0x11, 0x12, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, - 0x2e, 0x02, 0x15, 0x1a, 0x29, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x75, 0x6e, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x05, 0x12, 0x03, 0x2e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x2e, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x06, 0x03, 0x12, 0x03, 0x2e, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, - 0x12, 0x04, 0x30, 0x02, 0x35, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, - 0x03, 0x30, 0x08, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x02, 0x12, 0x03, 0x31, - 0x04, 0x30, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x03, - 0x31, 0x04, 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, 0x03, 0x32, 0x04, 0x19, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x06, 0x12, 0x03, 0x32, 0x04, 0x0e, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x32, 0x0f, 0x13, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x07, 0x03, 0x12, 0x03, 0x32, 0x16, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, - 0x02, 0x08, 0x12, 0x03, 0x33, 0x04, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x06, - 0x12, 0x03, 0x33, 0x04, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, - 0x33, 0x10, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x03, 0x12, 0x03, 0x33, 0x18, - 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x09, 0x12, 0x03, 0x34, 0x04, 0x23, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x09, 0x06, 0x12, 0x03, 0x34, 0x04, 0x13, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x09, 0x01, 0x12, 0x03, 0x34, 0x14, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x09, 0x03, 0x12, 0x03, 0x34, 0x20, 0x22, 0x0a, 0x34, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x03, - 0x39, 0x00, 0x20, 0x1a, 0x29, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, 0x75, 0x65, 0x75, 0x69, - 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, - 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x39, 0x08, 0x1d, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x02, - 0x12, 0x04, 0x3c, 0x00, 0x42, 0x01, 0x1a, 0x25, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, - 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x3c, 0x08, 0x1d, 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x02, 0x02, - 0x00, 0x12, 0x03, 0x3e, 0x02, 0x49, 0x1a, 0x32, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x3e, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x3e, 0x17, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x3e, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, 0x3e, - 0x22, 0x48, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, - 0x3e, 0x23, 0x47, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x41, 0x02, 0x1d, - 0x1a, 0x2d, 0x20, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, - 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2c, 0x20, - 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x41, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x41, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x41, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x01, 0x03, 0x12, 0x03, 0x41, 0x1b, 0x1c, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x03, 0x45, - 0x00, 0x21, 0x1a, 0x26, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, - 0x01, 0x12, 0x03, 0x45, 0x08, 0x1e, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x47, 0x00, - 0x4d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x47, 0x08, 0x20, 0x0a, 0x4d, - 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x49, 0x02, 0x4f, 0x1a, 0x40, 0x20, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, - 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x49, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x49, 0x1a, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, - 0x00, 0x03, 0x12, 0x03, 0x49, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, - 0x12, 0x03, 0x49, 0x28, 0x4e, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, - 0x19, 0x12, 0x03, 0x49, 0x29, 0x4d, 0x0a, 0x3d, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, - 0x4c, 0x02, 0x1d, 0x1a, 0x30, 0x20, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x04, 0x12, 0x03, - 0x4c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x05, 0x12, 0x03, 0x4c, 0x0b, - 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x4c, 0x12, 0x18, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x4c, 0x1b, 0x1c, 0x0a, 0x09, 0x0a, - 0x02, 0x04, 0x05, 0x12, 0x03, 0x4f, 0x00, 0x24, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, - 0x03, 0x4f, 0x08, 0x21, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xdd, 0x0c, 0x0a, - 0x29, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1b, - 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x64, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7d, 0x0a, 0x0f, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x42, 0x07, 0xba, 0x48, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x61, 0x74, - 0x74, 0x65, 0x6d, 0x70, 0x74, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x6c, 0x6f, - 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, - 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x1a, 0x3f, 0x0a, 0x04, 0x4c, 0x6f, 0x67, - 0x73, 0x12, 0x37, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, - 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, - 0x69, 0x6e, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x32, 0x6e, 0x0a, 0x0e, 0x52, 0x75, - 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x08, - 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, - 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x30, 0x01, 0x42, 0xce, 0x01, 0x0a, 0x16, 0x63, - 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x13, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, - 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, - 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xca, - 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0xd6, 0x06, 0x0a, 0x06, - 0x12, 0x04, 0x00, 0x00, 0x24, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, - 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, - 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, - 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x30, 0x0a, 0x08, 0x0a, 0x01, 0x08, - 0x12, 0x03, 0x08, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x4d, - 0x0a, 0x46, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0b, 0x00, 0x0f, 0x01, 0x1a, 0x3a, 0x20, 0x52, - 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x70, 0x72, + 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcc, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x42, 0x11, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, + 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, + 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0xab, 0x14, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x4f, 0x24, 0x0a, + 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, + 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, + 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, + 0x03, 0x06, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, 0x22, 0x0a, + 0x09, 0x0a, 0x02, 0x03, 0x04, 0x12, 0x03, 0x08, 0x00, 0x31, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, + 0x03, 0x0a, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x0a, 0x00, 0x4d, 0x0a, + 0x60, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0d, 0x00, 0x16, 0x01, 0x1a, 0x54, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, - 0x67, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, - 0x03, 0x0b, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x04, 0x0c, 0x02, - 0x0e, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x06, 0x0e, - 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0c, 0x0f, 0x1e, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0c, 0x29, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x30, 0x40, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x00, 0x04, 0x12, 0x03, 0x0d, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x00, - 0x04, 0x22, 0x12, 0x03, 0x0d, 0x04, 0x2f, 0x0a, 0x2f, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x12, - 0x00, 0x18, 0x01, 0x1a, 0x23, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x69, 0x6c, 0x69, 0x6e, - 0x67, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, - 0x03, 0x12, 0x08, 0x17, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x14, 0x02, - 0x4f, 0x1a, 0x10, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, - 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x14, 0x02, - 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x14, 0x1a, 0x23, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x14, 0x26, 0x27, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x14, 0x28, 0x4e, 0x0a, 0x0f, 0x0a, 0x08, 0x04, - 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x14, 0x29, 0x4d, 0x0a, 0x22, 0x0a, 0x04, - 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x17, 0x02, 0x3a, 0x1a, 0x15, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x17, 0x02, 0x08, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x17, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x17, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, - 0x02, 0x01, 0x08, 0x12, 0x03, 0x17, 0x15, 0x39, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, - 0x08, 0x87, 0x09, 0x05, 0x04, 0x12, 0x03, 0x17, 0x16, 0x38, 0x0a, 0x2f, 0x0a, 0x02, 0x04, 0x01, - 0x12, 0x04, 0x1b, 0x00, 0x24, 0x01, 0x1a, 0x23, 0x20, 0x52, 0x65, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x69, - 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x01, 0x01, 0x12, 0x03, 0x1b, 0x08, 0x18, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x00, 0x12, - 0x04, 0x1d, 0x02, 0x20, 0x03, 0x1a, 0x12, 0x20, 0x41, 0x20, 0x62, 0x61, 0x74, 0x63, 0x68, 0x20, - 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, - 0x00, 0x01, 0x12, 0x03, 0x1d, 0x0a, 0x0e, 0x0a, 0x26, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x00, 0x02, - 0x00, 0x12, 0x03, 0x1f, 0x04, 0x38, 0x1a, 0x17, 0x20, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x65, 0x64, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x0a, 0x0a, - 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x1f, 0x04, 0x0c, 0x0a, - 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1f, 0x0d, 0x2d, 0x0a, - 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x2e, 0x33, 0x0a, - 0x0e, 0x0a, 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1f, 0x36, 0x37, 0x0a, - 0x2b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x23, 0x02, 0x19, 0x1a, 0x1e, 0x20, 0x4f, - 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x01, 0x02, 0x00, 0x04, 0x12, 0x03, 0x23, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x23, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x23, 0x10, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x23, 0x17, 0x18, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xd0, 0x84, 0x01, - 0x0a, 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x72, 0x75, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x81, - 0x04, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, + 0x6e, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x08, 0x14, 0x0a, 0x30, 0x0a, + 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0f, 0x02, 0x4c, 0x1a, 0x23, 0x20, 0x71, 0x75, 0x65, + 0x75, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x06, 0x13, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0f, 0x14, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0f, 0x33, 0x48, 0x0a, 0x22, 0x0a, 0x04, 0x06, 0x00, 0x02, + 0x01, 0x12, 0x03, 0x12, 0x02, 0x4f, 0x1a, 0x15, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x20, 0x61, + 0x20, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x12, 0x06, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x12, 0x15, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x12, 0x35, 0x4b, 0x0a, 0x79, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, + 0x03, 0x15, 0x02, 0x58, 0x1a, 0x6c, 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, + 0x61, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x20, 0x71, 0x75, + 0x65, 0x75, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x15, 0x06, 0x17, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x15, 0x18, 0x30, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x15, 0x3b, 0x54, 0x0a, 0x34, 0x0a, 0x02, + 0x04, 0x00, 0x12, 0x04, 0x19, 0x00, 0x36, 0x01, 0x1a, 0x28, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, + 0x75, 0x65, 0x75, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x19, 0x08, 0x1c, 0x0a, 0x34, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x1b, 0x02, 0x59, 0x1a, 0x27, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1b, + 0x02, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1b, 0x24, 0x2d, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1b, 0x30, 0x31, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x1b, 0x32, 0x58, 0x0a, 0x0f, 0x0a, 0x08, + 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x1b, 0x33, 0x57, 0x0a, 0xad, 0x01, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x1f, 0x02, 0x29, 0x1a, 0x9f, 0x01, 0x20, 0x61, + 0x6e, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x2e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, + 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, + 0x28, 0x65, 0x78, 0x2e, 0x20, 0x6f, 0x72, 0x67, 0x2c, 0x0a, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2c, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x29, 0x20, 0x77, 0x69, 0x6c, 0x6c, + 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x20, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x1f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x1f, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x1f, 0x27, 0x28, 0x0a, 0x72, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x22, + 0x02, 0x1c, 0x1a, 0x65, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x72, 0x75, + 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, + 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x02, 0x06, 0x12, 0x03, 0x22, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, + 0x12, 0x03, 0x22, 0x0f, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, + 0x22, 0x1a, 0x1b, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x25, 0x02, 0x41, + 0x1a, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x05, 0x12, 0x03, 0x25, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x25, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x25, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x03, 0x08, 0x12, 0x03, 0x25, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x03, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x25, 0x18, 0x3f, 0x0a, 0x48, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x04, 0x12, 0x03, 0x28, 0x02, 0x47, 0x1a, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, + 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x70, 0x61, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x74, + 0x6f, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, 0x28, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x28, 0x09, 0x18, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x28, 0x1b, 0x1c, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x04, 0x08, 0x12, 0x03, 0x28, 0x1d, 0x46, 0x0a, 0x10, 0x0a, 0x09, 0x04, + 0x00, 0x02, 0x04, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x28, 0x1e, 0x45, 0x0a, 0x3b, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x13, 0x1a, 0x2e, 0x20, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, + 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x05, 0x05, 0x12, 0x03, 0x2b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, + 0x01, 0x12, 0x03, 0x2b, 0x09, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x03, 0x12, + 0x03, 0x2b, 0x11, 0x12, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, 0x2e, 0x02, + 0x15, 0x1a, 0x29, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, + 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, + 0x2c, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x06, 0x05, 0x12, 0x03, 0x2e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x06, 0x01, 0x12, 0x03, 0x2e, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, + 0x03, 0x12, 0x03, 0x2e, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, + 0x30, 0x02, 0x35, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x30, + 0x08, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x00, 0x02, 0x12, 0x03, 0x31, 0x04, 0x30, + 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x03, 0x31, 0x04, + 0x30, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, 0x03, 0x32, 0x04, 0x19, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x06, 0x12, 0x03, 0x32, 0x04, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x32, 0x0f, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x07, 0x03, 0x12, 0x03, 0x32, 0x16, 0x18, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x08, + 0x12, 0x03, 0x33, 0x04, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x06, 0x12, 0x03, + 0x33, 0x04, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x33, 0x10, + 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x03, 0x12, 0x03, 0x33, 0x18, 0x1a, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x09, 0x12, 0x03, 0x34, 0x04, 0x23, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x09, 0x06, 0x12, 0x03, 0x34, 0x04, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x09, 0x01, 0x12, 0x03, 0x34, 0x14, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x09, + 0x03, 0x12, 0x03, 0x34, 0x20, 0x22, 0x0a, 0x34, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x03, 0x39, 0x00, + 0x20, 0x1a, 0x29, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, 0x75, 0x65, 0x75, 0x69, 0x6e, 0x67, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x01, 0x01, 0x12, 0x03, 0x39, 0x08, 0x1d, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, + 0x3c, 0x00, 0x42, 0x01, 0x1a, 0x25, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, + 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x02, 0x01, 0x12, 0x03, 0x3c, 0x08, 0x1d, 0x0a, 0x3f, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, + 0x03, 0x3e, 0x02, 0x49, 0x1a, 0x32, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x3e, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x3e, 0x17, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3e, + 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, 0x3e, 0x22, 0x48, + 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x3e, 0x23, + 0x47, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x41, 0x02, 0x1d, 0x1a, 0x2d, + 0x20, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2c, 0x20, 0x69, 0x66, + 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x41, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x41, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x41, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x41, 0x1b, 0x1c, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x03, 0x45, 0x00, 0x21, + 0x1a, 0x26, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, + 0x03, 0x45, 0x08, 0x1e, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x47, 0x00, 0x4d, 0x01, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x47, 0x08, 0x20, 0x0a, 0x4d, 0x0a, 0x04, + 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x49, 0x02, 0x4f, 0x1a, 0x40, 0x20, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, + 0x62, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x49, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x49, 0x1a, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x49, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, + 0x49, 0x28, 0x4e, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, + 0x03, 0x49, 0x29, 0x4d, 0x0a, 0x3d, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x01, 0x12, 0x03, 0x4c, 0x02, + 0x1d, 0x1a, 0x30, 0x20, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, + 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, + 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x04, 0x12, 0x03, 0x4c, 0x02, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x05, 0x12, 0x03, 0x4c, 0x0b, 0x11, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, 0x03, 0x4c, 0x12, 0x18, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x4c, 0x1b, 0x1c, 0x0a, 0x09, 0x0a, 0x02, 0x04, + 0x05, 0x12, 0x03, 0x4f, 0x00, 0x24, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x4f, + 0x08, 0x21, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xdd, 0x0c, 0x0a, 0x29, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1b, 0x62, 0x75, + 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7d, 0x0a, 0x0f, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x21, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x42, 0x07, 0xba, 0x48, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x61, 0x74, 0x74, 0x65, + 0x6d, 0x70, 0x74, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x69, 0x6c, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, 0x6f, 0x67, + 0x73, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x1a, 0x3f, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x12, + 0x37, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x6c, 0x6f, 0x67, 0x73, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x6e, + 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x32, 0x6e, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x4c, + 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x54, 0x61, + 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x69, 0x6c, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x30, 0x01, 0x42, 0xce, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x42, 0x13, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, + 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, + 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0xd6, 0x06, 0x0a, 0x06, 0x12, 0x04, + 0x00, 0x00, 0x24, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, + 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, + 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, + 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x30, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, + 0x08, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x08, 0x00, 0x4d, 0x0a, 0x46, + 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0b, 0x00, 0x0f, 0x01, 0x1a, 0x3a, 0x20, 0x52, 0x75, 0x6e, + 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, + 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0b, + 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x04, 0x0c, 0x02, 0x0e, 0x03, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x06, 0x0e, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0c, 0x0f, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x0c, 0x29, 0x2f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x0c, 0x30, 0x40, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, + 0x04, 0x12, 0x03, 0x0d, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x00, 0x04, 0x22, + 0x12, 0x03, 0x0d, 0x04, 0x2f, 0x0a, 0x2f, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x12, 0x00, 0x18, + 0x01, 0x1a, 0x23, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x20, + 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x12, + 0x08, 0x17, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x14, 0x02, 0x4f, 0x1a, + 0x10, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x64, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x14, 0x02, 0x19, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x14, 0x1a, 0x23, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x14, 0x26, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x14, 0x28, 0x4e, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x02, + 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x03, 0x14, 0x29, 0x4d, 0x0a, 0x22, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x01, 0x12, 0x03, 0x17, 0x02, 0x3a, 0x1a, 0x15, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x74, + 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x17, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x17, 0x09, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x03, 0x12, 0x03, 0x17, 0x13, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, + 0x08, 0x12, 0x03, 0x17, 0x15, 0x39, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, 0x87, + 0x09, 0x05, 0x04, 0x12, 0x03, 0x17, 0x16, 0x38, 0x0a, 0x2f, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, + 0x1b, 0x00, 0x24, 0x01, 0x1a, 0x23, 0x20, 0x52, 0x65, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x69, 0x6c, 0x69, + 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, + 0x12, 0x03, 0x1b, 0x08, 0x18, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x01, 0x03, 0x00, 0x12, 0x04, 0x1d, + 0x02, 0x20, 0x03, 0x1a, 0x12, 0x20, 0x41, 0x20, 0x62, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6f, 0x66, + 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x03, 0x00, 0x01, + 0x12, 0x03, 0x1d, 0x0a, 0x0e, 0x0a, 0x26, 0x0a, 0x06, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x12, + 0x03, 0x1f, 0x04, 0x38, 0x1a, 0x17, 0x20, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x64, 0x20, 0x6c, 0x6f, 0x67, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x1f, 0x04, 0x0c, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1f, 0x0d, 0x2d, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1f, 0x2e, 0x33, 0x0a, 0x0e, 0x0a, + 0x07, 0x04, 0x01, 0x03, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1f, 0x36, 0x37, 0x0a, 0x2b, 0x0a, + 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x23, 0x02, 0x19, 0x1a, 0x1e, 0x20, 0x4f, 0x6e, 0x65, + 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x62, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, + 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x00, 0x04, 0x12, 0x03, 0x23, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x23, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x23, 0x10, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x23, + 0x17, 0x18, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xd0, 0x84, 0x01, 0x0a, 0x24, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x18, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, + 0x73, 0x6b, 0x2f, 0x72, 0x75, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x27, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x81, 0x04, 0x0a, + 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x38, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x48, 0x00, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x0a, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x39, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, + 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x48, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x48, 0x01, 0x52, 0x08, 0x74, 0x61, 0x73, + 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x0b, 0x74, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x73, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x75, 0x6e, + 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x52, 0x75, 0x6e, + 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, + 0x01, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, + 0x22, 0x3e, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x03, 0x72, 0x75, 0x6e, + 0x22, 0x79, 0x0a, 0x0f, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x44, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x48, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x37, - 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, - 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x48, 0x01, 0x52, 0x08, 0x74, - 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x0b, - 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x72, - 0x75, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x52, - 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, - 0x35, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x12, 0x05, 0xba, 0x48, - 0x02, 0x08, 0x01, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x05, 0xba, 0x48, 0x02, - 0x08, 0x01, 0x22, 0x3e, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x72, 0x75, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x03, 0x72, - 0x75, 0x6e, 0x22, 0x79, 0x0a, 0x0f, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, - 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x12, 0x0a, - 0x10, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x56, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, + 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, + 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, + 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x12, 0x0a, 0x10, 0x41, + 0x62, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x56, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x75, + 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x38, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x58, 0x0a, 0x16, 0x57, 0x61, + 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x72, + 0x75, 0x6e, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x17, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x38, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x62, 0x0a, 0x17, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x57, 0x0a, + 0x18, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x64, 0x0a, 0x19, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x1a, + 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x5f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x73, 0x12, 0x31, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, + 0x61, 0x73, 0x6b, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x73, 0x22, 0x84, 0x03, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x03, 0x6f, 0x72, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x03, 0x6f, 0x72, 0x67, 0x12, 0x44, + 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x54, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, + 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x39, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, + 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x42, 0x11, 0x0a, 0x08, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x62, 0x79, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x55, 0x0a, 0x10, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2b, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x22, 0x87, 0x02, 0x0a, 0x10, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x03, 0x6f, 0x72, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, + 0x03, 0x6f, 0x72, 0x67, 0x12, 0x44, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, + 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, + 0x12, 0x39, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x48, 0x00, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x42, 0x0f, 0x0a, 0x06, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x40, 0x0a, 0x11, + 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x22, 0x8d, + 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, + 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x22, 0x61, + 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x58, 0x0a, 0x16, - 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x17, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x62, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, - 0x57, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x64, 0x0a, 0x19, 0x57, 0x61, 0x74, 0x63, - 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, - 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x59, - 0x0a, 0x1a, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x65, 0x0a, 0x14, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x65, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x5f, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x5f, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x52, 0x07, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0x84, 0x03, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, + 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0f, 0x65, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x7a, 0x0a, 0x19, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x07, 0x61, + 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x22, 0x65, + 0x0a, 0x1a, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x12, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x09, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, + 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xe3, 0x03, 0x0a, 0x12, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, + 0x12, 0x41, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x03, 0x6f, 0x72, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x03, 0x6f, 0x72, 0x67, - 0x12, 0x44, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, + 0x65, 0x73, 0x74, 0x12, 0x61, 0x0a, 0x11, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x73, 0x6f, 0x72, + 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x6f, 0x72, 0x74, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x6f, 0x72, 0x74, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x5e, 0x0a, 0x0e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, + 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x41, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x74, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x74, 0x61, - 0x73, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, - 0x61, 0x73, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x42, 0x11, - 0x0a, 0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x62, 0x79, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, - 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x55, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x87, 0x02, 0x0a, 0x10, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x03, 0x6f, 0x72, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, - 0x00, 0x52, 0x03, 0x6f, 0x72, 0x67, 0x12, 0x44, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x42, 0x0f, 0x0a, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x40, - 0x0a, 0x11, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, - 0x22, 0x8d, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, - 0x22, 0x61, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x72, - 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, - 0x75, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, - 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x65, 0x0a, - 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x65, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, - 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x45, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7a, 0x0a, 0x19, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, - 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x2a, 0x02, 0x20, 0x00, 0x52, 0x07, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, - 0x22, 0x65, 0x0a, 0x1a, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, - 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x12, 0x41, 0x62, 0x6f, 0x72, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, - 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x15, - 0x0a, 0x13, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe3, 0x03, 0x0a, 0x12, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0a, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x64, 0x12, 0x41, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x07, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x61, 0x0a, 0x11, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x73, - 0x6f, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x6f, - 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x0f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x6f, - 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x5e, 0x0a, 0x0e, 0x4b, 0x6e, 0x6f, 0x77, - 0x6e, 0x53, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x41, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x09, 0x0a, - 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x42, 0x11, 0x0a, 0x08, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x5f, 0x62, 0x79, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x71, 0x0a, 0x13, 0x57, - 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x73, - 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x32, 0xb9, - 0x0b, 0x0a, 0x0a, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, - 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x12, 0x24, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x08, 0x41, 0x62, 0x6f, - 0x72, 0x74, 0x52, 0x75, 0x6e, 0x12, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, - 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, - 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x12, 0x28, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6e, 0x0a, - 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x2a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x66, - 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x72, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x2b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x53, 0x6f, 0x72, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x73, + 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x42, 0x11, 0x0a, 0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, + 0x62, 0x79, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x71, 0x0a, 0x13, 0x57, 0x61, 0x74, + 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0a, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x32, 0xb9, 0x0b, 0x0a, + 0x0a, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x09, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x12, 0x24, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, - 0x01, 0x12, 0x77, 0x0a, 0x12, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, - 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, - 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x2e, 0x66, 0x6c, + 0x6c, 0x6f, 0x77, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x08, 0x41, 0x62, 0x6f, 0x72, 0x74, + 0x52, 0x75, 0x6e, 0x12, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x75, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, + 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x28, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x5a, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, - 0x73, 0x12, 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, - 0x01, 0x12, 0x5c, 0x0a, 0x09, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x24, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, - 0x63, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6e, 0x0a, 0x0f, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2a, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x03, 0x90, 0x02, 0x01, 0x12, 0x65, 0x0a, 0x0c, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x66, 0x6c, 0x79, + 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, + 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x2b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x77, 0x0a, 0x12, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, + 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x77, 0x0a, 0x12, 0x57, - 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x30, 0x01, 0x12, 0x60, 0x0a, 0x0b, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x66, 0x6c, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x28, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, + 0x90, 0x02, 0x01, 0x12, 0x5a, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x12, + 0x23, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x75, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x5c, 0x0a, 0x09, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x75, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x63, 0x0a, + 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, + 0x02, 0x01, 0x12, 0x65, 0x0a, 0x0c, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, - 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0xca, 0x01, 0x0a, 0x16, 0x63, - 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x0f, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0x9e, 0x56, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, - 0xd6, 0x02, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, - 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, - 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, - 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, - 0x07, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x04, 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, 0x09, - 0x0a, 0x02, 0x03, 0x05, 0x12, 0x03, 0x09, 0x00, 0x2e, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x06, 0x12, - 0x03, 0x0a, 0x00, 0x31, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x07, 0x12, 0x03, 0x0b, 0x00, 0x29, 0x0a, - 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x0d, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, - 0x03, 0x0d, 0x00, 0x4d, 0x0a, 0x41, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x10, 0x00, 0x46, 0x01, - 0x1a, 0x35, 0x20, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, - 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, - 0x10, 0x08, 0x12, 0x0a, 0x32, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x12, 0x02, 0x40, - 0x1a, 0x25, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, - 0x72, 0x75, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, - 0x20, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, - 0x12, 0x03, 0x12, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, - 0x12, 0x10, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x12, 0x2b, - 0x3c, 0x0a, 0x1b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x03, 0x15, 0x02, 0x3d, 0x1a, 0x0e, - 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x15, 0x06, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x15, 0x0f, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x15, 0x29, 0x39, 0x0a, 0x35, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, - 0x12, 0x04, 0x18, 0x02, 0x1a, 0x03, 0x1a, 0x27, 0x20, 0x47, 0x65, 0x74, 0x20, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x18, 0x06, 0x13, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x18, 0x14, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x18, 0x33, 0x48, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, - 0x02, 0x04, 0x12, 0x03, 0x19, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x02, 0x04, - 0x22, 0x12, 0x03, 0x19, 0x04, 0x2f, 0x0a, 0x7e, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x03, - 0x1d, 0x02, 0x59, 0x1a, 0x71, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x77, - 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x63, + 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x77, 0x0a, 0x12, 0x57, 0x61, 0x74, + 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x2d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x60, 0x0a, 0x0b, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x41, + 0x62, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x12, 0x26, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x66, 0x6c, + 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0xca, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x42, 0x0f, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, + 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, + 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0x9e, 0x56, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, 0xd6, 0x02, + 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, + 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, + 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2b, 0x0a, 0x09, 0x0a, 0x02, 0x03, + 0x02, 0x12, 0x03, 0x06, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, + 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x04, 0x12, 0x03, 0x08, 0x00, 0x22, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x05, 0x12, 0x03, 0x09, 0x00, 0x2e, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x06, 0x12, 0x03, 0x0a, + 0x00, 0x31, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x07, 0x12, 0x03, 0x0b, 0x00, 0x29, 0x0a, 0x08, 0x0a, + 0x01, 0x08, 0x12, 0x03, 0x0d, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x0d, + 0x00, 0x4d, 0x0a, 0x41, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x10, 0x00, 0x46, 0x01, 0x1a, 0x35, + 0x20, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x72, + 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x10, 0x08, + 0x12, 0x0a, 0x32, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x12, 0x02, 0x40, 0x1a, 0x25, + 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x72, 0x75, + 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, + 0x61, 0x73, 0x6b, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x12, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x12, 0x10, + 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x12, 0x2b, 0x3c, 0x0a, + 0x1b, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x03, 0x15, 0x02, 0x3d, 0x1a, 0x0e, 0x20, 0x41, + 0x62, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x15, 0x06, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x01, 0x02, 0x12, 0x03, 0x15, 0x0f, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, + 0x03, 0x12, 0x03, 0x15, 0x29, 0x39, 0x0a, 0x35, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x04, + 0x18, 0x02, 0x1a, 0x03, 0x1a, 0x27, 0x20, 0x47, 0x65, 0x74, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x18, 0x06, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x18, 0x14, 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x02, 0x03, 0x12, 0x03, 0x18, 0x33, 0x48, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x04, + 0x12, 0x03, 0x19, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x02, 0x04, 0x22, 0x12, + 0x03, 0x19, 0x04, 0x2f, 0x0a, 0x7e, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x03, 0x1d, 0x02, + 0x59, 0x1a, 0x71, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, + 0x72, 0x75, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x77, 0x69, + 0x6c, 0x6c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, + 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x68, 0x61, + 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1d, + 0x06, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x1d, 0x16, 0x2c, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x1d, 0x37, 0x3d, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x1d, 0x3e, 0x55, 0x0a, 0x39, 0x0a, 0x04, + 0x06, 0x00, 0x02, 0x04, 0x12, 0x04, 0x20, 0x02, 0x22, 0x03, 0x1a, 0x2b, 0x20, 0x47, 0x65, 0x74, + 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x01, + 0x12, 0x03, 0x20, 0x06, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, + 0x20, 0x17, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x20, 0x39, + 0x51, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x04, 0x12, 0x03, 0x21, 0x04, 0x2f, 0x0a, + 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x04, 0x04, 0x22, 0x12, 0x03, 0x21, 0x04, 0x2f, 0x0a, 0x85, + 0x01, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x05, 0x12, 0x03, 0x25, 0x02, 0x62, 0x1a, 0x78, 0x20, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x77, 0x69, 0x6c, + 0x6c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x70, - 0x68, 0x61, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, - 0x03, 0x1d, 0x06, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x1d, - 0x16, 0x2c, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x1d, 0x37, 0x3d, - 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x1d, 0x3e, 0x55, 0x0a, 0x39, - 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, 0x12, 0x04, 0x20, 0x02, 0x22, 0x03, 0x1a, 0x2b, 0x20, 0x47, - 0x65, 0x74, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, - 0x04, 0x01, 0x12, 0x03, 0x20, 0x06, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x02, - 0x12, 0x03, 0x20, 0x17, 0x2e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, - 0x20, 0x39, 0x51, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x04, 0x12, 0x03, 0x21, 0x04, - 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x04, 0x04, 0x22, 0x12, 0x03, 0x21, 0x04, 0x2f, - 0x0a, 0x85, 0x01, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x05, 0x12, 0x03, 0x25, 0x02, 0x62, 0x1a, 0x78, - 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, - 0x61, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, - 0x20, 0x70, 0x68, 0x61, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, - 0x01, 0x12, 0x03, 0x25, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x02, 0x12, - 0x03, 0x25, 0x19, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x25, - 0x3d, 0x43, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x25, 0x44, 0x5e, - 0x0a, 0x33, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x06, 0x12, 0x04, 0x28, 0x02, 0x2a, 0x03, 0x1a, 0x25, - 0x20, 0x47, 0x65, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, - 0x28, 0x06, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x06, 0x02, 0x12, 0x03, 0x28, 0x14, - 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x28, 0x33, 0x48, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x06, 0x04, 0x12, 0x03, 0x29, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, - 0x06, 0x06, 0x00, 0x02, 0x06, 0x04, 0x22, 0x12, 0x03, 0x29, 0x04, 0x2f, 0x0a, 0x40, 0x0a, 0x04, - 0x06, 0x00, 0x02, 0x07, 0x12, 0x04, 0x2d, 0x02, 0x2f, 0x03, 0x1a, 0x32, 0x20, 0x4c, 0x69, 0x73, - 0x74, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x2d, 0x06, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x07, 0x02, 0x12, 0x03, 0x2d, 0x0f, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x07, 0x03, 0x12, 0x03, 0x2d, 0x29, 0x39, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x07, - 0x04, 0x12, 0x03, 0x2e, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x07, 0x04, 0x22, - 0x12, 0x03, 0x2e, 0x04, 0x2f, 0x0a, 0xb5, 0x01, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x08, 0x12, 0x03, - 0x33, 0x02, 0x47, 0x1a, 0xa7, 0x01, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x62, + 0x68, 0x61, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x01, 0x12, + 0x03, 0x25, 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x02, 0x12, 0x03, 0x25, + 0x19, 0x32, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x25, 0x3d, 0x43, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x25, 0x44, 0x5e, 0x0a, 0x33, + 0x0a, 0x04, 0x06, 0x00, 0x02, 0x06, 0x12, 0x04, 0x28, 0x02, 0x2a, 0x03, 0x1a, 0x25, 0x20, 0x47, + 0x65, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x28, 0x06, + 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x06, 0x02, 0x12, 0x03, 0x28, 0x14, 0x28, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x28, 0x33, 0x48, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x06, 0x04, 0x12, 0x03, 0x29, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, + 0x00, 0x02, 0x06, 0x04, 0x22, 0x12, 0x03, 0x29, 0x04, 0x2f, 0x0a, 0x40, 0x0a, 0x04, 0x06, 0x00, + 0x02, 0x07, 0x12, 0x04, 0x2d, 0x02, 0x2f, 0x03, 0x1a, 0x32, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, + 0x72, 0x75, 0x6e, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x2d, 0x06, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x07, 0x02, 0x12, 0x03, 0x2d, 0x0f, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x07, + 0x03, 0x12, 0x03, 0x2d, 0x29, 0x39, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x07, 0x04, 0x12, + 0x03, 0x2e, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x07, 0x04, 0x22, 0x12, 0x03, + 0x2e, 0x04, 0x2f, 0x0a, 0xb5, 0x01, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x08, 0x12, 0x03, 0x33, 0x02, + 0x47, 0x1a, 0xa7, 0x01, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x62, 0x61, 0x73, + 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x2e, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x20, 0x6d, 0x61, + 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x6c, 0x79, 0x20, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x0a, 0x20, 0x72, 0x75, 0x6e, 0x73, + 0x20, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, + 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, + 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x33, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x08, 0x02, 0x12, 0x03, 0x33, 0x10, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x08, 0x06, + 0x12, 0x03, 0x33, 0x2b, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x08, 0x03, 0x12, 0x03, + 0x33, 0x32, 0x43, 0x0a, 0x31, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x09, 0x12, 0x04, 0x36, 0x02, 0x38, + 0x03, 0x1a, 0x23, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, + 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, 0x01, 0x12, + 0x03, 0x36, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, 0x02, 0x12, 0x03, 0x36, + 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, 0x03, 0x12, 0x03, 0x36, 0x2f, 0x42, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, 0x04, 0x12, 0x03, 0x37, 0x04, 0x2f, 0x0a, 0x0d, + 0x0a, 0x06, 0x06, 0x00, 0x02, 0x09, 0x04, 0x22, 0x12, 0x03, 0x37, 0x04, 0x2f, 0x0a, 0xa6, 0x01, + 0x0a, 0x04, 0x06, 0x00, 0x02, 0x0a, 0x12, 0x03, 0x3c, 0x02, 0x50, 0x1a, 0x98, 0x01, 0x20, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, + 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x6e, 0x65, 0x77, + 0x6c, 0x79, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x0a, 0x20, 0x74, 0x6f, 0x20, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, 0x01, 0x12, + 0x03, 0x3c, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, 0x02, 0x12, 0x03, 0x3c, + 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, 0x06, 0x12, 0x03, 0x3c, 0x31, 0x37, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, 0x03, 0x12, 0x03, 0x3c, 0x38, 0x4c, 0x0a, 0x42, + 0x0a, 0x04, 0x06, 0x00, 0x02, 0x0b, 0x12, 0x03, 0x3f, 0x02, 0x62, 0x1a, 0x35, 0x20, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x38, 0x73, 0x20, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x75, + 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x6d, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0b, 0x01, 0x12, 0x03, 0x3f, 0x06, 0x18, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0b, 0x02, 0x12, 0x03, 0x3f, 0x19, 0x32, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0b, 0x06, 0x12, 0x03, 0x3f, 0x3d, 0x43, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x0b, 0x03, 0x12, 0x03, 0x3f, 0x44, 0x5e, 0x0a, 0x7a, 0x0a, 0x04, 0x06, 0x00, + 0x02, 0x0c, 0x12, 0x03, 0x42, 0x02, 0x46, 0x1a, 0x6d, 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, + 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x6c, 0x79, + 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x77, 0x6f, + 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0c, 0x01, 0x12, + 0x03, 0x42, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0c, 0x02, 0x12, 0x03, 0x42, + 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0c, 0x03, 0x12, 0x03, 0x42, 0x2f, 0x42, + 0x0a, 0x54, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x0d, 0x12, 0x03, 0x45, 0x02, 0x4d, 0x1a, 0x47, 0x20, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x2e, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x20, - 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x6c, - 0x79, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x0a, 0x20, 0x72, 0x75, - 0x6e, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x33, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, - 0x00, 0x02, 0x08, 0x02, 0x12, 0x03, 0x33, 0x10, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, - 0x08, 0x06, 0x12, 0x03, 0x33, 0x2b, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x08, 0x03, - 0x12, 0x03, 0x33, 0x32, 0x43, 0x0a, 0x31, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x09, 0x12, 0x04, 0x36, - 0x02, 0x38, 0x03, 0x1a, 0x23, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x67, 0x69, 0x76, - 0x65, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, - 0x01, 0x12, 0x03, 0x36, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, 0x02, 0x12, - 0x03, 0x36, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, 0x03, 0x12, 0x03, 0x36, - 0x2f, 0x42, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x09, 0x04, 0x12, 0x03, 0x37, 0x04, 0x2f, - 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x09, 0x04, 0x22, 0x12, 0x03, 0x37, 0x04, 0x2f, 0x0a, - 0xa6, 0x01, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x0a, 0x12, 0x03, 0x3c, 0x02, 0x50, 0x1a, 0x98, 0x01, - 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, - 0x6e, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x6e, - 0x65, 0x77, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x0a, 0x20, 0x74, 0x6f, 0x20, 0x20, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, - 0x01, 0x12, 0x03, 0x3c, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, 0x02, 0x12, - 0x03, 0x3c, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, 0x06, 0x12, 0x03, 0x3c, - 0x31, 0x37, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0a, 0x03, 0x12, 0x03, 0x3c, 0x38, 0x4c, - 0x0a, 0x42, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x0b, 0x12, 0x03, 0x3f, 0x02, 0x62, 0x1a, 0x35, 0x20, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x38, 0x73, 0x20, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0b, 0x01, 0x12, 0x03, 0x3f, - 0x06, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0b, 0x02, 0x12, 0x03, 0x3f, 0x19, 0x32, - 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0b, 0x06, 0x12, 0x03, 0x3f, 0x3d, 0x43, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0b, 0x03, 0x12, 0x03, 0x3f, 0x44, 0x5e, 0x0a, 0x7a, 0x0a, 0x04, - 0x06, 0x00, 0x02, 0x0c, 0x12, 0x03, 0x42, 0x02, 0x46, 0x1a, 0x6d, 0x20, 0x41, 0x62, 0x6f, 0x72, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x61, - 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, - 0x6c, 0x79, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x73, - 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, - 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0c, - 0x01, 0x12, 0x03, 0x42, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0c, 0x02, 0x12, - 0x03, 0x42, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0c, 0x03, 0x12, 0x03, 0x42, - 0x2f, 0x42, 0x0a, 0x54, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x0d, 0x12, 0x03, 0x45, 0x02, 0x4d, 0x1a, - 0x47, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, - 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, - 0x01, 0x12, 0x03, 0x45, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, 0x02, 0x12, - 0x03, 0x45, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, 0x06, 0x12, 0x03, 0x45, - 0x2f, 0x35, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, 0x03, 0x12, 0x03, 0x45, 0x36, 0x49, - 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x49, 0x00, 0x6a, 0x01, 0x1a, 0x25, 0x20, 0x52, + 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, 0x01, 0x12, + 0x03, 0x45, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, 0x02, 0x12, 0x03, 0x45, + 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, 0x06, 0x12, 0x03, 0x45, 0x2f, 0x35, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x0d, 0x03, 0x12, 0x03, 0x45, 0x36, 0x49, 0x0a, 0x31, + 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x49, 0x00, 0x6a, 0x01, 0x1a, 0x25, 0x20, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x49, 0x08, 0x18, 0x0a, 0x0c, 0x0a, + 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, 0x4a, 0x02, 0x52, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x4a, 0x08, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, + 0x00, 0x02, 0x12, 0x03, 0x4b, 0x04, 0x30, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x08, 0x00, 0x02, + 0x87, 0x09, 0x01, 0x12, 0x03, 0x4b, 0x04, 0x30, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, + 0x12, 0x03, 0x4e, 0x04, 0x24, 0x1a, 0x1b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x69, 0x64, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x4e, 0x04, 0x18, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4e, 0x19, 0x1f, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4e, 0x22, 0x23, 0x0a, 0x47, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x51, 0x04, 0x2c, 0x1a, 0x3a, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, + 0x51, 0x04, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x51, 0x1d, + 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x51, 0x2a, 0x2b, 0x0a, + 0x20, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x01, 0x12, 0x04, 0x55, 0x02, 0x60, 0x03, 0x1a, 0x12, 0x20, + 0x54, 0x68, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x01, 0x01, 0x12, 0x03, 0x55, 0x08, 0x0c, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x01, 0x02, 0x12, 0x03, 0x56, 0x04, 0x30, 0x0a, 0x0f, 0x0a, + 0x08, 0x04, 0x00, 0x08, 0x01, 0x02, 0x87, 0x09, 0x01, 0x12, 0x03, 0x56, 0x04, 0x30, 0x0a, 0x22, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x59, 0x04, 0x24, 0x1a, 0x15, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x69, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x59, 0x04, 0x17, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x59, 0x18, 0x1f, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x59, 0x22, 0x23, 0x0a, 0x24, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x5c, 0x04, 0x20, 0x1a, 0x17, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x74, 0x61, 0x73, 0x6b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x5c, 0x04, 0x11, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x5c, 0x12, 0x1b, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x5c, 0x1e, 0x1f, 0x0a, 0x27, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x5f, 0x04, 0x28, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, + 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, + 0x75, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, + 0x5f, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x5f, 0x17, + 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x5f, 0x26, 0x27, 0x0a, + 0x1d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, 0x63, 0x02, 0x19, 0x1a, 0x10, 0x20, 0x49, + 0x6e, 0x70, 0x75, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x63, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x63, 0x0e, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x05, 0x03, 0x12, 0x03, 0x63, 0x17, 0x18, 0x0a, 0x23, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, + 0x12, 0x03, 0x66, 0x02, 0x1c, 0x1a, 0x16, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x20, + 0x73, 0x70, 0x65, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x06, 0x06, 0x12, 0x03, 0x66, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x66, 0x0f, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x06, 0x03, 0x12, 0x03, 0x66, 0x1a, 0x1b, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, + 0x03, 0x69, 0x02, 0x17, 0x1a, 0x29, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, + 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x06, 0x12, 0x03, 0x69, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x69, 0x0c, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x07, 0x03, 0x12, 0x03, 0x69, 0x15, 0x16, 0x0a, 0x32, 0x0a, 0x02, 0x04, 0x01, 0x12, + 0x04, 0x6d, 0x00, 0x6f, 0x01, 0x1a, 0x26, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x6d, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, + 0x00, 0x12, 0x03, 0x6e, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x6e, 0x02, 0x05, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x6e, + 0x06, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x6e, 0x0c, 0x0d, + 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x72, 0x00, 0x78, 0x01, 0x1a, 0x25, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, - 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x49, 0x08, 0x18, 0x0a, - 0x0c, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x00, 0x12, 0x04, 0x4a, 0x02, 0x52, 0x03, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x08, 0x00, 0x01, 0x12, 0x03, 0x4a, 0x08, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x08, 0x00, 0x02, 0x12, 0x03, 0x4b, 0x04, 0x30, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x08, - 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x03, 0x4b, 0x04, 0x30, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x00, - 0x02, 0x00, 0x12, 0x03, 0x4e, 0x04, 0x24, 0x1a, 0x1b, 0x20, 0x54, 0x68, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x20, - 0x69, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x4e, - 0x04, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4e, 0x19, 0x1f, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4e, 0x22, 0x23, 0x0a, 0x47, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x51, 0x04, 0x2c, 0x1a, 0x3a, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x64, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, - 0x12, 0x03, 0x51, 0x04, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, - 0x51, 0x1d, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x51, 0x2a, - 0x2b, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x00, 0x08, 0x01, 0x12, 0x04, 0x55, 0x02, 0x60, 0x03, 0x1a, - 0x12, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, - 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x01, 0x01, 0x12, 0x03, 0x55, 0x08, - 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x08, 0x01, 0x02, 0x12, 0x03, 0x56, 0x04, 0x30, 0x0a, - 0x0f, 0x0a, 0x08, 0x04, 0x00, 0x08, 0x01, 0x02, 0x87, 0x09, 0x01, 0x12, 0x03, 0x56, 0x04, 0x30, - 0x0a, 0x22, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x59, 0x04, 0x24, 0x1a, 0x15, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x69, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x75, - 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x59, - 0x04, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x59, 0x18, 0x1f, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x59, 0x22, 0x23, 0x0a, 0x24, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x5c, 0x04, 0x20, 0x1a, 0x17, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x75, - 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x5c, - 0x04, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x5c, 0x12, 0x1b, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x5c, 0x1e, 0x1f, 0x0a, 0x27, - 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x5f, 0x04, 0x28, 0x1a, 0x1a, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x06, - 0x12, 0x03, 0x5f, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, - 0x5f, 0x17, 0x23, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x5f, 0x26, - 0x27, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, 0x63, 0x02, 0x19, 0x1a, 0x10, - 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x63, 0x02, 0x0d, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x63, 0x0e, 0x14, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x63, 0x17, 0x18, 0x0a, 0x23, 0x0a, 0x04, 0x04, 0x00, - 0x02, 0x06, 0x12, 0x03, 0x66, 0x02, 0x1c, 0x1a, 0x16, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x75, - 0x6e, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x06, 0x12, 0x03, 0x66, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x66, 0x0f, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x66, 0x1a, 0x1b, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x00, 0x02, - 0x07, 0x12, 0x03, 0x69, 0x02, 0x17, 0x1a, 0x29, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x2e, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x06, 0x12, 0x03, 0x69, 0x02, 0x0b, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x69, 0x0c, 0x12, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x07, 0x03, 0x12, 0x03, 0x69, 0x15, 0x16, 0x0a, 0x32, 0x0a, 0x02, 0x04, - 0x01, 0x12, 0x04, 0x6d, 0x00, 0x6f, 0x01, 0x1a, 0x26, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x6d, 0x08, 0x19, 0x0a, 0x0b, 0x0a, 0x04, 0x04, - 0x01, 0x02, 0x00, 0x12, 0x03, 0x6e, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x06, 0x12, 0x03, 0x6e, 0x02, 0x05, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x6e, 0x06, 0x09, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x6e, - 0x0c, 0x0d, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x72, 0x00, 0x78, 0x01, 0x1a, 0x25, - 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, - 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x72, 0x08, - 0x17, 0x0a, 0x1c, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x74, 0x02, 0x49, 0x1a, 0x0f, - 0x20, 0x52, 0x75, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x74, 0x02, 0x16, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x74, 0x17, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x74, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, - 0x00, 0x08, 0x12, 0x03, 0x74, 0x22, 0x48, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x00, 0x08, - 0x87, 0x09, 0x19, 0x12, 0x03, 0x74, 0x23, 0x47, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, - 0x12, 0x03, 0x77, 0x02, 0x1d, 0x1a, 0x2d, 0x20, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x75, 0x6e, 0x2e, 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, - 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x77, - 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x77, 0x0b, 0x11, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x77, 0x12, 0x18, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x77, 0x1b, 0x1c, 0x0a, 0x31, 0x0a, 0x02, - 0x04, 0x03, 0x12, 0x03, 0x7b, 0x00, 0x1b, 0x1a, 0x26, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, - 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x7b, 0x08, 0x18, 0x0a, 0x4c, 0x0a, 0x02, 0x04, - 0x04, 0x12, 0x05, 0x7e, 0x00, 0x81, 0x01, 0x01, 0x1a, 0x3f, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, + 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, + 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x72, 0x08, 0x17, 0x0a, + 0x1c, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x74, 0x02, 0x49, 0x1a, 0x0f, 0x20, 0x52, + 0x75, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x74, 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x74, 0x17, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x74, 0x20, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, + 0x12, 0x03, 0x74, 0x22, 0x48, 0x0a, 0x0f, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, + 0x19, 0x12, 0x03, 0x74, 0x23, 0x47, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, + 0x77, 0x02, 0x1d, 0x1a, 0x2d, 0x20, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, + 0x6e, 0x2e, 0x20, 0x69, 0x66, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x77, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x77, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, 0x77, 0x12, 0x18, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x77, 0x1b, 0x1c, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x03, + 0x12, 0x03, 0x7b, 0x00, 0x1b, 0x1a, 0x26, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, + 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x7b, 0x08, 0x18, 0x0a, 0x4c, 0x0a, 0x02, 0x04, 0x04, 0x12, + 0x05, 0x7e, 0x00, 0x81, 0x01, 0x01, 0x1a, 0x3f, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, + 0x7e, 0x08, 0x1c, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x04, 0x80, 0x01, 0x02, + 0x49, 0x1a, 0x0f, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x04, 0x80, 0x01, 0x02, + 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x04, 0x80, 0x01, 0x17, 0x1d, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x04, 0x80, 0x01, 0x20, 0x21, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x04, 0x80, 0x01, 0x22, 0x48, 0x0a, 0x10, + 0x0a, 0x08, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x80, 0x01, 0x23, 0x47, + 0x0a, 0x4e, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x06, 0x84, 0x01, 0x00, 0x87, 0x01, 0x01, 0x1a, 0x40, + 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, + 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x04, 0x84, 0x01, 0x08, 0x1d, 0x0a, 0x33, 0x0a, + 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x04, 0x86, 0x01, 0x02, 0x19, 0x1a, 0x25, 0x20, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, + 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x04, 0x86, 0x01, 0x02, + 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x04, 0x86, 0x01, 0x0d, 0x14, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x04, 0x86, 0x01, 0x17, 0x18, 0x0a, + 0x4e, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x06, 0x8a, 0x01, 0x00, 0x8d, 0x01, 0x01, 0x1a, 0x40, 0x20, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, + 0x0b, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x08, 0x1e, 0x0a, 0x1d, 0x0a, 0x04, + 0x04, 0x06, 0x02, 0x00, 0x12, 0x04, 0x8c, 0x01, 0x02, 0x49, 0x1a, 0x0f, 0x20, 0x52, 0x75, 0x6e, + 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x00, 0x06, 0x12, 0x04, 0x8c, 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x00, 0x01, 0x12, 0x04, 0x8c, 0x01, 0x17, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x00, 0x03, 0x12, 0x04, 0x8c, 0x01, 0x20, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, + 0x08, 0x12, 0x04, 0x8c, 0x01, 0x22, 0x48, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x06, 0x02, 0x00, 0x08, + 0x87, 0x09, 0x19, 0x12, 0x04, 0x8c, 0x01, 0x23, 0x47, 0x0a, 0x4f, 0x0a, 0x02, 0x04, 0x07, 0x12, + 0x06, 0x90, 0x01, 0x00, 0x93, 0x01, 0x01, 0x1a, 0x41, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, + 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x07, + 0x01, 0x12, 0x04, 0x90, 0x01, 0x08, 0x1f, 0x0a, 0x33, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, + 0x04, 0x92, 0x01, 0x02, 0x19, 0x1a, 0x25, 0x20, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x04, 0x92, 0x01, 0x02, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x07, 0x02, 0x00, 0x01, 0x12, 0x04, 0x92, 0x01, 0x0d, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x00, 0x03, 0x12, 0x04, 0x92, 0x01, 0x17, 0x18, 0x0a, 0x51, 0x0a, 0x02, 0x04, 0x08, 0x12, + 0x06, 0x96, 0x01, 0x00, 0x99, 0x01, 0x01, 0x1a, 0x43, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, + 0x04, 0x08, 0x01, 0x12, 0x04, 0x96, 0x01, 0x08, 0x1f, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x08, 0x02, + 0x00, 0x12, 0x04, 0x98, 0x01, 0x02, 0x4f, 0x1a, 0x12, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x08, 0x02, 0x00, 0x06, 0x12, 0x04, 0x98, 0x01, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, + 0x02, 0x00, 0x01, 0x12, 0x04, 0x98, 0x01, 0x1a, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x00, 0x03, 0x12, 0x04, 0x98, 0x01, 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, + 0x08, 0x12, 0x04, 0x98, 0x01, 0x28, 0x4e, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x08, 0x02, 0x00, 0x08, + 0x87, 0x09, 0x19, 0x12, 0x04, 0x98, 0x01, 0x29, 0x4d, 0x0a, 0x52, 0x0a, 0x02, 0x04, 0x09, 0x12, + 0x06, 0x9c, 0x01, 0x00, 0x9f, 0x01, 0x01, 0x1a, 0x44, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, - 0x12, 0x03, 0x7e, 0x08, 0x1c, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x04, 0x80, - 0x01, 0x02, 0x49, 0x1a, 0x0f, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x04, 0x80, - 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x04, 0x80, 0x01, - 0x17, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x04, 0x80, 0x01, 0x20, - 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x04, 0x80, 0x01, 0x22, 0x48, - 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x80, 0x01, - 0x23, 0x47, 0x0a, 0x4e, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x06, 0x84, 0x01, 0x00, 0x87, 0x01, 0x01, - 0x1a, 0x40, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, - 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x04, 0x84, 0x01, 0x08, 0x1d, 0x0a, - 0x33, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x04, 0x86, 0x01, 0x02, 0x19, 0x1a, 0x25, 0x20, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x04, 0x86, - 0x01, 0x02, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x04, 0x86, 0x01, - 0x0d, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x04, 0x86, 0x01, 0x17, - 0x18, 0x0a, 0x4e, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x06, 0x8a, 0x01, 0x00, 0x8d, 0x01, 0x01, 0x1a, - 0x40, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, - 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x04, 0x8a, 0x01, 0x08, 0x1e, 0x0a, 0x1d, - 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x04, 0x8c, 0x01, 0x02, 0x49, 0x1a, 0x0f, 0x20, 0x52, - 0x75, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x06, 0x02, 0x00, 0x06, 0x12, 0x04, 0x8c, 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8c, 0x01, 0x17, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x06, 0x02, 0x00, 0x03, 0x12, 0x04, 0x8c, 0x01, 0x20, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x00, 0x08, 0x12, 0x04, 0x8c, 0x01, 0x22, 0x48, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x06, 0x02, - 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x8c, 0x01, 0x23, 0x47, 0x0a, 0x4f, 0x0a, 0x02, 0x04, - 0x07, 0x12, 0x06, 0x90, 0x01, 0x00, 0x93, 0x01, 0x01, 0x1a, 0x41, 0x20, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, - 0x04, 0x07, 0x01, 0x12, 0x04, 0x90, 0x01, 0x08, 0x1f, 0x0a, 0x33, 0x0a, 0x04, 0x04, 0x07, 0x02, - 0x00, 0x12, 0x04, 0x92, 0x01, 0x02, 0x19, 0x1a, 0x25, 0x20, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x04, 0x92, 0x01, 0x02, 0x0c, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x04, 0x92, 0x01, 0x0d, 0x14, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x04, 0x92, 0x01, 0x17, 0x18, 0x0a, 0x51, 0x0a, 0x02, 0x04, - 0x08, 0x12, 0x06, 0x96, 0x01, 0x00, 0x99, 0x01, 0x01, 0x1a, 0x43, 0x20, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, - 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x04, 0x96, 0x01, 0x08, 0x1f, 0x0a, 0x20, 0x0a, 0x04, 0x04, - 0x08, 0x02, 0x00, 0x12, 0x04, 0x98, 0x01, 0x02, 0x4f, 0x1a, 0x12, 0x20, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x08, 0x02, 0x00, 0x06, 0x12, 0x04, 0x98, 0x01, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x04, 0x98, 0x01, 0x1a, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x08, 0x02, 0x00, 0x03, 0x12, 0x04, 0x98, 0x01, 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x08, - 0x02, 0x00, 0x08, 0x12, 0x04, 0x98, 0x01, 0x28, 0x4e, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x08, 0x02, - 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x98, 0x01, 0x29, 0x4d, 0x0a, 0x52, 0x0a, 0x02, 0x04, - 0x09, 0x12, 0x06, 0x9c, 0x01, 0x00, 0x9f, 0x01, 0x01, 0x1a, 0x44, 0x20, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x67, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0b, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x04, 0x9c, 0x01, 0x08, 0x20, 0x0a, 0x36, 0x0a, 0x04, - 0x04, 0x09, 0x02, 0x00, 0x12, 0x04, 0x9e, 0x01, 0x02, 0x1c, 0x1a, 0x28, 0x20, 0x44, 0x65, 0x74, + 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, + 0x03, 0x04, 0x09, 0x01, 0x12, 0x04, 0x9c, 0x01, 0x08, 0x20, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x09, + 0x02, 0x00, 0x12, 0x04, 0x9e, 0x01, 0x02, 0x1c, 0x1a, 0x28, 0x20, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x06, 0x12, 0x04, 0x9e, 0x01, 0x02, + 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9e, 0x01, 0x10, 0x17, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9e, 0x01, 0x1a, 0x1b, 0x0a, + 0x52, 0x0a, 0x02, 0x04, 0x0a, 0x12, 0x06, 0xa2, 0x01, 0x00, 0xa5, 0x01, 0x01, 0x1a, 0x44, 0x20, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x06, 0x12, 0x04, 0x9e, - 0x01, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9e, 0x01, - 0x10, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9e, 0x01, 0x1a, - 0x1b, 0x0a, 0x52, 0x0a, 0x02, 0x04, 0x0a, 0x12, 0x06, 0xa2, 0x01, 0x00, 0xa5, 0x01, 0x01, 0x1a, - 0x44, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0a, 0x01, 0x12, 0x04, 0xa2, 0x01, 0x08, 0x21, + 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x00, 0x12, 0x04, 0xa4, 0x01, 0x02, 0x4f, 0x1a, 0x12, + 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x06, 0x12, 0x04, 0xa4, 0x01, 0x02, + 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x01, 0x12, 0x04, 0xa4, 0x01, 0x1a, 0x23, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x03, 0x12, 0x04, 0xa4, 0x01, 0x26, 0x27, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x12, 0x04, 0xa4, 0x01, 0x28, 0x4e, 0x0a, 0x10, + 0x0a, 0x08, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xa4, 0x01, 0x29, 0x4d, + 0x0a, 0x53, 0x0a, 0x02, 0x04, 0x0b, 0x12, 0x06, 0xa8, 0x01, 0x00, 0xab, 0x01, 0x01, 0x1a, 0x45, + 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0a, 0x01, 0x12, 0x04, 0xa2, 0x01, - 0x08, 0x21, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x0a, 0x02, 0x00, 0x12, 0x04, 0xa4, 0x01, 0x02, 0x4f, - 0x1a, 0x12, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x06, 0x12, 0x04, 0xa4, - 0x01, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x01, 0x12, 0x04, 0xa4, 0x01, - 0x1a, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x03, 0x12, 0x04, 0xa4, 0x01, 0x26, - 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x12, 0x04, 0xa4, 0x01, 0x28, 0x4e, - 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0a, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xa4, 0x01, - 0x29, 0x4d, 0x0a, 0x53, 0x0a, 0x02, 0x04, 0x0b, 0x12, 0x06, 0xa8, 0x01, 0x00, 0xab, 0x01, 0x01, - 0x1a, 0x45, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, - 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0b, 0x01, 0x12, 0x04, - 0xa8, 0x01, 0x08, 0x22, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x0b, 0x02, 0x00, 0x12, 0x04, 0xaa, 0x01, - 0x02, 0x1c, 0x1a, 0x28, 0x20, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0b, 0x02, 0x00, 0x06, 0x12, 0x04, 0xaa, 0x01, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0b, 0x02, 0x00, 0x01, 0x12, 0x04, 0xaa, 0x01, 0x10, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, - 0x02, 0x00, 0x03, 0x12, 0x04, 0xaa, 0x01, 0x1a, 0x1b, 0x0a, 0x39, 0x0a, 0x02, 0x04, 0x0c, 0x12, - 0x06, 0xae, 0x01, 0x00, 0xb1, 0x01, 0x01, 0x1a, 0x2b, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0c, 0x01, 0x12, 0x04, 0xae, 0x01, 0x08, - 0x1c, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x00, 0x12, 0x04, 0xb0, 0x01, 0x02, 0x4f, 0x1a, - 0x12, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x06, 0x12, 0x04, 0xb0, 0x01, - 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb0, 0x01, 0x1a, - 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb0, 0x01, 0x26, 0x27, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x08, 0x12, 0x04, 0xb0, 0x01, 0x28, 0x4e, 0x0a, - 0x10, 0x0a, 0x08, 0x04, 0x0c, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xb0, 0x01, 0x29, - 0x4d, 0x0a, 0x3a, 0x0a, 0x02, 0x04, 0x0d, 0x12, 0x06, 0xb4, 0x01, 0x00, 0xba, 0x01, 0x01, 0x1a, - 0x2c, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, - 0x03, 0x04, 0x0d, 0x01, 0x12, 0x04, 0xb4, 0x01, 0x08, 0x1d, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x0d, - 0x02, 0x00, 0x12, 0x04, 0xb6, 0x01, 0x02, 0x19, 0x1a, 0x18, 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x06, 0x12, 0x04, 0xb6, 0x01, 0x02, - 0x0d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb6, 0x01, 0x0e, 0x14, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb6, 0x01, 0x17, 0x18, 0x0a, - 0x27, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x01, 0x02, 0x1b, 0x1a, 0x19, 0x20, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, - 0x06, 0x12, 0x04, 0xb9, 0x01, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x01, - 0x12, 0x04, 0xb9, 0x01, 0x0f, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x03, 0x12, - 0x04, 0xb9, 0x01, 0x19, 0x1a, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x0e, 0x12, 0x06, 0xbd, 0x01, 0x00, - 0xd5, 0x01, 0x01, 0x1a, 0x23, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0e, 0x01, 0x12, - 0x04, 0xbd, 0x01, 0x08, 0x17, 0x0a, 0x19, 0x0a, 0x03, 0x04, 0x0e, 0x09, 0x12, 0x04, 0xbe, 0x01, - 0x02, 0x10, 0x22, 0x0c, 0x20, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x0a, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, 0x09, 0x00, 0x12, 0x04, 0xbe, 0x01, 0x0b, 0x0c, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0e, 0x09, 0x00, 0x01, 0x12, 0x04, 0xbe, 0x01, 0x0b, 0x0c, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0e, 0x09, 0x00, 0x02, 0x12, 0x04, 0xbe, 0x01, 0x0b, 0x0c, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x0e, 0x09, 0x01, 0x12, 0x04, 0xbe, 0x01, 0x0e, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, - 0x09, 0x01, 0x01, 0x12, 0x04, 0xbe, 0x01, 0x0e, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x09, - 0x01, 0x02, 0x12, 0x04, 0xbe, 0x01, 0x0e, 0x0f, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x00, - 0x12, 0x04, 0xc1, 0x01, 0x02, 0x21, 0x1a, 0x21, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, - 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, - 0x00, 0x06, 0x12, 0x04, 0xc1, 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, - 0x01, 0x12, 0x04, 0xc1, 0x01, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x03, - 0x12, 0x04, 0xc1, 0x01, 0x1f, 0x20, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0e, 0x08, 0x00, 0x12, 0x06, - 0xc3, 0x01, 0x02, 0xd4, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x08, 0x00, 0x01, 0x12, - 0x04, 0xc3, 0x01, 0x08, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x08, 0x00, 0x02, 0x12, 0x04, - 0xc4, 0x01, 0x04, 0x30, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0e, 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, - 0x12, 0x04, 0xc4, 0x01, 0x04, 0x30, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x01, 0x12, 0x04, - 0xc7, 0x01, 0x04, 0x3d, 0x1a, 0x27, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0e, 0x02, 0x01, 0x05, 0x12, 0x04, 0xc7, 0x01, 0x04, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0e, 0x02, 0x01, 0x01, 0x12, 0x04, 0xc7, 0x01, 0x0b, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0e, 0x02, 0x01, 0x03, 0x12, 0x04, 0xc7, 0x01, 0x11, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, - 0x02, 0x01, 0x08, 0x12, 0x04, 0xc7, 0x01, 0x13, 0x3c, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0e, 0x02, - 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x04, 0xc7, 0x01, 0x14, 0x3b, 0x0a, 0x36, 0x0a, 0x04, - 0x04, 0x0e, 0x02, 0x02, 0x12, 0x04, 0xca, 0x01, 0x04, 0x2c, 0x1a, 0x28, 0x20, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, - 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x06, 0x12, 0x04, 0xca, - 0x01, 0x04, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x01, 0x12, 0x04, 0xca, 0x01, - 0x1d, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x03, 0x12, 0x04, 0xca, 0x01, 0x2a, - 0x2b, 0x0a, 0x31, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x03, 0x12, 0x04, 0xcd, 0x01, 0x04, 0x28, 0x1a, - 0x23, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x03, 0x06, 0x12, 0x04, 0xcd, - 0x01, 0x04, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x03, 0x01, 0x12, 0x04, 0xcd, 0x01, - 0x17, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x03, 0x03, 0x12, 0x04, 0xcd, 0x01, 0x26, - 0x27, 0x0a, 0x2c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x04, 0x12, 0x04, 0xd0, 0x01, 0x04, 0x20, 0x1a, - 0x1e, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x0a, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x04, 0x06, 0x12, 0x04, 0xd0, 0x01, 0x04, 0x11, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x04, 0x01, 0x12, 0x04, 0xd0, 0x01, 0x12, 0x1b, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x0e, 0x02, 0x04, 0x03, 0x12, 0x04, 0xd0, 0x01, 0x1e, 0x1f, 0x0a, 0x32, 0x0a, 0x04, - 0x04, 0x0e, 0x02, 0x05, 0x12, 0x04, 0xd3, 0x01, 0x04, 0x24, 0x1a, 0x24, 0x20, 0x54, 0x61, 0x73, - 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x05, 0x06, 0x12, 0x04, 0xd3, 0x01, 0x04, 0x17, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x05, 0x01, 0x12, 0x04, 0xd3, 0x01, 0x18, 0x1f, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x05, 0x03, 0x12, 0x04, 0xd3, 0x01, 0x22, 0x23, 0x0a, 0x32, 0x0a, - 0x02, 0x04, 0x0f, 0x12, 0x06, 0xd8, 0x01, 0x00, 0xde, 0x01, 0x01, 0x1a, 0x24, 0x20, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, - 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0f, 0x01, 0x12, 0x04, 0xd8, 0x01, 0x08, 0x18, 0x0a, 0x3a, - 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x00, 0x12, 0x04, 0xda, 0x01, 0x02, 0x18, 0x1a, 0x2c, 0x20, 0x4c, - 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, - 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, - 0x02, 0x00, 0x04, 0x12, 0x04, 0xda, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, - 0x00, 0x06, 0x12, 0x04, 0xda, 0x01, 0x0b, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, - 0x01, 0x12, 0x04, 0xda, 0x01, 0x0f, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x03, - 0x12, 0x04, 0xda, 0x01, 0x16, 0x17, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x01, 0x12, 0x04, - 0xdd, 0x01, 0x02, 0x13, 0x1a, 0x36, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, - 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x0f, 0x02, 0x01, 0x05, 0x12, 0x04, 0xdd, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x0f, 0x02, 0x01, 0x01, 0x12, 0x04, 0xdd, 0x01, 0x09, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, - 0x02, 0x01, 0x03, 0x12, 0x04, 0xdd, 0x01, 0x11, 0x12, 0x0a, 0x32, 0x0a, 0x02, 0x04, 0x10, 0x12, - 0x06, 0xe1, 0x01, 0x00, 0xee, 0x01, 0x01, 0x1a, 0x24, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, - 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, - 0x03, 0x04, 0x10, 0x01, 0x12, 0x04, 0xe1, 0x01, 0x08, 0x18, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x10, - 0x08, 0x00, 0x12, 0x06, 0xe2, 0x01, 0x02, 0xed, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, - 0x08, 0x00, 0x01, 0x12, 0x04, 0xe2, 0x01, 0x08, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x08, - 0x00, 0x02, 0x12, 0x04, 0xe3, 0x01, 0x04, 0x30, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x10, 0x08, 0x00, - 0x02, 0x87, 0x09, 0x01, 0x12, 0x04, 0xe3, 0x01, 0x04, 0x30, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x10, - 0x02, 0x00, 0x12, 0x04, 0xe6, 0x01, 0x04, 0x3d, 0x1a, 0x27, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, - 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x00, 0x05, 0x12, 0x04, 0xe6, 0x01, 0x04, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe6, 0x01, 0x0b, 0x0e, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x00, 0x03, 0x12, 0x04, 0xe6, 0x01, 0x11, 0x12, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x10, 0x02, 0x00, 0x08, 0x12, 0x04, 0xe6, 0x01, 0x13, 0x3c, 0x0a, 0x11, 0x0a, - 0x09, 0x04, 0x10, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x04, 0xe6, 0x01, 0x14, 0x3b, - 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x01, 0x12, 0x04, 0xe8, 0x01, 0x04, 0x2c, 0x1a, 0x28, - 0x20, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, - 0x06, 0x12, 0x04, 0xe8, 0x01, 0x04, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x01, - 0x12, 0x04, 0xe8, 0x01, 0x1d, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x03, 0x12, - 0x04, 0xe8, 0x01, 0x2a, 0x2b, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x02, 0x12, 0x04, 0xea, - 0x01, 0x04, 0x2c, 0x1a, 0x28, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x10, 0x02, 0x02, 0x06, 0x12, 0x04, 0xea, 0x01, 0x04, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x10, 0x02, 0x02, 0x01, 0x12, 0x04, 0xea, 0x01, 0x1d, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x10, 0x02, 0x02, 0x03, 0x12, 0x04, 0xea, 0x01, 0x2a, 0x2b, 0x0a, 0x33, 0x0a, 0x04, 0x04, 0x10, - 0x02, 0x03, 0x12, 0x04, 0xec, 0x01, 0x04, 0x24, 0x1a, 0x25, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, + 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0b, 0x01, 0x12, 0x04, 0xa8, 0x01, + 0x08, 0x22, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x0b, 0x02, 0x00, 0x12, 0x04, 0xaa, 0x01, 0x02, 0x1c, + 0x1a, 0x28, 0x20, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, + 0x02, 0x00, 0x06, 0x12, 0x04, 0xaa, 0x01, 0x02, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, + 0x00, 0x01, 0x12, 0x04, 0xaa, 0x01, 0x10, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0b, 0x02, 0x00, + 0x03, 0x12, 0x04, 0xaa, 0x01, 0x1a, 0x1b, 0x0a, 0x39, 0x0a, 0x02, 0x04, 0x0c, 0x12, 0x06, 0xae, + 0x01, 0x00, 0xb1, 0x01, 0x01, 0x1a, 0x2b, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, + 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0c, 0x01, 0x12, 0x04, 0xae, 0x01, 0x08, 0x1c, 0x0a, + 0x20, 0x0a, 0x04, 0x04, 0x0c, 0x02, 0x00, 0x12, 0x04, 0xb0, 0x01, 0x02, 0x4f, 0x1a, 0x12, 0x20, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x06, 0x12, 0x04, 0xb0, 0x01, 0x02, 0x19, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb0, 0x01, 0x1a, 0x23, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb0, 0x01, 0x26, 0x27, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0c, 0x02, 0x00, 0x08, 0x12, 0x04, 0xb0, 0x01, 0x28, 0x4e, 0x0a, 0x10, 0x0a, + 0x08, 0x04, 0x0c, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xb0, 0x01, 0x29, 0x4d, 0x0a, + 0x3a, 0x0a, 0x02, 0x04, 0x0d, 0x12, 0x06, 0xb4, 0x01, 0x00, 0xba, 0x01, 0x01, 0x1a, 0x2c, 0x20, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, + 0x0d, 0x01, 0x12, 0x04, 0xb4, 0x01, 0x08, 0x1d, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x0d, 0x02, 0x00, + 0x12, 0x04, 0xb6, 0x01, 0x02, 0x19, 0x1a, 0x18, 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x06, 0x12, 0x04, 0xb6, 0x01, 0x02, 0x0d, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb6, 0x01, 0x0e, 0x14, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb6, 0x01, 0x17, 0x18, 0x0a, 0x27, 0x0a, + 0x04, 0x04, 0x0d, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x01, 0x02, 0x1b, 0x1a, 0x19, 0x20, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x06, 0x12, + 0x04, 0xb9, 0x01, 0x02, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x01, 0x12, 0x04, + 0xb9, 0x01, 0x0f, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0d, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb9, + 0x01, 0x19, 0x1a, 0x0a, 0x31, 0x0a, 0x02, 0x04, 0x0e, 0x12, 0x06, 0xbd, 0x01, 0x00, 0xd5, 0x01, + 0x01, 0x1a, 0x23, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, + 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x0e, 0x01, 0x12, 0x04, 0xbd, + 0x01, 0x08, 0x17, 0x0a, 0x19, 0x0a, 0x03, 0x04, 0x0e, 0x09, 0x12, 0x04, 0xbe, 0x01, 0x02, 0x10, + 0x22, 0x0c, 0x20, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x0a, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x0e, 0x09, 0x00, 0x12, 0x04, 0xbe, 0x01, 0x0b, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0e, 0x09, 0x00, 0x01, 0x12, 0x04, 0xbe, 0x01, 0x0b, 0x0c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0e, 0x09, 0x00, 0x02, 0x12, 0x04, 0xbe, 0x01, 0x0b, 0x0c, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x0e, + 0x09, 0x01, 0x12, 0x04, 0xbe, 0x01, 0x0e, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x09, 0x01, + 0x01, 0x12, 0x04, 0xbe, 0x01, 0x0e, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x09, 0x01, 0x02, + 0x12, 0x04, 0xbe, 0x01, 0x0e, 0x0f, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x00, 0x12, 0x04, + 0xc1, 0x01, 0x02, 0x21, 0x1a, 0x21, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6c, 0x69, + 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x06, + 0x12, 0x04, 0xc1, 0x01, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x01, 0x12, + 0x04, 0xc1, 0x01, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x00, 0x03, 0x12, 0x04, + 0xc1, 0x01, 0x1f, 0x20, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x0e, 0x08, 0x00, 0x12, 0x06, 0xc3, 0x01, + 0x02, 0xd4, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x08, 0x00, 0x01, 0x12, 0x04, 0xc3, + 0x01, 0x08, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x08, 0x00, 0x02, 0x12, 0x04, 0xc4, 0x01, + 0x04, 0x30, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x0e, 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x04, + 0xc4, 0x01, 0x04, 0x30, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x01, 0x12, 0x04, 0xc7, 0x01, + 0x04, 0x3d, 0x1a, 0x27, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0e, 0x02, 0x01, 0x05, 0x12, 0x04, 0xc7, 0x01, 0x04, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, + 0x02, 0x01, 0x01, 0x12, 0x04, 0xc7, 0x01, 0x0b, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, + 0x01, 0x03, 0x12, 0x04, 0xc7, 0x01, 0x11, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x01, + 0x08, 0x12, 0x04, 0xc7, 0x01, 0x13, 0x3c, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x0e, 0x02, 0x01, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x04, 0xc7, 0x01, 0x14, 0x3b, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x0e, + 0x02, 0x02, 0x12, 0x04, 0xca, 0x01, 0x04, 0x2c, 0x1a, 0x28, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, + 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x06, 0x12, 0x04, 0xca, 0x01, 0x04, + 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x01, 0x12, 0x04, 0xca, 0x01, 0x1d, 0x27, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x02, 0x03, 0x12, 0x04, 0xca, 0x01, 0x2a, 0x2b, 0x0a, + 0x31, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x03, 0x12, 0x04, 0xcd, 0x01, 0x04, 0x28, 0x1a, 0x23, 0x20, + 0x4c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x03, 0x06, 0x12, 0x04, 0xcd, 0x01, 0x04, + 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x03, 0x01, 0x12, 0x04, 0xcd, 0x01, 0x17, 0x23, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x03, 0x03, 0x12, 0x04, 0xcd, 0x01, 0x26, 0x27, 0x0a, + 0x2c, 0x0a, 0x04, 0x04, 0x0e, 0x02, 0x04, 0x12, 0x04, 0xd0, 0x01, 0x04, 0x20, 0x1a, 0x1e, 0x20, + 0x54, 0x61, 0x73, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x0a, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0e, 0x02, 0x04, 0x06, 0x12, 0x04, 0xd0, 0x01, 0x04, 0x11, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0e, 0x02, 0x04, 0x01, 0x12, 0x04, 0xd0, 0x01, 0x12, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x0e, 0x02, 0x04, 0x03, 0x12, 0x04, 0xd0, 0x01, 0x1e, 0x1f, 0x0a, 0x32, 0x0a, 0x04, 0x04, 0x0e, + 0x02, 0x05, 0x12, 0x04, 0xd3, 0x01, 0x04, 0x24, 0x1a, 0x24, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x0e, 0x02, 0x05, 0x06, 0x12, 0x04, 0xd3, 0x01, 0x04, 0x17, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x0e, 0x02, 0x05, 0x01, 0x12, 0x04, 0xd3, 0x01, 0x18, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x0e, 0x02, 0x05, 0x03, 0x12, 0x04, 0xd3, 0x01, 0x22, 0x23, 0x0a, 0x32, 0x0a, 0x02, 0x04, + 0x0f, 0x12, 0x06, 0xd8, 0x01, 0x00, 0xde, 0x01, 0x01, 0x1a, 0x24, 0x20, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, + 0x0b, 0x0a, 0x03, 0x04, 0x0f, 0x01, 0x12, 0x04, 0xd8, 0x01, 0x08, 0x18, 0x0a, 0x3a, 0x0a, 0x04, + 0x04, 0x0f, 0x02, 0x00, 0x12, 0x04, 0xda, 0x01, 0x02, 0x18, 0x1a, 0x2c, 0x20, 0x4c, 0x69, 0x73, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, + 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, + 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, + 0x04, 0x12, 0x04, 0xda, 0x01, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x06, + 0x12, 0x04, 0xda, 0x01, 0x0b, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x01, 0x12, + 0x04, 0xda, 0x01, 0x0f, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x00, 0x03, 0x12, 0x04, + 0xda, 0x01, 0x16, 0x17, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x0f, 0x02, 0x01, 0x12, 0x04, 0xdd, 0x01, + 0x02, 0x13, 0x1a, 0x36, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x2c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, + 0x02, 0x01, 0x05, 0x12, 0x04, 0xdd, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, + 0x01, 0x01, 0x12, 0x04, 0xdd, 0x01, 0x09, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x0f, 0x02, 0x01, + 0x03, 0x12, 0x04, 0xdd, 0x01, 0x11, 0x12, 0x0a, 0x32, 0x0a, 0x02, 0x04, 0x10, 0x12, 0x06, 0xe1, + 0x01, 0x00, 0xee, 0x01, 0x01, 0x1a, 0x24, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, + 0x68, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, + 0x10, 0x01, 0x12, 0x04, 0xe1, 0x01, 0x08, 0x18, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x10, 0x08, 0x00, + 0x12, 0x06, 0xe2, 0x01, 0x02, 0xed, 0x01, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x08, 0x00, + 0x01, 0x12, 0x04, 0xe2, 0x01, 0x08, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x08, 0x00, 0x02, + 0x12, 0x04, 0xe3, 0x01, 0x04, 0x30, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x10, 0x08, 0x00, 0x02, 0x87, + 0x09, 0x01, 0x12, 0x04, 0xe3, 0x01, 0x04, 0x30, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x00, + 0x12, 0x04, 0xe6, 0x01, 0x04, 0x3d, 0x1a, 0x27, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x03, 0x06, 0x12, 0x04, 0xec, 0x01, 0x04, 0x17, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x10, 0x02, 0x03, 0x01, 0x12, 0x04, 0xec, 0x01, 0x18, 0x1f, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x10, 0x02, 0x03, 0x03, 0x12, 0x04, 0xec, 0x01, 0x22, 0x23, 0x0a, 0x33, 0x0a, 0x02, - 0x04, 0x11, 0x12, 0x06, 0xf1, 0x01, 0x00, 0xf4, 0x01, 0x01, 0x1a, 0x25, 0x20, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, - 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x11, 0x01, 0x12, 0x04, 0xf1, 0x01, 0x08, 0x19, 0x0a, 0x41, - 0x0a, 0x04, 0x04, 0x11, 0x02, 0x00, 0x12, 0x04, 0xf3, 0x01, 0x02, 0x18, 0x1a, 0x33, 0x20, 0x4e, - 0x65, 0x77, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, 0x75, - 0x6e, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, - 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x04, 0x12, 0x04, 0xf3, 0x01, 0x02, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x06, 0x12, 0x04, 0xf3, 0x01, 0x0b, 0x0e, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x01, 0x12, 0x04, 0xf3, 0x01, 0x0f, 0x13, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x03, 0x12, 0x04, 0xf3, 0x01, 0x16, 0x17, 0x0a, 0x34, 0x0a, - 0x02, 0x04, 0x12, 0x12, 0x06, 0xf7, 0x01, 0x00, 0xfd, 0x01, 0x01, 0x1a, 0x26, 0x20, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x12, 0x01, 0x12, 0x04, 0xf7, 0x01, 0x08, 0x1a, - 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x12, 0x02, 0x00, 0x12, 0x04, 0xf9, 0x01, 0x02, 0x21, 0x1a, 0x21, - 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x06, 0x12, 0x04, 0xf9, 0x01, 0x02, 0x14, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, 0xf9, 0x01, 0x15, 0x1c, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x03, 0x12, 0x04, 0xf9, 0x01, 0x1f, 0x20, 0x0a, 0x35, - 0x0a, 0x04, 0x04, 0x12, 0x02, 0x01, 0x12, 0x04, 0xfc, 0x01, 0x02, 0x49, 0x1a, 0x27, 0x20, 0x52, - 0x75, 0x6e, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x06, 0x12, 0x04, - 0xfc, 0x01, 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x01, 0x12, 0x04, 0xfc, - 0x01, 0x17, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x03, 0x12, 0x04, 0xfc, 0x01, - 0x20, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x08, 0x12, 0x04, 0xfc, 0x01, 0x22, - 0x48, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x12, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xfc, - 0x01, 0x23, 0x47, 0x0a, 0x35, 0x0a, 0x02, 0x04, 0x13, 0x12, 0x06, 0x80, 0x02, 0x00, 0x89, 0x02, - 0x01, 0x1a, 0x27, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x13, - 0x01, 0x12, 0x04, 0x80, 0x02, 0x08, 0x1b, 0x0a, 0x3d, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x00, 0x12, - 0x04, 0x82, 0x02, 0x02, 0x1e, 0x1a, 0x2f, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x04, 0x12, - 0x04, 0x82, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x06, 0x12, 0x04, - 0x82, 0x02, 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x01, 0x12, 0x04, 0x82, - 0x02, 0x12, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x03, 0x12, 0x04, 0x82, 0x02, - 0x1c, 0x1d, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x01, 0x12, 0x04, 0x85, 0x02, 0x02, 0x13, - 0x1a, 0x36, 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x65, 0x74, - 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, - 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, - 0x69, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x01, - 0x05, 0x12, 0x04, 0x85, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x01, 0x01, - 0x12, 0x04, 0x85, 0x02, 0x09, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x01, 0x03, 0x12, - 0x04, 0x85, 0x02, 0x11, 0x12, 0x0a, 0x35, 0x0a, 0x02, 0x04, 0x14, 0x12, 0x06, 0x8c, 0x02, 0x00, - 0x95, 0x02, 0x01, 0x1a, 0x27, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, - 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, - 0x04, 0x14, 0x01, 0x12, 0x04, 0x8c, 0x02, 0x08, 0x1b, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x14, 0x02, - 0x00, 0x12, 0x04, 0x8e, 0x02, 0x02, 0x49, 0x1a, 0x27, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x69, 0x64, + 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x00, 0x05, 0x12, 0x04, 0xe6, 0x01, 0x04, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x10, 0x02, 0x00, 0x01, 0x12, 0x04, 0xe6, 0x01, 0x0b, 0x0e, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x10, 0x02, 0x00, 0x03, 0x12, 0x04, 0xe6, 0x01, 0x11, 0x12, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x10, 0x02, 0x00, 0x08, 0x12, 0x04, 0xe6, 0x01, 0x13, 0x3c, 0x0a, 0x11, 0x0a, 0x09, 0x04, + 0x10, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x04, 0xe6, 0x01, 0x14, 0x3b, 0x0a, 0x36, + 0x0a, 0x04, 0x04, 0x10, 0x02, 0x01, 0x12, 0x04, 0xe8, 0x01, 0x04, 0x2c, 0x1a, 0x28, 0x20, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, + 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x06, 0x12, + 0x04, 0xe8, 0x01, 0x04, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x01, 0x12, 0x04, + 0xe8, 0x01, 0x1d, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, 0x01, 0x03, 0x12, 0x04, 0xe8, + 0x01, 0x2a, 0x2b, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x02, 0x12, 0x04, 0xea, 0x01, 0x04, + 0x2c, 0x1a, 0x28, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x10, 0x02, 0x02, 0x06, 0x12, 0x04, 0xea, 0x01, 0x04, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, + 0x02, 0x02, 0x01, 0x12, 0x04, 0xea, 0x01, 0x1d, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x10, 0x02, + 0x02, 0x03, 0x12, 0x04, 0xea, 0x01, 0x2a, 0x2b, 0x0a, 0x33, 0x0a, 0x04, 0x04, 0x10, 0x02, 0x03, + 0x12, 0x04, 0xec, 0x01, 0x04, 0x24, 0x1a, 0x25, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x06, 0x12, 0x04, 0x8e, 0x02, 0x02, 0x16, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8e, 0x02, 0x17, 0x1d, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x03, 0x12, 0x04, 0x8e, 0x02, 0x20, 0x21, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x14, 0x02, 0x00, 0x08, 0x12, 0x04, 0x8e, 0x02, 0x22, 0x48, 0x0a, 0x10, 0x0a, 0x08, - 0x04, 0x14, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x8e, 0x02, 0x23, 0x47, 0x0a, 0x83, - 0x03, 0x0a, 0x04, 0x04, 0x14, 0x02, 0x01, 0x12, 0x04, 0x94, 0x02, 0x02, 0x24, 0x1a, 0xf4, 0x02, - 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x28, 0x73, 0x29, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x0a, 0x20, 0x2d, 0x20, 0x4e, 0x41, 0x4d, 0x45, 0x20, - 0x28, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x5f, 0x43, 0x41, 0x53, 0x45, - 0x5f, 0x49, 0x4e, 0x53, 0x45, 0x4e, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x29, 0x3a, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x77, 0x68, 0x61, 0x74, - 0x65, 0x76, 0x65, 0x72, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x20, 0x74, 0x6f, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x63, 0x61, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x0a, 0x20, 0x2d, 0x20, 0x50, - 0x48, 0x41, 0x53, 0x45, 0x20, 0x28, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x49, 0x4e, - 0x29, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x75, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x68, 0x61, 0x73, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x61, 0x73, - 0x73, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x70, 0x68, 0x61, 0x73, 0x65, - 0x73, 0x20, 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x20, 0x5b, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x34, - 0x22, 0x5d, 0x29, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x04, 0x12, 0x04, 0x94, - 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x06, 0x12, 0x04, 0x94, 0x02, - 0x0b, 0x18, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x01, 0x12, 0x04, 0x94, 0x02, 0x19, - 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x03, 0x12, 0x04, 0x94, 0x02, 0x22, 0x23, - 0x0a, 0x5b, 0x0a, 0x02, 0x04, 0x15, 0x12, 0x06, 0x98, 0x02, 0x00, 0x9b, 0x02, 0x01, 0x1a, 0x4d, - 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x65, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, - 0x03, 0x04, 0x15, 0x01, 0x12, 0x04, 0x98, 0x02, 0x08, 0x1c, 0x0a, 0x69, 0x0a, 0x04, 0x04, 0x15, - 0x02, 0x00, 0x12, 0x04, 0x9a, 0x02, 0x02, 0x2f, 0x1a, 0x5b, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x6f, - 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x20, - 0x45, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x04, 0x12, 0x04, - 0x9a, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x06, 0x12, 0x04, 0x9a, - 0x02, 0x0b, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9a, 0x02, - 0x1a, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9a, 0x02, 0x2d, - 0x2e, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x16, 0x12, 0x06, 0x9d, 0x02, 0x00, 0xa1, 0x02, 0x01, 0x0a, - 0x0b, 0x0a, 0x03, 0x04, 0x16, 0x01, 0x12, 0x04, 0x9d, 0x02, 0x08, 0x21, 0x0a, 0x0c, 0x0a, 0x04, - 0x04, 0x16, 0x02, 0x00, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x48, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, - 0x02, 0x00, 0x06, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, - 0x00, 0x01, 0x12, 0x04, 0x9e, 0x02, 0x1a, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x00, - 0x03, 0x12, 0x04, 0x9e, 0x02, 0x1f, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x00, 0x08, - 0x12, 0x04, 0x9e, 0x02, 0x21, 0x47, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x16, 0x02, 0x00, 0x08, 0x87, - 0x09, 0x19, 0x12, 0x04, 0x9e, 0x02, 0x22, 0x46, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x01, - 0x12, 0x04, 0xa0, 0x02, 0x02, 0x3a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x05, 0x12, - 0x04, 0xa0, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x01, 0x12, 0x04, - 0xa0, 0x02, 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa0, - 0x02, 0x13, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x08, 0x12, 0x04, 0xa0, 0x02, - 0x15, 0x39, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x16, 0x02, 0x01, 0x08, 0x87, 0x09, 0x05, 0x04, 0x12, - 0x04, 0xa0, 0x02, 0x16, 0x38, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x17, 0x12, 0x06, 0xa3, 0x02, 0x00, - 0xa5, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x17, 0x01, 0x12, 0x04, 0xa3, 0x02, 0x08, 0x22, - 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x17, 0x02, 0x00, 0x12, 0x04, 0xa4, 0x02, 0x02, 0x2b, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x17, 0x02, 0x00, 0x04, 0x12, 0x04, 0xa4, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x17, 0x02, 0x00, 0x06, 0x12, 0x04, 0xa4, 0x02, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x17, 0x02, 0x00, 0x01, 0x12, 0x04, 0xa4, 0x02, 0x18, 0x26, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x17, 0x02, 0x00, 0x03, 0x12, 0x04, 0xa4, 0x02, 0x29, 0x2a, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x18, - 0x12, 0x06, 0xa7, 0x02, 0x00, 0xad, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x18, 0x01, 0x12, - 0x04, 0xa7, 0x02, 0x08, 0x1a, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x18, 0x02, 0x00, 0x12, 0x04, 0xa9, - 0x02, 0x02, 0x4f, 0x1a, 0x12, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x61, 0x62, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x06, - 0x12, 0x04, 0xa9, 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x01, 0x12, - 0x04, 0xa9, 0x02, 0x1a, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x03, 0x12, 0x04, - 0xa9, 0x02, 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x08, 0x12, 0x04, 0xa9, - 0x02, 0x28, 0x4e, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x18, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, - 0x04, 0xa9, 0x02, 0x29, 0x4d, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x18, 0x02, 0x01, 0x12, 0x04, 0xac, - 0x02, 0x02, 0x14, 0x1a, 0x2a, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x01, 0x05, 0x12, 0x04, 0xac, 0x02, 0x02, 0x08, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x18, 0x02, 0x01, 0x01, 0x12, 0x04, 0xac, 0x02, 0x09, 0x0f, 0x0a, 0x0d, 0x0a, - 0x05, 0x04, 0x18, 0x02, 0x01, 0x03, 0x12, 0x04, 0xac, 0x02, 0x12, 0x13, 0x0a, 0x0a, 0x0a, 0x02, - 0x04, 0x19, 0x12, 0x04, 0xaf, 0x02, 0x00, 0x1e, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x19, 0x01, 0x12, - 0x04, 0xaf, 0x02, 0x08, 0x1b, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1a, 0x12, 0x06, 0xb1, 0x02, 0x00, - 0xcb, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1a, 0x01, 0x12, 0x04, 0xb1, 0x02, 0x08, 0x1a, - 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1a, 0x08, 0x00, 0x12, 0x06, 0xb2, 0x02, 0x02, 0xb6, 0x02, 0x03, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x08, 0x00, 0x01, 0x12, 0x04, 0xb2, 0x02, 0x08, 0x10, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x08, 0x00, 0x02, 0x12, 0x04, 0xb3, 0x02, 0x04, 0x30, 0x0a, 0x10, - 0x0a, 0x08, 0x04, 0x1a, 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x04, 0xb3, 0x02, 0x04, 0x30, - 0x0a, 0x2e, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x00, 0x12, 0x04, 0xb5, 0x02, 0x04, 0x2c, 0x1a, 0x20, - 0x20, 0x57, 0x61, 0x74, 0x63, 0x68, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x06, 0x12, 0x04, 0xb5, 0x02, 0x04, 0x1c, 0x0a, - 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb5, 0x02, 0x1d, 0x27, 0x0a, 0x0d, - 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb5, 0x02, 0x2a, 0x2b, 0x0a, 0x44, 0x0a, - 0x04, 0x04, 0x1a, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x02, 0x52, 0x1a, 0x36, 0x20, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x61, 0x74, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x29, 0x2e, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x06, 0x12, 0x04, 0xb9, 0x02, - 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x1c, - 0x26, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb9, 0x02, 0x29, 0x2a, - 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x08, 0x12, 0x04, 0xb9, 0x02, 0x2b, 0x51, 0x0a, - 0x10, 0x0a, 0x08, 0x04, 0x1a, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xb9, 0x02, 0x2c, - 0x50, 0x0a, 0xa6, 0x01, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x02, 0x12, 0x04, 0xbe, 0x02, 0x02, 0x29, - 0x1a, 0x97, 0x01, 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x29, 0x2e, 0x0a, - 0x20, 0x49, 0x66, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x75, 0x70, - 0x20, 0x74, 0x6f, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x0a, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, - 0x02, 0x02, 0x06, 0x12, 0x04, 0xbe, 0x02, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, - 0x02, 0x01, 0x12, 0x04, 0xbe, 0x02, 0x1c, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x02, - 0x03, 0x12, 0x04, 0xbe, 0x02, 0x27, 0x28, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x03, 0x12, - 0x04, 0xc1, 0x02, 0x02, 0x21, 0x1a, 0x21, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6c, - 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x03, - 0x06, 0x12, 0x04, 0xc1, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x03, 0x01, - 0x12, 0x04, 0xc1, 0x02, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x03, 0x03, 0x12, - 0x04, 0xc1, 0x02, 0x1f, 0x20, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1a, 0x03, 0x00, 0x12, 0x06, 0xc3, - 0x02, 0x02, 0xc7, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x03, 0x00, 0x01, 0x12, 0x04, - 0xc3, 0x02, 0x0a, 0x18, 0x0a, 0x10, 0x0a, 0x06, 0x04, 0x1a, 0x03, 0x00, 0x08, 0x00, 0x12, 0x06, - 0xc4, 0x02, 0x04, 0xc6, 0x02, 0x05, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, 0x00, 0x08, 0x00, - 0x01, 0x12, 0x04, 0xc4, 0x02, 0x0a, 0x11, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1a, 0x03, 0x00, 0x02, - 0x00, 0x12, 0x04, 0xc5, 0x02, 0x06, 0x2b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, 0x00, 0x02, - 0x00, 0x06, 0x12, 0x04, 0xc5, 0x02, 0x06, 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, 0x00, - 0x02, 0x00, 0x01, 0x12, 0x04, 0xc5, 0x02, 0x1c, 0x26, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, - 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0xc5, 0x02, 0x29, 0x2a, 0x0a, 0x30, 0x0a, 0x04, 0x04, 0x1a, - 0x02, 0x04, 0x12, 0x04, 0xca, 0x02, 0x02, 0x30, 0x1a, 0x22, 0x20, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, - 0x20, 0x73, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x77, 0x61, 0x74, 0x63, 0x68, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, - 0x04, 0x1a, 0x02, 0x04, 0x04, 0x12, 0x04, 0xca, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x1a, 0x02, 0x04, 0x06, 0x12, 0x04, 0xca, 0x02, 0x0b, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, - 0x02, 0x04, 0x01, 0x12, 0x04, 0xca, 0x02, 0x1a, 0x2b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, - 0x04, 0x03, 0x12, 0x04, 0xca, 0x02, 0x2e, 0x2f, 0x0a, 0x3a, 0x0a, 0x02, 0x04, 0x1b, 0x12, 0x06, - 0xce, 0x02, 0x00, 0xd6, 0x02, 0x01, 0x1a, 0x2c, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, - 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1b, 0x01, 0x12, 0x04, 0xce, 0x02, 0x08, - 0x1b, 0x0a, 0xb3, 0x01, 0x0a, 0x04, 0x04, 0x1b, 0x02, 0x00, 0x12, 0x04, 0xd2, 0x02, 0x02, 0x25, - 0x1a, 0xa4, 0x01, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x61, 0x73, 0x6b, - 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, - 0x6c, 0x6c, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x0a, 0x20, 0x46, 0x6f, 0x72, 0x20, - 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x04, - 0x12, 0x04, 0xd2, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x06, 0x12, - 0x04, 0xd2, 0x02, 0x0b, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x01, 0x12, 0x04, - 0xd2, 0x02, 0x15, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x03, 0x12, 0x04, 0xd2, - 0x02, 0x23, 0x24, 0x0a, 0x66, 0x0a, 0x04, 0x04, 0x1b, 0x02, 0x01, 0x12, 0x04, 0xd5, 0x02, 0x02, - 0x14, 0x1a, 0x58, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x4c, - 0x69, 0x73, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, - 0x1b, 0x02, 0x01, 0x05, 0x12, 0x04, 0xd5, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, - 0x02, 0x01, 0x01, 0x12, 0x04, 0xd5, 0x02, 0x07, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, - 0x01, 0x03, 0x12, 0x04, 0xd5, 0x02, 0x12, 0x13, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, - 0x0a, 0x97, 0x1c, 0x0a, 0x2b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, - 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x12, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x1a, 0x1e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, - 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x10, 0x02, 0x03, 0x06, 0x12, 0x04, 0xec, 0x01, 0x04, 0x17, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x10, 0x02, 0x03, 0x01, 0x12, 0x04, 0xec, 0x01, 0x18, 0x1f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x10, 0x02, 0x03, 0x03, 0x12, 0x04, 0xec, 0x01, 0x22, 0x23, 0x0a, 0x33, 0x0a, 0x02, 0x04, 0x11, + 0x12, 0x06, 0xf1, 0x01, 0x00, 0xf4, 0x01, 0x01, 0x1a, 0x25, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x75, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, + 0x0b, 0x0a, 0x03, 0x04, 0x11, 0x01, 0x12, 0x04, 0xf1, 0x01, 0x08, 0x19, 0x0a, 0x41, 0x0a, 0x04, + 0x04, 0x11, 0x02, 0x00, 0x12, 0x04, 0xf3, 0x01, 0x02, 0x18, 0x1a, 0x33, 0x20, 0x4e, 0x65, 0x77, + 0x20, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x73, + 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x0a, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x04, 0x12, 0x04, 0xf3, 0x01, 0x02, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x11, 0x02, 0x00, 0x06, 0x12, 0x04, 0xf3, 0x01, 0x0b, 0x0e, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x11, 0x02, 0x00, 0x01, 0x12, 0x04, 0xf3, 0x01, 0x0f, 0x13, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x11, 0x02, 0x00, 0x03, 0x12, 0x04, 0xf3, 0x01, 0x16, 0x17, 0x0a, 0x34, 0x0a, 0x02, 0x04, + 0x12, 0x12, 0x06, 0xf7, 0x01, 0x00, 0xfd, 0x01, 0x01, 0x1a, 0x26, 0x20, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x12, 0x01, 0x12, 0x04, 0xf7, 0x01, 0x08, 0x1a, 0x0a, 0x2f, + 0x0a, 0x04, 0x04, 0x12, 0x02, 0x00, 0x12, 0x04, 0xf9, 0x01, 0x02, 0x21, 0x1a, 0x21, 0x20, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x06, 0x12, 0x04, 0xf9, 0x01, 0x02, 0x14, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x12, 0x02, 0x00, 0x01, 0x12, 0x04, 0xf9, 0x01, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x12, 0x02, 0x00, 0x03, 0x12, 0x04, 0xf9, 0x01, 0x1f, 0x20, 0x0a, 0x35, 0x0a, 0x04, + 0x04, 0x12, 0x02, 0x01, 0x12, 0x04, 0xfc, 0x01, 0x02, 0x49, 0x1a, 0x27, 0x20, 0x52, 0x75, 0x6e, + 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x06, 0x12, 0x04, 0xfc, 0x01, + 0x02, 0x16, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x01, 0x12, 0x04, 0xfc, 0x01, 0x17, + 0x1d, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x03, 0x12, 0x04, 0xfc, 0x01, 0x20, 0x21, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x12, 0x02, 0x01, 0x08, 0x12, 0x04, 0xfc, 0x01, 0x22, 0x48, 0x0a, + 0x10, 0x0a, 0x08, 0x04, 0x12, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xfc, 0x01, 0x23, + 0x47, 0x0a, 0x35, 0x0a, 0x02, 0x04, 0x13, 0x12, 0x06, 0x80, 0x02, 0x00, 0x89, 0x02, 0x01, 0x1a, + 0x27, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x13, 0x01, 0x12, + 0x04, 0x80, 0x02, 0x08, 0x1b, 0x0a, 0x3d, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x00, 0x12, 0x04, 0x82, + 0x02, 0x02, 0x1e, 0x1a, 0x2f, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x04, 0x12, 0x04, 0x82, + 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x06, 0x12, 0x04, 0x82, 0x02, + 0x0b, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x01, 0x12, 0x04, 0x82, 0x02, 0x12, + 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x00, 0x03, 0x12, 0x04, 0x82, 0x02, 0x1c, 0x1d, + 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x13, 0x02, 0x01, 0x12, 0x04, 0x85, 0x02, 0x02, 0x13, 0x1a, 0x36, + 0x20, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, + 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x66, + 0x20, 0x61, 0x6e, 0x79, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x01, 0x05, 0x12, + 0x04, 0x85, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x01, 0x01, 0x12, 0x04, + 0x85, 0x02, 0x09, 0x0e, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x13, 0x02, 0x01, 0x03, 0x12, 0x04, 0x85, + 0x02, 0x11, 0x12, 0x0a, 0x35, 0x0a, 0x02, 0x04, 0x14, 0x12, 0x06, 0x8c, 0x02, 0x00, 0x95, 0x02, + 0x01, 0x1a, 0x27, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, + 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x14, + 0x01, 0x12, 0x04, 0x8c, 0x02, 0x08, 0x1b, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x14, 0x02, 0x00, 0x12, + 0x04, 0x8e, 0x02, 0x02, 0x49, 0x1a, 0x27, 0x20, 0x52, 0x75, 0x6e, 0x20, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x14, 0x02, 0x00, 0x06, 0x12, 0x04, 0x8e, 0x02, 0x02, 0x16, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x14, 0x02, 0x00, 0x01, 0x12, 0x04, 0x8e, 0x02, 0x17, 0x1d, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x14, 0x02, 0x00, 0x03, 0x12, 0x04, 0x8e, 0x02, 0x20, 0x21, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x14, 0x02, 0x00, 0x08, 0x12, 0x04, 0x8e, 0x02, 0x22, 0x48, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x14, + 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0x8e, 0x02, 0x23, 0x47, 0x0a, 0x83, 0x03, 0x0a, + 0x04, 0x04, 0x14, 0x02, 0x01, 0x12, 0x04, 0x94, 0x02, 0x02, 0x24, 0x1a, 0xf4, 0x02, 0x20, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x28, 0x73, + 0x29, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x0a, 0x20, 0x2d, 0x20, 0x4e, 0x41, 0x4d, 0x45, 0x20, 0x28, 0x6d, + 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x49, + 0x4e, 0x53, 0x45, 0x4e, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x77, 0x68, 0x61, 0x74, 0x65, 0x76, + 0x65, 0x72, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x20, 0x74, 0x6f, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, + 0x20, 0x63, 0x61, 0x73, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x0a, 0x20, 0x2d, 0x20, 0x50, 0x48, 0x41, + 0x53, 0x45, 0x20, 0x28, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x49, 0x4e, 0x29, 0x3a, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x75, + 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x68, 0x61, 0x73, 0x65, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x70, 0x68, 0x61, 0x73, 0x65, 0x73, 0x20, + 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x20, 0x5b, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x34, 0x22, 0x5d, + 0x29, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x04, 0x12, 0x04, 0x94, 0x02, 0x02, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x06, 0x12, 0x04, 0x94, 0x02, 0x0b, 0x18, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x01, 0x12, 0x04, 0x94, 0x02, 0x19, 0x1f, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x14, 0x02, 0x01, 0x03, 0x12, 0x04, 0x94, 0x02, 0x22, 0x23, 0x0a, 0x5b, + 0x0a, 0x02, 0x04, 0x15, 0x12, 0x06, 0x98, 0x02, 0x00, 0x9b, 0x02, 0x01, 0x1a, 0x4d, 0x20, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x20, 0x65, 0x6e, 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, + 0x15, 0x01, 0x12, 0x04, 0x98, 0x02, 0x08, 0x1c, 0x0a, 0x69, 0x0a, 0x04, 0x04, 0x15, 0x02, 0x00, + 0x12, 0x04, 0x9a, 0x02, 0x02, 0x2f, 0x1a, 0x5b, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x6f, 0x72, 0x20, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x20, 0x45, 0x6e, + 0x72, 0x69, 0x63, 0x68, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x72, 0x65, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x04, 0x12, 0x04, 0x9a, 0x02, + 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x06, 0x12, 0x04, 0x9a, 0x02, 0x0b, + 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x01, 0x12, 0x04, 0x9a, 0x02, 0x1a, 0x2a, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x15, 0x02, 0x00, 0x03, 0x12, 0x04, 0x9a, 0x02, 0x2d, 0x2e, 0x0a, + 0x0c, 0x0a, 0x02, 0x04, 0x16, 0x12, 0x06, 0x9d, 0x02, 0x00, 0xa1, 0x02, 0x01, 0x0a, 0x0b, 0x0a, + 0x03, 0x04, 0x16, 0x01, 0x12, 0x04, 0x9d, 0x02, 0x08, 0x21, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, + 0x02, 0x00, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x48, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x00, + 0x06, 0x12, 0x04, 0x9e, 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x00, 0x01, + 0x12, 0x04, 0x9e, 0x02, 0x1a, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x00, 0x03, 0x12, + 0x04, 0x9e, 0x02, 0x1f, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x00, 0x08, 0x12, 0x04, + 0x9e, 0x02, 0x21, 0x47, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x16, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, + 0x12, 0x04, 0x9e, 0x02, 0x22, 0x46, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x16, 0x02, 0x01, 0x12, 0x04, + 0xa0, 0x02, 0x02, 0x3a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x05, 0x12, 0x04, 0xa0, + 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x01, 0x12, 0x04, 0xa0, 0x02, + 0x09, 0x10, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x03, 0x12, 0x04, 0xa0, 0x02, 0x13, + 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x16, 0x02, 0x01, 0x08, 0x12, 0x04, 0xa0, 0x02, 0x15, 0x39, + 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x16, 0x02, 0x01, 0x08, 0x87, 0x09, 0x05, 0x04, 0x12, 0x04, 0xa0, + 0x02, 0x16, 0x38, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x17, 0x12, 0x06, 0xa3, 0x02, 0x00, 0xa5, 0x02, + 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x17, 0x01, 0x12, 0x04, 0xa3, 0x02, 0x08, 0x22, 0x0a, 0x0c, + 0x0a, 0x04, 0x04, 0x17, 0x02, 0x00, 0x12, 0x04, 0xa4, 0x02, 0x02, 0x2b, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x17, 0x02, 0x00, 0x04, 0x12, 0x04, 0xa4, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x17, 0x02, 0x00, 0x06, 0x12, 0x04, 0xa4, 0x02, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, + 0x02, 0x00, 0x01, 0x12, 0x04, 0xa4, 0x02, 0x18, 0x26, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x17, 0x02, + 0x00, 0x03, 0x12, 0x04, 0xa4, 0x02, 0x29, 0x2a, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x18, 0x12, 0x06, + 0xa7, 0x02, 0x00, 0xad, 0x02, 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x18, 0x01, 0x12, 0x04, 0xa7, + 0x02, 0x08, 0x1a, 0x0a, 0x20, 0x0a, 0x04, 0x04, 0x18, 0x02, 0x00, 0x12, 0x04, 0xa9, 0x02, 0x02, + 0x4f, 0x1a, 0x12, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x62, + 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x06, 0x12, 0x04, + 0xa9, 0x02, 0x02, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x01, 0x12, 0x04, 0xa9, + 0x02, 0x1a, 0x23, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x03, 0x12, 0x04, 0xa9, 0x02, + 0x26, 0x27, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x18, 0x02, 0x00, 0x08, 0x12, 0x04, 0xa9, 0x02, 0x28, + 0x4e, 0x0a, 0x10, 0x0a, 0x08, 0x04, 0x18, 0x02, 0x00, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xa9, + 0x02, 0x29, 0x4d, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x18, 0x02, 0x01, 0x12, 0x04, 0xac, 0x02, 0x02, + 0x14, 0x1a, 0x2a, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x18, 0x02, 0x01, 0x05, 0x12, 0x04, 0xac, 0x02, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x18, 0x02, 0x01, 0x01, 0x12, 0x04, 0xac, 0x02, 0x09, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x18, 0x02, 0x01, 0x03, 0x12, 0x04, 0xac, 0x02, 0x12, 0x13, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x19, + 0x12, 0x04, 0xaf, 0x02, 0x00, 0x1e, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x19, 0x01, 0x12, 0x04, 0xaf, + 0x02, 0x08, 0x1b, 0x0a, 0x0c, 0x0a, 0x02, 0x04, 0x1a, 0x12, 0x06, 0xb1, 0x02, 0x00, 0xcb, 0x02, + 0x01, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1a, 0x01, 0x12, 0x04, 0xb1, 0x02, 0x08, 0x1a, 0x0a, 0x0e, + 0x0a, 0x04, 0x04, 0x1a, 0x08, 0x00, 0x12, 0x06, 0xb2, 0x02, 0x02, 0xb6, 0x02, 0x03, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x1a, 0x08, 0x00, 0x01, 0x12, 0x04, 0xb2, 0x02, 0x08, 0x10, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x1a, 0x08, 0x00, 0x02, 0x12, 0x04, 0xb3, 0x02, 0x04, 0x30, 0x0a, 0x10, 0x0a, 0x08, + 0x04, 0x1a, 0x08, 0x00, 0x02, 0x87, 0x09, 0x01, 0x12, 0x04, 0xb3, 0x02, 0x04, 0x30, 0x0a, 0x2e, + 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x00, 0x12, 0x04, 0xb5, 0x02, 0x04, 0x2c, 0x1a, 0x20, 0x20, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, + 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x00, 0x06, 0x12, 0x04, 0xb5, 0x02, 0x04, 0x1c, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x1a, 0x02, 0x00, 0x01, 0x12, 0x04, 0xb5, 0x02, 0x1d, 0x27, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x1a, 0x02, 0x00, 0x03, 0x12, 0x04, 0xb5, 0x02, 0x2a, 0x2b, 0x0a, 0x44, 0x0a, 0x04, 0x04, + 0x1a, 0x02, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x02, 0x52, 0x1a, 0x36, 0x20, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x61, 0x74, 0x65, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x76, 0x65, 0x29, 0x2e, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x06, 0x12, 0x04, 0xb9, 0x02, 0x02, 0x1b, + 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x01, 0x12, 0x04, 0xb9, 0x02, 0x1c, 0x26, 0x0a, + 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x03, 0x12, 0x04, 0xb9, 0x02, 0x29, 0x2a, 0x0a, 0x0d, + 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x01, 0x08, 0x12, 0x04, 0xb9, 0x02, 0x2b, 0x51, 0x0a, 0x10, 0x0a, + 0x08, 0x04, 0x1a, 0x02, 0x01, 0x08, 0x87, 0x09, 0x19, 0x12, 0x04, 0xb9, 0x02, 0x2c, 0x50, 0x0a, + 0xa6, 0x01, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x02, 0x12, 0x04, 0xbe, 0x02, 0x02, 0x29, 0x1a, 0x97, + 0x01, 0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, + 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x61, 0x74, 0x65, + 0x20, 0x28, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x29, 0x2e, 0x0a, 0x20, 0x49, + 0x66, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x75, 0x70, 0x20, 0x74, + 0x6f, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, + 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x20, 0x77, 0x69, + 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x20, 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x20, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x02, + 0x06, 0x12, 0x04, 0xbe, 0x02, 0x02, 0x1b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x02, 0x01, + 0x12, 0x04, 0xbe, 0x02, 0x1c, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x02, 0x03, 0x12, + 0x04, 0xbe, 0x02, 0x27, 0x28, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x03, 0x12, 0x04, 0xc1, + 0x02, 0x02, 0x21, 0x1a, 0x21, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, + 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x03, 0x06, 0x12, + 0x04, 0xc1, 0x02, 0x02, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x03, 0x01, 0x12, 0x04, + 0xc1, 0x02, 0x15, 0x1c, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x03, 0x03, 0x12, 0x04, 0xc1, + 0x02, 0x1f, 0x20, 0x0a, 0x0e, 0x0a, 0x04, 0x04, 0x1a, 0x03, 0x00, 0x12, 0x06, 0xc3, 0x02, 0x02, + 0xc7, 0x02, 0x03, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x03, 0x00, 0x01, 0x12, 0x04, 0xc3, 0x02, + 0x0a, 0x18, 0x0a, 0x10, 0x0a, 0x06, 0x04, 0x1a, 0x03, 0x00, 0x08, 0x00, 0x12, 0x06, 0xc4, 0x02, + 0x04, 0xc6, 0x02, 0x05, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, 0x00, 0x08, 0x00, 0x01, 0x12, + 0x04, 0xc4, 0x02, 0x0a, 0x11, 0x0a, 0x0e, 0x0a, 0x06, 0x04, 0x1a, 0x03, 0x00, 0x02, 0x00, 0x12, + 0x04, 0xc5, 0x02, 0x06, 0x2b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, 0x00, 0x02, 0x00, 0x06, + 0x12, 0x04, 0xc5, 0x02, 0x06, 0x1b, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, 0x00, 0x02, 0x00, + 0x01, 0x12, 0x04, 0xc5, 0x02, 0x1c, 0x26, 0x0a, 0x0f, 0x0a, 0x07, 0x04, 0x1a, 0x03, 0x00, 0x02, + 0x00, 0x03, 0x12, 0x04, 0xc5, 0x02, 0x29, 0x2a, 0x0a, 0x30, 0x0a, 0x04, 0x04, 0x1a, 0x02, 0x04, + 0x12, 0x04, 0xca, 0x02, 0x02, 0x30, 0x1a, 0x22, 0x20, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x73, + 0x6f, 0x72, 0x74, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x61, + 0x74, 0x63, 0x68, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, + 0x02, 0x04, 0x04, 0x12, 0x04, 0xca, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, + 0x04, 0x06, 0x12, 0x04, 0xca, 0x02, 0x0b, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x04, + 0x01, 0x12, 0x04, 0xca, 0x02, 0x1a, 0x2b, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1a, 0x02, 0x04, 0x03, + 0x12, 0x04, 0xca, 0x02, 0x2e, 0x2f, 0x0a, 0x3a, 0x0a, 0x02, 0x04, 0x1b, 0x12, 0x06, 0xce, 0x02, + 0x00, 0xd6, 0x02, 0x01, 0x1a, 0x2c, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x61, 0x74, 0x63, + 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x2e, 0x0a, 0x0a, 0x0b, 0x0a, 0x03, 0x04, 0x1b, 0x01, 0x12, 0x04, 0xce, 0x02, 0x08, 0x1b, 0x0a, + 0xb3, 0x01, 0x0a, 0x04, 0x04, 0x1b, 0x02, 0x00, 0x12, 0x04, 0xd2, 0x02, 0x02, 0x25, 0x1a, 0xa4, + 0x01, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x2e, 0x0a, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x6c, 0x6c, + 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x0a, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x73, 0x75, + 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, + 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, + 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x04, 0x12, 0x04, + 0xd2, 0x02, 0x02, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x06, 0x12, 0x04, 0xd2, + 0x02, 0x0b, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x01, 0x12, 0x04, 0xd2, 0x02, + 0x15, 0x20, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x00, 0x03, 0x12, 0x04, 0xd2, 0x02, 0x23, + 0x24, 0x0a, 0x66, 0x0a, 0x04, 0x04, 0x1b, 0x02, 0x01, 0x12, 0x04, 0xd5, 0x02, 0x02, 0x14, 0x1a, + 0x58, 0x20, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x4c, 0x69, 0x73, + 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, + 0x01, 0x05, 0x12, 0x04, 0xd5, 0x02, 0x02, 0x06, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, + 0x01, 0x12, 0x04, 0xd5, 0x02, 0x07, 0x0f, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x1b, 0x02, 0x01, 0x03, + 0x12, 0x04, 0xd5, 0x02, 0x12, 0x13, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x97, + 0x1c, 0x0a, 0x2b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, + 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, + 0x6f, 0x77, 0x1a, 0x1e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, + 0x73, 0x6b, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x24, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, + 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, + 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, + 0x73, 0x12, 0x39, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, + 0x70, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x20, + 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, + 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, 0x4e, 0x0a, + 0x1f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x54, + 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2b, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, + 0x20, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x54, + 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x52, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x22, 0x58, 0x0a, 0x1f, 0x54, + 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, + 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, + 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, 0x61, 0x73, + 0x6b, 0x53, 0x70, 0x65, 0x63, 0x22, 0x4f, 0x0a, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, + 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x6a, 0x73, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x4a, 0x73, 0x6f, 0x6e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x22, 0x58, 0x0a, 0x1c, 0x4a, 0x73, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, + 0x61, 0x6c, 0x52, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x32, 0xba, 0x04, 0x0a, + 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x54, + 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x12, + 0x33, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x54, 0x6f, 0x4c, + 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4e, 0x61, 0x6d, - 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x4d, 0x61, 0x70, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x4f, - 0x0a, 0x20, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, - 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, - 0x4e, 0x0a, 0x1f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, - 0x6e, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, - 0x5c, 0x0a, 0x20, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, - 0x6e, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, - 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x74, 0x65, - 0x72, 0x61, 0x6c, 0x52, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x22, 0x58, 0x0a, - 0x1f, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x35, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x74, - 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x22, 0x4f, 0x0a, 0x20, 0x54, 0x61, 0x73, 0x6b, 0x53, - 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, - 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x6a, - 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x4a, 0x73, 0x6f, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x8a, 0x01, 0x0a, 0x18, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, + 0x6f, 0x6e, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x33, 0x2e, 0x66, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, + 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x34, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, + 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x8a, 0x01, 0x0a, + 0x18, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x66, 0x6c, 0x79, 0x74, + 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, + 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, + 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, + 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x14, 0x4a, 0x73, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x1c, 0x4a, 0x73, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, + 0x73, 0x12, 0x2f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, + 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x52, 0x08, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x32, 0xba, - 0x04, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, - 0x73, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, - 0x6e, 0x12, 0x33, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x54, - 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, - 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x69, 0x74, 0x65, - 0x72, 0x61, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, - 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, - 0x01, 0x12, 0x8a, 0x01, 0x0a, 0x18, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, - 0x4a, 0x73, 0x6f, 0x6e, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x33, - 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, - 0x6f, 0x6e, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, - 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x8a, - 0x01, 0x0a, 0x18, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x66, 0x6c, - 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, - 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x70, 0x65, 0x63, 0x54, 0x6f, - 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x6d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x14, 0x4a, - 0x73, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x6c, 0x73, 0x12, 0x2f, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x54, 0x6f, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x42, 0xd1, 0x01, 0x0a, 0x16, - 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, - 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, - 0x74, 0x65, 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, - 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, - 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, - 0x6c, 0x6f, 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, - 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, - 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, - 0x65, 0x69, 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, - 0x90, 0x0e, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x45, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, - 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, - 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x28, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, - 0x03, 0x05, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x2e, 0x0a, - 0x09, 0x0a, 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, 0x26, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, - 0x03, 0x09, 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x09, 0x00, 0x4d, 0x0a, - 0x6e, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x0c, 0x00, 0x19, 0x01, 0x1a, 0x62, 0x20, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x69, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x0a, 0x0a, - 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x06, - 0x00, 0x02, 0x00, 0x12, 0x04, 0x0d, 0x02, 0x0f, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, - 0x00, 0x01, 0x12, 0x03, 0x0d, 0x06, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, - 0x12, 0x03, 0x0d, 0x1f, 0x3e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, - 0x0d, 0x49, 0x69, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x0e, 0x04, - 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x00, 0x04, 0x22, 0x12, 0x03, 0x0e, 0x04, 0x2f, - 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x04, 0x10, 0x02, 0x12, 0x03, 0x0a, 0x0c, - 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x10, 0x06, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, - 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x10, 0x1f, 0x3e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, - 0x02, 0x01, 0x03, 0x12, 0x03, 0x10, 0x49, 0x69, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, - 0x04, 0x12, 0x03, 0x11, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x01, 0x04, 0x22, - 0x12, 0x03, 0x11, 0x04, 0x2f, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x04, 0x13, - 0x02, 0x15, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x06, - 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x13, 0x1f, 0x3e, 0x0a, - 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x13, 0x49, 0x69, 0x0a, 0x0c, 0x0a, - 0x05, 0x06, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x14, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, - 0x00, 0x02, 0x02, 0x04, 0x22, 0x12, 0x03, 0x14, 0x04, 0x2f, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, - 0x02, 0x03, 0x12, 0x04, 0x16, 0x02, 0x18, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, - 0x01, 0x12, 0x03, 0x16, 0x06, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, - 0x03, 0x16, 0x1b, 0x36, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x16, - 0x41, 0x5d, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x17, 0x04, 0x2f, - 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x03, 0x04, 0x22, 0x12, 0x03, 0x17, 0x04, 0x2f, 0x0a, - 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x1b, 0x00, 0x1f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, - 0x00, 0x01, 0x12, 0x03, 0x1b, 0x08, 0x27, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, - 0x03, 0x1d, 0x02, 0x2a, 0x1a, 0x22, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, - 0x61, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x74, - 0x6f, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, - 0x04, 0x12, 0x03, 0x1d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, - 0x03, 0x1d, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1d, - 0x1d, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1d, 0x28, 0x29, - 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x1e, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x1e, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, - 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1e, 0x1d, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, - 0x01, 0x03, 0x12, 0x03, 0x1e, 0x29, 0x2a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x21, - 0x00, 0x24, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x21, 0x08, 0x28, 0x0a, - 0x29, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x23, 0x02, 0x22, 0x1a, 0x1c, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x23, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x23, 0x19, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x23, 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x26, 0x00, 0x29, 0x01, - 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x26, 0x08, 0x27, 0x0a, 0x36, 0x0a, 0x04, - 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x28, 0x02, 0x22, 0x1a, 0x29, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x74, 0x6f, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, - 0x6c, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x28, - 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x19, 0x1d, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x28, 0x20, 0x21, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x2b, 0x00, 0x2e, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, - 0x01, 0x12, 0x03, 0x2b, 0x08, 0x28, 0x0a, 0x3b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, - 0x2d, 0x02, 0x2a, 0x1a, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, - 0x6c, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x04, 0x12, 0x03, 0x2d, 0x02, - 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x2d, 0x0b, 0x1c, 0x0a, - 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2d, 0x1d, 0x25, 0x0a, 0x0c, 0x0a, - 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2d, 0x28, 0x29, 0x0a, 0x0a, 0x0a, 0x02, 0x04, - 0x04, 0x12, 0x04, 0x30, 0x00, 0x34, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, - 0x30, 0x08, 0x27, 0x0a, 0x5f, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x33, 0x02, 0x28, - 0x1a, 0x52, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x73, 0x70, 0x65, 0x63, - 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x4a, - 0x53, 0x4f, 0x4e, 0x2e, 0x0a, 0x20, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x33, - 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x33, 0x1a, 0x23, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x33, 0x26, 0x27, 0x0a, 0x0a, - 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x36, 0x00, 0x39, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, - 0x01, 0x12, 0x03, 0x36, 0x08, 0x28, 0x0a, 0x2a, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, - 0x38, 0x02, 0x22, 0x1a, 0x1d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x38, 0x02, 0x18, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x38, 0x19, 0x1d, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x38, 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, - 0x04, 0x06, 0x12, 0x04, 0x3b, 0x00, 0x40, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, - 0x03, 0x3b, 0x08, 0x23, 0x0a, 0x54, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x3d, 0x02, - 0x2b, 0x1a, 0x47, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x29, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, - 0x02, 0x00, 0x06, 0x12, 0x03, 0x3d, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, - 0x01, 0x12, 0x03, 0x3d, 0x1d, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, - 0x03, 0x3d, 0x29, 0x2a, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x3f, 0x02, - 0x24, 0x1a, 0x2d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x61, 0x77, 0x20, 0x4a, 0x53, 0x4f, 0x4e, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x0a, - 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3f, 0x02, 0x18, 0x0a, 0x0c, - 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3f, 0x19, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, - 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3f, 0x22, 0x23, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, - 0x12, 0x04, 0x42, 0x00, 0x45, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x42, - 0x08, 0x24, 0x0a, 0x56, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x44, 0x02, 0x2a, 0x1a, - 0x49, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x20, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x75, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, - 0x02, 0x00, 0x04, 0x12, 0x03, 0x44, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, - 0x06, 0x12, 0x03, 0x44, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, - 0x03, 0x44, 0x1d, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x44, - 0x28, 0x29, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x42, 0xd1, 0x01, 0x0a, 0x16, 0x63, 0x6f, + 0x6d, 0x2e, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x42, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x6f, 0x72, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, + 0x6f, 0x72, 0x67, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x67, 0x6f, 0x2f, 0x66, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2f, 0x77, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xa2, 0x02, 0x03, 0x46, 0x57, 0x58, 0xaa, 0x02, 0x12, 0x46, + 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0xca, 0x02, 0x12, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, 0x6c, 0x32, 0x5c, 0x57, 0x6f, + 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0xe2, 0x02, 0x1e, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, 0x64, + 0x6c, 0x32, 0x5c, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x46, 0x6c, 0x79, 0x74, 0x65, 0x69, + 0x64, 0x6c, 0x32, 0x3a, 0x3a, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4a, 0x90, 0x0e, + 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x45, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, + 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1b, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x28, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, + 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, 0x00, 0x2e, 0x0a, 0x09, 0x0a, + 0x02, 0x03, 0x03, 0x12, 0x03, 0x07, 0x00, 0x26, 0x0a, 0x08, 0x0a, 0x01, 0x08, 0x12, 0x03, 0x09, + 0x00, 0x4d, 0x0a, 0x09, 0x0a, 0x02, 0x08, 0x0b, 0x12, 0x03, 0x09, 0x00, 0x4d, 0x0a, 0x6e, 0x0a, + 0x02, 0x06, 0x00, 0x12, 0x04, 0x0c, 0x00, 0x19, 0x01, 0x1a, 0x62, 0x20, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x64, 0x69, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, + 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x19, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, + 0x00, 0x12, 0x04, 0x0d, 0x02, 0x0f, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x0d, 0x06, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, + 0x0d, 0x1f, 0x3e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0d, 0x49, + 0x69, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x04, 0x12, 0x03, 0x0e, 0x04, 0x2f, 0x0a, + 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x00, 0x04, 0x22, 0x12, 0x03, 0x0e, 0x04, 0x2f, 0x0a, 0x0c, + 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x04, 0x10, 0x02, 0x12, 0x03, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x10, 0x06, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x01, 0x02, 0x12, 0x03, 0x10, 0x1f, 0x3e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, + 0x03, 0x12, 0x03, 0x10, 0x49, 0x69, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x04, 0x12, + 0x03, 0x11, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, 0x01, 0x04, 0x22, 0x12, 0x03, + 0x11, 0x04, 0x2f, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x04, 0x13, 0x02, 0x15, + 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x06, 0x1e, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x13, 0x1f, 0x3e, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x13, 0x49, 0x69, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x14, 0x04, 0x2f, 0x0a, 0x0d, 0x0a, 0x06, 0x06, 0x00, 0x02, + 0x02, 0x04, 0x22, 0x12, 0x03, 0x14, 0x04, 0x2f, 0x0a, 0x0c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, + 0x12, 0x04, 0x16, 0x02, 0x18, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, + 0x03, 0x16, 0x06, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x16, + 0x1b, 0x36, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x16, 0x41, 0x5d, + 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x04, 0x12, 0x03, 0x17, 0x04, 0x2f, 0x0a, 0x0d, + 0x0a, 0x06, 0x06, 0x00, 0x02, 0x03, 0x04, 0x22, 0x12, 0x03, 0x17, 0x04, 0x2f, 0x0a, 0x0a, 0x0a, + 0x02, 0x04, 0x00, 0x12, 0x04, 0x1b, 0x00, 0x1f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, + 0x12, 0x03, 0x1b, 0x08, 0x27, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x1d, + 0x02, 0x2a, 0x1a, 0x22, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, + 0x4a, 0x53, 0x4f, 0x4e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x04, 0x12, + 0x03, 0x1d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1d, + 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1d, 0x1d, 0x25, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1d, 0x28, 0x29, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x1e, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x06, 0x12, 0x03, 0x1e, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x1e, 0x1d, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, + 0x12, 0x03, 0x1e, 0x29, 0x2a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x21, 0x00, 0x24, + 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x21, 0x08, 0x28, 0x0a, 0x29, 0x0a, + 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x23, 0x02, 0x22, 0x1a, 0x1c, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, + 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x23, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x23, 0x19, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x23, + 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x26, 0x00, 0x29, 0x01, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x26, 0x08, 0x27, 0x0a, 0x36, 0x0a, 0x04, 0x04, 0x02, + 0x02, 0x00, 0x12, 0x03, 0x28, 0x02, 0x22, 0x1a, 0x29, 0x20, 0x54, 0x68, 0x65, 0x20, 0x4a, 0x53, + 0x4f, 0x4e, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x28, 0x02, 0x18, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x28, 0x19, 0x1d, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x28, 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, + 0x04, 0x03, 0x12, 0x04, 0x2b, 0x00, 0x2e, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, + 0x03, 0x2b, 0x08, 0x28, 0x0a, 0x3b, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x2d, 0x02, + 0x2a, 0x1a, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x04, 0x12, 0x03, 0x2d, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x2d, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2d, 0x1d, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2d, 0x28, 0x29, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x04, 0x12, + 0x04, 0x30, 0x00, 0x34, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x30, 0x08, + 0x27, 0x0a, 0x5f, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x33, 0x02, 0x28, 0x1a, 0x52, + 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x74, + 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x4a, 0x53, 0x4f, + 0x4e, 0x2e, 0x0a, 0x20, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x73, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x06, 0x12, 0x03, 0x33, 0x02, 0x19, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x33, 0x1a, 0x23, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x33, 0x26, 0x27, 0x0a, 0x0a, 0x0a, 0x02, + 0x04, 0x05, 0x12, 0x04, 0x36, 0x00, 0x39, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, + 0x03, 0x36, 0x08, 0x28, 0x0a, 0x2a, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x38, 0x02, + 0x22, 0x1a, 0x1d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x38, 0x02, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x38, 0x19, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x38, 0x20, 0x21, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, + 0x12, 0x04, 0x3b, 0x00, 0x40, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x3b, + 0x08, 0x23, 0x0a, 0x54, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x3d, 0x02, 0x2b, 0x1a, + 0x47, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x4d, 0x61, 0x70, 0x29, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x3d, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x3d, 0x1d, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3d, + 0x29, 0x2a, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x3f, 0x02, 0x24, 0x1a, + 0x2d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x61, 0x77, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, + 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x06, 0x12, 0x03, 0x3f, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3f, 0x19, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x01, 0x03, 0x12, 0x03, 0x3f, 0x22, 0x23, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x04, + 0x42, 0x00, 0x45, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x42, 0x08, 0x24, + 0x0a, 0x56, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x44, 0x02, 0x2a, 0x1a, 0x49, 0x20, + 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x20, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x75, 0x73, 0x69, 0x6e, + 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, + 0x04, 0x12, 0x03, 0x44, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x44, 0x0b, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x44, + 0x1d, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x44, 0x28, 0x29, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, ]; include!("flyteidl2.workflow.tonic.rs"); // @@protoc_insertion_point(module) \ No newline at end of file diff --git a/gen/rust/src/flyteidl2.workflow.tonic.rs b/gen/rust/src/flyteidl2.workflow.tonic.rs index c8aee18744..7ed4a78f73 100644 --- a/gen/rust/src/flyteidl2.workflow.tonic.rs +++ b/gen/rust/src/flyteidl2.workflow.tonic.rs @@ -424,6 +424,285 @@ pub mod state_service_server { } } /// Generated client implementations. +pub mod events_proxy_service_client { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + use tonic::codegen::http::Uri; + #[derive(Debug, Clone)] + pub struct EventsProxyServiceClient { + inner: tonic::client::Grpc, + } + impl EventsProxyServiceClient { + /// Attempt to create a new client by connecting to a given endpoint. + pub async fn connect(dst: D) -> Result + where + D: TryInto, + D::Error: Into, + { + let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; + Ok(Self::new(conn)) + } + } + impl EventsProxyServiceClient + where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: Body + Send + 'static, + ::Error: Into + Send, + { + pub fn new(inner: T) -> Self { + let inner = tonic::client::Grpc::new(inner); + Self { inner } + } + pub fn with_origin(inner: T, origin: Uri) -> Self { + let inner = tonic::client::Grpc::with_origin(inner, origin); + Self { inner } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> EventsProxyServiceClient> + where + F: tonic::service::Interceptor, + T::ResponseBody: Default, + T: tonic::codegen::Service< + http::Request, + Response = http::Response< + >::ResponseBody, + >, + >, + , + >>::Error: Into + Send + Sync, + { + EventsProxyServiceClient::new(InterceptedService::new(inner, interceptor)) + } + /// Compress requests with the given encoding. + /// + /// This requires the server to support it otherwise it might respond with an + /// error. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.inner = self.inner.send_compressed(encoding); + self + } + /// Enable decompressing responses. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.inner = self.inner.accept_compressed(encoding); + self + } + /// Limits the maximum size of a decoded message. + /// + /// Default: `4MB` + #[must_use] + pub fn max_decoding_message_size(mut self, limit: usize) -> Self { + self.inner = self.inner.max_decoding_message_size(limit); + self + } + /// Limits the maximum size of an encoded message. + /// + /// Default: `usize::MAX` + #[must_use] + pub fn max_encoding_message_size(mut self, limit: usize) -> Self { + self.inner = self.inner.max_encoding_message_size(limit); + self + } + pub async fn record( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result, tonic::Status> { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/flyteidl2.workflow.EventsProxyService/Record", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("flyteidl2.workflow.EventsProxyService", "Record"), + ); + self.inner.unary(req, path, codec).await + } + } +} +/// Generated server implementations. +pub mod events_proxy_service_server { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + /// Generated trait containing gRPC methods that should be implemented for use with EventsProxyServiceServer. + #[async_trait] + pub trait EventsProxyService: Send + Sync + 'static { + async fn record( + &self, + request: tonic::Request, + ) -> std::result::Result, tonic::Status>; + } + #[derive(Debug)] + pub struct EventsProxyServiceServer { + inner: Arc, + accept_compression_encodings: EnabledCompressionEncodings, + send_compression_encodings: EnabledCompressionEncodings, + max_decoding_message_size: Option, + max_encoding_message_size: Option, + } + impl EventsProxyServiceServer { + pub fn new(inner: T) -> Self { + Self::from_arc(Arc::new(inner)) + } + pub fn from_arc(inner: Arc) -> Self { + Self { + inner, + accept_compression_encodings: Default::default(), + send_compression_encodings: Default::default(), + max_decoding_message_size: None, + max_encoding_message_size: None, + } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService + where + F: tonic::service::Interceptor, + { + InterceptedService::new(Self::new(inner), interceptor) + } + /// Enable decompressing requests with the given encoding. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.accept_compression_encodings.enable(encoding); + self + } + /// Compress responses with the given encoding, if the client supports it. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.send_compression_encodings.enable(encoding); + self + } + /// Limits the maximum size of a decoded message. + /// + /// Default: `4MB` + #[must_use] + pub fn max_decoding_message_size(mut self, limit: usize) -> Self { + self.max_decoding_message_size = Some(limit); + self + } + /// Limits the maximum size of an encoded message. + /// + /// Default: `usize::MAX` + #[must_use] + pub fn max_encoding_message_size(mut self, limit: usize) -> Self { + self.max_encoding_message_size = Some(limit); + self + } + } + impl tonic::codegen::Service> for EventsProxyServiceServer + where + T: EventsProxyService, + B: Body + Send + 'static, + B::Error: Into + Send + 'static, + { + type Response = http::Response; + type Error = std::convert::Infallible; + type Future = BoxFuture; + fn poll_ready( + &mut self, + _cx: &mut Context<'_>, + ) -> Poll> { + Poll::Ready(Ok(())) + } + fn call(&mut self, req: http::Request) -> Self::Future { + match req.uri().path() { + "/flyteidl2.workflow.EventsProxyService/Record" => { + #[allow(non_camel_case_types)] + struct RecordSvc(pub Arc); + impl< + T: EventsProxyService, + > tonic::server::UnaryService + for RecordSvc { + type Response = super::RecordResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::record(&inner, request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = RecordSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + _ => { + Box::pin(async move { + Ok( + http::Response::builder() + .status(200) + .header("grpc-status", tonic::Code::Unimplemented as i32) + .header( + http::header::CONTENT_TYPE, + tonic::metadata::GRPC_CONTENT_TYPE, + ) + .body(empty_body()) + .unwrap(), + ) + }) + } + } + } + } + impl Clone for EventsProxyServiceServer { + fn clone(&self) -> Self { + let inner = self.inner.clone(); + Self { + inner, + accept_compression_encodings: self.accept_compression_encodings, + send_compression_encodings: self.send_compression_encodings, + max_decoding_message_size: self.max_decoding_message_size, + max_encoding_message_size: self.max_encoding_message_size, + } + } + } + impl tonic::server::NamedService + for EventsProxyServiceServer { + const NAME: &'static str = "flyteidl2.workflow.EventsProxyService"; + } +} +/// Generated client implementations. pub mod internal_run_service_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] use tonic::codegen::*; diff --git a/gen/rust/src/lib.rs b/gen/rust/src/lib.rs index bbbfd319c8..de3f8f3d99 100644 --- a/gen/rust/src/lib.rs +++ b/gen/rust/src/lib.rs @@ -49,6 +49,10 @@ pub mod flyteidl { include!("flyteidl2.core.rs"); } + pub mod notification { + include!("flyteidl2.notification.rs"); + } + pub mod task { include!("flyteidl2.task.rs"); } diff --git a/gen/ts/flyteidl2/common/role_pb.ts b/gen/ts/flyteidl2/common/role_pb.ts index eb45f2cd6a..0c6e8e15ec 100644 --- a/gen/ts/flyteidl2/common/role_pb.ts +++ b/gen/ts/flyteidl2/common/role_pb.ts @@ -15,7 +15,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file flyteidl2/common/role.proto. */ export const file_flyteidl2_common_role: GenFile = /*@__PURE__*/ - fileDesc("ChtmbHl0ZWlkbDIvY29tbW9uL3JvbGUucHJvdG8SEGZseXRlaWRsMi5jb21tb24i/AEKBFJvbGUSNAoCaWQYASABKAsyIC5mbHl0ZWlkbDIuY29tbW9uLlJvbGVJZGVudGlmaWVyQga6SAPIAQESNQoLcGVybWlzc2lvbnMYAiADKAsyHC5mbHl0ZWlkbDIuY29tbW9uLlBlcm1pc3Npb25CAhgBEi0KCXJvbGVfc3BlYxgDIAEoCzIaLmZseXRlaWRsMi5jb21tb24uUm9sZVNwZWMSLQoJcm9sZV90eXBlGAQgASgOMhouZmx5dGVpZGwyLmNvbW1vbi5Sb2xlVHlwZRIpCgdhY3Rpb25zGAUgAygOMhguZmx5dGVpZGwyLmNvbW1vbi5BY3Rpb24iHwoIUm9sZVNwZWMSEwoLZGVzY3JpcHRpb24YASABKAkqmgIKCFJvbGVUeXBlEhIKDlJPTEVfVFlQRV9OT05FEAASEwoPUk9MRV9UWVBFX0FETUlOEAESGQoVUk9MRV9UWVBFX0NPTlRSSUJVVE9SEAISFAoQUk9MRV9UWVBFX1ZJRVdFUhADEhQKEFJPTEVfVFlQRV9DVVNUT00QBBIdChlST0xFX1RZUEVfQ0xVU1RFUl9NQU5BR0VSEAUSIQodUk9MRV9UWVBFX0ZMWVRFX1BST0pFQ1RfQURNSU4QBhIfChtST0xFX1RZUEVfU0VSVkVSTEVTU19WSUVXRVIQBxIkCiBST0xFX1RZUEVfU0VSVkVSTEVTU19DT05UUklCVVRPUhAIEhUKEVJPTEVfVFlQRV9TVVBQT1JUEAlCugEKFGNvbS5mbHl0ZWlkbDIuY29tbW9uQglSb2xlUHJvdG9IAlABWjRnaXRodWIuY29tL2ZseXRlb3JnL2ZseXRlL3YyL2dlbi9nby9mbHl0ZWlkbDIvY29tbW9uogIDRkNYqgIQRmx5dGVpZGwyLkNvbW1vbsoCEEZseXRlaWRsMlxDb21tb27iAhxGbHl0ZWlkbDJcQ29tbW9uXEdQQk1ldGFkYXRh6gIRRmx5dGVpZGwyOjpDb21tb25iBnByb3RvMw", [file_buf_validate_validate, file_flyteidl2_common_authorization, file_flyteidl2_common_identifier]); + fileDesc("ChtmbHl0ZWlkbDIvY29tbW9uL3JvbGUucHJvdG8SEGZseXRlaWRsMi5jb21tb24i/AEKBFJvbGUSNAoCaWQYASABKAsyIC5mbHl0ZWlkbDIuY29tbW9uLlJvbGVJZGVudGlmaWVyQga6SAPIAQESNQoLcGVybWlzc2lvbnMYAiADKAsyHC5mbHl0ZWlkbDIuY29tbW9uLlBlcm1pc3Npb25CAhgBEi0KCXJvbGVfc3BlYxgDIAEoCzIaLmZseXRlaWRsMi5jb21tb24uUm9sZVNwZWMSLQoJcm9sZV90eXBlGAQgASgOMhouZmx5dGVpZGwyLmNvbW1vbi5Sb2xlVHlwZRIpCgdhY3Rpb25zGAUgAygOMhguZmx5dGVpZGwyLmNvbW1vbi5BY3Rpb24iHwoIUm9sZVNwZWMSEwoLZGVzY3JpcHRpb24YASABKAkqwwIKCFJvbGVUeXBlEhIKDlJPTEVfVFlQRV9OT05FEAASEwoPUk9MRV9UWVBFX0FETUlOEAESGQoVUk9MRV9UWVBFX0NPTlRSSUJVVE9SEAISFAoQUk9MRV9UWVBFX1ZJRVdFUhADEhQKEFJPTEVfVFlQRV9DVVNUT00QBBIdChlST0xFX1RZUEVfQ0xVU1RFUl9NQU5BR0VSEAUSIQodUk9MRV9UWVBFX0ZMWVRFX1BST0pFQ1RfQURNSU4QBhIfChtST0xFX1RZUEVfU0VSVkVSTEVTU19WSUVXRVIQBxIkCiBST0xFX1RZUEVfU0VSVkVSTEVTU19DT05UUklCVVRPUhAIEhUKEVJPTEVfVFlQRV9TVVBQT1JUEAkSJwojUk9MRV9UWVBFX1NZU1RFTV9QUk9WSVNJT05FRF9BQ0NFU1MQCkK6AQoUY29tLmZseXRlaWRsMi5jb21tb25CCVJvbGVQcm90b0gCUAFaNGdpdGh1Yi5jb20vZmx5dGVvcmcvZmx5dGUvdjIvZ2VuL2dvL2ZseXRlaWRsMi9jb21tb26iAgNGQ1iqAhBGbHl0ZWlkbDIuQ29tbW9uygIQRmx5dGVpZGwyXENvbW1vbuICHEZseXRlaWRsMlxDb21tb25cR1BCTWV0YWRhdGHqAhFGbHl0ZWlkbDI6OkNvbW1vbmIGcHJvdG8z", [file_buf_validate_validate, file_flyteidl2_common_authorization, file_flyteidl2_common_identifier]); /** * @generated from message flyteidl2.common.Role @@ -151,6 +151,14 @@ export enum RoleType { * @generated from enum value: ROLE_TYPE_SUPPORT = 9; */ SUPPORT = 9, + + /** + * Internal system-provisioned role assigned to all identities by default. + * Grants baseline access required for platform functionality (e.g. image builder). + * + * @generated from enum value: ROLE_TYPE_SYSTEM_PROVISIONED_ACCESS = 10; + */ + SYSTEM_PROVISIONED_ACCESS = 10, } /** diff --git a/gen/ts/flyteidl2/logs/dataplane/payload_pb.ts b/gen/ts/flyteidl2/logs/dataplane/payload_pb.ts index 88da4ff860..7ba29a613f 100644 --- a/gen/ts/flyteidl2/logs/dataplane/payload_pb.ts +++ b/gen/ts/flyteidl2/logs/dataplane/payload_pb.ts @@ -15,7 +15,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file flyteidl2/logs/dataplane/payload.proto. */ export const file_flyteidl2_logs_dataplane_payload: GenFile = /*@__PURE__*/ - fileDesc("CiZmbHl0ZWlkbDIvbG9ncy9kYXRhcGxhbmUvcGF5bG9hZC5wcm90bxIYZmx5dGVpZGwyLmxvZ3MuZGF0YXBsYW5lIlMKC1BvZFJlc291cmNlEhoKCW5hbWVzcGFjZRgBIAEoCUIHukgEcgIQARIVCgRuYW1lGAIgASgJQge6SARyAhABEhEKCWNvbnRhaW5lchgDIAEoCSKgBAoOTG9nZ2luZ0NvbnRleHQSHQoMY2x1c3Rlcl9uYW1lGAMgASgJQge6SARyAhABEiUKFGt1YmVybmV0ZXNfbmFtZXNwYWNlGAQgASgJQge6SARyAhABEiQKE2t1YmVybmV0ZXNfcG9kX25hbWUYBSABKAlCB7pIBHICEAESKgoZa3ViZXJuZXRlc19jb250YWluZXJfbmFtZRgGIAEoCUIHukgEcgIQARJAChxleGVjdXRpb25fYXR0ZW1wdF9zdGFydF90aW1lGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI+ChpleGVjdXRpb25fYXR0ZW1wdF9lbmRfdGltZRgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASYAoVa3ViZXJuZXRlc19wb2RfbGFiZWxzGAkgAygLMkEuZmx5dGVpZGwyLmxvZ3MuZGF0YXBsYW5lLkxvZ2dpbmdDb250ZXh0Lkt1YmVybmV0ZXNQb2RMYWJlbHNFbnRyeRIvCgVvcmRlchgKIAEoDjIgLmZseXRlaWRsMi5jb21tb24uU29ydC5EaXJlY3Rpb24SGQoRbnVtYmVyX29mX2JhdGNoZXMYCyABKAQaOgoYS3ViZXJuZXRlc1BvZExhYmVsc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFKBAgBEAJKBAgCEAMipAEKE0NvbnRhaW5lcklkZW50aWZpZXISHQoMY2x1c3Rlcl9uYW1lGAEgASgJQge6SARyAhABEiUKFGt1YmVybmV0ZXNfbmFtZXNwYWNlGAIgASgJQge6SARyAhABEiQKE2t1YmVybmV0ZXNfcG9kX25hbWUYAyABKAlCB7pIBHICEAESIQoZa3ViZXJuZXRlc19jb250YWluZXJfbmFtZRgEIAEoCSLHAQoRQ29udGFpbmVyU2VsZWN0b3ISHQoMY2x1c3Rlcl9uYW1lGAEgASgJQge6SARyAhABEiUKFGt1YmVybmV0ZXNfbmFtZXNwYWNlGAIgASgJQge6SARyAhABEiIKGmt1YmVybmV0ZXNfcG9kX25hbWVfcHJlZml4GAMgASgJEiEKGWt1YmVybmV0ZXNfY29udGFpbmVyX25hbWUYBCABKAkSJQoda3ViZXJuZXRlc19wb2RfbGFiZWxfc2VsZWN0b3IYBSABKAkiQQoPTGl2ZUxvZ3NPcHRpb25zEhYKDmxvZ19wb2Rfc3RhdHVzGAEgASgIEhYKDmxvZ190aW1lc3RhbXBzGAIgASgIIooBCgdMb2dMaW5lEi0KCXRpbWVzdGFtcBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHbWVzc2FnZRgCIAEoCRI/CgpvcmlnaW5hdG9yGAMgASgOMisuZmx5dGVpZGwyLmxvZ3MuZGF0YXBsYW5lLkxvZ0xpbmVPcmlnaW5hdG9yIr0BCghMb2dMaW5lcxIRCgVsaW5lcxgBIAMoCUICGAESFwoPY29udGFpbmVyX2luZGV4GAIgASgNEkgKCWNvbnRhaW5lchgDIAEoCzItLmZseXRlaWRsMi5sb2dzLmRhdGFwbGFuZS5Db250YWluZXJJZGVudGlmaWVyQga6SAPIAQESOwoQc3RydWN0dXJlZF9saW5lcxgEIAMoCzIhLmZseXRlaWRsMi5sb2dzLmRhdGFwbGFuZS5Mb2dMaW5lIlYKEUxvZ0NvbnRhaW5lcnNMaXN0EkEKCmNvbnRhaW5lcnMYASADKAsyLS5mbHl0ZWlkbDIubG9ncy5kYXRhcGxhbmUuQ29udGFpbmVySWRlbnRpZmllciJBCg1Mb2dMaW5lc0JhdGNoEjAKBGxvZ3MYASADKAsyIi5mbHl0ZWlkbDIubG9ncy5kYXRhcGxhbmUuTG9nTGluZXMqNgoRTG9nTGluZU9yaWdpbmF0b3ISCwoHVU5LTk9XThAAEggKBFVTRVIQARIKCgZTWVNURU0QAipGCgpMb2dzU291cmNlEhUKEUxJVkVfT1JfUEVSU0lTVEVEEAASDQoJTElWRV9PTkxZEAESEgoOUEVSU0lTVEVEX09OTFkQAkLuAQocY29tLmZseXRlaWRsMi5sb2dzLmRhdGFwbGFuZUIMUGF5bG9hZFByb3RvSAJQAVo8Z2l0aHViLmNvbS9mbHl0ZW9yZy9mbHl0ZS92Mi9nZW4vZ28vZmx5dGVpZGwyL2xvZ3MvZGF0YXBsYW5logIDRkxEqgIYRmx5dGVpZGwyLkxvZ3MuRGF0YXBsYW5lygIYRmx5dGVpZGwyXExvZ3NcRGF0YXBsYW5l4gIkRmx5dGVpZGwyXExvZ3NcRGF0YXBsYW5lXEdQQk1ldGFkYXRh6gIaRmx5dGVpZGwyOjpMb2dzOjpEYXRhcGxhbmViBnByb3RvMw", [file_buf_validate_validate, file_flyteidl2_common_list, file_google_protobuf_timestamp]); + fileDesc("CiZmbHl0ZWlkbDIvbG9ncy9kYXRhcGxhbmUvcGF5bG9hZC5wcm90bxIYZmx5dGVpZGwyLmxvZ3MuZGF0YXBsYW5lIlMKC1BvZFJlc291cmNlEhoKCW5hbWVzcGFjZRgBIAEoCUIHukgEcgIQARIVCgRuYW1lGAIgASgJQge6SARyAhABEhEKCWNvbnRhaW5lchgDIAEoCSKgBAoOTG9nZ2luZ0NvbnRleHQSHQoMY2x1c3Rlcl9uYW1lGAMgASgJQge6SARyAhABEiUKFGt1YmVybmV0ZXNfbmFtZXNwYWNlGAQgASgJQge6SARyAhABEiQKE2t1YmVybmV0ZXNfcG9kX25hbWUYBSABKAlCB7pIBHICEAESKgoZa3ViZXJuZXRlc19jb250YWluZXJfbmFtZRgGIAEoCUIHukgEcgIQARJAChxleGVjdXRpb25fYXR0ZW1wdF9zdGFydF90aW1lGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI+ChpleGVjdXRpb25fYXR0ZW1wdF9lbmRfdGltZRgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASYAoVa3ViZXJuZXRlc19wb2RfbGFiZWxzGAkgAygLMkEuZmx5dGVpZGwyLmxvZ3MuZGF0YXBsYW5lLkxvZ2dpbmdDb250ZXh0Lkt1YmVybmV0ZXNQb2RMYWJlbHNFbnRyeRIvCgVvcmRlchgKIAEoDjIgLmZseXRlaWRsMi5jb21tb24uU29ydC5EaXJlY3Rpb24SGQoRbnVtYmVyX29mX2JhdGNoZXMYCyABKAQaOgoYS3ViZXJuZXRlc1BvZExhYmVsc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFKBAgBEAJKBAgCEAMipAEKE0NvbnRhaW5lcklkZW50aWZpZXISHQoMY2x1c3Rlcl9uYW1lGAEgASgJQge6SARyAhABEiUKFGt1YmVybmV0ZXNfbmFtZXNwYWNlGAIgASgJQge6SARyAhABEiQKE2t1YmVybmV0ZXNfcG9kX25hbWUYAyABKAlCB7pIBHICEAESIQoZa3ViZXJuZXRlc19jb250YWluZXJfbmFtZRgEIAEoCSLaAQoRQ29udGFpbmVyU2VsZWN0b3ISHQoMY2x1c3Rlcl9uYW1lGAEgASgJQge6SARyAhABEiUKFGt1YmVybmV0ZXNfbmFtZXNwYWNlGAIgASgJQge6SARyAhABEiIKGmt1YmVybmV0ZXNfcG9kX25hbWVfcHJlZml4GAMgASgJEiEKGWt1YmVybmV0ZXNfY29udGFpbmVyX25hbWUYBCABKAkSJQoda3ViZXJuZXRlc19wb2RfbGFiZWxfc2VsZWN0b3IYBSABKAkSEQoJbm9kZV9uYW1lGAYgASgJIkEKD0xpdmVMb2dzT3B0aW9ucxIWCg5sb2dfcG9kX3N0YXR1cxgBIAEoCBIWCg5sb2dfdGltZXN0YW1wcxgCIAEoCCKKAQoHTG9nTGluZRItCgl0aW1lc3RhbXAYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB21lc3NhZ2UYAiABKAkSPwoKb3JpZ2luYXRvchgDIAEoDjIrLmZseXRlaWRsMi5sb2dzLmRhdGFwbGFuZS5Mb2dMaW5lT3JpZ2luYXRvciK9AQoITG9nTGluZXMSEQoFbGluZXMYASADKAlCAhgBEhcKD2NvbnRhaW5lcl9pbmRleBgCIAEoDRJICgljb250YWluZXIYAyABKAsyLS5mbHl0ZWlkbDIubG9ncy5kYXRhcGxhbmUuQ29udGFpbmVySWRlbnRpZmllckIGukgDyAEBEjsKEHN0cnVjdHVyZWRfbGluZXMYBCADKAsyIS5mbHl0ZWlkbDIubG9ncy5kYXRhcGxhbmUuTG9nTGluZSJWChFMb2dDb250YWluZXJzTGlzdBJBCgpjb250YWluZXJzGAEgAygLMi0uZmx5dGVpZGwyLmxvZ3MuZGF0YXBsYW5lLkNvbnRhaW5lcklkZW50aWZpZXIiQQoNTG9nTGluZXNCYXRjaBIwCgRsb2dzGAEgAygLMiIuZmx5dGVpZGwyLmxvZ3MuZGF0YXBsYW5lLkxvZ0xpbmVzKjYKEUxvZ0xpbmVPcmlnaW5hdG9yEgsKB1VOS05PV04QABIICgRVU0VSEAESCgoGU1lTVEVNEAIqRgoKTG9nc1NvdXJjZRIVChFMSVZFX09SX1BFUlNJU1RFRBAAEg0KCUxJVkVfT05MWRABEhIKDlBFUlNJU1RFRF9PTkxZEAJC7gEKHGNvbS5mbHl0ZWlkbDIubG9ncy5kYXRhcGxhbmVCDFBheWxvYWRQcm90b0gCUAFaPGdpdGh1Yi5jb20vZmx5dGVvcmcvZmx5dGUvdjIvZ2VuL2dvL2ZseXRlaWRsMi9sb2dzL2RhdGFwbGFuZaICA0ZMRKoCGEZseXRlaWRsMi5Mb2dzLkRhdGFwbGFuZcoCGEZseXRlaWRsMlxMb2dzXERhdGFwbGFuZeICJEZseXRlaWRsMlxMb2dzXERhdGFwbGFuZVxHUEJNZXRhZGF0YeoCGkZseXRlaWRsMjo6TG9nczo6RGF0YXBsYW5lYgZwcm90bzM", [file_buf_validate_validate, file_flyteidl2_common_list, file_google_protobuf_timestamp]); /** * @generated from message flyteidl2.logs.dataplane.PodResource @@ -195,6 +195,14 @@ export type ContainerSelector = Message<"flyteidl2.logs.dataplane.ContainerSelec * @generated from field: string kubernetes_pod_label_selector = 5; */ kubernetesPodLabelSelector: string; + + /** + * NodeName is the name of the Kubernetes node to filter pods for. Only pods running on this node will be included. + * +optional + * + * @generated from field: string node_name = 6; + */ + nodeName: string; }; /** diff --git a/gen/ts/flyteidl2/notification/definition_pb.ts b/gen/ts/flyteidl2/notification/definition_pb.ts new file mode 100644 index 0000000000..0d2c417a26 --- /dev/null +++ b/gen/ts/flyteidl2/notification/definition_pb.ts @@ -0,0 +1,254 @@ +// @generated by protoc-gen-es v2.2.5 with parameter "target=ts,import_extension=.ts" +// @generated from file flyteidl2/notification/definition.proto (package flyteidl2.notification, syntax proto3) +/* eslint-disable */ + +import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; +import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; +import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts"; +import type { RunIdentifier } from "../common/identifier_pb.ts"; +import { file_flyteidl2_common_identifier } from "../common/identifier_pb.ts"; +import type { ActionPhase } from "../common/phase_pb.ts"; +import { file_flyteidl2_common_phase } from "../common/phase_pb.ts"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file flyteidl2/notification/definition.proto. + */ +export const file_flyteidl2_notification_definition: GenFile = /*@__PURE__*/ + fileDesc("CidmbHl0ZWlkbDIvbm90aWZpY2F0aW9uL2RlZmluaXRpb24ucHJvdG8SFmZseXRlaWRsMi5ub3RpZmljYXRpb24ijgIKFkRlbGl2ZXJ5Q29uZmlnVGVtcGxhdGUSQAoHd2ViaG9vaxgBIAEoCzIvLmZseXRlaWRsMi5ub3RpZmljYXRpb24uV2ViaG9va0RlbGl2ZXJ5VGVtcGxhdGUSPAoFZW1haWwYAiABKAsyLS5mbHl0ZWlkbDIubm90aWZpY2F0aW9uLkVtYWlsRGVsaXZlcnlUZW1wbGF0ZTp0ukhxGm8KFWF0X2xlYXN0X29uZV9yZXF1aXJlZBIwYXQgbGVhc3Qgb25lIG9mIHRoZSBkZWxpdmVyeSBvcHRpb25zIG11c3QgYmUgc2V0GiRoYXModGhpcy53ZWJob29rKSB8fCBoYXModGhpcy5lbWFpbCkimQEKJFJ1bkNvbXBsZXRlZE5vdGlmaWNhdGlvblRlbXBsYXRlRGF0YRI0CgNydW4YASABKAsyHy5mbHl0ZWlkbDIuY29tbW9uLlJ1bklkZW50aWZpZXJCBrpIA8gBARIsCgVwaGFzZRgCIAEoDjIdLmZseXRlaWRsMi5jb21tb24uQWN0aW9uUGhhc2USDQoFZXJyb3IYAyABKAkioAIKF1dlYmhvb2tEZWxpdmVyeVRlbXBsYXRlEhcKA3VybBgBIAEoCUIKukgHcgUQARjQDxI8CgZtZXRob2QYAiABKA4yIi5mbHl0ZWlkbDIubm90aWZpY2F0aW9uLkh0dHBNZXRob2RCCLpIBYIBAiAAEmcKB2hlYWRlcnMYAyADKAsyPC5mbHl0ZWlkbDIubm90aWZpY2F0aW9uLldlYmhvb2tEZWxpdmVyeVRlbXBsYXRlLkhlYWRlcnNFbnRyeUIYukgVmgESEBQiBnIEEAEYFCoGcgQQARgyEhUKDWJvZHlfdGVtcGxhdGUYBCABKAkaLgoMSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiLwoORW1haWxSZWNpcGllbnQSDAoEbmFtZRgBIAEoCRIPCgdhZGRyZXNzGAIgASgJIo8CChVFbWFpbERlbGl2ZXJ5VGVtcGxhdGUSGAoHc3ViamVjdBgBIAEoCUIHukgEcgIQARI8CgJ0bxgCIAMoCzImLmZseXRlaWRsMi5ub3RpZmljYXRpb24uRW1haWxSZWNpcGllbnRCCLpIBZIBAggBEjIKAmNjGAMgAygLMiYuZmx5dGVpZGwyLm5vdGlmaWNhdGlvbi5FbWFpbFJlY2lwaWVudBIzCgNiY2MYBCADKAsyJi5mbHl0ZWlkbDIubm90aWZpY2F0aW9uLkVtYWlsUmVjaXBpZW50Eh4KDWh0bWxfdGVtcGxhdGUYBSABKAlCB7pIBHICEAESFQoNdGV4dF90ZW1wbGF0ZRgGIAEoCSpFCglFdmVudFR5cGUSGgoWRVZFTlRfVFlQRV9VTlNQRUNJRklFRBAAEhwKGEVWRU5UX1RZUEVfUlVOX0NPTVBMRVRFRBABKvcBCgpIdHRwTWV0aG9kEhsKF0hUVFBfTUVUSE9EX1VOU1BFQ0lGSUVEEAASEwoPSFRUUF9NRVRIT0RfR0VUEAESFAoQSFRUUF9NRVRIT0RfSEVBRBACEhQKEEhUVFBfTUVUSE9EX1BPU1QQAxITCg9IVFRQX01FVEhPRF9QVVQQBBIWChJIVFRQX01FVEhPRF9ERUxFVEUQBRIXChNIVFRQX01FVEhPRF9DT05ORUNUEAYSFwoTSFRUUF9NRVRIT0RfT1BUSU9OUxAHEhUKEUhUVFBfTUVUSE9EX1RSQUNFEAgSFQoRSFRUUF9NRVRIT0RfUEFUQ0gQCULkAQoaY29tLmZseXRlaWRsMi5ub3RpZmljYXRpb25CD0RlZmluaXRpb25Qcm90b0gCUAFaOmdpdGh1Yi5jb20vZmx5dGVvcmcvZmx5dGUvdjIvZ2VuL2dvL2ZseXRlaWRsMi9ub3RpZmljYXRpb26iAgNGTliqAhZGbHl0ZWlkbDIuTm90aWZpY2F0aW9uygIWRmx5dGVpZGwyXE5vdGlmaWNhdGlvbuICIkZseXRlaWRsMlxOb3RpZmljYXRpb25cR1BCTWV0YWRhdGHqAhdGbHl0ZWlkbDI6Ok5vdGlmaWNhdGlvbmIGcHJvdG8z", [file_buf_validate_validate, file_flyteidl2_common_identifier, file_flyteidl2_common_phase]); + +/** + * @generated from message flyteidl2.notification.DeliveryConfigTemplate + */ +export type DeliveryConfigTemplate = Message<"flyteidl2.notification.DeliveryConfigTemplate"> & { + /** + * @generated from field: flyteidl2.notification.WebhookDeliveryTemplate webhook = 1; + */ + webhook?: WebhookDeliveryTemplate; + + /** + * @generated from field: flyteidl2.notification.EmailDeliveryTemplate email = 2; + */ + email?: EmailDeliveryTemplate; +}; + +/** + * Describes the message flyteidl2.notification.DeliveryConfigTemplate. + * Use `create(DeliveryConfigTemplateSchema)` to create a new message. + */ +export const DeliveryConfigTemplateSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_notification_definition, 0); + +/** + * @generated from message flyteidl2.notification.RunCompletedNotificationTemplateData + */ +export type RunCompletedNotificationTemplateData = Message<"flyteidl2.notification.RunCompletedNotificationTemplateData"> & { + /** + * @generated from field: flyteidl2.common.RunIdentifier run = 1; + */ + run?: RunIdentifier; + + /** + * @generated from field: flyteidl2.common.ActionPhase phase = 2; + */ + phase: ActionPhase; + + /** + * @generated from field: string error = 3; + */ + error: string; +}; + +/** + * Describes the message flyteidl2.notification.RunCompletedNotificationTemplateData. + * Use `create(RunCompletedNotificationTemplateDataSchema)` to create a new message. + */ +export const RunCompletedNotificationTemplateDataSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_notification_definition, 1); + +/** + * @generated from message flyteidl2.notification.WebhookDeliveryTemplate + */ +export type WebhookDeliveryTemplate = Message<"flyteidl2.notification.WebhookDeliveryTemplate"> & { + /** + * @generated from field: string url = 1; + */ + url: string; + + /** + * @generated from field: flyteidl2.notification.HttpMethod method = 2; + */ + method: HttpMethod; + + /** + * @generated from field: map headers = 3; + */ + headers: { [key: string]: string }; + + /** + * this is a Go template that may contain placeholders + * + * @generated from field: string body_template = 4; + */ + bodyTemplate: string; +}; + +/** + * Describes the message flyteidl2.notification.WebhookDeliveryTemplate. + * Use `create(WebhookDeliveryTemplateSchema)` to create a new message. + */ +export const WebhookDeliveryTemplateSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_notification_definition, 2); + +/** + * @generated from message flyteidl2.notification.EmailRecipient + */ +export type EmailRecipient = Message<"flyteidl2.notification.EmailRecipient"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + + /** + * @generated from field: string address = 2; + */ + address: string; +}; + +/** + * Describes the message flyteidl2.notification.EmailRecipient. + * Use `create(EmailRecipientSchema)` to create a new message. + */ +export const EmailRecipientSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_notification_definition, 3); + +/** + * @generated from message flyteidl2.notification.EmailDeliveryTemplate + */ +export type EmailDeliveryTemplate = Message<"flyteidl2.notification.EmailDeliveryTemplate"> & { + /** + * this is a Go template that may contain placeholders + * + * @generated from field: string subject = 1; + */ + subject: string; + + /** + * @generated from field: repeated flyteidl2.notification.EmailRecipient to = 2; + */ + to: EmailRecipient[]; + + /** + * @generated from field: repeated flyteidl2.notification.EmailRecipient cc = 3; + */ + cc: EmailRecipient[]; + + /** + * @generated from field: repeated flyteidl2.notification.EmailRecipient bcc = 4; + */ + bcc: EmailRecipient[]; + + /** + * this is a Go template that may contain placeholders + * + * @generated from field: string html_template = 5; + */ + htmlTemplate: string; + + /** + * this is a Go template that may contain placeholders + * + * @generated from field: string text_template = 6; + */ + textTemplate: string; +}; + +/** + * Describes the message flyteidl2.notification.EmailDeliveryTemplate. + * Use `create(EmailDeliveryTemplateSchema)` to create a new message. + */ +export const EmailDeliveryTemplateSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_notification_definition, 4); + +/** + * @generated from enum flyteidl2.notification.EventType + */ +export enum EventType { + /** + * @generated from enum value: EVENT_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: EVENT_TYPE_RUN_COMPLETED = 1; + */ + RUN_COMPLETED = 1, +} + +/** + * Describes the enum flyteidl2.notification.EventType. + */ +export const EventTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_flyteidl2_notification_definition, 0); + +/** + * @generated from enum flyteidl2.notification.HttpMethod + */ +export enum HttpMethod { + /** + * @generated from enum value: HTTP_METHOD_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: HTTP_METHOD_GET = 1; + */ + GET = 1, + + /** + * @generated from enum value: HTTP_METHOD_HEAD = 2; + */ + HEAD = 2, + + /** + * @generated from enum value: HTTP_METHOD_POST = 3; + */ + POST = 3, + + /** + * @generated from enum value: HTTP_METHOD_PUT = 4; + */ + PUT = 4, + + /** + * @generated from enum value: HTTP_METHOD_DELETE = 5; + */ + DELETE = 5, + + /** + * @generated from enum value: HTTP_METHOD_CONNECT = 6; + */ + CONNECT = 6, + + /** + * @generated from enum value: HTTP_METHOD_OPTIONS = 7; + */ + OPTIONS = 7, + + /** + * @generated from enum value: HTTP_METHOD_TRACE = 8; + */ + TRACE = 8, + + /** + * @generated from enum value: HTTP_METHOD_PATCH = 9; + */ + PATCH = 9, +} + +/** + * Describes the enum flyteidl2.notification.HttpMethod. + */ +export const HttpMethodSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_flyteidl2_notification_definition, 1); + diff --git a/gen/ts/flyteidl2/secret/payload_pb.ts b/gen/ts/flyteidl2/secret/payload_pb.ts index 85d8c97c07..28c4faf035 100644 --- a/gen/ts/flyteidl2/secret/payload_pb.ts +++ b/gen/ts/flyteidl2/secret/payload_pb.ts @@ -13,7 +13,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file flyteidl2/secret/payload.proto. */ export const file_flyteidl2_secret_payload: GenFile = /*@__PURE__*/ - fileDesc("Ch5mbHl0ZWlkbDIvc2VjcmV0L3BheWxvYWQucHJvdG8SEGZseXRlaWRsMi5zZWNyZXQigAEKE0NyZWF0ZVNlY3JldFJlcXVlc3QSNgoCaWQYASABKAsyIi5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldElkZW50aWZpZXJCBrpIA8gBARIxCgtzZWNyZXRfc3BlYxgCIAEoCzIcLmZseXRlaWRsMi5zZWNyZXQuU2VjcmV0U3BlYyIWChRDcmVhdGVTZWNyZXRSZXNwb25zZSKAAQoTVXBkYXRlU2VjcmV0UmVxdWVzdBI2CgJpZBgBIAEoCzIiLmZseXRlaWRsMi5zZWNyZXQuU2VjcmV0SWRlbnRpZmllckIGukgDyAEBEjEKC3NlY3JldF9zcGVjGAIgASgLMhwuZmx5dGVpZGwyLnNlY3JldC5TZWNyZXRTcGVjIhYKFFVwZGF0ZVNlY3JldFJlc3BvbnNlIkoKEEdldFNlY3JldFJlcXVlc3QSNgoCaWQYASABKAsyIi5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldElkZW50aWZpZXJCBrpIA8gBASI9ChFHZXRTZWNyZXRSZXNwb25zZRIoCgZzZWNyZXQYASABKAsyGC5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldCJNChNEZWxldGVTZWNyZXRSZXF1ZXN0EjYKAmlkGAEgASgLMiIuZmx5dGVpZGwyLnNlY3JldC5TZWNyZXRJZGVudGlmaWVyQga6SAPIAQEiFgoURGVsZXRlU2VjcmV0UmVzcG9uc2Ui+gEKEkxpc3RTZWNyZXRzUmVxdWVzdBIUCgxvcmdhbml6YXRpb24YASABKAkSDgoGZG9tYWluGAIgASgJEg8KB3Byb2plY3QYAyABKAkSDQoFbGltaXQYBCABKAUSDQoFdG9rZW4YBSABKAkSVgoScGVyX2NsdXN0ZXJfdG9rZW5zGAYgAygLMjouZmx5dGVpZGwyLnNlY3JldC5MaXN0U2VjcmV0c1JlcXVlc3QuUGVyQ2x1c3RlclRva2Vuc0VudHJ5GjcKFVBlckNsdXN0ZXJUb2tlbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIuEBChNMaXN0U2VjcmV0c1Jlc3BvbnNlEikKB3NlY3JldHMYASADKAsyGC5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldBINCgV0b2tlbhgCIAEoCRJXChJwZXJfY2x1c3Rlcl90b2tlbnMYAyADKAsyOy5mbHl0ZWlkbDIuc2VjcmV0Lkxpc3RTZWNyZXRzUmVzcG9uc2UuUGVyQ2x1c3RlclRva2Vuc0VudHJ5GjcKFVBlckNsdXN0ZXJUb2tlbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQr0BChRjb20uZmx5dGVpZGwyLnNlY3JldEIMUGF5bG9hZFByb3RvSAJQAVo0Z2l0aHViLmNvbS9mbHl0ZW9yZy9mbHl0ZS92Mi9nZW4vZ28vZmx5dGVpZGwyL3NlY3JldKICA0ZTWKoCEEZseXRlaWRsMi5TZWNyZXTKAhBGbHl0ZWlkbDJcU2VjcmV04gIcRmx5dGVpZGwyXFNlY3JldFxHUEJNZXRhZGF0YeoCEUZseXRlaWRsMjo6U2VjcmV0YgZwcm90bzM", [file_buf_validate_validate, file_flyteidl2_secret_definition]); + fileDesc("Ch5mbHl0ZWlkbDIvc2VjcmV0L3BheWxvYWQucHJvdG8SEGZseXRlaWRsMi5zZWNyZXQigAEKE0NyZWF0ZVNlY3JldFJlcXVlc3QSNgoCaWQYASABKAsyIi5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldElkZW50aWZpZXJCBrpIA8gBARIxCgtzZWNyZXRfc3BlYxgCIAEoCzIcLmZseXRlaWRsMi5zZWNyZXQuU2VjcmV0U3BlYyIWChRDcmVhdGVTZWNyZXRSZXNwb25zZSKAAQoTVXBkYXRlU2VjcmV0UmVxdWVzdBI2CgJpZBgBIAEoCzIiLmZseXRlaWRsMi5zZWNyZXQuU2VjcmV0SWRlbnRpZmllckIGukgDyAEBEjEKC3NlY3JldF9zcGVjGAIgASgLMhwuZmx5dGVpZGwyLnNlY3JldC5TZWNyZXRTcGVjIhYKFFVwZGF0ZVNlY3JldFJlc3BvbnNlImoKEEdldFNlY3JldFJlcXVlc3QSNgoCaWQYASABKAsyIi5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldElkZW50aWZpZXJCBrpIA8gBARIeChZpbmNsdWRlX3N5c3RlbV9zZWNyZXRzGAIgASgIIj0KEUdldFNlY3JldFJlc3BvbnNlEigKBnNlY3JldBgBIAEoCzIYLmZseXRlaWRsMi5zZWNyZXQuU2VjcmV0Im0KE0RlbGV0ZVNlY3JldFJlcXVlc3QSNgoCaWQYASABKAsyIi5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldElkZW50aWZpZXJCBrpIA8gBARIeChZpbmNsdWRlX3N5c3RlbV9zZWNyZXRzGAIgASgIIhYKFERlbGV0ZVNlY3JldFJlc3BvbnNlIpoCChJMaXN0U2VjcmV0c1JlcXVlc3QSFAoMb3JnYW5pemF0aW9uGAEgASgJEg4KBmRvbWFpbhgCIAEoCRIPCgdwcm9qZWN0GAMgASgJEg0KBWxpbWl0GAQgASgFEg0KBXRva2VuGAUgASgJElYKEnBlcl9jbHVzdGVyX3Rva2VucxgGIAMoCzI6LmZseXRlaWRsMi5zZWNyZXQuTGlzdFNlY3JldHNSZXF1ZXN0LlBlckNsdXN0ZXJUb2tlbnNFbnRyeRIeChZpbmNsdWRlX3N5c3RlbV9zZWNyZXRzGAcgASgIGjcKFVBlckNsdXN0ZXJUb2tlbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIuEBChNMaXN0U2VjcmV0c1Jlc3BvbnNlEikKB3NlY3JldHMYASADKAsyGC5mbHl0ZWlkbDIuc2VjcmV0LlNlY3JldBINCgV0b2tlbhgCIAEoCRJXChJwZXJfY2x1c3Rlcl90b2tlbnMYAyADKAsyOy5mbHl0ZWlkbDIuc2VjcmV0Lkxpc3RTZWNyZXRzUmVzcG9uc2UuUGVyQ2x1c3RlclRva2Vuc0VudHJ5GjcKFVBlckNsdXN0ZXJUb2tlbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQr0BChRjb20uZmx5dGVpZGwyLnNlY3JldEIMUGF5bG9hZFByb3RvSAJQAVo0Z2l0aHViLmNvbS9mbHl0ZW9yZy9mbHl0ZS92Mi9nZW4vZ28vZmx5dGVpZGwyL3NlY3JldKICA0ZTWKoCEEZseXRlaWRsMi5TZWNyZXTKAhBGbHl0ZWlkbDJcU2VjcmV04gIcRmx5dGVpZGwyXFNlY3JldFxHUEJNZXRhZGF0YeoCEUZseXRlaWRsMjo6U2VjcmV0YgZwcm90bzM", [file_buf_validate_validate, file_flyteidl2_secret_definition]); /** * CreateSecretProxyRequest contains the spec and identifier used for secret creation @@ -103,6 +103,14 @@ export type GetSecretRequest = Message<"flyteidl2.secret.GetSecretRequest"> & { * @generated from field: flyteidl2.secret.SecretIdentifier id = 1; */ id?: SecretIdentifier; + + /** + * If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included. + * If false (default), system secrets will be hidden and return NotFound. + * + * @generated from field: bool include_system_secrets = 2; + */ + includeSystemSecrets: boolean; }; /** @@ -143,6 +151,14 @@ export type DeleteSecretRequest = Message<"flyteidl2.secret.DeleteSecretRequest" * @generated from field: flyteidl2.secret.SecretIdentifier id = 1; */ id?: SecretIdentifier; + + /** + * If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) can be deleted. + * If false (default), attempting to delete a system secret will return NotFound. + * + * @generated from field: bool include_system_secrets = 2; + */ + includeSystemSecrets: boolean; }; /** @@ -219,6 +235,14 @@ export type ListSecretsRequest = Message<"flyteidl2.secret.ListSecretsRequest"> * @generated from field: map per_cluster_tokens = 6; */ perClusterTokens: { [key: string]: string }; + + /** + * If true, system-provisioned secrets (e.g. EAGER_API_KEY, SERVING_API_KEY) will be included in results. + * If false (default), system secrets will be filtered out. + * + * @generated from field: bool include_system_secrets = 7; + */ + includeSystemSecrets: boolean; }; /** diff --git a/gen/ts/flyteidl2/task/run_pb.ts b/gen/ts/flyteidl2/task/run_pb.ts index eff180b7fd..6a7be79cbf 100644 --- a/gen/ts/flyteidl2/task/run_pb.ts +++ b/gen/ts/flyteidl2/task/run_pb.ts @@ -4,10 +4,15 @@ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; +import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts"; +import type { ActionPhase } from "../common/phase_pb.ts"; +import { file_flyteidl2_common_phase } from "../common/phase_pb.ts"; import type { KeyValuePair } from "../core/literals_pb.ts"; import { file_flyteidl2_core_literals } from "../core/literals_pb.ts"; import type { SecurityContext } from "../core/security_pb.ts"; import { file_flyteidl2_core_security } from "../core/security_pb.ts"; +import type { DeliveryConfigTemplate } from "../notification/definition_pb.ts"; +import { file_flyteidl2_notification_definition } from "../notification/definition_pb.ts"; import { file_google_protobuf_wrappers } from "@bufbuild/protobuf/wkt"; import type { Message } from "@bufbuild/protobuf"; @@ -15,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file flyteidl2/task/run.proto. */ export const file_flyteidl2_task_run: GenFile = /*@__PURE__*/ - fileDesc("ChhmbHl0ZWlkbDIvdGFzay9ydW4ucHJvdG8SDmZseXRlaWRsMi50YXNrImsKBkxhYmVscxIyCgZ2YWx1ZXMYASADKAsyIi5mbHl0ZWlkbDIudGFzay5MYWJlbHMuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJ1CgtBbm5vdGF0aW9ucxI3CgZ2YWx1ZXMYASADKAsyJy5mbHl0ZWlkbDIudGFzay5Bbm5vdGF0aW9ucy5WYWx1ZXNFbnRyeRotCgtWYWx1ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjQKBEVudnMSLAoGdmFsdWVzGAEgAygLMhwuZmx5dGVpZGwyLmNvcmUuS2V5VmFsdWVQYWlyIikKDlJhd0RhdGFTdG9yYWdlEhcKD3Jhd19kYXRhX3ByZWZpeBgBIAEoCSJkCgtDYWNoZUNvbmZpZxIXCg9vdmVyd3JpdGVfY2FjaGUYASABKAgSPAoSY2FjaGVfbG9va3VwX3Njb3BlGAIgASgOMiAuZmx5dGVpZGwyLnRhc2suQ2FjaGVMb29rdXBTY29wZSKQAwoHUnVuU3BlYxImCgZsYWJlbHMYASABKAsyFi5mbHl0ZWlkbDIudGFzay5MYWJlbHMSMAoLYW5ub3RhdGlvbnMYAiABKAsyGy5mbHl0ZWlkbDIudGFzay5Bbm5vdGF0aW9ucxIiCgRlbnZzGAMgASgLMhQuZmx5dGVpZGwyLnRhc2suRW52cxIxCg1pbnRlcnJ1cHRpYmxlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRIbCg9vdmVyd3JpdGVfY2FjaGUYBSABKAhCAhgBEg8KB2NsdXN0ZXIYBiABKAkSOAoQcmF3X2RhdGFfc3RvcmFnZRgHIAEoCzIeLmZseXRlaWRsMi50YXNrLlJhd0RhdGFTdG9yYWdlEjkKEHNlY3VyaXR5X2NvbnRleHQYCCABKAsyHy5mbHl0ZWlkbDIuY29yZS5TZWN1cml0eUNvbnRleHQSMQoMY2FjaGVfY29uZmlnGAkgASgLMhsuZmx5dGVpZGwyLnRhc2suQ2FjaGVDb25maWcqfAoQQ2FjaGVMb29rdXBTY29wZRIiCh5DQUNIRV9MT09LVVBfU0NPUEVfVU5TUEVDSUZJRUQQABIdChlDQUNIRV9MT09LVVBfU0NPUEVfR0xPQkFMEAESJQohQ0FDSEVfTE9PS1VQX1NDT1BFX1BST0pFQ1RfRE9NQUlOEAJCrQEKEmNvbS5mbHl0ZWlkbDIudGFza0IIUnVuUHJvdG9IAlABWjJnaXRodWIuY29tL2ZseXRlb3JnL2ZseXRlL3YyL2dlbi9nby9mbHl0ZWlkbDIvdGFza6ICA0ZUWKoCDkZseXRlaWRsMi5UYXNrygIORmx5dGVpZGwyXFRhc2viAhpGbHl0ZWlkbDJcVGFza1xHUEJNZXRhZGF0YeoCD0ZseXRlaWRsMjo6VGFza2IGcHJvdG8z", [file_flyteidl2_core_literals, file_flyteidl2_core_security, file_google_protobuf_wrappers]); + fileDesc("ChhmbHl0ZWlkbDIvdGFzay9ydW4ucHJvdG8SDmZseXRlaWRsMi50YXNrImsKBkxhYmVscxIyCgZ2YWx1ZXMYASADKAsyIi5mbHl0ZWlkbDIudGFzay5MYWJlbHMuVmFsdWVzRW50cnkaLQoLVmFsdWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJ1CgtBbm5vdGF0aW9ucxI3CgZ2YWx1ZXMYASADKAsyJy5mbHl0ZWlkbDIudGFzay5Bbm5vdGF0aW9ucy5WYWx1ZXNFbnRyeRotCgtWYWx1ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjQKBEVudnMSLAoGdmFsdWVzGAEgAygLMhwuZmx5dGVpZGwyLmNvcmUuS2V5VmFsdWVQYWlyIikKDlJhd0RhdGFTdG9yYWdlEhcKD3Jhd19kYXRhX3ByZWZpeBgBIAEoCSJkCgtDYWNoZUNvbmZpZxIXCg9vdmVyd3JpdGVfY2FjaGUYASABKAgSPAoSY2FjaGVfbG9va3VwX3Njb3BlGAIgASgOMiAuZmx5dGVpZGwyLnRhc2suQ2FjaGVMb29rdXBTY29wZSKJBAoHUnVuU3BlYxImCgZsYWJlbHMYASABKAsyFi5mbHl0ZWlkbDIudGFzay5MYWJlbHMSMAoLYW5ub3RhdGlvbnMYAiABKAsyGy5mbHl0ZWlkbDIudGFzay5Bbm5vdGF0aW9ucxIiCgRlbnZzGAMgASgLMhQuZmx5dGVpZGwyLnRhc2suRW52cxIxCg1pbnRlcnJ1cHRpYmxlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRIbCg9vdmVyd3JpdGVfY2FjaGUYBSABKAhCAhgBEg8KB2NsdXN0ZXIYBiABKAkSOAoQcmF3X2RhdGFfc3RvcmFnZRgHIAEoCzIeLmZseXRlaWRsMi50YXNrLlJhd0RhdGFTdG9yYWdlEjkKEHNlY3VyaXR5X2NvbnRleHQYCCABKAsyHy5mbHl0ZWlkbDIuY29yZS5TZWN1cml0eUNvbnRleHQSMQoMY2FjaGVfY29uZmlnGAkgASgLMhsuZmx5dGVpZGwyLnRhc2suQ2FjaGVDb25maWcSIAoWbm90aWZpY2F0aW9uX3J1bGVfbmFtZRgKIAEoCUgAEjwKEm5vdGlmaWNhdGlvbl9ydWxlcxgLIAEoCzIeLmZseXRlaWRsMi50YXNrLklubGluZVJ1bGVMaXN0SABCFwoVbm90aWZpY2F0aW9uX3NldHRpbmdzIkUKDklubGluZVJ1bGVMaXN0EjMKBXJ1bGVzGAEgAygLMhouZmx5dGVpZGwyLnRhc2suSW5saW5lUnVsZUIIukgFkgECCAEi1wEKCklubGluZVJ1bGUSSQoJb25fcGhhc2VzGAEgAygOMh0uZmx5dGVpZGwyLmNvbW1vbi5BY3Rpb25QaGFzZUIXukgUkgERCAEYASILggEIGAUYBhgHGAgSHgoUZGVsaXZlcnlfY29uZmlnX25hbWUYAiABKAlIABJLChFkZWxpdmVyeV90ZW1wbGF0ZRgDIAEoCzIuLmZseXRlaWRsMi5ub3RpZmljYXRpb24uRGVsaXZlcnlDb25maWdUZW1wbGF0ZUgAQhEKCGRlbGl2ZXJ5EgW6SAIIASp8ChBDYWNoZUxvb2t1cFNjb3BlEiIKHkNBQ0hFX0xPT0tVUF9TQ09QRV9VTlNQRUNJRklFRBAAEh0KGUNBQ0hFX0xPT0tVUF9TQ09QRV9HTE9CQUwQARIlCiFDQUNIRV9MT09LVVBfU0NPUEVfUFJPSkVDVF9ET01BSU4QAkKtAQoSY29tLmZseXRlaWRsMi50YXNrQghSdW5Qcm90b0gCUAFaMmdpdGh1Yi5jb20vZmx5dGVvcmcvZmx5dGUvdjIvZ2VuL2dvL2ZseXRlaWRsMi90YXNrogIDRlRYqgIORmx5dGVpZGwyLlRhc2vKAg5GbHl0ZWlkbDJcVGFza+ICGkZseXRlaWRsMlxUYXNrXEdQQk1ldGFkYXRh6gIPRmx5dGVpZGwyOjpUYXNrYgZwcm90bzM", [file_buf_validate_validate, file_flyteidl2_common_phase, file_flyteidl2_core_literals, file_flyteidl2_core_security, file_flyteidl2_notification_definition, file_google_protobuf_wrappers]); /** * Label values to be applied to an execution resource. @@ -204,6 +209,29 @@ export type RunSpec = Message<"flyteidl2.task.RunSpec"> & { * @generated from field: flyteidl2.task.CacheConfig cache_config = 9; */ cacheConfig?: CacheConfig; + + /** + * Optionally, you can send a notification when your run completes. + * + * @generated from oneof flyteidl2.task.RunSpec.notification_settings + */ + notificationSettings: { + /** + * either refer to a previously stored notification rule + * + * @generated from field: string notification_rule_name = 10; + */ + value: string; + case: "notificationRuleName"; + } | { + /** + * either define an inline one-off rule + * + * @generated from field: flyteidl2.task.InlineRuleList notification_rules = 11; + */ + value: InlineRuleList; + case: "notificationRules"; + } | { case: undefined; value?: undefined }; }; /** @@ -213,6 +241,61 @@ export type RunSpec = Message<"flyteidl2.task.RunSpec"> & { export const RunSpecSchema: GenMessage = /*@__PURE__*/ messageDesc(file_flyteidl2_task_run, 5); +/** + * @generated from message flyteidl2.task.InlineRuleList + */ +export type InlineRuleList = Message<"flyteidl2.task.InlineRuleList"> & { + /** + * @generated from field: repeated flyteidl2.task.InlineRule rules = 1; + */ + rules: InlineRule[]; +}; + +/** + * Describes the message flyteidl2.task.InlineRuleList. + * Use `create(InlineRuleListSchema)` to create a new message. + */ +export const InlineRuleListSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_task_run, 6); + +/** + * @generated from message flyteidl2.task.InlineRule + */ +export type InlineRule = Message<"flyteidl2.task.InlineRule"> & { + /** + * @generated from field: repeated flyteidl2.common.ActionPhase on_phases = 1; + */ + onPhases: ActionPhase[]; + + /** + * @generated from oneof flyteidl2.task.InlineRule.delivery + */ + delivery: { + /** + * (run org + delivery_config_name) will be used as a delivery config id + * + * @generated from field: string delivery_config_name = 2; + */ + value: string; + case: "deliveryConfigName"; + } | { + /** + * template can only have fields defined in flyteidl2.notification.RunCompletedNotificationTemplateData + * + * @generated from field: flyteidl2.notification.DeliveryConfigTemplate delivery_template = 3; + */ + value: DeliveryConfigTemplate; + case: "deliveryTemplate"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message flyteidl2.task.InlineRule. + * Use `create(InlineRuleSchema)` to create a new message. + */ +export const InlineRuleSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_task_run, 7); + /** * @generated from enum flyteidl2.task.CacheLookupScope */ diff --git a/gen/ts/flyteidl2/workflow/events_proxy_service_pb.ts b/gen/ts/flyteidl2/workflow/events_proxy_service_pb.ts new file mode 100644 index 0000000000..caed5cc3de --- /dev/null +++ b/gen/ts/flyteidl2/workflow/events_proxy_service_pb.ts @@ -0,0 +1,72 @@ +// @generated by protoc-gen-es v2.2.5 with parameter "target=ts,import_extension=.ts" +// @generated from file flyteidl2/workflow/events_proxy_service.proto (package flyteidl2.workflow, syntax proto3) +/* eslint-disable */ + +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1"; +import { file_buf_validate_validate } from "../../buf/validate/validate_pb.ts"; +import type { ActionEvent } from "./run_definition_pb.ts"; +import { file_flyteidl2_workflow_run_definition } from "./run_definition_pb.ts"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file flyteidl2/workflow/events_proxy_service.proto. + */ +export const file_flyteidl2_workflow_events_proxy_service: GenFile = /*@__PURE__*/ + fileDesc("Ci1mbHl0ZWlkbDIvd29ya2Zsb3cvZXZlbnRzX3Byb3h5X3NlcnZpY2UucHJvdG8SEmZseXRlaWRsMi53b3JrZmxvdyJKCg1SZWNvcmRSZXF1ZXN0EjkKBmV2ZW50cxgBIAMoCzIfLmZseXRlaWRsMi53b3JrZmxvdy5BY3Rpb25FdmVudEIIukgFkgECCAEiEAoOUmVjb3JkUmVzcG9uc2UyZwoSRXZlbnRzUHJveHlTZXJ2aWNlElEKBlJlY29yZBIhLmZseXRlaWRsMi53b3JrZmxvdy5SZWNvcmRSZXF1ZXN0GiIuZmx5dGVpZGwyLndvcmtmbG93LlJlY29yZFJlc3BvbnNlIgBC1AEKFmNvbS5mbHl0ZWlkbDIud29ya2Zsb3dCF0V2ZW50c1Byb3h5U2VydmljZVByb3RvSAJQAVo2Z2l0aHViLmNvbS9mbHl0ZW9yZy9mbHl0ZS92Mi9nZW4vZ28vZmx5dGVpZGwyL3dvcmtmbG93ogIDRldYqgISRmx5dGVpZGwyLldvcmtmbG93ygISRmx5dGVpZGwyXFdvcmtmbG934gIeRmx5dGVpZGwyXFdvcmtmbG93XEdQQk1ldGFkYXRh6gITRmx5dGVpZGwyOjpXb3JrZmxvd2IGcHJvdG8z", [file_buf_validate_validate, file_flyteidl2_workflow_run_definition]); + +/** + * RecordRequest is the request message for recording the events for the actions. + * + * @generated from message flyteidl2.workflow.RecordRequest + */ +export type RecordRequest = Message<"flyteidl2.workflow.RecordRequest"> & { + /** + * The events to record. + * + * @generated from field: repeated flyteidl2.workflow.ActionEvent events = 1; + */ + events: ActionEvent[]; +}; + +/** + * Describes the message flyteidl2.workflow.RecordRequest. + * Use `create(RecordRequestSchema)` to create a new message. + */ +export const RecordRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_workflow_events_proxy_service, 0); + +/** + * RecordResponse is the response message recording an event for an action. + * + * @generated from message flyteidl2.workflow.RecordResponse + */ +export type RecordResponse = Message<"flyteidl2.workflow.RecordResponse"> & { +}; + +/** + * Describes the message flyteidl2.workflow.RecordResponse. + * Use `create(RecordResponseSchema)` to create a new message. + */ +export const RecordResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_flyteidl2_workflow_events_proxy_service, 1); + +/** + * EventsProxyService provides an interface for forwarding the events to Run Service or Redis stream. + * + * @generated from service flyteidl2.workflow.EventsProxyService + */ +export const EventsProxyService: GenService<{ + /** + * record the events for an action. + * + * @generated from rpc flyteidl2.workflow.EventsProxyService.Record + */ + record: { + methodKind: "unary"; + input: typeof RecordRequestSchema; + output: typeof RecordResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_flyteidl2_workflow_events_proxy_service, 0); + diff --git a/go.mod b/go.mod index 5193b4d8d3..9dc1ba294f 100644 --- a/go.mod +++ b/go.mod @@ -24,6 +24,7 @@ require ( github.com/flyteorg/stow v0.3.12 github.com/fsnotify/fsnotify v1.9.0 github.com/ghodss/yaml v1.0.0 + github.com/glebarez/sqlite v1.11.0 github.com/go-gormigrate/gormigrate/v2 v2.1.5 github.com/go-test/deep v1.1.1 github.com/golang/protobuf v1.5.4 @@ -73,7 +74,6 @@ require ( gopkg.in/yaml.v2 v2.4.0 gorm.io/datatypes v1.2.7 gorm.io/driver/postgres v1.6.0 - gorm.io/driver/sqlite v1.6.0 gorm.io/gorm v1.31.1 gotest.tools v2.2.0+incompatible k8s.io/api v0.34.1 @@ -124,12 +124,14 @@ require ( github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/emicklei/go-restful/v3 v3.12.2 // indirect github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/glebarez/go-sqlite v1.21.2 // indirect github.com/go-jose/go-jose/v4 v4.1.2 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -170,7 +172,7 @@ require ( github.com/kylelemons/godebug v1.1.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-sqlite3 v1.14.24 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect @@ -183,6 +185,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/procfs v0.19.2 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.4.1 // indirect @@ -226,6 +229,10 @@ require ( k8s.io/component-base v0.34.1 // indirect k8s.io/kms v0.28.3 // indirect k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect + modernc.org/libc v1.22.5 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/sqlite v1.23.1 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect diff --git a/go.sum b/go.sum index 34d9288076..303fb5b700 100644 --- a/go.sum +++ b/go.sum @@ -214,6 +214,10 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= +github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k= +github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= +github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -428,8 +432,8 @@ github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZb github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA= @@ -479,6 +483,9 @@ github.com/redis/go-redis/extra/redisprometheus/v9 v9.17.2 h1:0c8P2OMKaMFMMA7ve1 github.com/redis/go-redis/extra/redisprometheus/v9 v9.17.2/go.mod h1:cncJRRYpIpSRR2zyFcXjC9mSULvKWAfOOGnyQi6z1mQ= github.com/redis/go-redis/v9 v9.17.2 h1:P2EGsA4qVIM3Pp+aPocCJ7DguDHhqrXNhVcEp4ViluI= github.com/redis/go-redis/v9 v9.17.2/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= @@ -992,6 +999,14 @@ k8s.io/kube-openapi v0.0.0-20230905202853-d090da108d2f h1:eeEUOoGYWhOz7EyXqhlR2z k8s.io/kube-openapi v0.0.0-20230905202853-d090da108d2f/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= +modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM= +modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/manager/DEVELOPMENT.md b/manager/DEVELOPMENT.md index 5cefb7947a..d707ba0617 100644 --- a/manager/DEVELOPMENT.md +++ b/manager/DEVELOPMENT.md @@ -1,5 +1,7 @@ # Development Guide +> Note: this development guide is stale, should use `make sandbox-run` command + Use following method to setup the whole system and run: 1. Create k3d cluster with @@ -31,8 +33,7 @@ kubectl port-forward -n flyte-dataproxy svc/minio 9000:9000 9001:9001 5. Start the manager ```sh -cd manager/ -make run +make -C manager run ``` 6. Run `python example/basics/hello.py` in flyte-sdk with following config: diff --git a/manager/cmd/main.go b/manager/cmd/main.go index 0f1412e027..21d1d2ace5 100644 --- a/manager/cmd/main.go +++ b/manager/cmd/main.go @@ -9,6 +9,7 @@ import ( "github.com/flyteorg/flyte/v2/actions" "github.com/flyteorg/flyte/v2/app" "github.com/flyteorg/flyte/v2/dataproxy" + "github.com/flyteorg/flyte/v2/events" "github.com/flyteorg/flyte/v2/executor" "github.com/flyteorg/flyte/v2/flytestdlib/contextutils" "github.com/flyteorg/flyte/v2/flytestdlib/promutils" @@ -16,8 +17,7 @@ import ( "github.com/flyteorg/flyte/v2/flytestdlib/storage" managerconfig "github.com/flyteorg/flyte/v2/manager/config" "github.com/flyteorg/flyte/v2/runs" - - "github.com/flyteorg/flyte/v2/flytestdlib/database" + runsconfig "github.com/flyteorg/flyte/v2/runs/config" ) func main() { @@ -40,9 +40,7 @@ func setup(ctx context.Context, sc *app.SetupContext) error { sc.BaseURL = fmt.Sprintf("http://localhost:%d", cfg.Server.Port) // Initialize database - dbCfg := &database.DbConfig{ - SQLite: database.SQLiteConfig{File: "flyte.db"}, - } + dbCfg := &runsconfig.GetConfig().Database db, err := app.InitDB(ctx, dbCfg) if err != nil { return fmt.Errorf("failed to initialize database: %w", err) @@ -63,12 +61,15 @@ func setup(ctx context.Context, sc *app.SetupContext) error { sc.K8sClient = k8sClient sc.K8sConfig = k8sConfig + // Initialize metrics scope + sc.Scope = promutils.NewScope("flyte") + // Initialize labeled metrics (required for storage) labeled.SetMetricKeys(contextutils.ProjectKey, contextutils.DomainKey, contextutils.WorkflowIDKey, contextutils.TaskIDKey) // Initialize storage storageCfg := storage.GetConfig() - dataStore, err := storage.NewDataStore(storageCfg, promutils.NewTestScope()) + dataStore, err := storage.NewDataStore(storageCfg, sc.Scope.NewSubScope("storage")) if err != nil { return fmt.Errorf("failed to initialize storage: %w", err) } @@ -84,6 +85,9 @@ func setup(ctx context.Context, sc *app.SetupContext) error { if err := dataproxy.Setup(ctx, sc); err != nil { return err } + if err := events.Setup(ctx, sc); err != nil { + return err + } if err := executor.Setup(ctx, sc); err != nil { return err } diff --git a/manager/config.yaml b/manager/config.yaml index 09df8fc6d5..02b716a530 100644 --- a/manager/config.yaml +++ b/manager/config.yaml @@ -11,18 +11,25 @@ manager: kubernetes: namespace: "flyte" - # Optional: specify custom kubeconfig path - # kubeconfig: "/path/to/kubeconfig" + kubeconfig: "~/.flyte/sandboxv2/kubeconfig" + +# Executor configuration +executor: + gc: + interval: 1m + maxTTL: 1m # Runs service configuration runs: storagePrefix: "s3://flyte-data" - -# Database configuration (SQLite) -database: - type: "sqlite" - sqlite: - file: "flyte.db" + database: + postgres: + host: "localhost" + port: 30001 + dbName: "runs" + username: "postgres" + password: "postgres" + options: "sslmode=disable" # Logger configuration logger: @@ -45,10 +52,10 @@ dataproxy: plugins: k8s: default-env-vars: - - FLYTE_AWS_ENDPOINT: "http://minio.flyte-dataproxy:9000" - - FLYTE_AWS_ACCESS_KEY_ID: "minioadmin" - - FLYTE_AWS_SECRET_ACCESS_KEY: "minioadmin" - - _U_EP_OVERRIDE: "host.docker.internal:8090" + - FLYTE_AWS_ENDPOINT: "http://flyte-sandbox-minio.flyte.svc.cluster.local:9000" + - FLYTE_AWS_ACCESS_KEY_ID: "minio" + - FLYTE_AWS_SECRET_ACCESS_KEY: "miniostorage" + - _U_EP_OVERRIDE: "flyte-sandbox-local.flyte.svc.cluster.local:8090" - _U_INSECURE: "true" - _U_USE_ACTIONS: "1" @@ -63,8 +70,8 @@ storage: kind: "s3" config: auth_type: "accesskey" - access_key_id: "minioadmin" - secret_key: "minioadmin" + access_key_id: "minio" + secret_key: "miniostorage" region: "us-east-1" - endpoint: "http://localhost:9000" + endpoint: "http://localhost:30002" disable_ssl: "true" diff --git a/runs/config.yaml b/runs/config.yaml index 5cb5085c92..5f9d74a811 100644 --- a/runs/config.yaml +++ b/runs/config.yaml @@ -7,6 +7,15 @@ runs: watchBufferSize: 100 queueServiceUrl: "http://localhost:8089" storagePrefix: "s3://flyte-data" + seedProjects: + - "flytesnacks" + domains: + - id: "development" + name: "Development" + - id: "production" + name: "Production" + - id: "staging" + name: "Staging" database: # Option 1: Use SQLite (easier for testing, no setup required) diff --git a/runs/config/config.go b/runs/config/config.go index ea667934b7..acf86471eb 100644 --- a/runs/config/config.go +++ b/runs/config/config.go @@ -17,6 +17,12 @@ var defaultConfig = &Config{ WatchBufferSize: 100, ActionsServiceURL: "http://localhost:8090", StoragePrefix: "file:///tmp/flyte/data", + SeedProjects: []string{"flytesnacks"}, + Domains: []DomainConfig{ + {ID: "development", Name: "Development"}, + {ID: "production", Name: "Production"}, + {ID: "staging", Name: "Staging"}, + }, } var configSection = config.MustRegisterSection(configSectionKey, defaultConfig) @@ -38,6 +44,12 @@ type Config struct { // StoragePrefix is the base URI for storing run data (inputs, outputs) // e.g. "s3://my-bucket" or "gs://my-bucket" or "file:///tmp/flyte/data" StoragePrefix string `json:"storagePrefix" pflag:",Base URI prefix for storing run inputs and outputs"` + + // SeedProjects are created at startup. If unset, the service seeds the default project list. + SeedProjects []string `json:"seedProjects" pflag:",Projects to create by default at startup"` + + // Domains are injected into project responses (not stored per project row). + Domains []DomainConfig `json:"domains"` } // ServerConfig holds HTTP server configuration @@ -46,6 +58,12 @@ type ServerConfig struct { Host string `json:"host" pflag:",Host to bind the HTTP server"` } +// DomainConfig defines a system domain to inject into project responses. +type DomainConfig struct { + ID string `json:"id"` + Name string `json:"name"` +} + // GetConfig returns the parsed runs configuration func GetConfig() *Config { return configSection.GetConfig().(*Config) diff --git a/runs/config/config_flags.go b/runs/config/config_flags.go index cdb7c20ce0..667490274f 100755 --- a/runs/config/config_flags.go +++ b/runs/config/config_flags.go @@ -69,5 +69,6 @@ func (cfg Config) GetPFlagSet(prefix string) *pflag.FlagSet { cmdFlags.Int(fmt.Sprintf("%v%v", prefix, "watchBufferSize"), defaultConfig.WatchBufferSize, "Buffer size for watch streams") cmdFlags.String(fmt.Sprintf("%v%v", prefix, "actionsServiceUrl"), defaultConfig.ActionsServiceURL, "URL of the actions service") cmdFlags.String(fmt.Sprintf("%v%v", prefix, "storagePrefix"), defaultConfig.StoragePrefix, "Base URI prefix for storing run inputs and outputs") + cmdFlags.StringSlice(fmt.Sprintf("%v%v", prefix, "seedProjects"), defaultConfig.SeedProjects, "Projects to create by default at startup") return cmdFlags } diff --git a/runs/config/config_flags_test.go b/runs/config/config_flags_test.go index 6e3a8bc4cd..749c506b07 100755 --- a/runs/config/config_flags_test.go +++ b/runs/config/config_flags_test.go @@ -337,14 +337,14 @@ func TestConfig_SetFlags(t *testing.T) { } }) }) - t.Run("Test_queueServiceUrl", func(t *testing.T) { + t.Run("Test_actionsServiceUrl", func(t *testing.T) { t.Run("Override", func(t *testing.T) { testValue := "1" - cmdFlags.Set("queueServiceUrl", testValue) - if vString, err := cmdFlags.GetString("queueServiceUrl"); err == nil { - testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.QueueServiceURL) + cmdFlags.Set("actionsServiceUrl", testValue) + if vString, err := cmdFlags.GetString("actionsServiceUrl"); err == nil { + testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.ActionsServiceURL) } else { assert.FailNow(t, err.Error()) @@ -365,4 +365,18 @@ func TestConfig_SetFlags(t *testing.T) { } }) }) + t.Run("Test_seedProjects", func(t *testing.T) { + + t.Run("Override", func(t *testing.T) { + testValue := []string{"flytesnacks", "demo"} + + cmdFlags.Set("seedProjects", join_Config(testValue, ",")) + if vStringSlice, err := cmdFlags.GetStringSlice("seedProjects"); err == nil { + testDecodeRaw_Config(t, vStringSlice, &actual.SeedProjects) + + } else { + assert.FailNow(t, err.Error()) + } + }) + }) } diff --git a/runs/migrations/migrations.go b/runs/migrations/migrations.go index d266d12492..1fc17c2725 100644 --- a/runs/migrations/migrations.go +++ b/runs/migrations/migrations.go @@ -14,6 +14,7 @@ import ( var AllModels = []interface{}{ &models.Action{}, &models.ActionEvent{}, + &models.Project{}, &models.Task{}, &models.TaskSpec{}, } diff --git a/runs/repository/impl/action.go b/runs/repository/impl/action.go index 88bc93fb41..408e88d21d 100644 --- a/runs/repository/impl/action.go +++ b/runs/repository/impl/action.go @@ -13,6 +13,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/clause" + "github.com/flyteorg/flyte/v2/flytestdlib/database" "github.com/flyteorg/flyte/v2/flytestdlib/logger" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" @@ -24,6 +25,7 @@ import ( type actionRepo struct { db *gorm.DB isPostgres bool + pgConfig database.PostgresConfig listener *pq.Listener // Subscriber management for LISTEN/NOTIFY @@ -33,7 +35,7 @@ type actionRepo struct { } // NewActionRepo creates a new PostgreSQL/SQLite repository -func NewActionRepo(db *gorm.DB) interfaces.ActionRepo { +func NewActionRepo(db *gorm.DB, dbConfig database.DbConfig) interfaces.ActionRepo { // Detect database type dbName := db.Name() isPostgres := dbName == "postgres" @@ -41,6 +43,7 @@ func NewActionRepo(db *gorm.DB) interfaces.ActionRepo { repo := &actionRepo{ db: db, isPostgres: isPostgres, + pgConfig: dbConfig.Postgres, runSubscribers: make(map[chan string]bool), actionSubscribers: make(map[chan string]bool), } @@ -60,14 +63,6 @@ func (r *actionRepo) CreateRun(ctx context.Context, req *workflow.CreateRunReque switch id := req.Id.(type) { case *workflow.CreateRunRequest_RunId: runID = id.RunId - case *workflow.CreateRunRequest_ProjectId: - // Generate a run name (simplified - in production, use a better generator) - runID = &common.RunIdentifier{ - Org: id.ProjectId.Organization, - Project: id.ProjectId.Name, - Domain: id.ProjectId.Domain, - Name: fmt.Sprintf("run-%d", time.Now().Unix()), - } default: return nil, fmt.Errorf("invalid run ID type") } @@ -111,6 +106,7 @@ func (r *actionRepo) CreateRun(ctx context.Context, req *workflow.CreateRunReque Org: runID.Org, Project: runID.Project, Domain: runID.Domain, + RunName: runID.Name, Name: runID.Name, ParentActionName: nil, // NULL for root actions/runs Phase: int32(common.ActionPhase_ACTION_PHASE_QUEUED), @@ -243,6 +239,7 @@ func (r *actionRepo) CreateAction(ctx context.Context, runID uint, actionSpec *w Org: actionSpec.ActionId.Run.Org, Project: actionSpec.ActionId.Run.Project, Domain: actionSpec.ActionId.Run.Domain, + RunName: actionSpec.ActionId.Run.Name, Name: actionSpec.ActionId.Name, ParentActionName: parentActionName, Phase: int32(common.ActionPhase_ACTION_PHASE_QUEUED), @@ -299,9 +296,8 @@ func (r *actionRepo) ListActions(ctx context.Context, runID *common.RunIdentifie } query := r.db.WithContext(ctx).Model(&models.Action{}). - Where("org = ? AND project = ? AND domain = ?", - runID.Org, runID.Project, runID.Domain). - Where("parent_action_name IS NOT NULL") // Exclude the root action/run itself + Where("org = ? AND project = ? AND domain = ? AND run_name = ?", + runID.Org, runID.Project, runID.Domain, runID.Name) // Apply pagination token if token != "" { @@ -692,15 +688,10 @@ func (r *actionRepo) startPostgresListener() { return } - // Build connection string from the existing connection - // This is a simplified approach - in production, get from config - row = sqlDB.QueryRow("SHOW server_version") - var version string - _ = row.Scan(&version) // Ignore error, just need a connection - - // Create listener with a simple connection string - // In production, get this from the database config - connStr = "user=postgres password=mysecretpassword host=localhost port=5432 dbname=" + dbName + " sslmode=disable" + // Build connection string from the database config + pgCfg := r.pgConfig + pgCfg.DbName = dbName + connStr = database.GetPostgresDsn(context.Background(), pgCfg) r.listener = pq.NewListener(connStr, 10*time.Second, time.Minute, func(ev pq.ListenerEventType, err error) { if err != nil { diff --git a/runs/repository/impl/filters.go b/runs/repository/impl/filters.go index 3875fbd1ad..b943930354 100644 --- a/runs/repository/impl/filters.go +++ b/runs/repository/impl/filters.go @@ -129,6 +129,15 @@ func NewEqualFilter(field string, value interface{}) interfaces.Filter { } } +// NewNotEqualFilter creates a filter for field != value. +func NewNotEqualFilter(field string, value interface{}) interfaces.Filter { + return &basicFilter{ + field: field, + expression: interfaces.FilterExpressionNotEqual, + value: value, + } +} + // NewOrgFilter creates a filter for org = value func NewOrgFilter(org string) interfaces.Filter { return NewEqualFilter("org", org) diff --git a/runs/repository/impl/filters_test.go b/runs/repository/impl/filters_test.go index eec23ea164..10fb54a598 100644 --- a/runs/repository/impl/filters_test.go +++ b/runs/repository/impl/filters_test.go @@ -9,6 +9,7 @@ import ( "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task" "github.com/flyteorg/flyte/v2/runs/repository/interfaces" + "github.com/flyteorg/flyte/v2/runs/repository/models" ) func TestNewEqualFilter(t *testing.T) { @@ -124,3 +125,23 @@ func TestConvertProtoFilters_EmptyList(t *testing.T) { require.NoError(t, err) assert.Nil(t, filter) } + +func TestParseStringFilters_StateNumericString(t *testing.T) { + filter, err := ParseStringFilters("eq(state,1)", models.ProjectColumns) + require.NoError(t, err) + + expr, err := filter.GormQueryExpression("") + require.NoError(t, err) + assert.Equal(t, "state = ?", expr.Query) + assert.Equal(t, []interface{}{"1"}, expr.Args) +} + +func TestParseStringFilters_ValueInState(t *testing.T) { + filter, err := ParseStringFilters("value_in(state,0;1;2)", models.ProjectColumns) + require.NoError(t, err) + + expr, err := filter.GormQueryExpression("") + require.NoError(t, err) + assert.Equal(t, "state IN ?", expr.Query) + assert.Equal(t, []interface{}{[]string{"0", "1", "2"}}, expr.Args) +} diff --git a/runs/repository/impl/project.go b/runs/repository/impl/project.go new file mode 100644 index 0000000000..90a232e7ee --- /dev/null +++ b/runs/repository/impl/project.go @@ -0,0 +1,119 @@ +package impl + +import ( + "context" + "errors" + "fmt" + "time" + + "gorm.io/gorm" + "gorm.io/gorm/clause" + + "github.com/flyteorg/flyte/v2/flytestdlib/logger" + "github.com/flyteorg/flyte/v2/runs/repository/interfaces" + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +type projectRepo struct { + db *gorm.DB +} + +func NewProjectRepo(db *gorm.DB) interfaces.ProjectRepo { + return &projectRepo{ + db: db, + } +} + +func (r *projectRepo) CreateProject(ctx context.Context, project *models.Project) error { + now := time.Now().UTC() + project.CreatedAt = now + project.UpdatedAt = now + + result := r.db.WithContext(ctx). + Clauses(clause.OnConflict{DoNothing: true}). + Create(project) + if result.Error != nil { + if isDuplicateProjectError(result.Error) { + return fmt.Errorf("%w: %s", interfaces.ErrProjectAlreadyExists, project.Identifier) + } + return fmt.Errorf("failed to create project %s: %w", project.Identifier, result.Error) + } + if result.RowsAffected == 0 { + return fmt.Errorf("%w: %s", interfaces.ErrProjectAlreadyExists, project.Identifier) + } + return nil +} + +func (r *projectRepo) GetProject(ctx context.Context, identifier string) (*models.Project, error) { + var project models.Project + result := r.db.WithContext(ctx). + Where("identifier = ?", identifier). + First(&project) + if result.Error != nil { + if result.Error == gorm.ErrRecordNotFound { + return nil, fmt.Errorf("%w: %s", interfaces.ErrProjectNotFound, identifier) + } + logger.Errorf(ctx, "failed to get project %s: %v", identifier, result.Error) + return nil, fmt.Errorf("failed to get project %s: %w", identifier, result.Error) + } + + return &project, nil +} + +func (r *projectRepo) UpdateProject(ctx context.Context, project *models.Project) error { + updates := map[string]interface{}{ + "name": project.Name, + "description": project.Description, + "labels": project.Labels, + "state": project.State, + "updated_at": time.Now().UTC(), + } + + result := r.db.WithContext(ctx). + Model(&models.Project{}). + Where("identifier = ?", project.Identifier). + Updates(updates) + if result.Error != nil { + logger.Errorf(ctx, "failed to update project %s: %v", project.Identifier, result.Error) + return fmt.Errorf("failed to update project %s: %w", project.Identifier, result.Error) + } + if result.RowsAffected == 0 { + return fmt.Errorf("%w: %s", interfaces.ErrProjectNotFound, project.Identifier) + } + + return nil +} + +func (r *projectRepo) ListProjects(ctx context.Context, input interfaces.ListResourceInput) ([]*models.Project, error) { + var projects []*models.Project + query := r.db.WithContext(ctx).Model(&models.Project{}) + + if input.Filter != nil { + expr, err := input.Filter.GormQueryExpression("") + if err != nil { + return nil, fmt.Errorf("failed to build filter: %w", err) + } + query = query.Where(expr.Query, expr.Args...) + } + + if len(input.SortParameters) > 0 { + for _, sp := range input.SortParameters { + query = query.Order(sp.GetGormOrderExpr()) + } + } + + query = query.Offset(input.Offset) + if input.Limit > 0 { + query = query.Limit(input.Limit) + } + if err := query.Find(&projects).Error; err != nil { + logger.Errorf(ctx, "failed to list projects: %v", err) + return nil, fmt.Errorf("failed to list projects: %w", err) + } + + return projects, nil +} + +func isDuplicateProjectError(err error) bool { + return errors.Is(err, gorm.ErrDuplicatedKey) +} diff --git a/runs/repository/impl/project_test.go b/runs/repository/impl/project_test.go new file mode 100644 index 0000000000..9b37c65cf2 --- /dev/null +++ b/runs/repository/impl/project_test.go @@ -0,0 +1,38 @@ +package impl + +import ( + "context" + "strings" + "testing" + + "github.com/glebarez/sqlite" + "github.com/stretchr/testify/require" + "gorm.io/gorm" + + "github.com/flyteorg/flyte/v2/runs/repository/interfaces" + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +func TestCreateProject_ReturnsAlreadyExists(t *testing.T) { + db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{TranslateError: true}) + require.NoError(t, err) + require.NoError(t, db.AutoMigrate(&models.Project{})) + + repo := NewProjectRepo(db) + ctx := context.Background() + state := int32(0) + + require.NoError(t, repo.CreateProject(ctx, &models.Project{ + Identifier: "flytesnacks", + Name: "flytesnacks", + State: &state, + })) + + err = repo.CreateProject(ctx, &models.Project{ + Identifier: "flytesnacks", + Name: "flytesnacks", + State: &state, + }) + require.ErrorIs(t, err, interfaces.ErrProjectAlreadyExists) + require.False(t, strings.Contains(strings.ToUpper(err.Error()), "UNIQUE")) +} diff --git a/runs/repository/impl/string_filters.go b/runs/repository/impl/string_filters.go new file mode 100644 index 0000000000..38949ff3b5 --- /dev/null +++ b/runs/repository/impl/string_filters.go @@ -0,0 +1,86 @@ +package impl + +import ( + "fmt" + "strings" + + "k8s.io/apimachinery/pkg/util/sets" + + "github.com/flyteorg/flyte/v2/runs/repository/interfaces" +) + +const ( + filterSeparator = "+" + valueSeparator = ";" +) + +// ParseStringFilters parses a compact filter DSL like eq(state,1)+contains(name,foo). +func ParseStringFilters(filterString string, allowedColumns sets.Set[string]) (interfaces.Filter, error) { + filterString = strings.TrimSpace(filterString) + if filterString == "" { + return nil, nil + } + + var combined interfaces.Filter + for _, expr := range strings.Split(filterString, filterSeparator) { + filter, err := parseSingleStringFilter(expr, allowedColumns) + if err != nil { + return nil, err + } + if combined == nil { + combined = filter + } else { + combined = combined.And(filter) + } + } + + return combined, nil +} + +func parseSingleStringFilter(expr string, allowedColumns sets.Set[string]) (interfaces.Filter, error) { + expr = strings.TrimSpace(expr) + open := strings.IndexByte(expr, '(') + close := strings.LastIndexByte(expr, ')') + if open <= 0 || close != len(expr)-1 { + return nil, fmt.Errorf("invalid filter format: %s", expr) + } + + fn := strings.ToLower(strings.TrimSpace(expr[:open])) + args := expr[open+1 : close] + parts := strings.SplitN(args, ",", 2) + if len(parts) != 2 { + return nil, fmt.Errorf("invalid filter arguments: %s", expr) + } + + field := strings.TrimSpace(parts[0]) + if !allowedColumns.Has(field) { + return nil, fmt.Errorf("invalid filter field: %s", field) + } + + rawValue := strings.TrimSpace(parts[1]) + switch fn { + case "eq": + return NewEqualFilter(field, rawValue), nil + case "ne": + return NewNotEqualFilter(field, rawValue), nil + case "contains": + return &basicFilter{ + field: field, + expression: interfaces.FilterExpressionContains, + value: rawValue, + }, nil + case "value_in": + rawValues := strings.Split(rawValue, valueSeparator) + values := make([]string, 0, len(rawValues)) + for _, v := range rawValues { + values = append(values, strings.TrimSpace(v)) + } + return &basicFilter{ + field: field, + expression: interfaces.FilterExpressionValueIn, + value: values, + }, nil + default: + return nil, fmt.Errorf("unsupported filter function: %s", fn) + } +} diff --git a/runs/repository/impl/task.go b/runs/repository/impl/task.go index 5486b234ab..43bda40278 100644 --- a/runs/repository/impl/task.go +++ b/runs/repository/impl/task.go @@ -26,6 +26,7 @@ func NewTaskRepo(db *gorm.DB) interfaces.TaskRepo { func (r *tasksRepo) CreateTask(ctx context.Context, newTask *models.Task) error { // Use GORM's Create or Updates based on conflict // ON CONFLICT (org, project, domain, name, version) DO UPDATE + now := time.Now() result := r.db.WithContext(ctx). Exec(`INSERT INTO tasks ( org, project, domain, name, version, @@ -64,8 +65,8 @@ func (r *tasksRepo) CreateTask(ctx context.Context, newTask *models.Task) error newTask.TaskSpec, newTask.EnvDescription, newTask.ShortDescription, - time.Now(), - time.Now(), + now, + now, ) if result.Error != nil { diff --git a/runs/repository/impl/task_test.go b/runs/repository/impl/task_test.go index 4d7531e73f..0d650e25d5 100644 --- a/runs/repository/impl/task_test.go +++ b/runs/repository/impl/task_test.go @@ -5,9 +5,9 @@ import ( "testing" "time" + "github.com/glebarez/sqlite" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gorm.io/driver/sqlite" "gorm.io/gorm" "github.com/flyteorg/flyte/v2/runs/repository/interfaces" diff --git a/runs/repository/interfaces/project.go b/runs/repository/interfaces/project.go new file mode 100644 index 0000000000..24c4ab17b5 --- /dev/null +++ b/runs/repository/interfaces/project.go @@ -0,0 +1,20 @@ +package interfaces + +import ( + "context" + "errors" + + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +var ( + ErrProjectNotFound = errors.New("project not found") + ErrProjectAlreadyExists = errors.New("project already exists") +) + +type ProjectRepo interface { + CreateProject(ctx context.Context, project *models.Project) error + GetProject(ctx context.Context, identifier string) (*models.Project, error) + UpdateProject(ctx context.Context, project *models.Project) error + ListProjects(ctx context.Context, input ListResourceInput) ([]*models.Project, error) +} diff --git a/runs/repository/mocks/project_repo.go b/runs/repository/mocks/project_repo.go new file mode 100644 index 0000000000..c09353ff04 --- /dev/null +++ b/runs/repository/mocks/project_repo.go @@ -0,0 +1,251 @@ +// Code generated by mockery. DO NOT EDIT. + +package mocks + +import ( + context "context" + + interfaces "github.com/flyteorg/flyte/v2/runs/repository/interfaces" + mock "github.com/stretchr/testify/mock" + + models "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +// ProjectRepo is an autogenerated mock type for the ProjectRepo type +type ProjectRepo struct { + mock.Mock +} + +type ProjectRepo_Expecter struct { + mock *mock.Mock +} + +func (_m *ProjectRepo) EXPECT() *ProjectRepo_Expecter { + return &ProjectRepo_Expecter{mock: &_m.Mock} +} + +// CreateProject provides a mock function with given fields: ctx, project +func (_m *ProjectRepo) CreateProject(ctx context.Context, project *models.Project) error { + ret := _m.Called(ctx, project) + + if len(ret) == 0 { + panic("no return value specified for CreateProject") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, *models.Project) error); ok { + r0 = rf(ctx, project) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ProjectRepo_CreateProject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateProject' +type ProjectRepo_CreateProject_Call struct { + *mock.Call +} + +// CreateProject is a helper method to define mock.On call +// - ctx context.Context +// - project *models.Project +func (_e *ProjectRepo_Expecter) CreateProject(ctx interface{}, project interface{}) *ProjectRepo_CreateProject_Call { + return &ProjectRepo_CreateProject_Call{Call: _e.mock.On("CreateProject", ctx, project)} +} + +func (_c *ProjectRepo_CreateProject_Call) Run(run func(ctx context.Context, project *models.Project)) *ProjectRepo_CreateProject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*models.Project)) + }) + return _c +} + +func (_c *ProjectRepo_CreateProject_Call) Return(_a0 error) *ProjectRepo_CreateProject_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *ProjectRepo_CreateProject_Call) RunAndReturn(run func(context.Context, *models.Project) error) *ProjectRepo_CreateProject_Call { + _c.Call.Return(run) + return _c +} + +// GetProject provides a mock function with given fields: ctx, identifier +func (_m *ProjectRepo) GetProject(ctx context.Context, identifier string) (*models.Project, error) { + ret := _m.Called(ctx, identifier) + + if len(ret) == 0 { + panic("no return value specified for GetProject") + } + + var r0 *models.Project + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*models.Project, error)); ok { + return rf(ctx, identifier) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *models.Project); ok { + r0 = rf(ctx, identifier) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*models.Project) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, identifier) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProjectRepo_GetProject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetProject' +type ProjectRepo_GetProject_Call struct { + *mock.Call +} + +// GetProject is a helper method to define mock.On call +// - ctx context.Context +// - identifier string +func (_e *ProjectRepo_Expecter) GetProject(ctx interface{}, identifier interface{}) *ProjectRepo_GetProject_Call { + return &ProjectRepo_GetProject_Call{Call: _e.mock.On("GetProject", ctx, identifier)} +} + +func (_c *ProjectRepo_GetProject_Call) Run(run func(ctx context.Context, identifier string)) *ProjectRepo_GetProject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *ProjectRepo_GetProject_Call) Return(_a0 *models.Project, _a1 error) *ProjectRepo_GetProject_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ProjectRepo_GetProject_Call) RunAndReturn(run func(context.Context, string) (*models.Project, error)) *ProjectRepo_GetProject_Call { + _c.Call.Return(run) + return _c +} + +// ListProjects provides a mock function with given fields: ctx, input +func (_m *ProjectRepo) ListProjects(ctx context.Context, input interfaces.ListResourceInput) ([]*models.Project, error) { + ret := _m.Called(ctx, input) + + if len(ret) == 0 { + panic("no return value specified for ListProjects") + } + + var r0 []*models.Project + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, interfaces.ListResourceInput) ([]*models.Project, error)); ok { + return rf(ctx, input) + } + if rf, ok := ret.Get(0).(func(context.Context, interfaces.ListResourceInput) []*models.Project); ok { + r0 = rf(ctx, input) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*models.Project) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, interfaces.ListResourceInput) error); ok { + r1 = rf(ctx, input) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ProjectRepo_ListProjects_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListProjects' +type ProjectRepo_ListProjects_Call struct { + *mock.Call +} + +// ListProjects is a helper method to define mock.On call +// - ctx context.Context +// - input interfaces.ListResourceInput +func (_e *ProjectRepo_Expecter) ListProjects(ctx interface{}, input interface{}) *ProjectRepo_ListProjects_Call { + return &ProjectRepo_ListProjects_Call{Call: _e.mock.On("ListProjects", ctx, input)} +} + +func (_c *ProjectRepo_ListProjects_Call) Run(run func(ctx context.Context, input interfaces.ListResourceInput)) *ProjectRepo_ListProjects_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(interfaces.ListResourceInput)) + }) + return _c +} + +func (_c *ProjectRepo_ListProjects_Call) Return(_a0 []*models.Project, _a1 error) *ProjectRepo_ListProjects_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *ProjectRepo_ListProjects_Call) RunAndReturn(run func(context.Context, interfaces.ListResourceInput) ([]*models.Project, error)) *ProjectRepo_ListProjects_Call { + _c.Call.Return(run) + return _c +} + +// UpdateProject provides a mock function with given fields: ctx, project +func (_m *ProjectRepo) UpdateProject(ctx context.Context, project *models.Project) error { + ret := _m.Called(ctx, project) + + if len(ret) == 0 { + panic("no return value specified for UpdateProject") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, *models.Project) error); ok { + r0 = rf(ctx, project) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// ProjectRepo_UpdateProject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateProject' +type ProjectRepo_UpdateProject_Call struct { + *mock.Call +} + +// UpdateProject is a helper method to define mock.On call +// - ctx context.Context +// - project *models.Project +func (_e *ProjectRepo_Expecter) UpdateProject(ctx interface{}, project interface{}) *ProjectRepo_UpdateProject_Call { + return &ProjectRepo_UpdateProject_Call{Call: _e.mock.On("UpdateProject", ctx, project)} +} + +func (_c *ProjectRepo_UpdateProject_Call) Run(run func(ctx context.Context, project *models.Project)) *ProjectRepo_UpdateProject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*models.Project)) + }) + return _c +} + +func (_c *ProjectRepo_UpdateProject_Call) Return(_a0 error) *ProjectRepo_UpdateProject_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *ProjectRepo_UpdateProject_Call) RunAndReturn(run func(context.Context, *models.Project) error) *ProjectRepo_UpdateProject_Call { + _c.Call.Return(run) + return _c +} + +// NewProjectRepo creates a new instance of ProjectRepo. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewProjectRepo(t interface { + mock.TestingT + Cleanup(func()) +}) *ProjectRepo { + mock := &ProjectRepo{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/runs/repository/models/action.go b/runs/repository/models/action.go index c6a27275c4..091752d0f1 100644 --- a/runs/repository/models/action.go +++ b/runs/repository/models/action.go @@ -16,6 +16,7 @@ type Action struct { Org string `gorm:"not null;uniqueIndex:idx_actions_identifier,priority:1;index:idx_actions_org" db:"org"` Project string `gorm:"not null;uniqueIndex:idx_actions_identifier,priority:2;index:idx_actions_project" db:"project"` Domain string `gorm:"not null;uniqueIndex:idx_actions_identifier,priority:3;index:idx_actions_domain" db:"domain"` + RunName string `gorm:"not null;default:'';index:idx_actions_run_name" db:"run_name"` Name string `gorm:"not null;uniqueIndex:idx_actions_identifier,priority:4" db:"name"` // Parent action (NULL for root actions/runs) @@ -37,26 +38,52 @@ type Action struct { // Timestamps // CreatedAt is set by the DB (NOW()) on insert — represents action start time. - CreatedAt time.Time `gorm:"not null;default:CURRENT_TIMESTAMP;index:idx_actions_created" db:"created_at"` - UpdatedAt time.Time `gorm:"not null;default:CURRENT_TIMESTAMP;index:idx_actions_updated" db:"updated_at"` + CreatedAt time.Time `gorm:"not null;default:CURRENT_TIMESTAMP;index:idx_actions_created" db:"created_at"` + UpdatedAt time.Time `gorm:"not null;default:CURRENT_TIMESTAMP;index:idx_actions_updated" db:"updated_at"` // EndedAt is set when the action reaches a terminal phase. - EndedAt sql.NullTime `gorm:"index:idx_actions_ended" db:"ended_at"` + EndedAt sql.NullTime `gorm:"index:idx_actions_ended" db:"ended_at"` } // TableName specifies the table name func (Action) TableName() string { return "actions" } +// Clone returns an independent copy of the action, including pointer and JSON fields. +func (a *Action) Clone() *Action { + if a == nil { + return nil + } + + cloned := *a + if a.ParentActionName != nil { + parent := *a.ParentActionName + cloned.ParentActionName = &parent + } + if a.ActionSpec != nil { + actionSpec := make(datatypes.JSON, len(a.ActionSpec)) + copy(actionSpec, a.ActionSpec) + cloned.ActionSpec = actionSpec + } + if a.ActionDetails != nil { + actionDetails := make(datatypes.JSON, len(a.ActionDetails)) + copy(actionDetails, a.ActionDetails) + cloned.ActionDetails = actionDetails + } + + return &cloned +} + // GetRunName extracts the run name from the action // For root actions (runs), returns the action's own name // For child actions, extracts from ActionSpec JSON func (a *Action) GetRunName() string { + if a.RunName != "" { + return a.RunName + } + if a.ParentActionName == nil { // Root action - the run name is the action name return a.Name } - - // TODO: Extract run name from ActionSpec JSON - // For now, return empty string as placeholder return "" } diff --git a/runs/repository/models/project.go b/runs/repository/models/project.go new file mode 100644 index 0000000000..66e67ff658 --- /dev/null +++ b/runs/repository/models/project.go @@ -0,0 +1,28 @@ +package models + +import ( + "time" + + "k8s.io/apimachinery/pkg/util/sets" +) + +type Project struct { + Identifier string `gorm:"primary_key"` + Name string `valid:"length(0|255)"` // Human-readable name, not a unique identifier. + Description string `gorm:"type:varchar(300)"` + Labels []byte + // GORM doesn't save the zero value for ints, so we use a pointer for the State field. + State *int32 `gorm:"default:0;index"` + CreatedAt time.Time + UpdatedAt time.Time +} + +var ProjectColumns = sets.New[string]( + "identifier", + "name", + "description", + "labels", + "state", + "created_at", + "updated_at", +) diff --git a/runs/repository/repository.go b/runs/repository/repository.go index b9eb67ee58..272b7b505b 100644 --- a/runs/repository/repository.go +++ b/runs/repository/repository.go @@ -3,6 +3,7 @@ package repository import ( "gorm.io/gorm" + "github.com/flyteorg/flyte/v2/flytestdlib/database" "github.com/flyteorg/flyte/v2/runs/repository/impl" "github.com/flyteorg/flyte/v2/runs/repository/interfaces" ) @@ -14,9 +15,9 @@ type repository struct { } // NewRepository creates a new Repository instance -func NewRepository(db *gorm.DB) interfaces.Repository { +func NewRepository(db *gorm.DB, dbConfig database.DbConfig) interfaces.Repository { return &repository{ - actionRepo: impl.NewActionRepo(db), + actionRepo: impl.NewActionRepo(db, dbConfig), taskRepo: impl.NewTaskRepo(db), } } diff --git a/runs/repository/transformers/project.go b/runs/repository/transformers/project.go new file mode 100644 index 0000000000..ffb4cd84e7 --- /dev/null +++ b/runs/repository/transformers/project.go @@ -0,0 +1,58 @@ +package transformers + +import ( + "fmt" + + "google.golang.org/protobuf/proto" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/project" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task" + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +// NewProjectModel transforms a project proto into a project DB model. +func NewProjectModel(p *project.Project) (*models.Project, error) { + var labelsBytes []byte + if p.GetLabels() != nil { + var err error + labelsBytes, err = proto.Marshal(p.GetLabels()) + if err != nil { + return nil, fmt.Errorf("failed to marshal project labels: %w", err) + } + } + + stateInt := int32(p.GetState()) + + return &models.Project{ + Identifier: p.GetId(), + Name: p.GetName(), + Description: p.GetDescription(), + Labels: labelsBytes, + State: &stateInt, + }, nil +} + +// ProjectModelToProject transforms a project DB model into a project proto with injected domains. +func ProjectModelToProject(model *models.Project, domains []*project.Domain) (*project.Project, error) { + var labels *task.Labels + if len(model.Labels) > 0 { + labels = &task.Labels{} + if err := proto.Unmarshal(model.Labels, labels); err != nil { + return nil, fmt.Errorf("failed to unmarshal project labels: %w", err) + } + } + + state := project.ProjectState_PROJECT_STATE_ACTIVE + if model.State != nil { + state = project.ProjectState(*model.State) + } + + return &project.Project{ + Id: model.Identifier, + Name: model.Name, + Domains: domains, + Description: model.Description, + Labels: labels, + State: state, + }, nil +} diff --git a/runs/repository/transformers/project_test.go b/runs/repository/transformers/project_test.go new file mode 100644 index 0000000000..3770a9391b --- /dev/null +++ b/runs/repository/transformers/project_test.go @@ -0,0 +1,55 @@ +package transformers + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/project" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task" + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +func TestProjectModelRoundTrip(t *testing.T) { + p := &project.Project{ + Id: "p1", + Name: "Project 1", + Description: "desc", + Domains: []*project.Domain{ + {Id: "development", Name: "Development"}, + }, + Labels: &task.Labels{ + Values: map[string]string{"team": "infra"}, + }, + State: project.ProjectState_PROJECT_STATE_ACTIVE, + Org: "org1", + } + + model, err := NewProjectModel(p) + require.NoError(t, err) + require.NotNil(t, model) + assert.Equal(t, "p1", model.Identifier) + assert.NotEmpty(t, model.Labels) + require.NotNil(t, model.State) + assert.Equal(t, int32(project.ProjectState_PROJECT_STATE_ACTIVE), *model.State) + + domains := []*project.Domain{{Id: "production", Name: "Production"}} + restored, err := ProjectModelToProject(model, domains) + require.NoError(t, err) + assert.Equal(t, p.Id, restored.Id) + assert.Equal(t, p.Name, restored.Name) + assert.Equal(t, p.Description, restored.Description) + assert.Equal(t, p.State, restored.State) + require.NotNil(t, restored.GetLabels()) + assert.Equal(t, "infra", restored.GetLabels().GetValues()["team"]) + require.Len(t, restored.Domains, 1) + assert.Equal(t, "production", restored.Domains[0].Id) +} + +func TestProjectModelToProject_InvalidPayload(t *testing.T) { + _, err := ProjectModelToProject(&models.Project{ + Labels: []byte("invalid-proto"), + }, nil) + require.Error(t, err) +} diff --git a/runs/service/identity_service.go b/runs/service/identity_service.go new file mode 100644 index 0000000000..7484d6c71f --- /dev/null +++ b/runs/service/identity_service.go @@ -0,0 +1,29 @@ +package service + +import ( + "context" + + "connectrpc.com/connect" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/auth" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/auth/authconnect" +) + +// IdentityService implements the IdentityServiceHandler interface. +type IdentityService struct{} + +// NewIdentityService creates a new IdentityService instance. +func NewIdentityService() *IdentityService { + return &IdentityService{} +} + +var _ authconnect.IdentityServiceHandler = (*IdentityService)(nil) + +// UserInfo returns information about the currently logged in user. +// TODO: Wire with real auth to populate user info from the authenticated context. +func (s *IdentityService) UserInfo( + ctx context.Context, + req *connect.Request[auth.UserInfoRequest], +) (*connect.Response[auth.UserInfoResponse], error) { + return connect.NewResponse(&auth.UserInfoResponse{}), nil +} diff --git a/runs/service/identity_service_test.go b/runs/service/identity_service_test.go new file mode 100644 index 0000000000..a183995439 --- /dev/null +++ b/runs/service/identity_service_test.go @@ -0,0 +1,21 @@ +package service + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/auth" +) + +func TestIdentityService_UserInfo(t *testing.T) { + svc := NewIdentityService() + + resp, err := svc.UserInfo(context.Background(), connect.NewRequest(&auth.UserInfoRequest{})) + require.NoError(t, err) + assert.NotNil(t, resp) + assert.NotNil(t, resp.Msg) +} diff --git a/runs/service/internal_run_service.go b/runs/service/internal_run_service.go index b11cffdbe8..48e60ac6af 100644 --- a/runs/service/internal_run_service.go +++ b/runs/service/internal_run_service.go @@ -62,9 +62,9 @@ func (s *RunService) recordSingleAction(ctx context.Context, req *workflow.Recor // Build an ActionSpec from the RecordActionRequest to persist via CreateAction. spec := &workflow.ActionSpec{ - ActionId: actionID, - InputUri: req.GetInputUri(), - Group: req.GetGroup(), + ActionId: actionID, + InputUri: req.GetInputUri(), + Group: req.GetGroup(), } if req.GetParent() != "" { parent := req.GetParent() @@ -150,7 +150,6 @@ func (s *RunService) updateSingleActionStatus(ctx context.Context, req *workflow return nil } - // RecordActionEvents records a batch of action events. func (s *RunService) RecordActionEvents( ctx context.Context, diff --git a/runs/service/project_service.go b/runs/service/project_service.go new file mode 100644 index 0000000000..986517c8ff --- /dev/null +++ b/runs/service/project_service.go @@ -0,0 +1,205 @@ +package service + +import ( + "context" + "errors" + "fmt" + + "connectrpc.com/connect" + + "github.com/flyteorg/flyte/v2/flytestdlib/logger" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/project" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/project/projectconnect" + "github.com/flyteorg/flyte/v2/runs/repository/impl" + "github.com/flyteorg/flyte/v2/runs/repository/interfaces" + "github.com/flyteorg/flyte/v2/runs/repository/models" + "github.com/flyteorg/flyte/v2/runs/repository/transformers" +) + +type ProjectService struct { + projectRepo interfaces.ProjectRepo + domains []*project.Domain +} + +func NewProjectService(projectRepo interfaces.ProjectRepo, domains []*project.Domain) *ProjectService { + return &ProjectService{ + projectRepo: projectRepo, + domains: domains, + } +} + +func (s *ProjectService) CreateProject( + ctx context.Context, + req *connect.Request[project.CreateProjectRequest], +) (*connect.Response[project.CreateProjectResponse], error) { + if err := req.Msg.Validate(); err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + + projectProto := req.Msg.GetProject() + if projectProto == nil || projectProto.GetId() == "" { + return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("project.id is required")) + } + + model, err := transformers.NewProjectModel(projectProto) + if err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + + if err := s.projectRepo.CreateProject(ctx, model); err != nil { + if errors.Is(err, interfaces.ErrProjectAlreadyExists) { + logger.Warnf(ctx, "Project already exists, identifier: %s, name: %s", model.Identifier, model.Name) + return nil, connect.NewError(connect.CodeAlreadyExists, err) + } + return nil, connect.NewError(connect.CodeInternal, err) + } + + return connect.NewResponse(&project.CreateProjectResponse{}), nil +} + +func (s *ProjectService) UpdateProject( + ctx context.Context, + req *connect.Request[project.UpdateProjectRequest], +) (*connect.Response[project.UpdateProjectResponse], error) { + if err := req.Msg.Validate(); err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + + projectProto := req.Msg.GetProject() + if projectProto == nil || projectProto.GetId() == "" { + return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("project.id is required")) + } + + model, err := transformers.NewProjectModel(projectProto) + if err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + + if err := s.projectRepo.UpdateProject(ctx, model); err != nil { + if errors.Is(err, interfaces.ErrProjectNotFound) { + return nil, connect.NewError(connect.CodeNotFound, err) + } + return nil, connect.NewError(connect.CodeInternal, err) + } + + return connect.NewResponse(&project.UpdateProjectResponse{}), nil +} + +func (s *ProjectService) GetProject( + ctx context.Context, + req *connect.Request[project.GetProjectRequest], +) (*connect.Response[project.GetProjectResponse], error) { + if err := req.Msg.Validate(); err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + if req.Msg.GetId() == "" { + return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("id is required")) + } + + model, err := s.projectRepo.GetProject(ctx, req.Msg.GetId()) + if err != nil { + if errors.Is(err, interfaces.ErrProjectNotFound) { + return nil, connect.NewError(connect.CodeNotFound, err) + } + return nil, connect.NewError(connect.CodeInternal, err) + } + + projectProto, err := transformers.ProjectModelToProject(model, s.domains) + if err != nil { + return nil, connect.NewError(connect.CodeInternal, err) + } + + return connect.NewResponse(&project.GetProjectResponse{ + Project: projectProto, + }), nil +} + +func (s *ProjectService) ListProjects( + ctx context.Context, + req *connect.Request[project.ListProjectsRequest], +) (*connect.Response[project.ListProjectsResponse], error) { + if err := req.Msg.Validate(); err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + + listInput, err := listResourceInputFromProjectListRequest(req.Msg) + if err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + + // If no filters are supplied, hide archived (deleted) projects. + if req.Msg.GetFilters() == "" { + listInput.Filter = impl.NewNotEqualFilter("state", int32(project.ProjectState_PROJECT_STATE_ARCHIVED)) + } + + projects, err := s.projectRepo.ListProjects(ctx, listInput) + if err != nil { + return nil, connect.NewError(connect.CodeInternal, err) + } + + projectProtos := make([]*project.Project, 0, len(projects)) + for _, p := range projects { + projectProto, convErr := transformers.ProjectModelToProject(p, s.domains) + if convErr != nil { + return nil, connect.NewError(connect.CodeInternal, convErr) + } + projectProtos = append(projectProtos, projectProto) + } + + var token string + if listInput.Limit > 0 && len(projectProtos) == listInput.Limit { + token = fmt.Sprintf("%d", listInput.Offset+listInput.Limit) + } + + return connect.NewResponse(&project.ListProjectsResponse{ + Projects: &project.Projects{ + Projects: projectProtos, + Token: token, + }, + }), nil +} + +func listResourceInputFromProjectListRequest(req *project.ListProjectsRequest) (interfaces.ListResourceInput, error) { + limit := int(req.GetLimit()) + var offset int + if req.GetToken() != "" { + if _, err := fmt.Sscanf(req.GetToken(), "%d", &offset); err != nil { + return interfaces.ListResourceInput{}, fmt.Errorf("invalid token format: %s", req.GetToken()) + } + if offset < 0 { + return interfaces.ListResourceInput{}, fmt.Errorf("invalid offset: %d (must be non-negative)", offset) + } + } + + listInput := interfaces.ListResourceInput{ + Limit: limit, + Offset: offset, + } + + if sortField := req.GetSortBy().GetKey(); sortField != "" { + if !models.ProjectColumns.Has(sortField) { + return interfaces.ListResourceInput{}, fmt.Errorf("invalid sort field: %s", sortField) + } + + sortOrder := interfaces.SortOrderDescending + if req.GetSortBy().GetDirection() == common.Sort_ASCENDING { + sortOrder = interfaces.SortOrderAscending + } + listInput.SortParameters = []interfaces.SortParameter{ + impl.NewSortParameter(sortField, sortOrder), + } + } + + if req.GetFilters() != "" { + filter, err := impl.ParseStringFilters(req.GetFilters(), models.ProjectColumns) + if err != nil { + return interfaces.ListResourceInput{}, err + } + listInput.Filter = filter + } + + return listInput, nil +} + +var _ projectconnect.ProjectServiceHandler = (*ProjectService)(nil) diff --git a/runs/service/project_service_test.go b/runs/service/project_service_test.go new file mode 100644 index 0000000000..e494279345 --- /dev/null +++ b/runs/service/project_service_test.go @@ -0,0 +1,213 @@ +package service + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/glebarez/sqlite" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gorm.io/gorm" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/project" + "github.com/flyteorg/flyte/v2/runs/repository/impl" + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +func setupProjectService(t *testing.T) *ProjectService { + db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) + require.NoError(t, err) + require.NoError(t, db.AutoMigrate(&models.Project{})) + return NewProjectService(impl.NewProjectRepo(db), []*project.Domain{ + {Id: "development", Name: "Development"}, + {Id: "production", Name: "Production"}, + }) +} + +func TestProjectCRUD(t *testing.T) { + ctx := context.Background() + svc := setupProjectService(t) + + _, err := svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "p1", + Name: "Project 1", + Description: "d1", + Domains: []*project.Domain{ + {Id: "development", Name: "Development"}, + }, + State: project.ProjectState_PROJECT_STATE_ACTIVE, + Org: "org1", + }, + })) + require.NoError(t, err) + + getResp, err := svc.GetProject(ctx, connect.NewRequest(&project.GetProjectRequest{ + Id: "p1", + Org: "org1", + })) + require.NoError(t, err) + assert.Equal(t, "Project 1", getResp.Msg.GetProject().GetName()) + assert.Equal(t, project.ProjectState_PROJECT_STATE_ACTIVE, getResp.Msg.GetProject().GetState()) + assert.Equal(t, "development", getResp.Msg.GetProject().GetDomains()[0].GetId()) + + _, err = svc.UpdateProject(ctx, connect.NewRequest(&project.UpdateProjectRequest{ + Project: &project.Project{ + Id: "p1", + Name: "Project 1 Updated", + Description: "d2", + Domains: []*project.Domain{ + {Id: "production", Name: "Production"}, + }, + State: project.ProjectState_PROJECT_STATE_ARCHIVED, + Org: "org1", + }, + })) + require.NoError(t, err) + + getResp, err = svc.GetProject(ctx, connect.NewRequest(&project.GetProjectRequest{ + Id: "p1", + Org: "org1", + })) + require.NoError(t, err) + assert.Equal(t, "Project 1 Updated", getResp.Msg.GetProject().GetName()) + assert.Equal(t, project.ProjectState_PROJECT_STATE_ARCHIVED, getResp.Msg.GetProject().GetState()) + assert.Equal(t, "development", getResp.Msg.GetProject().GetDomains()[0].GetId()) +} + +func TestListProjects_DefaultExcludesArchived(t *testing.T) { + ctx := context.Background() + svc := setupProjectService(t) + + _, err := svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "active", + Name: "Active", + State: project.ProjectState_PROJECT_STATE_ACTIVE, + Org: "org1", + }, + })) + require.NoError(t, err) + + _, err = svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "archived", + Name: "Archived", + State: project.ProjectState_PROJECT_STATE_ARCHIVED, + Org: "org1", + }, + })) + require.NoError(t, err) + + resp, err := svc.ListProjects(ctx, connect.NewRequest(&project.ListProjectsRequest{ + Org: "org1", + Limit: 10, + })) + require.NoError(t, err) + + require.NotNil(t, resp.Msg.GetProjects()) + assert.Len(t, resp.Msg.GetProjects().GetProjects(), 1) + assert.Equal(t, "active", resp.Msg.GetProjects().GetProjects()[0].GetId()) +} + +func TestListProjects_WithFiltersIncludesArchived(t *testing.T) { + ctx := context.Background() + svc := setupProjectService(t) + + _, err := svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "active", + Name: "Active", + State: project.ProjectState_PROJECT_STATE_ACTIVE, + Org: "org1", + }, + })) + require.NoError(t, err) + + _, err = svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "archived", + Name: "Archived", + State: project.ProjectState_PROJECT_STATE_ARCHIVED, + Org: "org1", + }, + })) + require.NoError(t, err) + + resp, err := svc.ListProjects(ctx, connect.NewRequest(&project.ListProjectsRequest{ + Org: "org1", + Limit: 10, + Filters: "eq(state,1)", + })) + require.NoError(t, err) + + require.NotNil(t, resp.Msg.GetProjects()) + assert.Len(t, resp.Msg.GetProjects().GetProjects(), 1) + assert.Equal(t, "archived", resp.Msg.GetProjects().GetProjects()[0].GetId()) +} + +func TestListProjects_ValueInState(t *testing.T) { + ctx := context.Background() + svc := setupProjectService(t) + + _, err := svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "active", + Name: "Active", + State: project.ProjectState_PROJECT_STATE_ACTIVE, + }, + })) + require.NoError(t, err) + + _, err = svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "archived", + Name: "Archived", + State: project.ProjectState_PROJECT_STATE_ARCHIVED, + }, + })) + require.NoError(t, err) + + resp, err := svc.ListProjects(ctx, connect.NewRequest(&project.ListProjectsRequest{ + Limit: 10, + Filters: "value_in(state,0;1;2)", + })) + require.NoError(t, err) + + require.NotNil(t, resp.Msg.GetProjects()) + assert.Len(t, resp.Msg.GetProjects().GetProjects(), 2) +} + +func TestListProjects_ZeroLimitDoesNotApplyLimit(t *testing.T) { + ctx := context.Background() + svc := setupProjectService(t) + + _, err := svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "one", + Name: "One", + State: project.ProjectState_PROJECT_STATE_ACTIVE, + Org: "org1", + }, + })) + require.NoError(t, err) + + _, err = svc.CreateProject(ctx, connect.NewRequest(&project.CreateProjectRequest{ + Project: &project.Project{ + Id: "two", + Name: "Two", + State: project.ProjectState_PROJECT_STATE_ACTIVE, + Org: "org1", + }, + })) + require.NoError(t, err) + + resp, err := svc.ListProjects(ctx, connect.NewRequest(&project.ListProjectsRequest{ + Org: "org1", + })) + require.NoError(t, err) + require.NotNil(t, resp.Msg.GetProjects()) + assert.Len(t, resp.Msg.GetProjects().GetProjects(), 2) + assert.Equal(t, "", resp.Msg.GetProjects().GetToken()) +} diff --git a/runs/service/run_service.go b/runs/service/run_service.go index 10663a99fa..1d98685216 100644 --- a/runs/service/run_service.go +++ b/runs/service/run_service.go @@ -10,6 +10,7 @@ import ( "connectrpc.com/connect" "google.golang.org/protobuf/types/known/timestamppb" + "k8s.io/apimachinery/pkg/util/rand" "github.com/flyteorg/flyte/v2/flytestdlib/logger" "github.com/flyteorg/flyte/v2/flytestdlib/storage" @@ -32,6 +33,16 @@ type RunService struct { dataStore *storage.DataStore } +const ( + runIDLength = 20 + runStringFormat = "r%s" +) + +func generateRunName(seed int64) string { + rand.Seed(seed) + return fmt.Sprintf(runStringFormat, rand.String(runIDLength-1)) +} + // WatchGroups streams task groups (runs grouped by task) from the database. func (s *RunService) WatchGroups(ctx context.Context, req *connect.Request[workflow.WatchGroupsRequest], stream *connect.ServerStream[workflow.WatchGroupsResponse]) error { logger.Infof(ctx, "Received WatchGroups request") @@ -106,7 +117,10 @@ func (s *RunService) CreateRun( return nil, connect.NewError(connect.CodeInvalidArgument, err) } - // Resolve run identity from request (mirrors repo logic for name generation) + // Resolve run identity from request. When only a ProjectId is given, generate + // the run name here and normalise the request to a RunId so that the repo + // receives a single, pre-formed identifier — avoiding a second independent + // name generation inside the repo layer. var org, project, domain, name string switch id := req.Msg.Id.(type) { case *workflow.CreateRunRequest_RunId: @@ -118,7 +132,15 @@ func (s *RunService) CreateRun( org = id.ProjectId.Organization project = id.ProjectId.Name domain = id.ProjectId.Domain - name = fmt.Sprintf("run-%d", time.Now().Unix()) + name = generateRunName(time.Now().UnixNano()) + req.Msg.Id = &workflow.CreateRunRequest_RunId{ + RunId: &common.RunIdentifier{ + Org: org, + Project: project, + Domain: domain, + Name: name, + }, + } default: return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid run ID type")) } @@ -224,6 +246,19 @@ func (s *RunService) AbortRun( return nil, connect.NewError(connect.CodeInternal, err) } + // Abort via actions service + rootActionID := &common.ActionIdentifier{ + Run: req.Msg.RunId, + Name: "a0", + } + if _, err := s.actionsClient.Abort(ctx, connect.NewRequest(&actions.AbortRequest{ + ActionId: rootActionID, + Reason: &reason, + })); err != nil { + logger.Errorf(ctx, "Failed to abort run via actions service: %v", err) + return nil, connect.NewError(connect.CodeInternal, err) + } + return connect.NewResponse(&workflow.AbortRunResponse{}), nil } @@ -459,6 +494,15 @@ func (s *RunService) AbortAction( return nil, connect.NewError(connect.CodeInternal, err) } + // Abort via actions service + if _, err := s.actionsClient.Abort(ctx, connect.NewRequest(&actions.AbortRequest{ + ActionId: req.Msg.ActionId, + Reason: &reason, + })); err != nil { + logger.Errorf(ctx, "Failed to abort action via actions service: %v", err) + return nil, connect.NewError(connect.CodeInternal, err) + } + return connect.NewResponse(&workflow.AbortActionResponse{}), nil } @@ -635,29 +679,14 @@ func (s *RunService) WatchActions( errsCh := make(chan error) go s.repo.ActionRepo().WatchActionUpdates(ctx, runID, updatesCh, errsCh) - // Send existing actions from DB (paginate through all pages) - token := "" - for { - batch, nextToken, err := s.repo.ActionRepo().ListActions(ctx, runID, 100, token) - if err != nil { - logger.Errorf(ctx, "Failed to list actions: %v", err) - break - } - if len(batch) > 0 { - enriched := make([]*workflow.EnrichedAction, 0, len(batch)) - for _, a := range batch { - enriched = append(enriched, s.convertActionToEnrichedProto(a)) - } - if err := stream.Send(&workflow.WatchActionsResponse{ - EnrichedActions: enriched, - }); err != nil { - return err - } - } - if nextToken == "" { - break - } - token = nextToken + rsm, err := newRunStateManager(req.Msg.GetFilter()) + if err != nil { + return err + } + + if err := s.listAndSendAllActions(ctx, runID, rsm, stream); err != nil { + logger.Errorf(ctx, "Failed to list actions: %v", err) + return err } for { @@ -670,15 +699,69 @@ func (s *RunService) WatchActions( if !ok { return nil } - if err := stream.Send(&workflow.WatchActionsResponse{ - EnrichedActions: []*workflow.EnrichedAction{s.convertActionToEnrichedProto(updated)}, - }); err != nil { + updates, err := rsm.upsertActions(ctx, []*models.Action{updated}) + if err != nil { + return err + } + if err := s.sendChangedActions(runID, updates, stream); err != nil { return err } } } } +func (s *RunService) listAndSendAllActions( + ctx context.Context, + runID *common.RunIdentifier, + rsm *runStateManager, + stream *connect.ServerStream[workflow.WatchActionsResponse], +) error { + token := "" + for { + batch, nextToken, err := s.repo.ActionRepo().ListActions(ctx, runID, 100, token) + if err != nil { + return err + } + + updates, err := rsm.upsertActions(ctx, batch) + if err != nil { + return err + } + + if err := s.sendChangedActions(runID, updates, stream); err != nil { + return err + } + + if nextToken == "" { + return nil + } + token = nextToken + } +} + +func (s *RunService) sendChangedActions( + runID *common.RunIdentifier, + updates []*nodeUpdate, + stream *connect.ServerStream[workflow.WatchActionsResponse], +) error { + if len(updates) == 0 { + return nil + } + + enriched := make([]*workflow.EnrichedAction, 0, len(updates)) + for _, update := range updates { + enrichedAction := s.convertNodeUpdateToEnrichedProto(runID, update) + if enrichedAction == nil { + continue + } + enriched = append(enriched, enrichedAction) + } + + return stream.Send(&workflow.WatchActionsResponse{ + EnrichedActions: enriched, + }) +} + // WatchClusterEvents streams cluster events from the DB action updates. func (s *RunService) WatchClusterEvents( ctx context.Context, @@ -916,6 +999,52 @@ func (s *RunService) convertActionToEnrichedProto(action *models.Action) *workfl } } +func (s *RunService) convertNodeUpdateToEnrichedProto( + runID *common.RunIdentifier, + update *nodeUpdate, +) *workflow.EnrichedAction { + if update == nil || update.Node == nil || update.Node.Action == nil { + return nil + } + + action := update.Node.Action + actionID := &common.ActionIdentifier{ + Run: &common.RunIdentifier{ + Org: runID.Org, + Project: runID.Project, + Domain: runID.Domain, + Name: runID.Name, + }, + Name: action.Name, + } + + actionStatus := &workflow.ActionStatus{ + Phase: common.ActionPhase(action.Phase), + } + + var metadata *workflow.ActionMetadata + if action.ParentActionName != nil { + metadata = &workflow.ActionMetadata{ + Parent: *action.ParentActionName, + } + } + + childrenPhaseCounts := make(map[int32]int32, len(update.Node.ChildPhaseCounts)) + for phase, count := range update.Node.ChildPhaseCounts { + childrenPhaseCounts[int32(phase)] = int32(count) + } + + return &workflow.EnrichedAction{ + Action: &workflow.Action{ + Id: actionID, + Metadata: metadata, + Status: actionStatus, + }, + MeetsFilter: update.MeetsFilter, + ChildrenPhaseCounts: childrenPhaseCounts, + } +} + // buildTaskGroups queries the DB for root actions and groups them by task name in memory. func (s *RunService) buildTaskGroups(ctx context.Context, req *workflow.WatchGroupsRequest) ([]*workflow.TaskGroup, error) { var org, project, domain string @@ -935,7 +1064,7 @@ func (s *RunService) buildTaskGroups(ctx context.Context, req *workflow.WatchGro endDate = &t } - actions, err := s.repo.ActionRepo().ListRootActions(ctx, org, project, domain, startDate, endDate, 1000) + rootActions, err := s.repo.ActionRepo().ListRootActions(ctx, org, project, domain, startDate, endDate, 1000) if err != nil { return nil, fmt.Errorf("failed to list root actions: %w", err) } @@ -958,7 +1087,7 @@ func (s *RunService) buildTaskGroups(ctx context.Context, req *workflow.WatchGro } groups := make(map[string]*groupAccum) - for _, action := range actions { + for _, action := range rootActions { taskName := extractTaskName(action.ActionSpec) if taskName == "" { taskName = action.Name // fallback to action name diff --git a/runs/service/run_service_test.go b/runs/service/run_service_test.go new file mode 100644 index 0000000000..af72898c0c --- /dev/null +++ b/runs/service/run_service_test.go @@ -0,0 +1,217 @@ +package service + +import ( + "context" + "errors" + "strings" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/actions" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow" + repoMocks "github.com/flyteorg/flyte/v2/runs/repository/mocks" +) + +// mockActionsClient implements actionsconnect.ActionsServiceClient for testing. +type mockActionsClient struct { + mock.Mock +} + +func (m *mockActionsClient) Enqueue(ctx context.Context, req *connect.Request[actions.EnqueueRequest]) (*connect.Response[actions.EnqueueResponse], error) { + args := m.Called(ctx, req) + if args.Get(0) == nil { + return nil, args.Error(1) + } + return args.Get(0).(*connect.Response[actions.EnqueueResponse]), args.Error(1) +} + +func (m *mockActionsClient) GetLatestState(ctx context.Context, req *connect.Request[actions.GetLatestStateRequest]) (*connect.Response[actions.GetLatestStateResponse], error) { + args := m.Called(ctx, req) + if args.Get(0) == nil { + return nil, args.Error(1) + } + return args.Get(0).(*connect.Response[actions.GetLatestStateResponse]), args.Error(1) +} + +func (m *mockActionsClient) WatchForUpdates(ctx context.Context, req *connect.Request[actions.WatchForUpdatesRequest]) (*connect.ServerStreamForClient[actions.WatchForUpdatesResponse], error) { + args := m.Called(ctx, req) + if args.Get(0) == nil { + return nil, args.Error(1) + } + return args.Get(0).(*connect.ServerStreamForClient[actions.WatchForUpdatesResponse]), args.Error(1) +} + +func (m *mockActionsClient) Update(ctx context.Context, req *connect.Request[actions.UpdateRequest]) (*connect.Response[actions.UpdateResponse], error) { + args := m.Called(ctx, req) + if args.Get(0) == nil { + return nil, args.Error(1) + } + return args.Get(0).(*connect.Response[actions.UpdateResponse]), args.Error(1) +} + +func (m *mockActionsClient) Abort(ctx context.Context, req *connect.Request[actions.AbortRequest]) (*connect.Response[actions.AbortResponse], error) { + args := m.Called(ctx, req) + if args.Get(0) == nil { + return nil, args.Error(1) + } + return args.Get(0).(*connect.Response[actions.AbortResponse]), args.Error(1) +} + +func newTestService(t *testing.T) (*repoMocks.ActionRepo, *mockActionsClient, *RunService) { + actionRepo := &repoMocks.ActionRepo{} + actionsClient := &mockActionsClient{} + repo := &repoMocks.Repository{} + repo.On("ActionRepo").Return(actionRepo) + + svc := &RunService{repo: repo, actionsClient: actionsClient} + + t.Cleanup(func() { + repo.AssertExpectations(t) + actionRepo.AssertExpectations(t) + actionsClient.AssertExpectations(t) + }) + + return actionRepo, actionsClient, svc +} + +func TestAbortRun(t *testing.T) { + runID := &common.RunIdentifier{ + Org: "test-org", + Project: "test-project", + Domain: "test-domain", + Name: "rtest12345", + } + + t.Run("success with default reason", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + + actionRepo.On("AbortRun", mock.Anything, runID, "User requested abort", (*common.EnrichedIdentity)(nil)).Return(nil) + actionsClient.On("Abort", mock.Anything, mock.MatchedBy(func(req *connect.Request[actions.AbortRequest]) bool { + return req.Msg.ActionId.Run.Name == runID.Name && + req.Msg.ActionId.Name == "a0" && + req.Msg.Reason != nil && *req.Msg.Reason == "User requested abort" + })).Return(connect.NewResponse(&actions.AbortResponse{}), nil) + + _, err := svc.AbortRun(context.Background(), connect.NewRequest(&workflow.AbortRunRequest{RunId: runID})) + assert.NoError(t, err) + }) + + t.Run("success with custom reason", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + reason := "timeout exceeded" + + actionRepo.On("AbortRun", mock.Anything, runID, reason, (*common.EnrichedIdentity)(nil)).Return(nil) + actionsClient.On("Abort", mock.Anything, mock.MatchedBy(func(req *connect.Request[actions.AbortRequest]) bool { + return req.Msg.Reason != nil && *req.Msg.Reason == reason + })).Return(connect.NewResponse(&actions.AbortResponse{}), nil) + + _, err := svc.AbortRun(context.Background(), connect.NewRequest(&workflow.AbortRunRequest{RunId: runID, Reason: &reason})) + assert.NoError(t, err) + }) + + t.Run("db error stops before actions service", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + + actionRepo.On("AbortRun", mock.Anything, runID, mock.Anything, mock.Anything).Return(errors.New("db unavailable")) + + _, err := svc.AbortRun(context.Background(), connect.NewRequest(&workflow.AbortRunRequest{RunId: runID})) + assert.Error(t, err) + actionsClient.AssertNotCalled(t, "Abort") + }) + + t.Run("actions service error is returned", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + + actionRepo.On("AbortRun", mock.Anything, runID, mock.Anything, mock.Anything).Return(nil) + actionsClient.On("Abort", mock.Anything, mock.Anything).Return(nil, errors.New("actions service unavailable")) + + _, err := svc.AbortRun(context.Background(), connect.NewRequest(&workflow.AbortRunRequest{RunId: runID})) + assert.Error(t, err) + }) +} + +func TestAbortAction(t *testing.T) { + actionID := &common.ActionIdentifier{ + Run: &common.RunIdentifier{ + Org: "test-org", + Project: "test-project", + Domain: "test-domain", + Name: "rtest12345", + }, + Name: "action-1", + } + + t.Run("success with default reason", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + + actionRepo.On("AbortAction", mock.Anything, actionID, "User requested abort", (*common.EnrichedIdentity)(nil)).Return(nil) + actionsClient.On("Abort", mock.Anything, mock.MatchedBy(func(req *connect.Request[actions.AbortRequest]) bool { + return req.Msg.ActionId.Name == actionID.Name && + req.Msg.Reason != nil && *req.Msg.Reason == "User requested abort" + })).Return(connect.NewResponse(&actions.AbortResponse{}), nil) + + _, err := svc.AbortAction(context.Background(), connect.NewRequest(&workflow.AbortActionRequest{ActionId: actionID})) + assert.NoError(t, err) + }) + + t.Run("success with custom reason", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + reason := "resource limit exceeded" + + actionRepo.On("AbortAction", mock.Anything, actionID, reason, (*common.EnrichedIdentity)(nil)).Return(nil) + actionsClient.On("Abort", mock.Anything, mock.MatchedBy(func(req *connect.Request[actions.AbortRequest]) bool { + return req.Msg.Reason != nil && *req.Msg.Reason == reason + })).Return(connect.NewResponse(&actions.AbortResponse{}), nil) + + _, err := svc.AbortAction(context.Background(), connect.NewRequest(&workflow.AbortActionRequest{ActionId: actionID, Reason: reason})) + assert.NoError(t, err) + }) + + t.Run("db error stops before actions service", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + + actionRepo.On("AbortAction", mock.Anything, actionID, mock.Anything, mock.Anything).Return(errors.New("db unavailable")) + + _, err := svc.AbortAction(context.Background(), connect.NewRequest(&workflow.AbortActionRequest{ActionId: actionID})) + assert.Error(t, err) + actionsClient.AssertNotCalled(t, "Abort") + }) + + t.Run("actions service error is returned", func(t *testing.T) { + actionRepo, actionsClient, svc := newTestService(t) + + actionRepo.On("AbortAction", mock.Anything, actionID, mock.Anything, mock.Anything).Return(nil) + actionsClient.On("Abort", mock.Anything, mock.Anything).Return(nil, errors.New("actions service unavailable")) + + _, err := svc.AbortAction(context.Background(), connect.NewRequest(&workflow.AbortActionRequest{ActionId: actionID})) + assert.Error(t, err) + }) +} + +func TestGenerateRunName(t *testing.T) { + t.Run("starts with r prefix", func(t *testing.T) { + name := generateRunName(42) + assert.True(t, strings.HasPrefix(name, "r"), "run name should start with 'r', got: %s", name) + }) + + t.Run("has correct length", func(t *testing.T) { + name := generateRunName(42) + assert.Equal(t, runIDLength, len(name)) + }) + + t.Run("different seeds produce different names", func(t *testing.T) { + name1 := generateRunName(1) + name2 := generateRunName(2) + assert.NotEqual(t, name1, name2) + }) + + t.Run("same seed produces same name", func(t *testing.T) { + name1 := generateRunName(12345) + name2 := generateRunName(12345) + assert.Equal(t, name1, name2) + }) +} diff --git a/runs/service/run_state_manager.go b/runs/service/run_state_manager.go new file mode 100644 index 0000000000..26916e957a --- /dev/null +++ b/runs/service/run_state_manager.go @@ -0,0 +1,382 @@ +package service + +import ( + "context" + "fmt" + "sort" + "strconv" + "strings" + + "connectrpc.com/connect" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +type node struct { + Parent *node + Action *models.Action + Children []*node + + ChildPhaseCounts map[common.ActionPhase]int + MatchingDescendantCount int +} + +type nodeUpdate struct { + Node *node + MeetsFilter bool +} + +type runStateManager struct { + AllNodes map[string]*node + // VisibleNodes tracks the nodes that should currently be rendered by the frontend. + // This includes both nodes that match the filter directly and ancestor nodes that + // must stay visible to preserve the tree path to a matching descendant. + VisibleNodes map[string]*node + + // DirectlyMatchingNodes tracks only the nodes whose own fields match the active + // filter. Ancestors that are shown only because they lead to a matching descendant + // are not included here. + DirectlyMatchingNodes map[string]*node + + phaseFilters map[common.ActionPhase]struct{} + nameFilter string +} + +// newRunStateManager creates a per-watch tree state manager that tracks filter +// visibility and child phase aggregates for a run. +func newRunStateManager(filters []*common.Filter) (*runStateManager, error) { + phaseFilters, nameFilter, err := validateAndTransformFilters(filters) + if err != nil { + return nil, err + } + + return &runStateManager{ + AllNodes: make(map[string]*node), + VisibleNodes: make(map[string]*node), + DirectlyMatchingNodes: make(map[string]*node), + phaseFilters: phaseFilters, + nameFilter: nameFilter, + }, nil +} + +// upsertActions updates the run tree from the incoming actions and returns the +// subset of nodes whose displayed state changed. +func (rsm *runStateManager) upsertActions(ctx context.Context, actions []*models.Action) ([]*nodeUpdate, error) { + changed := make(map[string]struct{}) + // First, upsert each incoming action into the tree and collect the set of nodes + // whose state changed directly or through parent/child aggregate updates. + for _, action := range actions { + if action == nil { + continue + } + + changedFromUpsert, err := rsm.upsertAction(ctx, action) + if err != nil { + return nil, err + } + for name := range changedFromUpsert { + changed[name] = struct{}{} + } + } + + // Second, reconcile which changed nodes now match the active filters directly. + // This also updates ancestor MatchingDescendantCount values so visibility can be + // recomputed from a fully settled matching state in the next pass. + for nodeID := range changed { + node := rsm.GetActionTreeNodeByName(nodeID) + if node == nil { + continue + } + + matchesFilter := rsm.doesActionMatchFilters(node) + _, wasDirectlyMatching := rsm.DirectlyMatchingNodes[nodeID] + + if matchesFilter && !wasDirectlyMatching { + // Matched the filter but didn't match before + // Increase count for its parent + rsm.DirectlyMatchingNodes[nodeID] = node + rsm.modifyMatchingDescendantCount(node.Parent, +1) + } else if !matchesFilter && wasDirectlyMatching { + // Didn't match filter but matched before + // Decrease count for its parent + delete(rsm.DirectlyMatchingNodes, nodeID) + rsm.modifyMatchingDescendantCount(node.Parent, -1) + } + } + + resultSet := make(map[string]bool) + // Third, recompute frontend visibility for the changed nodes using the updated + // direct-match state. A node is visible if it matches itself or if it must stay + // visible to preserve the path to a matching descendant. + for nodeID := range changed { + node := rsm.GetActionTreeNodeByName(nodeID) + if node == nil { + continue + } + if _, ok := resultSet[nodeID]; ok { + continue + } + + _, isDirectlyMatching := rsm.DirectlyMatchingNodes[nodeID] + _, wasVisible := rsm.VisibleNodes[nodeID] + + switch { + case isDirectlyMatching: + rsm.VisibleNodes[nodeID] = node + // Update parents to be visible + for parent := node.Parent; parent != nil; parent = parent.Parent { + if _, parentVisible := rsm.VisibleNodes[parent.Action.Name]; !parentVisible { + rsm.VisibleNodes[parent.Action.Name] = parent + resultSet[parent.Action.Name] = true + } + } + resultSet[nodeID] = true + case wasVisible: + if rsm.hasMatchingDescendants(node) { + resultSet[nodeID] = true + } else { + // If node does not match filter, and didn't have children match, make it invisible + delete(rsm.VisibleNodes, nodeID) + resultSet[nodeID] = false + rsm.pruneAncestorsWithoutMatchingDescendants(node.Parent, resultSet) + } + } + } + + result := make([]*nodeUpdate, 0, len(resultSet)) + // Finally, build the response payload from the nodes whose visible state changed. + for nodeID, show := range resultSet { + node := rsm.GetActionTreeNodeByName(nodeID) + if node == nil { + continue + } + result = append(result, &nodeUpdate{ + Node: node, + MeetsFilter: show, + }) + } + + sort.Slice(result, func(i, j int) bool { + return result[i].Node.Action.CreatedAt.Before(result[j].Node.Action.CreatedAt) + }) + + return result, nil +} + +// upsertAction inserts a new action into the tree or updates an existing node, +// then returns the set of node names whose state changed and must be reconciled +// for filtering, visibility, or child phase counts. +func (rsm *runStateManager) upsertAction(_ context.Context, action *models.Action) (map[string]struct{}, error) { + changed := make(map[string]struct{}) + + current := rsm.GetActionTreeNodeByName(action.Name) + // Insert node if not exists + if current == nil { + node := &node{ + Action: action.Clone(), + ChildPhaseCounts: make(map[common.ActionPhase]int), + } + rsm.AllNodes[action.Name] = node + if err := rsm.insertAction(node, changed); err != nil { + delete(rsm.AllNodes, action.Name) + return nil, err + } + return changed, nil + } + + // Update node + oldPhase := common.ActionPhase(current.Action.Phase) + newPhase := common.ActionPhase(action.Phase) + parentName := getParentActionName(current) + if parentName != "" && current.Parent == nil { + return nil, fmt.Errorf("parent node [%s] not found for action [%s]", parentName, current.Action.Name) + } + current.Action = action.Clone() + + rsm.modifyPhaseCounters(current.Parent, newPhase, oldPhase, changed) + changed[current.Action.Name] = struct{}{} + return changed, nil +} + +func (rsm *runStateManager) insertAction(actionNode *node, changed map[string]struct{}) error { + if actionNode == nil || actionNode.Action == nil { + return nil + } + + changed[actionNode.Action.Name] = struct{}{} + parentName := getParentActionName(actionNode) + if parentName == "" { + return nil + } + + parent := rsm.GetActionTreeNodeByName(parentName) + if parent == nil { + return fmt.Errorf("parent node [%s] not found for action [%s]", parentName, actionNode.Action.Name) + } + + rsm.attachChild(parent, actionNode, changed) + return nil +} + +// attachChild attach given child to the parent node, and update ChildPhaseCounts if have changed nodes +func (rsm *runStateManager) attachChild(parent, child *node, changed map[string]struct{}) { + if parent == nil || child == nil || child.Parent == parent { + return + } + + for _, existing := range parent.Children { + if existing == child { + child.Parent = parent + return + } + } + + child.Parent = parent + parent.Children = append(parent.Children, child) + rsm.modifyPhaseCounters(parent, common.ActionPhase(child.Action.Phase), common.ActionPhase_ACTION_PHASE_UNSPECIFIED, changed) + changed[child.Action.Name] = struct{}{} +} + +func (rsm *runStateManager) modifyPhaseCounters(current *node, toPhase, fromPhase common.ActionPhase, changed map[string]struct{}) { + for current != nil { + if toPhase != common.ActionPhase_ACTION_PHASE_UNSPECIFIED { + current.ChildPhaseCounts[toPhase]++ + } + if fromPhase != common.ActionPhase_ACTION_PHASE_UNSPECIFIED { + count := current.ChildPhaseCounts[fromPhase] + if count <= 1 { + current.ChildPhaseCounts[fromPhase] = 0 + } else { + current.ChildPhaseCounts[fromPhase] = count - 1 + } + } + + changed[current.Action.Name] = struct{}{} + current = current.Parent + } +} + +func (rsm *runStateManager) modifyMatchingDescendantCount(current *node, delta int) { + for current != nil { + current.MatchingDescendantCount += delta + current = current.Parent + } +} + +func (rsm *runStateManager) hasMatchingDescendants(node *node) bool { + return node != nil && node.MatchingDescendantCount > 0 +} + +func (rsm *runStateManager) pruneAncestorsWithoutMatchingDescendants(node *node, resultSet map[string]bool) { + for current := node; current != nil; current = current.Parent { + nodeID := current.Action.Name + if _, isVisible := rsm.VisibleNodes[nodeID]; !isVisible { + break + } + if rsm.hasMatchingDescendants(current) { + break + } + if _, directlyMatches := rsm.DirectlyMatchingNodes[nodeID]; directlyMatches { + break + } + + delete(rsm.VisibleNodes, nodeID) + if _, inResult := resultSet[nodeID]; !inResult { + resultSet[nodeID] = false + } + } +} + +func (rsm *runStateManager) doesActionMatchFilters(node *node) bool { + if node == nil || node.Action == nil { + return false + } + if rsm.nameFilter == "" && len(rsm.phaseFilters) == 0 { + return true + } + + _, phaseMatched := rsm.phaseFilters[common.ActionPhase(node.Action.Phase)] + matchesPhase := len(rsm.phaseFilters) == 0 || phaseMatched + + taskName := actionFilterName(node.Action) + matchesName := rsm.nameFilter == "" || strings.Contains(strings.ToLower(taskName), rsm.nameFilter) + + return matchesPhase && matchesName +} + +func (rsm *runStateManager) GetActionTreeNodeByName(name string) *node { + return rsm.AllNodes[name] +} + +func getParentActionName(actionNode *node) string { + if actionNode == nil || actionNode.Action == nil || actionNode.Action.ParentActionName == nil { + return "" + } + return *actionNode.Action.ParentActionName +} + +func validateAndTransformFilters(filters []*common.Filter) (map[common.ActionPhase]struct{}, string, error) { + if len(filters) == 0 { + return nil, "", nil + } + + phaseFilters := make(map[common.ActionPhase]struct{}) + var nameFilter string + + for _, filter := range filters { + if filter == nil { + continue + } + if !isSupportedFilterFunction(filter) { + return nil, "", connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("function %s is not supported for filter %s", filter.GetFunction(), filter.GetField())) + } + + switch filter.GetField() { + case "PHASE": + for _, value := range filter.GetValues() { + phaseInt, err := strconv.Atoi(value) + if err != nil { + return nil, "", connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid phase value: %s", value)) + } + phaseFilters[common.ActionPhase(phaseInt)] = struct{}{} + } + case "NAME": + if len(filter.GetValues()) == 0 { + continue + } + nameFilter = strings.ToLower(filter.GetValues()[0]) + default: + return nil, "", connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("unsupported filter field: %s", filter.GetField())) + } + } + + return phaseFilters, nameFilter, nil +} + +func isSupportedFilterFunction(filter *common.Filter) bool { + if filter == nil { + return false + } + switch filter.GetField() { + case "PHASE": + return filter.GetFunction() == common.Filter_VALUE_IN + case "NAME": + return filter.GetFunction() == common.Filter_CONTAINS_CASE_INSENSITIVE + default: + return false + } +} + +func actionFilterName(action *models.Action) string { + if action == nil { + return "" + } + + taskName := extractShortName(extractTaskName(action.ActionSpec)) + if taskName != "" { + return taskName + } + + return action.Name +} diff --git a/runs/service/run_state_manager_test.go b/runs/service/run_state_manager_test.go new file mode 100644 index 0000000000..09d90551da --- /dev/null +++ b/runs/service/run_state_manager_test.go @@ -0,0 +1,140 @@ +package service + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/common" + "github.com/flyteorg/flyte/v2/runs/repository/models" +) + +func TestRunStateManagerTracksChildPhaseCounts(t *testing.T) { + rsm, err := newRunStateManager(nil) + require.NoError(t, err) + + updates, err := rsm.upsertActions(context.Background(), []*models.Action{ + testAction("parent", nil, common.ActionPhase_ACTION_PHASE_RUNNING, 1), + testAction("child", stringPtr("parent"), common.ActionPhase_ACTION_PHASE_QUEUED, 2), + }) + require.NoError(t, err) + require.Len(t, updates, 2) + + parent := rsm.GetActionTreeNodeByName("parent") + require.NotNil(t, parent) + require.Equal(t, 1, parent.ChildPhaseCounts[common.ActionPhase_ACTION_PHASE_QUEUED]) + + updates, err = rsm.upsertActions(context.Background(), []*models.Action{ + testAction("child", stringPtr("parent"), common.ActionPhase_ACTION_PHASE_SUCCEEDED, 2), + }) + require.NoError(t, err) + + parent = rsm.GetActionTreeNodeByName("parent") + require.Equal(t, 0, parent.ChildPhaseCounts[common.ActionPhase_ACTION_PHASE_QUEUED]) + require.Equal(t, 1, parent.ChildPhaseCounts[common.ActionPhase_ACTION_PHASE_SUCCEEDED]) +} + +func TestRunStateManagerTracksVisibilityFromFilters(t *testing.T) { + rsm, err := newRunStateManager([]*common.Filter{ + { + Field: "PHASE", + Function: common.Filter_VALUE_IN, + Values: []string{fmt.Sprintf("%d", common.ActionPhase_ACTION_PHASE_RUNNING)}, + }, + }) + require.NoError(t, err) + + updates, err := rsm.upsertActions(context.Background(), []*models.Action{ + testAction("parent", nil, common.ActionPhase_ACTION_PHASE_QUEUED, 1), + testAction("child", stringPtr("parent"), common.ActionPhase_ACTION_PHASE_RUNNING, 2), + }) + require.NoError(t, err) + + requireNodeUpdate(t, updates, "parent", true) + requireNodeUpdate(t, updates, "child", true) + + updates, err = rsm.upsertActions(context.Background(), []*models.Action{ + testAction("child", stringPtr("parent"), common.ActionPhase_ACTION_PHASE_SUCCEEDED, 2), + }) + require.NoError(t, err) + + requireNodeUpdate(t, updates, "child", false) + requireNodeUpdate(t, updates, "parent", false) +} + +func TestRunStateManagerSupportsNameFilter(t *testing.T) { + rsm, err := newRunStateManager([]*common.Filter{ + { + Field: "NAME", + Function: common.Filter_CONTAINS_CASE_INSENSITIVE, + Values: []string{"important"}, + }, + }) + require.NoError(t, err) + + updates, err := rsm.upsertActions(context.Background(), []*models.Action{ + testActionWithTask("a", nil, common.ActionPhase_ACTION_PHASE_QUEUED, 1, "pkg.important_task"), + testActionWithTask("b", nil, common.ActionPhase_ACTION_PHASE_QUEUED, 2, "pkg.other_task"), + }) + require.NoError(t, err) + + requireNodeUpdate(t, updates, "a", true) + requireNoNodeUpdate(t, updates, "b") +} + +func TestRunStateManagerErrorsWhenParentMissing(t *testing.T) { + rsm, err := newRunStateManager(nil) + require.NoError(t, err) + + _, err = rsm.upsertActions(context.Background(), []*models.Action{ + testAction("child", stringPtr("parent"), common.ActionPhase_ACTION_PHASE_QUEUED, 1), + }) + require.Error(t, err) + require.Contains(t, err.Error(), "parent node [parent] not found") + require.Nil(t, rsm.GetActionTreeNodeByName("child")) +} + +func testAction(name string, parent *string, phase common.ActionPhase, createdAtSec int64) *models.Action { + return testActionWithTask(name, parent, phase, createdAtSec, "") +} + +func testActionWithTask(name string, parent *string, phase common.ActionPhase, createdAtSec int64, taskName string) *models.Action { + action := &models.Action{ + Org: "o", + Project: "p", + Domain: "d", + Name: name, + ParentActionName: parent, + Phase: int32(phase), + CreatedAt: time.Unix(createdAtSec, 0), + } + if taskName != "" { + action.ActionSpec = []byte(`{"spec":{"task":{"id":{"name":"` + taskName + `"}}}}`) + } + return action +} + +func stringPtr(s string) *string { return &s } + +func requireNodeUpdate(t *testing.T, updates []*nodeUpdate, name string, meetsFilter bool) { + t.Helper() + for _, update := range updates { + if update != nil && update.Node != nil && update.Node.Action != nil && update.Node.Action.Name == name { + require.Equal(t, meetsFilter, update.MeetsFilter) + return + } + } + t.Fatalf("expected node update for %s", name) +} + +func requireNoNodeUpdate(t *testing.T, updates []*nodeUpdate, name string) { + t.Helper() + for _, update := range updates { + if update != nil && update.Node != nil && update.Node.Action != nil && update.Node.Action.Name == name { + t.Fatalf("unexpected node update for %s", name) + } + } +} diff --git a/runs/setup.go b/runs/setup.go index 4e44418699..7a765ac52e 100644 --- a/runs/setup.go +++ b/runs/setup.go @@ -2,16 +2,23 @@ package runs import ( "context" + "errors" "fmt" "net/http" "github.com/flyteorg/flyte/v2/app" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/actions/actionsconnect" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/auth/authconnect" + projectpb "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/project" + "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/project/projectconnect" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/task/taskconnect" "github.com/flyteorg/flyte/v2/gen/go/flyteidl2/workflow/workflowconnect" "github.com/flyteorg/flyte/v2/runs/config" "github.com/flyteorg/flyte/v2/runs/migrations" "github.com/flyteorg/flyte/v2/runs/repository" + "github.com/flyteorg/flyte/v2/runs/repository/impl" + "github.com/flyteorg/flyte/v2/runs/repository/interfaces" + "github.com/flyteorg/flyte/v2/runs/repository/models" "github.com/flyteorg/flyte/v2/runs/service" "github.com/flyteorg/flyte/v2/flytestdlib/logger" @@ -26,7 +33,7 @@ func Setup(ctx context.Context, sc *app.SetupContext) error { return fmt.Errorf("runs: failed to run migrations: %w", err) } - repo := repository.NewRepository(sc.DB) + repo := repository.NewRepository(sc.DB, cfg.Database) // In unified mode, intra-service calls go through the same mux. actionsURL := cfg.ActionsServiceURL @@ -58,6 +65,27 @@ func Setup(ctx context.Context, sc *app.SetupContext) error { sc.Mux.Handle(translatorPath, translatorHandler) logger.Infof(ctx, "Mounted TranslatorService at %s", translatorPath) + identitySvc := service.NewIdentityService() + identityPath, identityHandler := authconnect.NewIdentityServiceHandler(identitySvc) + sc.Mux.Handle(identityPath, identityHandler) + logger.Infof(ctx, "Mounted IdentityService at %s", identityPath) + + domains := make([]*projectpb.Domain, 0, len(cfg.Domains)) + for _, d := range cfg.Domains { + domains = append(domains, &projectpb.Domain{ + Id: d.ID, + Name: d.Name, + }) + } + projectSvc := service.NewProjectService(impl.NewProjectRepo(sc.DB), domains) + projectPath, projectHandler := projectconnect.NewProjectServiceHandler(projectSvc) + sc.Mux.Handle(projectPath, projectHandler) + logger.Infof(ctx, "Mounted ProjectService at %s", projectPath) + + if err := seedProjects(ctx, impl.NewProjectRepo(sc.DB), cfg.SeedProjects); err != nil { + return fmt.Errorf("runs: failed to seed projects: %w", err) + } + sc.AddReadyCheck(func(r *http.Request) error { sqlDB, err := sc.DB.DB() if err != nil { @@ -71,3 +99,29 @@ func Setup(ctx context.Context, sc *app.SetupContext) error { return nil } + +func seedProjects(ctx context.Context, projectRepo interfaces.ProjectRepo, projects []string) error { + for _, projectID := range projects { + if projectID == "" { + continue + } + + state := int32(projectpb.ProjectState_PROJECT_STATE_ACTIVE) + projectModel := &models.Project{ + Identifier: projectID, + Name: projectID, + State: &state, + } + + if err := projectRepo.CreateProject(ctx, projectModel); err != nil { + if errors.Is(err, interfaces.ErrProjectAlreadyExists) { + continue + } + return err + } + + logger.Infof(ctx, "Seeded project %s", projectID) + } + + return nil +} diff --git a/runs/test/api/setup_test.go b/runs/test/api/setup_test.go index 158eaacea0..ae24689877 100644 --- a/runs/test/api/setup_test.go +++ b/runs/test/api/setup_test.go @@ -84,7 +84,7 @@ func TestMain(m *testing.M) { log.Println("Database migrations completed") // Create repository and services - repo := repository.NewRepository(testDB) + repo := repository.NewRepository(testDB, *dbConfig) taskSvc := service.NewTaskService(repo) // Setup HTTP server diff --git a/runs/test/scripts/abort_run.sh b/runs/test/scripts/abort_run.sh new file mode 100644 index 0000000000..1715a402c8 --- /dev/null +++ b/runs/test/scripts/abort_run.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +ENDPOINT="${ENDPOINT:-http://localhost:8090}" +ORG="${ORG:-testorg}" +PROJECT="${PROJECT:-testproject}" +DOMAIN="${DOMAIN:-development}" +RUN_NAME="${RUN_NAME:?Error: RUN_NAME environment variable is required}" +REASON="${REASON:-User requested abort}" + +buf curl --schema . "$ENDPOINT/flyteidl2.workflow.RunService/AbortRun" --data @- <