From df4de0e67136b290e62dbbdcf4917a6c069e3455 Mon Sep 17 00:00:00 2001 From: Eric Stroczynski Date: Tue, 8 Dec 2020 15:16:29 -0800 Subject: [PATCH] deps: bump k8s deps to v1.20 --- ...ors.coreos.com_clusterserviceversions.yaml | 47 +- crds/operators.coreos.com_subscriptions.yaml | 28 +- crds/zz_defs.go | 18 +- go.mod | 14 +- go.sum | 206 +- pkg/lib/version/version.go | 2 +- pkg/lib/version/version_test.go | 2 +- pkg/validation/internal/crd.go | 5 +- pkg/validation/internal/operatorhub.go | 2 +- tools.go | 2 +- vendor/github.com/blang/semver/.travis.yml | 21 + vendor/github.com/blang/semver/README.md | 5 +- vendor/github.com/blang/semver/package.json | 2 +- .../LICENSE.md => blang/semver/v4/LICENSE} | 13 +- vendor/github.com/blang/semver/v4/go.mod | 3 + vendor/github.com/blang/semver/v4/json.go | 23 + vendor/github.com/blang/semver/v4/range.go | 416 + vendor/github.com/blang/semver/v4/semver.go | 476 + vendor/github.com/blang/semver/v4/sort.go | 28 + vendor/github.com/blang/semver/v4/sql.go | 30 + .../go-bindata/v3/go-bindata/.gitignore | 1 + .../v3/go-bindata/AppendSliceValue.go | 22 + .../go-bindata/v3/go-bindata/main.go | 108 + .../go-bindata/v3/go-bindata/version.go | 31 + .../go-openapi/analysis/.codecov.yml | 5 - .../github.com/go-openapi/analysis/.gitignore | 5 - .../go-openapi/analysis/.golangci.yml | 27 - .../go-openapi/analysis/.travis.yml | 15 - .../go-openapi/analysis/CODE_OF_CONDUCT.md | 74 - .../github.com/go-openapi/analysis/README.md | 9 - .../go-openapi/analysis/analyzer.go | 970 --- .../go-openapi/analysis/appveyor.yml | 33 - .../github.com/go-openapi/analysis/debug.go | 47 - vendor/github.com/go-openapi/analysis/doc.go | 43 - .../github.com/go-openapi/analysis/fixer.go | 76 - .../github.com/go-openapi/analysis/flatten.go | 1732 ---- vendor/github.com/go-openapi/analysis/go.mod | 13 - vendor/github.com/go-openapi/analysis/go.sum | 97 - .../go-openapi/analysis/internal/post_go18.go | 29 - .../go-openapi/analysis/internal/pre_go18.go | 29 - .../github.com/go-openapi/analysis/mixin.go | 425 - .../github.com/go-openapi/analysis/schema.go | 234 - .../go-openapi/errors/.golangci.yml | 20 - .../github.com/go-openapi/errors/.travis.yml | 15 - .../go-openapi/errors/CODE_OF_CONDUCT.md | 74 - vendor/github.com/go-openapi/errors/README.md | 8 - vendor/github.com/go-openapi/errors/api.go | 164 - vendor/github.com/go-openapi/errors/go.mod | 6 - vendor/github.com/go-openapi/errors/go.sum | 9 - .../github.com/go-openapi/errors/headers.go | 85 - .../go-openapi/errors/middleware.go | 51 - .../github.com/go-openapi/errors/parsing.go | 59 - .../github.com/go-openapi/loads/.editorconfig | 26 - vendor/github.com/go-openapi/loads/.gitignore | 4 - .../github.com/go-openapi/loads/.golangci.yml | 22 - .../github.com/go-openapi/loads/.travis.yml | 15 - .../go-openapi/loads/CODE_OF_CONDUCT.md | 74 - vendor/github.com/go-openapi/loads/README.md | 7 - vendor/github.com/go-openapi/loads/go.mod | 11 - vendor/github.com/go-openapi/loads/go.sum | 98 - vendor/github.com/go-openapi/loads/spec.go | 298 - .../go-openapi/runtime/.editorconfig | 26 - .../github.com/go-openapi/runtime/.travis.yml | 15 - .../go-openapi/runtime/CODE_OF_CONDUCT.md | 74 - .../github.com/go-openapi/runtime/README.md | 7 - .../go-openapi/runtime/bytestream.go | 155 - .../go-openapi/runtime/client_auth_info.go | 30 - .../go-openapi/runtime/client_operation.go | 41 - .../go-openapi/runtime/client_request.go | 103 - .../go-openapi/runtime/client_response.go | 63 - .../go-openapi/runtime/constants.go | 47 - vendor/github.com/go-openapi/runtime/csv.go | 77 - .../github.com/go-openapi/runtime/discard.go | 9 - vendor/github.com/go-openapi/runtime/go.mod | 16 - vendor/github.com/go-openapi/runtime/go.sum | 133 - .../go-openapi/runtime/interfaces.go | 103 - .../github.com/go-openapi/runtime/request.go | 139 - .../github.com/go-openapi/runtime/statuses.go | 90 - vendor/github.com/go-openapi/runtime/text.go | 117 - .../github.com/go-openapi/runtime/values.go | 19 - vendor/github.com/go-openapi/runtime/xml.go | 36 - .../go-openapi/strfmt/.editorconfig | 26 - .../go-openapi/strfmt/.golangci.yml | 30 - .../github.com/go-openapi/strfmt/.travis.yml | 15 - .../go-openapi/strfmt/CODE_OF_CONDUCT.md | 74 - vendor/github.com/go-openapi/strfmt/LICENSE | 202 - vendor/github.com/go-openapi/strfmt/README.md | 73 - vendor/github.com/go-openapi/strfmt/go.mod | 13 - vendor/github.com/go-openapi/strfmt/go.sum | 25 - .../go-openapi/validate/.editorconfig | 26 - .../go-openapi/validate/.golangci.yml | 28 - .../go-openapi/validate/.travis.yml | 19 - .../go-openapi/validate/CODE_OF_CONDUCT.md | 74 - vendor/github.com/go-openapi/validate/LICENSE | 202 - .../github.com/go-openapi/validate/README.md | 6 - .../go-openapi/validate/default_validator.go | 281 - vendor/github.com/go-openapi/validate/doc.go | 85 - .../go-openapi/validate/example_validator.go | 270 - vendor/github.com/go-openapi/validate/go.mod | 20 - vendor/github.com/go-openapi/validate/go.sum | 156 - .../github.com/go-openapi/validate/helpers.go | 324 - .../github.com/go-openapi/validate/result.go | 486 -- .../go-openapi/validate/schema_option.go | 54 - vendor/github.com/go-openapi/validate/spec.go | 787 -- .../go-openapi/validate/spec_messages.go | 360 - .../go-openapi/validate/update-fixtures.sh | 15 - .../go-openapi/validate/validator.go | 646 -- vendor/github.com/go-stack/stack/.travis.yml | 15 - vendor/github.com/go-stack/stack/README.md | 38 - vendor/github.com/go-stack/stack/go.mod | 1 - vendor/github.com/go-stack/stack/stack.go | 400 - .../golang/protobuf/proto/text_decode.go | 2 +- .../prometheus/procfs/CODE_OF_CONDUCT.md | 3 + .../github.com/prometheus/procfs/cpuinfo.go | 44 + .../prometheus/procfs/cpuinfo_arm.go | 18 - .../{cpuinfo_arm64.go => cpuinfo_armx.go} | 2 +- .../prometheus/procfs/cpuinfo_mips64.go | 18 - .../prometheus/procfs/cpuinfo_mipsle.go | 18 - .../{cpuinfo_mips64le.go => cpuinfo_mipsx.go} | 1 + .../{cpuinfo_mips.go => cpuinfo_others.go} | 3 +- .../{cpuinfo_ppc64.go => cpuinfo_ppcx.go} | 1 + .../{cpuinfo_default.go => cpuinfo_x86.go} | 0 .../prometheus/procfs/fixtures.ttar | 75 +- .../prometheus/procfs/kernel_random.go | 2 +- vendor/github.com/prometheus/procfs/mdstat.go | 5 +- .../prometheus/procfs/proc_status.go | 6 +- vendor/github.com/spf13/cobra/CHANGELOG.md | 22 + vendor/github.com/spf13/cobra/CONTRIBUTING.md | 50 + vendor/github.com/spf13/cobra/README.md | 102 +- .../spf13/cobra/bash_completions.go | 61 +- .../spf13/cobra/bash_completions.md | 306 +- vendor/github.com/spf13/cobra/command.go | 46 +- .../spf13/cobra/custom_completions.go | 301 +- .../spf13/cobra/fish_completions.go | 65 +- .../spf13/cobra/fish_completions.md | 7 +- vendor/github.com/spf13/cobra/go.mod | 6 +- vendor/github.com/spf13/cobra/go.sum | 202 +- .../spf13/cobra/powershell_completions.md | 2 + .../spf13/cobra/projects_using_cobra.md | 35 + .../spf13/cobra/shell_completions.go | 53 +- .../spf13/cobra/shell_completions.md | 434 + .../github.com/spf13/cobra/zsh_completions.go | 524 +- .../github.com/spf13/cobra/zsh_completions.md | 87 +- vendor/github.com/stretchr/testify/LICENSE | 2 +- ...ssertion_order.go => assertion_compare.go} | 173 +- .../testify/assert/assertion_format.go | 40 +- .../testify/assert/assertion_forward.go | 62 +- .../stretchr/testify/assert/assertions.go | 191 +- .../testify/assert/http_assertions.go | 25 +- .../stretchr/testify/require/require.go | 74 +- .../testify/require/require_forward.go | 62 +- vendor/go.mongodb.org/mongo-driver/LICENSE | 201 - .../go.mongodb.org/mongo-driver/bson/bson.go | 60 - .../mongo-driver/bson/bson_1_8.go | 91 - .../mongo-driver/bson/bsoncodec/bsoncodec.go | 163 - .../bson/bsoncodec/default_value_decoders.go | 1014 --- .../bson/bsoncodec/default_value_encoders.go | 648 -- .../mongo-driver/bson/bsoncodec/doc.go | 61 - .../mongo-driver/bson/bsoncodec/mode.go | 65 - .../bson/bsoncodec/pointer_codec.go | 110 - .../mongo-driver/bson/bsoncodec/proxy.go | 14 - .../mongo-driver/bson/bsoncodec/registry.go | 384 - .../bson/bsoncodec/struct_codec.go | 367 - .../bson/bsoncodec/struct_tag_parser.go | 119 - .../mongo-driver/bson/bsoncodec/types.go | 80 - .../mongo-driver/bson/bsonrw/copier.go | 389 - .../mongo-driver/bson/bsonrw/doc.go | 9 - .../bson/bsonrw/extjson_parser.go | 731 -- .../bson/bsonrw/extjson_reader.go | 659 -- .../bson/bsonrw/extjson_tables.go | 223 - .../bson/bsonrw/extjson_wrappers.go | 481 - .../bson/bsonrw/extjson_writer.go | 734 -- .../mongo-driver/bson/bsonrw/json_scanner.go | 439 - .../mongo-driver/bson/bsonrw/mode.go | 108 - .../mongo-driver/bson/bsonrw/reader.go | 63 - .../mongo-driver/bson/bsonrw/value_reader.go | 882 -- .../mongo-driver/bson/bsonrw/value_writer.go | 589 -- .../mongo-driver/bson/bsonrw/writer.go | 96 - .../mongo-driver/bson/bsontype/bsontype.go | 87 - .../mongo-driver/bson/decoder.go | 112 - .../go.mongodb.org/mongo-driver/bson/doc.go | 42 - .../mongo-driver/bson/encoder.go | 99 - .../mongo-driver/bson/marshal.go | 156 - .../mongo-driver/bson/primitive/decimal.go | 307 - .../mongo-driver/bson/primitive/primitive.go | 186 - .../mongo-driver/bson/primitive_codecs.go | 111 - .../go.mongodb.org/mongo-driver/bson/raw.go | 92 - .../mongo-driver/bson/raw_element.go | 51 - .../mongo-driver/bson/raw_value.go | 287 - .../mongo-driver/bson/registry.go | 24 - .../go.mongodb.org/mongo-driver/bson/types.go | 85 - .../mongo-driver/bson/unmarshal.go | 101 - .../mongo-driver/x/bsonx/bsoncore/bsoncore.go | 835 -- .../mongo-driver/x/bsonx/bsoncore/document.go | 399 - .../x/bsonx/bsoncore/document_sequence.go | 183 - .../mongo-driver/x/bsonx/bsoncore/element.go | 152 - .../mongo-driver/x/bsonx/bsoncore/tables.go | 223 - .../mongo-driver/x/bsonx/bsoncore/value.go | 1015 --- vendor/golang.org/x/lint/go.mod | 2 +- vendor/golang.org/x/lint/go.sum | 10 +- vendor/golang.org/x/lint/lint.go | 1 + vendor/golang.org/x/net/http2/server.go | 12 +- vendor/golang.org/x/net/http2/transport.go | 36 +- .../idna/{tables12.00.go => tables12.0.0.go} | 2 +- vendor/golang.org/x/net/idna/tables13.0.0.go | 4839 ++++++++++ vendor/golang.org/x/oauth2/README.md | 13 +- .../x/sys/unix/asm_openbsd_mips64.s | 29 + vendor/golang.org/x/sys/unix/fcntl_darwin.go | 6 + .../x/sys/unix/fcntl_linux_32bit.go | 4 +- vendor/golang.org/x/sys/unix/gccgo.go | 2 - vendor/golang.org/x/sys/unix/gccgo_c.c | 6 + vendor/golang.org/x/sys/unix/ioctl.go | 9 + vendor/golang.org/x/sys/unix/mkall.sh | 15 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 24 +- .../x/sys/unix/sockcmsg_unix_other.go | 6 +- vendor/golang.org/x/sys/unix/syscall.go | 43 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 16 + vendor/golang.org/x/sys/unix/syscall_bsd.go | 36 +- .../x/sys/unix/syscall_darwin.1_12.go | 4 +- .../golang.org/x/sys/unix/syscall_darwin.go | 141 +- .../x/sys/unix/syscall_darwin_386.1_11.go | 9 - .../x/sys/unix/syscall_darwin_386.go | 11 +- .../x/sys/unix/syscall_darwin_amd64.1_11.go | 9 - .../x/sys/unix/syscall_darwin_amd64.go | 11 +- .../x/sys/unix/syscall_darwin_arm.1_11.go | 11 - .../x/sys/unix/syscall_darwin_arm.go | 8 +- .../x/sys/unix/syscall_darwin_arm64.1_11.go | 11 - .../x/sys/unix/syscall_darwin_arm64.go | 13 +- .../x/sys/unix/syscall_dragonfly.go | 19 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 19 +- .../golang.org/x/sys/unix/syscall_illumos.go | 41 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 142 +- .../x/sys/unix/syscall_linux_386.go | 3 - .../x/sys/unix/syscall_linux_arm.go | 5 - .../x/sys/unix/syscall_linux_gc_arm.go | 13 + .../golang.org/x/sys/unix/syscall_netbsd.go | 19 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 19 +- .../x/sys/unix/syscall_openbsd_mips64.go | 35 + .../golang.org/x/sys/unix/syscall_solaris.go | 7 +- .../x/sys/unix/zerrors_darwin_386.go | 4 + .../x/sys/unix/zerrors_darwin_amd64.go | 4 + .../x/sys/unix/zerrors_darwin_arm.go | 4 + .../x/sys/unix/zerrors_darwin_arm64.go | 4 + .../x/sys/unix/zerrors_dragonfly_amd64.go | 138 +- .../x/sys/unix/zerrors_freebsd_386.go | 6 + .../x/sys/unix/zerrors_freebsd_amd64.go | 6 + .../x/sys/unix/zerrors_freebsd_arm.go | 6 + .../x/sys/unix/zerrors_freebsd_arm64.go | 6 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 236 +- .../x/sys/unix/zerrors_linux_386.go | 3 + .../x/sys/unix/zerrors_linux_amd64.go | 3 + .../x/sys/unix/zerrors_linux_arm.go | 3 + .../x/sys/unix/zerrors_linux_arm64.go | 4 + .../x/sys/unix/zerrors_linux_mips.go | 3 + .../x/sys/unix/zerrors_linux_mips64.go | 3 + .../x/sys/unix/zerrors_linux_mips64le.go | 3 + .../x/sys/unix/zerrors_linux_mipsle.go | 3 + .../x/sys/unix/zerrors_linux_ppc64.go | 3 + .../x/sys/unix/zerrors_linux_ppc64le.go | 3 + .../x/sys/unix/zerrors_linux_riscv64.go | 3 + .../x/sys/unix/zerrors_linux_s390x.go | 3 + .../x/sys/unix/zerrors_linux_sparc64.go | 3 + .../x/sys/unix/zerrors_netbsd_386.go | 6 + .../x/sys/unix/zerrors_netbsd_amd64.go | 6 + .../x/sys/unix/zerrors_netbsd_arm.go | 6 + .../x/sys/unix/zerrors_netbsd_arm64.go | 6 + .../x/sys/unix/zerrors_openbsd_386.go | 7 + .../x/sys/unix/zerrors_openbsd_amd64.go | 7 + .../x/sys/unix/zerrors_openbsd_arm.go | 7 + .../x/sys/unix/zerrors_openbsd_arm64.go | 7 + .../x/sys/unix/zerrors_openbsd_mips64.go | 1862 ++++ .../x/sys/unix/zerrors_solaris_amd64.go | 22 +- .../x/sys/unix/zsyscall_darwin_386.1_11.go | 1809 ---- .../x/sys/unix/zsyscall_darwin_386.go | 137 +- .../x/sys/unix/zsyscall_darwin_386.s | 18 +- .../x/sys/unix/zsyscall_darwin_amd64.1_11.go | 1809 ---- .../x/sys/unix/zsyscall_darwin_amd64.go | 137 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 18 +- .../x/sys/unix/zsyscall_darwin_arm.1_11.go | 1782 ---- .../x/sys/unix/zsyscall_darwin_arm.go | 107 +- .../x/sys/unix/zsyscall_darwin_arm.s | 14 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 122 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 16 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 32 +- .../x/sys/unix/zsyscall_illumos_amd64.go | 29 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 77 + ...m64.1_11.go => zsyscall_openbsd_mips64.go} | 496 +- .../x/sys/unix/zsysctl_openbsd_mips64.go | 279 + .../x/sys/unix/zsysnum_darwin_386.go | 1 + .../x/sys/unix/zsysnum_darwin_amd64.go | 1 + .../x/sys/unix/zsysnum_darwin_arm.go | 1 + .../x/sys/unix/zsysnum_darwin_arm64.go | 1 + .../x/sys/unix/zsysnum_dragonfly_amd64.go | 255 +- .../x/sys/unix/zsysnum_linux_386.go | 2 + .../x/sys/unix/zsysnum_linux_amd64.go | 2 + .../x/sys/unix/zsysnum_linux_arm.go | 2 + .../x/sys/unix/zsysnum_linux_arm64.go | 2 + .../x/sys/unix/zsysnum_linux_mips.go | 2 + .../x/sys/unix/zsysnum_linux_mips64.go | 2 + .../x/sys/unix/zsysnum_linux_mips64le.go | 2 + .../x/sys/unix/zsysnum_linux_mipsle.go | 2 + .../x/sys/unix/zsysnum_linux_ppc64.go | 2 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 2 + .../x/sys/unix/zsysnum_linux_riscv64.go | 2 + .../x/sys/unix/zsysnum_linux_s390x.go | 2 + .../x/sys/unix/zsysnum_linux_sparc64.go | 2 + .../x/sys/unix/zsysnum_openbsd_mips64.go | 220 + .../x/sys/unix/ztypes_darwin_386.go | 32 +- .../x/sys/unix/ztypes_darwin_amd64.go | 43 +- .../x/sys/unix/ztypes_darwin_arm.go | 39 +- .../x/sys/unix/ztypes_darwin_arm64.go | 43 +- .../x/sys/unix/ztypes_dragonfly_amd64.go | 46 +- vendor/golang.org/x/sys/unix/ztypes_linux.go | 1102 ++- .../golang.org/x/sys/unix/ztypes_linux_386.go | 20 + .../x/sys/unix/ztypes_linux_amd64.go | 23 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 23 + .../x/sys/unix/ztypes_linux_arm64.go | 23 + .../x/sys/unix/ztypes_linux_mips.go | 23 + .../x/sys/unix/ztypes_linux_mips64.go | 23 + .../x/sys/unix/ztypes_linux_mips64le.go | 23 + .../x/sys/unix/ztypes_linux_mipsle.go | 23 + .../x/sys/unix/ztypes_linux_ppc64.go | 23 + .../x/sys/unix/ztypes_linux_ppc64le.go | 23 + .../x/sys/unix/ztypes_linux_riscv64.go | 23 + .../x/sys/unix/ztypes_linux_s390x.go | 23 + .../x/sys/unix/ztypes_linux_sparc64.go | 23 + .../x/sys/unix/ztypes_openbsd_mips64.go | 565 ++ .../x/sys/unix/ztypes_solaris_amd64.go | 31 +- .../x/sys/windows/memory_windows.go | 20 +- vendor/golang.org/x/sys/windows/service.go | 2 + .../x/sys/windows/setupapierrors_windows.go | 100 + vendor/golang.org/x/sys/windows/syscall.go | 46 +- .../x/sys/windows/syscall_windows.go | 33 +- .../golang.org/x/sys/windows/types_windows.go | 12 - .../x/sys/windows/types_windows_386.go | 13 + .../x/sys/windows/types_windows_amd64.go | 12 + .../x/sys/windows/types_windows_arm.go | 13 + .../x/sys/windows/zsyscall_windows.go | 4397 ++++------ .../x/text/unicode/bidi/tables12.0.0.go | 2 +- .../x/text/unicode/bidi/tables13.0.0.go | 1955 +++++ .../x/text/unicode/norm/tables12.0.0.go | 2 +- .../x/text/unicode/norm/tables13.0.0.go | 7760 +++++++++++++++++ .../golang.org/x/text/width/tables12.0.0.go | 2 +- .../golang.org/x/text/width/tables13.0.0.go | 1351 +++ .../googleapis/rpc/status/status.pb.go | 14 +- .../grpc/balancer/base/balancer.go | 67 +- vendor/google.golang.org/grpc/version.go | 2 +- .../protobuf/encoding/prototext/decode.go | 65 +- .../protobuf/encoding/prototext/encode.go | 12 +- .../protobuf/internal/fieldnum/any_gen.go | 13 - .../protobuf/internal/fieldnum/api_gen.go | 35 - .../internal/fieldnum/descriptor_gen.go | 240 - .../protobuf/internal/fieldnum/doc.go | 7 - .../internal/fieldnum/duration_gen.go | 13 - .../protobuf/internal/fieldnum/empty_gen.go | 10 - .../internal/fieldnum/field_mask_gen.go | 12 - .../internal/fieldnum/source_context_gen.go | 12 - .../protobuf/internal/fieldnum/struct_gen.go | 33 - .../internal/fieldnum/timestamp_gen.go | 13 - .../protobuf/internal/fieldnum/type_gen.go | 53 - .../internal/fieldnum/wrappers_gen.go | 52 - .../protobuf/internal/filedesc/build.go | 16 +- .../protobuf/internal/filedesc/desc.go | 5 +- .../protobuf/internal/filedesc/desc_init.go | 62 +- .../protobuf/internal/filedesc/desc_lazy.go | 124 +- .../protobuf/internal/filedesc/desc_list.go | 6 +- .../protobuf/internal/genid/any_gen.go | 34 + .../protobuf/internal/genid/api_gen.go | 106 + .../protobuf/internal/genid/descriptor_gen.go | 829 ++ .../protobuf/internal/genid/doc.go | 11 + .../protobuf/internal/genid/duration_gen.go | 34 + .../protobuf/internal/genid/empty_gen.go | 19 + .../protobuf/internal/genid/field_mask_gen.go | 31 + .../protobuf/internal/genid/goname.go | 25 + .../protobuf/internal/genid/map_entry.go | 16 + .../internal/genid/source_context_gen.go | 31 + .../protobuf/internal/genid/struct_gen.go | 116 + .../protobuf/internal/genid/timestamp_gen.go | 34 + .../protobuf/internal/genid/type_gen.go | 184 + .../protobuf/internal/genid/wrappers.go | 13 + .../protobuf/internal/genid/wrappers_gen.go | 175 + .../protobuf/internal/genname/name.go | 25 - .../protobuf/internal/impl/api_export.go | 7 + .../protobuf/internal/impl/codec_map.go | 5 +- .../protobuf/internal/impl/message.go | 10 +- .../protobuf/internal/impl/validate.go | 5 +- .../protobuf/internal/version/version.go | 2 +- .../protobuf/proto/decode.go | 5 +- .../protobuf/reflect/protoreflect/proto.go | 50 +- .../protobuf/types/known/anypb/any.pb.go | 207 + .../types/known/durationpb/duration.pb.go | 130 + .../types/known/timestamppb/timestamp.pb.go | 110 + .../admissionregistration/v1/generated.proto | 2 +- .../v1beta1/generated.proto | 2 +- .../api/apiserverinternal/v1alpha1/doc.go | 25 + .../v1alpha1/generated.pb.go | 1718 ++++ .../v1alpha1/generated.proto | 121 + .../v1alpha1/register.go | 16 +- .../api/apiserverinternal/v1alpha1/types.go | 127 + .../v1alpha1/types_swagger_doc_generated.go | 93 + .../v1alpha1/zz_generated.deepcopy.go | 175 + vendor/k8s.io/api/apps/v1/generated.proto | 2 +- .../k8s.io/api/apps/v1beta1/generated.proto | 2 +- .../k8s.io/api/apps/v1beta2/generated.proto | 2 +- .../api/authentication/v1/generated.proto | 2 +- .../authentication/v1beta1/generated.proto | 2 +- .../api/authorization/v1/generated.proto | 2 +- .../api/authorization/v1beta1/generated.proto | 2 +- .../k8s.io/api/autoscaling/v1/generated.pb.go | 937 +- .../k8s.io/api/autoscaling/v1/generated.proto | 85 +- vendor/k8s.io/api/autoscaling/v1/types.go | 81 +- .../v1/types_swagger_doc_generated.go | 50 +- .../autoscaling/v1/zz_generated.deepcopy.go | 58 + .../api/autoscaling/v2beta1/generated.pb.go | 942 +- .../api/autoscaling/v2beta1/generated.proto | 85 +- .../k8s.io/api/autoscaling/v2beta1/types.go | 81 +- .../v2beta1/types_swagger_doc_generated.go | 50 +- .../v2beta1/zz_generated.deepcopy.go | 58 + .../api/autoscaling/v2beta2/generated.pb.go | 913 +- .../api/autoscaling/v2beta2/generated.proto | 65 +- .../k8s.io/api/autoscaling/v2beta2/types.go | 65 +- .../v2beta2/types_swagger_doc_generated.go | 48 +- .../v2beta2/zz_generated.deepcopy.go | 44 + vendor/k8s.io/api/batch/v1/generated.proto | 4 +- vendor/k8s.io/api/batch/v1/types.go | 2 + .../batch/v1/types_swagger_doc_generated.go | 4 +- .../k8s.io/api/batch/v1beta1/generated.proto | 2 +- .../k8s.io/api/batch/v2alpha1/generated.proto | 2 +- .../api/certificates/v1/generated.proto | 2 +- .../api/certificates/v1beta1/generated.proto | 2 +- .../api/coordination/v1/generated.proto | 2 +- .../api/coordination/v1beta1/generated.proto | 2 +- vendor/k8s.io/api/core/v1/generated.pb.go | 2671 +++--- vendor/k8s.io/api/core/v1/generated.proto | 228 +- vendor/k8s.io/api/core/v1/resource.go | 51 +- vendor/k8s.io/api/core/v1/types.go | 267 +- .../core/v1/types_swagger_doc_generated.go | 57 +- .../k8s.io/api/core/v1/well_known_labels.go | 14 +- .../api/core/v1/zz_generated.deepcopy.go | 64 +- .../api/discovery/v1alpha1/generated.pb.go | 215 +- .../api/discovery/v1alpha1/generated.proto | 31 +- vendor/k8s.io/api/discovery/v1alpha1/types.go | 28 +- .../v1alpha1/types_swagger_doc_generated.go | 11 +- .../v1alpha1/zz_generated.deepcopy.go | 15 + .../api/discovery/v1beta1/generated.pb.go | 214 +- .../api/discovery/v1beta1/generated.proto | 31 +- vendor/k8s.io/api/discovery/v1beta1/types.go | 34 +- .../v1beta1/types_swagger_doc_generated.go | 11 +- .../v1beta1/zz_generated.deepcopy.go | 15 + vendor/k8s.io/api/events/v1/generated.proto | 18 +- vendor/k8s.io/api/events/v1/types.go | 19 +- .../events/v1/types_swagger_doc_generated.go | 8 +- .../k8s.io/api/events/v1beta1/generated.proto | 8 +- vendor/k8s.io/api/events/v1beta1/types.go | 9 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- .../api/extensions/v1beta1/generated.proto | 2 +- vendor/k8s.io/api/flowcontrol/v1alpha1/doc.go | 1 + .../api/flowcontrol/v1alpha1/generated.proto | 2 +- .../k8s.io/api/flowcontrol/v1alpha1/types.go | 22 + .../zz_generated.prerelease-lifecycle.go | 121 + vendor/k8s.io/api/flowcontrol/v1beta1/doc.go | 25 + .../api/flowcontrol/v1beta1/generated.pb.go | 5433 ++++++++++++ .../api/flowcontrol/v1beta1/generated.proto | 434 + .../api/flowcontrol/v1beta1/register.go | 58 + .../k8s.io/api/flowcontrol/v1beta1/types.go | 529 ++ .../v1beta1/types_swagger_doc_generated.go | 258 + .../v1beta1/zz_generated.deepcopy.go | 541 ++ .../zz_generated.prerelease-lifecycle.go | 93 + .../k8s.io/api/networking/v1/generated.proto | 2 +- .../api/networking/v1beta1/generated.proto | 2 +- .../api/{settings/v1alpha1 => node/v1}/doc.go | 6 +- vendor/k8s.io/api/node/v1/generated.pb.go | 1411 +++ vendor/k8s.io/api/node/v1/generated.proto | 109 + vendor/k8s.io/api/node/v1/register.go | 52 + vendor/k8s.io/api/node/v1/types.go | 107 + .../node/v1/types_swagger_doc_generated.go | 71 + .../v1}/zz_generated.deepcopy.go | 99 +- .../k8s.io/api/node/v1alpha1/generated.proto | 6 +- vendor/k8s.io/api/node/v1alpha1/types.go | 4 +- .../v1alpha1/types_swagger_doc_generated.go | 2 +- .../k8s.io/api/node/v1beta1/generated.proto | 6 +- vendor/k8s.io/api/node/v1beta1/types.go | 4 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- .../k8s.io/api/policy/v1beta1/generated.proto | 2 +- vendor/k8s.io/api/rbac/v1/generated.proto | 2 +- .../k8s.io/api/rbac/v1alpha1/generated.proto | 2 +- .../k8s.io/api/rbac/v1beta1/generated.proto | 2 +- .../k8s.io/api/scheduling/v1/generated.proto | 2 +- .../api/scheduling/v1alpha1/generated.proto | 2 +- .../api/scheduling/v1beta1/generated.proto | 2 +- .../api/settings/v1alpha1/generated.pb.go | 1053 --- .../api/settings/v1alpha1/generated.proto | 75 - vendor/k8s.io/api/settings/v1alpha1/types.go | 70 - .../v1alpha1/types_swagger_doc_generated.go | 61 - vendor/k8s.io/api/storage/v1/generated.pb.go | 483 +- vendor/k8s.io/api/storage/v1/generated.proto | 52 +- vendor/k8s.io/api/storage/v1/types.go | 51 + .../storage/v1/types_swagger_doc_generated.go | 12 + .../api/storage/v1/zz_generated.deepcopy.go | 33 + .../api/storage/v1alpha1/generated.proto | 2 +- .../api/storage/v1beta1/generated.pb.go | 486 +- .../api/storage/v1beta1/generated.proto | 52 +- vendor/k8s.io/api/storage/v1beta1/types.go | 51 + .../v1beta1/types_swagger_doc_generated.go | 12 + .../storage/v1beta1/zz_generated.deepcopy.go | 33 + .../pkg/apis/apiextensions/v1/generated.proto | 2 +- .../apiextensions/v1beta1/generated.proto | 2 +- .../apiserver/schema/defaulting/algorithm.go | 26 +- .../apiserver/schema/defaulting/prunenulls.go | 66 + .../apiserver/schema/defaulting/validation.go | 7 +- .../pkg/apiserver/schema/kubeopenapi.go | 151 + .../pkg/apiserver/schema/objectmeta/coerce.go | 2 +- .../pkg/apiserver/schema/skeleton.go | 17 - .../pkg/apiserver/validation/formats.go | 2 +- .../pkg/apiserver/validation/validation.go | 8 +- .../apimachinery/pkg/api/meta/conditions.go | 1 + .../k8s.io/apimachinery/pkg/api/meta/meta.go | 4 - .../apimachinery/pkg/api/meta/restmapper.go | 3 + .../pkg/api/resource/generated.proto | 2 +- .../apimachinery/pkg/api/resource/quantity.go | 36 +- .../apimachinery/pkg/apis/meta/v1/OWNERS | 1 - .../pkg/apis/meta/v1/generated.proto | 3 +- .../pkg/apis/meta/v1/group_version.go | 9 + .../apimachinery/pkg/apis/meta/v1/helpers.go | 14 + .../pkg/apis/meta/v1/micro_time.go | 15 - .../pkg/apis/meta/v1/micro_time_fuzz.go | 39 + .../apimachinery/pkg/apis/meta/v1/time.go | 15 - .../pkg/apis/meta/v1/time_fuzz.go | 39 + .../apimachinery/pkg/apis/meta/v1/types.go | 1 + .../pkg/apis/meta/v1/unstructured/helpers.go | 8 - .../apimachinery/pkg/conversion/converter.go | 598 +- .../k8s.io/apimachinery/pkg/labels/labels.go | 19 - .../apimachinery/pkg/labels/selector.go | 50 +- .../apimachinery/pkg/runtime/converter.go | 3 + .../apimachinery/pkg/runtime/generated.proto | 2 +- .../apimachinery/pkg/runtime/interfaces.go | 2 +- .../apimachinery/pkg/runtime/negotiate.go | 33 - .../pkg/runtime/schema/generated.proto | 2 +- .../pkg/runtime/schema/interfaces.go | 4 +- .../k8s.io/apimachinery/pkg/runtime/scheme.go | 30 +- .../pkg/runtime/serializer/codec_factory.go | 12 +- .../pkg/runtime/serializer/json/json.go | 23 +- .../runtime/serializer/protobuf/protobuf.go | 4 + .../apimachinery/pkg/types/namespacedname.go | 6 +- .../apimachinery/pkg/util/clock/clock.go | 18 +- .../apimachinery/pkg/util/errors/errors.go | 2 +- .../apimachinery/pkg/util/framer/framer.go | 3 + .../pkg/util/intstr/generated.proto | 2 +- .../pkg/util/intstr/instr_fuzz.go | 42 + .../apimachinery/pkg/util/intstr/intstr.go | 70 +- .../k8s.io/apimachinery/pkg/util/json/json.go | 33 +- .../k8s.io/apimachinery/pkg/util/net/http.go | 51 +- .../apimachinery/pkg/util/net/port_range.go | 2 +- .../apimachinery/pkg/util/runtime/runtime.go | 4 +- .../pkg/util/validation/field/path.go | 3 + .../pkg/util/validation/validation.go | 6 +- .../k8s.io/apimachinery/pkg/util/wait/wait.go | 29 + .../apimachinery/pkg/util/yaml/decoder.go | 31 + vendor/k8s.io/apimachinery/pkg/watch/mux.go | 65 +- .../apimachinery/pkg/watch/streamwatcher.go | 2 +- vendor/k8s.io/apimachinery/pkg/watch/watch.go | 2 +- .../apiserver/pkg/apis/apiserver/types.go | 3 +- .../pkg/apis/apiserver/v1alpha1/types.go | 3 +- .../pkg/apis/apiserver/v1beta1/types.go | 3 +- .../pkg/server/egressselector/config.go | 35 +- .../server/egressselector/egress_selector.go | 15 +- .../pkg/util/webhook/authentication.go | 2 +- .../apiserver/pkg/util/webhook/webhook.go | 72 +- .../client-go/kubernetes/scheme/register.go | 8 +- .../pkg/apis/clientauthentication/types.go | 69 +- .../v1alpha1/conversion.go | 27 + .../clientauthentication/v1alpha1/types.go | 6 +- .../v1alpha1/zz_generated.conversion.go | 16 +- .../v1beta1/conversion.go | 8 +- .../clientauthentication/v1beta1/types.go | 74 +- .../v1beta1/zz_generated.conversion.go | 62 + .../v1beta1/zz_generated.deepcopy.go | 29 +- .../zz_generated.deepcopy.go | 29 + .../plugin/pkg/client/auth/exec/exec.go | 58 +- vendor/k8s.io/client-go/rest/config.go | 30 +- vendor/k8s.io/client-go/rest/exec.go | 85 + vendor/k8s.io/client-go/rest/request.go | 22 +- vendor/k8s.io/client-go/rest/transport.go | 11 +- vendor/k8s.io/client-go/rest/warnings.go | 7 +- .../k8s.io/client-go/tools/auth/clientauth.go | 4 +- .../client-go/tools/clientcmd/api/types.go | 42 +- .../client-go/tools/clientcmd/api/v1/types.go | 13 +- .../api/v1/zz_generated.conversion.go | 23 +- .../clientcmd/api/zz_generated.deepcopy.go | 3 + .../tools/clientcmd/client_config.go | 12 +- .../client-go/tools/clientcmd/config.go | 5 +- .../client-go/tools/clientcmd/loader.go | 4 + vendor/k8s.io/client-go/tools/record/event.go | 2 +- vendor/k8s.io/client-go/tools/record/fake.go | 16 +- vendor/k8s.io/client-go/transport/cache.go | 49 +- vendor/k8s.io/client-go/transport/config.go | 8 +- .../client-go/transport/round_trippers.go | 8 +- .../k8s.io/component-base/metrics/metric.go | 3 - .../metrics/processstarttime.go | 8 +- vendor/k8s.io/klog/v2/README.md | 6 +- vendor/k8s.io/klog/v2/SECURITY.md | 22 + vendor/k8s.io/klog/v2/klog.go | 177 +- .../kube-openapi/pkg/util/proto/document.go | 62 +- .../kube-openapi/pkg/util/proto/openapi.go | 7 + .../pkg/validation}/errors/.gitignore | 0 .../pkg/validation/errors}/LICENSE | 0 .../pkg/validation/errors/api.go} | 47 +- .../pkg/validation}/errors/doc.go | 0 .../pkg/validation/errors/headers.go} | 43 +- .../pkg/validation}/errors/schema.go | 43 +- .../pkg/validation/spec}/.gitignore | 0 .../kube-openapi/pkg/validation/spec}/LICENSE | 0 .../pkg/validation/spec/external_docs.go} | 14 +- .../pkg/validation/spec/header.go} | 13 +- .../kube-openapi/pkg/validation/spec/info.go | 113 + .../kube-openapi/pkg/validation/spec/ref.go | 167 + .../pkg/validation/spec/schema.go | 532 ++ .../pkg/validation/spec/swagger.go | 244 + .../pkg/validation/strfmt}/.gitignore | 3 - .../pkg/validation/strfmt}/LICENSE | 0 .../pkg/validation}/strfmt/bson.go | 64 +- .../pkg/validation/strfmt/bson}/objectid.go | 79 +- .../pkg/validation}/strfmt/date.go | 50 - .../pkg/validation}/strfmt/default.go | 487 -- .../pkg/validation}/strfmt/doc.go | 0 .../pkg/validation}/strfmt/duration.go | 33 +- .../pkg/validation}/strfmt/format.go | 2 +- .../pkg/validation}/strfmt/time.go | 31 - .../pkg/validation/validate}/.gitignore | 0 .../pkg/validation/validate}/LICENSE | 0 .../pkg/validation}/validate/debug.go | 0 .../pkg/validation/validate}/doc.go | 9 +- .../pkg/validation}/validate/formats.go | 10 +- .../pkg/validation/validate/helpers.go | 150 + .../validation}/validate/object_validator.go | 99 +- .../pkg/validation}/validate/options.go | 0 .../pkg/validation/validate/result.go | 207 + .../pkg/validation}/validate/rexp.go | 0 .../pkg/validation}/validate/schema.go | 26 +- .../validation}/validate/schema_messages.go | 8 +- .../pkg/validation/validate/schema_option.go} | 22 +- .../pkg/validation}/validate/schema_props.go | 10 +- .../validation}/validate/slice_validator.go | 10 +- .../pkg/validation}/validate/type.go | 13 +- .../pkg/validation/validate/validator.go | 240 + .../pkg/validation}/validate/values.go | 52 +- vendor/modules.txt | 93 +- .../konnectivity-client/pkg/client/client.go | 22 +- .../konnectivity-client/pkg/client/conn.go | 6 +- 649 files changed, 51724 insertions(+), 41189 deletions(-) create mode 100644 vendor/github.com/blang/semver/.travis.yml rename vendor/github.com/{go-stack/stack/LICENSE.md => blang/semver/v4/LICENSE} (85%) create mode 100644 vendor/github.com/blang/semver/v4/go.mod create mode 100644 vendor/github.com/blang/semver/v4/json.go create mode 100644 vendor/github.com/blang/semver/v4/range.go create mode 100644 vendor/github.com/blang/semver/v4/semver.go create mode 100644 vendor/github.com/blang/semver/v4/sort.go create mode 100644 vendor/github.com/blang/semver/v4/sql.go create mode 100644 vendor/github.com/go-bindata/go-bindata/v3/go-bindata/.gitignore create mode 100644 vendor/github.com/go-bindata/go-bindata/v3/go-bindata/AppendSliceValue.go create mode 100644 vendor/github.com/go-bindata/go-bindata/v3/go-bindata/main.go create mode 100644 vendor/github.com/go-bindata/go-bindata/v3/go-bindata/version.go delete mode 100644 vendor/github.com/go-openapi/analysis/.codecov.yml delete mode 100644 vendor/github.com/go-openapi/analysis/.gitignore delete mode 100644 vendor/github.com/go-openapi/analysis/.golangci.yml delete mode 100644 vendor/github.com/go-openapi/analysis/.travis.yml delete mode 100644 vendor/github.com/go-openapi/analysis/CODE_OF_CONDUCT.md delete mode 100644 vendor/github.com/go-openapi/analysis/README.md delete mode 100644 vendor/github.com/go-openapi/analysis/analyzer.go delete mode 100644 vendor/github.com/go-openapi/analysis/appveyor.yml delete mode 100644 vendor/github.com/go-openapi/analysis/debug.go delete mode 100644 vendor/github.com/go-openapi/analysis/doc.go delete mode 100644 vendor/github.com/go-openapi/analysis/fixer.go delete mode 100644 vendor/github.com/go-openapi/analysis/flatten.go delete mode 100644 vendor/github.com/go-openapi/analysis/go.mod delete mode 100644 vendor/github.com/go-openapi/analysis/go.sum delete mode 100644 vendor/github.com/go-openapi/analysis/internal/post_go18.go delete mode 100644 vendor/github.com/go-openapi/analysis/internal/pre_go18.go delete mode 100644 vendor/github.com/go-openapi/analysis/mixin.go delete mode 100644 vendor/github.com/go-openapi/analysis/schema.go delete mode 100644 vendor/github.com/go-openapi/errors/.golangci.yml delete mode 100644 vendor/github.com/go-openapi/errors/.travis.yml delete mode 100644 vendor/github.com/go-openapi/errors/CODE_OF_CONDUCT.md delete mode 100644 vendor/github.com/go-openapi/errors/README.md delete mode 100644 vendor/github.com/go-openapi/errors/api.go delete mode 100644 vendor/github.com/go-openapi/errors/go.mod delete mode 100644 vendor/github.com/go-openapi/errors/go.sum delete mode 100644 vendor/github.com/go-openapi/errors/headers.go delete mode 100644 vendor/github.com/go-openapi/errors/middleware.go delete mode 100644 vendor/github.com/go-openapi/errors/parsing.go delete mode 100644 vendor/github.com/go-openapi/loads/.editorconfig delete mode 100644 vendor/github.com/go-openapi/loads/.gitignore delete mode 100644 vendor/github.com/go-openapi/loads/.golangci.yml delete mode 100644 vendor/github.com/go-openapi/loads/.travis.yml delete mode 100644 vendor/github.com/go-openapi/loads/CODE_OF_CONDUCT.md delete mode 100644 vendor/github.com/go-openapi/loads/README.md delete mode 100644 vendor/github.com/go-openapi/loads/go.mod delete mode 100644 vendor/github.com/go-openapi/loads/go.sum delete mode 100644 vendor/github.com/go-openapi/loads/spec.go delete mode 100644 vendor/github.com/go-openapi/runtime/.editorconfig delete mode 100644 vendor/github.com/go-openapi/runtime/.travis.yml delete mode 100644 vendor/github.com/go-openapi/runtime/CODE_OF_CONDUCT.md delete mode 100644 vendor/github.com/go-openapi/runtime/README.md delete mode 100644 vendor/github.com/go-openapi/runtime/bytestream.go delete mode 100644 vendor/github.com/go-openapi/runtime/client_auth_info.go delete mode 100644 vendor/github.com/go-openapi/runtime/client_operation.go delete mode 100644 vendor/github.com/go-openapi/runtime/client_request.go delete mode 100644 vendor/github.com/go-openapi/runtime/client_response.go delete mode 100644 vendor/github.com/go-openapi/runtime/constants.go delete mode 100644 vendor/github.com/go-openapi/runtime/csv.go delete mode 100644 vendor/github.com/go-openapi/runtime/discard.go delete mode 100644 vendor/github.com/go-openapi/runtime/go.mod delete mode 100644 vendor/github.com/go-openapi/runtime/go.sum delete mode 100644 vendor/github.com/go-openapi/runtime/interfaces.go delete mode 100644 vendor/github.com/go-openapi/runtime/request.go delete mode 100644 vendor/github.com/go-openapi/runtime/statuses.go delete mode 100644 vendor/github.com/go-openapi/runtime/text.go delete mode 100644 vendor/github.com/go-openapi/runtime/values.go delete mode 100644 vendor/github.com/go-openapi/runtime/xml.go delete mode 100644 vendor/github.com/go-openapi/strfmt/.editorconfig delete mode 100644 vendor/github.com/go-openapi/strfmt/.golangci.yml delete mode 100644 vendor/github.com/go-openapi/strfmt/.travis.yml delete mode 100644 vendor/github.com/go-openapi/strfmt/CODE_OF_CONDUCT.md delete mode 100644 vendor/github.com/go-openapi/strfmt/LICENSE delete mode 100644 vendor/github.com/go-openapi/strfmt/README.md delete mode 100644 vendor/github.com/go-openapi/strfmt/go.mod delete mode 100644 vendor/github.com/go-openapi/strfmt/go.sum delete mode 100644 vendor/github.com/go-openapi/validate/.editorconfig delete mode 100644 vendor/github.com/go-openapi/validate/.golangci.yml delete mode 100644 vendor/github.com/go-openapi/validate/.travis.yml delete mode 100644 vendor/github.com/go-openapi/validate/CODE_OF_CONDUCT.md delete mode 100644 vendor/github.com/go-openapi/validate/LICENSE delete mode 100644 vendor/github.com/go-openapi/validate/README.md delete mode 100644 vendor/github.com/go-openapi/validate/default_validator.go delete mode 100644 vendor/github.com/go-openapi/validate/doc.go delete mode 100644 vendor/github.com/go-openapi/validate/example_validator.go delete mode 100644 vendor/github.com/go-openapi/validate/go.mod delete mode 100644 vendor/github.com/go-openapi/validate/go.sum delete mode 100644 vendor/github.com/go-openapi/validate/helpers.go delete mode 100644 vendor/github.com/go-openapi/validate/result.go delete mode 100644 vendor/github.com/go-openapi/validate/schema_option.go delete mode 100644 vendor/github.com/go-openapi/validate/spec.go delete mode 100644 vendor/github.com/go-openapi/validate/spec_messages.go delete mode 100644 vendor/github.com/go-openapi/validate/update-fixtures.sh delete mode 100644 vendor/github.com/go-openapi/validate/validator.go delete mode 100644 vendor/github.com/go-stack/stack/.travis.yml delete mode 100644 vendor/github.com/go-stack/stack/README.md delete mode 100644 vendor/github.com/go-stack/stack/go.mod delete mode 100644 vendor/github.com/go-stack/stack/stack.go create mode 100644 vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md delete mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_arm.go rename vendor/github.com/prometheus/procfs/{cpuinfo_arm64.go => cpuinfo_armx.go} (97%) delete mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mips64.go delete mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go rename vendor/github.com/prometheus/procfs/{cpuinfo_mips64le.go => cpuinfo_mipsx.go} (94%) rename vendor/github.com/prometheus/procfs/{cpuinfo_mips.go => cpuinfo_others.go} (82%) rename vendor/github.com/prometheus/procfs/{cpuinfo_ppc64.go => cpuinfo_ppcx.go} (96%) rename vendor/github.com/prometheus/procfs/{cpuinfo_default.go => cpuinfo_x86.go} (100%) create mode 100644 vendor/github.com/spf13/cobra/CHANGELOG.md create mode 100644 vendor/github.com/spf13/cobra/CONTRIBUTING.md create mode 100644 vendor/github.com/spf13/cobra/projects_using_cobra.md create mode 100644 vendor/github.com/spf13/cobra/shell_completions.md rename vendor/github.com/stretchr/testify/assert/{assertion_order.go => assertion_compare.go} (62%) delete mode 100644 vendor/go.mongodb.org/mongo-driver/LICENSE delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bson.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bson_1_8.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/bsoncodec.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_decoders.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_encoders.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/doc.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/mode.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/pointer_codec.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/proxy.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/registry.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_codec.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_tag_parser.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/types.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/copier.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/doc.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_parser.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_reader.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_tables.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_wrappers.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_writer.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/json_scanner.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/mode.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/reader.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/value_reader.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/value_writer.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsonrw/writer.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/bsontype/bsontype.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/decoder.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/doc.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/encoder.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/marshal.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/primitive/decimal.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/primitive/primitive.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/primitive_codecs.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/raw.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/raw_element.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/raw_value.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/registry.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/types.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/bson/unmarshal.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/bsoncore.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/document.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/document_sequence.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/element.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/tables.go delete mode 100644 vendor/go.mongodb.org/mongo-driver/x/bsonx/bsoncore/value.go rename vendor/golang.org/x/net/idna/{tables12.00.go => tables12.0.0.go} (99%) create mode 100644 vendor/golang.org/x/net/idna/tables13.0.0.go create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go rename vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm64.1_11.go => zsyscall_openbsd_mips64.go} (86%) create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/windows/setupapierrors_windows.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/norm/tables13.0.0.go create mode 100644 vendor/golang.org/x/text/width/tables13.0.0.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/any_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/api_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/descriptor_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/doc.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/duration_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/empty_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/field_mask_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/source_context_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/struct_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/timestamp_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/type_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/fieldnum/wrappers_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/any_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/api_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/doc.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/duration_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/empty_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/goname.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/map_entry.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/struct_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/type_gen.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/wrappers.go create mode 100644 vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go delete mode 100644 vendor/google.golang.org/protobuf/internal/genname/name.go create mode 100644 vendor/k8s.io/api/apiserverinternal/v1alpha1/doc.go create mode 100644 vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.pb.go create mode 100644 vendor/k8s.io/api/apiserverinternal/v1alpha1/generated.proto rename vendor/k8s.io/api/{settings => apiserverinternal}/v1alpha1/register.go (73%) create mode 100644 vendor/k8s.io/api/apiserverinternal/v1alpha1/types.go create mode 100644 vendor/k8s.io/api/apiserverinternal/v1alpha1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/apiserverinternal/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1alpha1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/doc.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/generated.pb.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/generated.proto create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/register.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/types.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/flowcontrol/v1beta1/zz_generated.prerelease-lifecycle.go rename vendor/k8s.io/api/{settings/v1alpha1 => node/v1}/doc.go (82%) create mode 100644 vendor/k8s.io/api/node/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/node/v1/generated.proto create mode 100644 vendor/k8s.io/api/node/v1/register.go create mode 100644 vendor/k8s.io/api/node/v1/types.go create mode 100644 vendor/k8s.io/api/node/v1/types_swagger_doc_generated.go rename vendor/k8s.io/api/{settings/v1alpha1 => node/v1}/zz_generated.deepcopy.go (54%) delete mode 100644 vendor/k8s.io/api/settings/v1alpha1/generated.pb.go delete mode 100644 vendor/k8s.io/api/settings/v1alpha1/generated.proto delete mode 100644 vendor/k8s.io/api/settings/v1alpha1/types.go delete mode 100644 vendor/k8s.io/api/settings/v1alpha1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/defaulting/prunenulls.go create mode 100644 vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/kubeopenapi.go create mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_fuzz.go create mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time_fuzz.go create mode 100644 vendor/k8s.io/apimachinery/pkg/util/intstr/instr_fuzz.go create mode 100644 vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/conversion.go create mode 100644 vendor/k8s.io/client-go/rest/exec.go create mode 100644 vendor/k8s.io/klog/v2/SECURITY.md rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/errors/.gitignore (100%) rename vendor/{github.com/go-openapi/analysis => k8s.io/kube-openapi/pkg/validation/errors}/LICENSE (100%) rename vendor/{github.com/go-openapi/runtime/headers.go => k8s.io/kube-openapi/pkg/validation/errors/api.go} (53%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/errors/doc.go (100%) rename vendor/{github.com/go-openapi/runtime/json.go => k8s.io/kube-openapi/pkg/validation/errors/headers.go} (51%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/errors/schema.go (94%) rename vendor/{github.com/go-openapi/strfmt => k8s.io/kube-openapi/pkg/validation/spec}/.gitignore (100%) rename vendor/{github.com/go-openapi/errors => k8s.io/kube-openapi/pkg/validation/spec}/LICENSE (100%) rename vendor/{github.com/go-openapi/errors/auth.go => k8s.io/kube-openapi/pkg/validation/spec/external_docs.go} (65%) rename vendor/{github.com/prometheus/procfs/cpuinfo_ppc64le.go => k8s.io/kube-openapi/pkg/validation/spec/header.go} (76%) create mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/spec/info.go create mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/spec/ref.go create mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/spec/schema.go create mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/spec/swagger.go rename vendor/{github.com/go-openapi/validate => k8s.io/kube-openapi/pkg/validation/strfmt}/.gitignore (52%) rename vendor/{github.com/go-openapi/loads => k8s.io/kube-openapi/pkg/validation/strfmt}/LICENSE (100%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/strfmt/bson.go (58%) rename vendor/{go.mongodb.org/mongo-driver/bson/primitive => k8s.io/kube-openapi/pkg/validation/strfmt/bson}/objectid.go (62%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/strfmt/date.go (69%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/strfmt/default.go (74%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/strfmt/doc.go (100%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/strfmt/duration.go (85%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/strfmt/format.go (99%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/strfmt/time.go (87%) rename vendor/{github.com/go-openapi/runtime => k8s.io/kube-openapi/pkg/validation/validate}/.gitignore (100%) rename vendor/{github.com/go-openapi/runtime => k8s.io/kube-openapi/pkg/validation/validate}/LICENSE (100%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/debug.go (100%) rename vendor/{github.com/go-openapi/loads => k8s.io/kube-openapi/pkg/validation/validate}/doc.go (70%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/formats.go (81%) create mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/validate/helpers.go rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/object_validator.go (61%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/options.go (100%) create mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/validate/result.go rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/rexp.go (100%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/schema.go (92%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/schema_messages.go (90%) rename vendor/{github.com/go-openapi/runtime/file.go => k8s.io/kube-openapi/pkg/validation/validate/schema_option.go} (64%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/schema_props.go (96%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/slice_validator.go (90%) rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/type.go (94%) create mode 100644 vendor/k8s.io/kube-openapi/pkg/validation/validate/validator.go rename vendor/{github.com/go-openapi => k8s.io/kube-openapi/pkg/validation}/validate/values.go (90%) diff --git a/crds/operators.coreos.com_clusterserviceversions.yaml b/crds/operators.coreos.com_clusterserviceversions.yaml index ceb41bdf4..d188238ef 100644 --- a/crds/operators.coreos.com_clusterserviceversions.yaml +++ b/crds/operators.coreos.com_clusterserviceversions.yaml @@ -2968,9 +2968,7 @@ spec: when it might take a long time to load data or warm a cache, than during steady-state operation. This - cannot be updated. This is a beta - feature enabled by the StartupProbe - feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' type: object properties: exec: @@ -6071,9 +6069,7 @@ spec: when it might take a long time to load data or warm a cache, than during steady-state operation. This - cannot be updated. This is a beta - feature enabled by the StartupProbe - feature flag. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' type: object properties: exec: @@ -6523,8 +6519,8 @@ spec: It will have no effect on ephemeral volume types such as: secret, configmaps and emptydir. Valid values are "OnRootMismatch" - and "Always". If not specified defaults - to "Always".' + and "Always". If not specified, "Always" + is used.' type: string runAsGroup: description: The GID to run the entrypoint @@ -7597,35 +7593,24 @@ spec: can be used to specify either: * An existing VolumeSnapshot object - (snapshot.storage.k8s.io/VolumeSnapshot - - Beta) * An existing - PVC (PersistentVolumeClaim) + (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) * An existing custom - resource/object that - implements data population - (Alpha) In order to - use VolumeSnapshot object - types, the appropriate + resource that implements + data population (Alpha) + In order to use custom + resource types that + implement data population, + the AnyVolumeDataSource feature gate must be - enabled (VolumeSnapshotDataSource - or AnyVolumeDataSource) - If the provisioner or - an external controller + enabled. If the provisioner + or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data - source. If the specified - data source is not supported, - the volume will not - be created and the failure - will be reported as - an event. In the future, - we plan to support more - data source types and - the behavior of the - provisioner may change.' + source.' type: object required: - kind @@ -8243,8 +8228,6 @@ spec: resources secrets, configmaps, and downward API type: object - required: - - sources properties: defaultMode: description: Mode bits used to diff --git a/crds/operators.coreos.com_subscriptions.yaml b/crds/operators.coreos.com_subscriptions.yaml index a73099cdf..77e497282 100644 --- a/crds/operators.coreos.com_subscriptions.yaml +++ b/crds/operators.coreos.com_subscriptions.yaml @@ -856,22 +856,16 @@ spec: dataSource: description: 'This field can be used to specify either: * An existing VolumeSnapshot object - (snapshot.storage.k8s.io/VolumeSnapshot - - Beta) * An existing PVC (PersistentVolumeClaim) - * An existing custom resource/object that - implements data population (Alpha) In order - to use VolumeSnapshot object types, the appropriate - feature gate must be enabled (VolumeSnapshotDataSource - or AnyVolumeDataSource) If the provisioner - or an external controller can support the - specified data source, it will create a new - volume based on the contents of the specified - data source. If the specified data source - is not supported, the volume will not be created - and the failure will be reported as an event. - In the future, we plan to support more data - source types and the behavior of the provisioner - may change.' + (snapshot.storage.k8s.io/VolumeSnapshot) * + An existing PVC (PersistentVolumeClaim) * + An existing custom resource that implements + data population (Alpha) In order to use custom + resource types that implement data population, + the AnyVolumeDataSource feature gate must + be enabled. If the provisioner or an external + controller can support the specified data + source, it will create a new volume based + on the contents of the specified data source.' type: object required: - kind @@ -1332,8 +1326,6 @@ spec: description: Items for all in one resources secrets, configmaps, and downward API type: object - required: - - sources properties: defaultMode: description: Mode bits used to set permissions on created diff --git a/crds/zz_defs.go b/crds/zz_defs.go index a95c6dac1..6231312ca 100644 --- a/crds/zz_defs.go +++ b/crds/zz_defs.go @@ -99,12 +99,12 @@ func operatorsCoreosCom_catalogsourcesYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "operators.coreos.com_catalogsources.yaml", size: 7987, mode: os.FileMode(420), modTime: time.Unix(1607724217, 0)} + info := bindataFileInfo{name: "operators.coreos.com_catalogsources.yaml", size: 7987, mode: os.FileMode(436), modTime: time.Unix(1607975192, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\x24\xb7\x91\x2f\xfa\xbf\x3f\x45\xc6\xd8\x7b\x48\xae\xd8\xcd\x19\xbf\xee\xee\x1c\xdf\xa3\xe0\xce\x50\x32\xaf\x66\x38\x8c\x21\x25\x1d\x87\xac\xd5\xa2\xab\xd0\xdd\x58\x56\x01\x65\x00\xd5\x9c\xf6\xd1\xf9\xee\x37\x90\x40\xbd\xba\x9b\x64\x17\x00\x9a\x1c\x19\xe9\x08\x6b\xf8\xca\xc6\x33\x33\x91\xf9\xcb\x4c\x52\xb1\xef\xa8\x54\x4c\xf0\xd7\x40\x2a\x46\x3f\x69\xca\xcd\x57\x6a\x7a\xf3\x6f\x6a\xca\xc4\xc9\xea\xd5\xaf\x6e\x18\xcf\x5f\xc3\x9b\x5a\x69\x51\x7e\xa4\x4a\xd4\x32\xa3\x6f\xe9\x9c\x71\xa6\x99\xe0\xbf\x2a\xa9\x26\x39\xd1\xe4\xf5\xaf\x00\x08\xe7\x42\x13\xf3\x6d\x65\xbe\x04\xc8\x04\xd7\x52\x14\x05\x95\x93\x05\xe5\xd3\x9b\x7a\x46\x67\x35\x2b\x72\x2a\x91\x79\xf3\xd1\xab\x97\xd3\xdf\x4f\x5f\xfd\x0a\x20\x93\x14\xff\xfc\x9a\x95\x54\x69\x52\x56\xaf\x81\xd7\x45\xf1\x2b\x00\x4e\x4a\xfa\x1a\xb2\xa2\x56\x9a\x4a\x45\xe5\x8a\x65\xd4\xfd\xbd\x9a\x8a\x8a\x4a\xa2\x85\x54\xd3\x4c\x48\x2a\xcc\x7f\xca\x5f\xa9\x8a\x66\x66\x14\x0b\x29\xea\xea\x35\xec\xfc\x1d\xcb\xb7\x19\x2c\xd1\x74\x21\x24\x6b\xbe\x9e\x80\x28\x4a\xfc\x97\x5b\x02\xfb\xe1\x57\xf6\xc3\xdd\xba\xe1\xcf\x0b\xa6\xf4\x37\x77\xff\xce\x3b\xa6\x34\xfe\x5e\x55\xd4\x92\x14\x77\x4d\x03\x7f\x45\x2d\x85\xd4\x17\xdd\xa0\x26\x90\xa9\x55\xf7\x2f\xf7\x4b\x8c\x2f\xea\x82\xc8\x3b\x38\xfd\x0a\x40\x65\xa2\xa2\xaf\x01\x19\x55\x24\xa3\xf9\xaf\x00\x9a\xcf\x31\x8c\x27\x40\xf2\x1c\x37\x90\x14\x97\x92\x71\x4d\xe5\x1b\x51\xd4\x25\x6f\x3f\x36\xa7\x2a\x93\xac\xd2\xb8\x41\xd7\x4b\x8a\x2b\x05\x62\x0e\x7a\x49\xe1\xcd\xd5\x77\xf8\x6b\x00\xff\xad\x04\xbf\x24\x7a\xf9\x1a\xa6\x66\xc1\xa7\x39\x53\x55\x41\xd6\xe6\x83\xdd\x6f\xd8\x9d\x7b\x6b\xbf\xef\xbe\xa7\xd7\x66\x74\x4a\x4b\xc6\x17\x77\x7d\x9e\x1b\xee\xc3\x1f\xb9\xea\xed\x44\xf3\x71\xdf\x0d\xbe\xb7\xcf\xc7\x35\xd3\x23\xe6\x93\x40\x2f\x89\x06\xbd\x64\x0a\x04\xa7\x20\x69\x55\x90\x8c\xaa\x3b\x06\xb0\xf1\x63\x3b\x82\x8f\xc3\x6f\xee\x18\x42\x9f\x8d\x26\xba\x56\xd3\x6a\x49\xd4\x70\xd9\x2e\x7b\xdf\xd9\x62\x61\x7f\x65\xf5\x8a\x14\xd5\x92\xbc\xb2\x27\x23\x5b\xd2\x92\xbc\x76\x7f\x21\x2a\xca\x4f\x2f\xcf\xbf\xfb\xdd\xd5\xe0\xdb\x30\x9c\xfd\xce\x33\x0b\x4c\x99\xa5\xc0\x5b\x0f\xcd\xb5\xc7\xbd\x58\x57\x14\xfe\x6b\xe7\xdf\x5c\x55\x34\xfb\xaf\x69\xfb\x21\x76\xbc\x62\xf6\xdf\x34\xd3\xed\x37\x25\xfd\x5b\xcd\x24\xcd\xbb\xb1\x4c\xa0\x11\x21\xbd\x6f\x99\x75\x6d\xbf\xac\xa4\xb9\xbc\xba\xbd\x98\x96\x7a\xb2\xab\xf7\xdd\x8d\xb9\x1d\x98\xe9\xbb\x19\xe5\x46\x68\x51\x85\xa7\xc9\x9d\x19\x9a\xbb\x15\xb3\xa7\x8c\x29\xb3\xd5\x92\x2a\xca\xad\x18\x1b\x30\x06\x3c\x1e\xdc\xcd\x68\x0a\x66\xf2\x54\x2a\x73\x65\xeb\x22\x37\xb2\x6e\x45\xa5\x06\x49\x33\xb1\xe0\xec\xef\x2d\x6f\x05\x5a\xe0\x87\x16\x44\x53\xa5\x37\x78\xe2\xdd\xe3\xa4\x80\x15\x29\x6a\x7a\x0c\x84\xe7\x50\x92\x35\x48\x6a\x3e\x05\x6a\xde\xe3\x87\xbf\xa2\xa6\xf0\x5e\x48\x0a\x8c\xcf\xc5\x6b\x58\x6a\x5d\xa9\xd7\x27\x27\x0b\xa6\x1b\x99\x9d\x89\xb2\xac\x39\xd3\xeb\x13\x14\xbf\x6c\x56\x1b\xb1\x77\x92\xd3\x15\x2d\x4e\x14\x5b\x4c\x88\xcc\x96\x4c\xd3\x4c\xd7\x92\x9e\x90\x8a\x4d\x70\xe8\x1c\xe5\xf6\xb4\xcc\x7f\x2d\xdd\x76\xab\x83\xc1\x58\xb7\xce\x9f\x25\x14\x8e\xf7\xec\x80\x11\x8c\xf6\x34\xd9\x3f\xb5\xb3\xe8\x16\xda\x7c\xcb\xac\xce\xc7\xb3\xab\x6b\x68\x3e\x1a\x37\x63\x73\xf5\x71\xdd\xbb\x3f\x54\xdd\x16\x98\x05\x63\x7c\x4e\xa5\xdd\xc4\xb9\x14\x25\xf2\xa4\x3c\xaf\x04\xe3\x1a\xbf\xc8\x0a\x46\xf9\xe6\xf2\xab\x7a\x56\x32\xad\xf0\x5c\x52\xa5\xcd\x5e\x4d\xe1\x0d\x2a\x32\x98\x51\xa8\xab\x9c\x68\x9a\x4f\xe1\x9c\xc3\x1b\x52\xd2\xe2\x0d\x51\xf4\xd1\x37\xc0\xac\xb4\x9a\x98\x85\xdd\x6f\x0b\xfa\x3a\x78\xf3\x97\x37\xee\x1f\x40\xa3\x17\xef\xd8\xaf\x3b\x6f\x36\xe4\x34\x2b\x88\xb4\xea\x1d\x34\x2d\x0a\xf8\xf0\xee\x3d\x2c\xc5\xad\x39\xdf\x8c\x2b\x4d\x50\x53\xf7\xc9\xdc\x16\xa7\x77\xad\x48\xcd\x08\x87\x92\x70\xb2\xa0\x40\xaa\x4a\xc1\x5c\x48\x20\xb0\x60\x2b\xca\x9b\x3b\x39\xdd\x67\x12\xbb\x04\x09\x58\xc1\xbe\xa5\x80\x9a\x9f\xec\x1a\xe2\x6e\xd1\x62\x87\xbe\x61\xcb\xdc\xb9\x62\xa7\xdd\x6f\xe2\x39\xe7\x50\x73\xa5\x65\x8d\xdb\x9b\xc3\x0d\x5d\xbb\x23\x5f\x92\x0a\x94\x16\xe6\x9b\xb7\x4c\x2f\xb7\xb8\x02\x90\xfe\x05\x20\x1a\xcf\xf5\x8c\x82\xa2\x1a\x66\x6b\x30\xe6\x19\x8a\x0a\x2d\x44\x81\x52\x05\xb9\xa1\xc8\x90\x54\x4b\x46\x57\x74\x17\x53\x39\x63\x5a\x12\xb9\x6e\xcf\xc9\x74\xeb\xb7\xee\x5c\x66\x64\xd0\x33\x15\xee\x5a\x2e\xb8\xfb\x74\x82\x15\xd6\xce\x46\xc9\x5b\xd3\xf1\xc1\x75\xbd\x3c\x77\xa7\xb0\x33\x37\x95\x3b\x85\x54\x01\x29\x8a\xc6\x36\x68\xed\x56\xfc\x9c\x1d\x23\xb3\x47\x2e\x07\x21\xdb\x73\x63\x16\xb4\x7f\x3c\x67\xd4\x08\x22\x49\xb8\xf9\xc1\xce\x4b\x30\x72\xd5\xee\x3e\x5a\x86\xc4\x2d\xdf\x3c\xbb\x43\xae\x44\xca\xd6\x5c\x1a\x12\xd3\xb4\xdc\xc9\xf3\xde\x15\x6c\xbf\x6d\x06\xb6\x62\x39\x35\x4b\xa9\x09\xb3\x07\xc9\xdc\x64\x32\x13\xf5\xf6\x34\x1a\x32\x2b\xdb\xfc\x69\x0e\x2b\x46\x80\x2c\x16\x92\x2e\x76\xe9\xc9\xbd\xd6\xc7\xd2\xee\x6b\xdc\xd1\xc4\xda\xef\x77\xfe\xd4\x08\xc9\x3b\x7f\xc8\x37\x85\x40\xff\x87\x43\xb3\x71\x93\xee\xdf\x3d\x4b\x24\x33\x73\x6f\x96\x56\xc8\x7b\x7e\xf5\xe1\x5d\xb5\x74\xef\xde\x5a\x1a\xee\xf0\xc6\x10\xdc\x4f\x67\xe6\x7e\x74\x02\x7b\xa7\x58\xd8\x9e\x49\x27\xa2\x67\x14\x2a\x2a\xe7\x42\x96\xe6\xd2\x70\x20\x90\x59\x4b\xb0\x15\x4f\x28\x4c\x79\x76\x3f\xe3\x3d\xf6\xdf\xd2\x43\xa7\xc0\xd2\x04\x2a\xb2\x53\x6c\x76\xb4\xcf\xb6\x59\xea\x2f\xe3\x03\xbf\x7a\xaf\x64\xdb\xe2\xdb\xe9\x9f\xa8\x7c\xcd\xd4\xa3\x32\x44\x9d\xf4\x30\xc7\xc1\x71\xfb\x48\x6e\xdf\x53\xa5\x8c\xfa\x46\x8b\x4e\x92\x5b\xa0\x3c\x13\x46\x24\xfc\x7f\x57\x1f\x2e\x2c\xd3\x6d\x41\xb9\x4d\xe7\x1a\x58\x59\x15\xb4\x34\x86\x1c\xbc\x27\x52\x2d\x49\x41\x25\xea\xb2\x6f\x79\x39\xf8\x3a\x23\x77\xdd\xd2\x3e\x19\x6b\x4d\xd1\xdc\x48\xb3\x9c\x16\x64\x6d\x07\x94\xd3\x4c\xe4\x46\xb2\x0b\x09\x95\x31\xa5\xcb\xaa\xd6\x14\x08\xfe\x74\x0f\xae\x38\x3b\xc6\x17\x0f\xcf\x69\xc4\xd2\x83\xb1\x7b\x4a\xa2\x5f\xc3\x6c\xad\x1f\xba\x9b\x9f\x26\xf9\x7e\x12\xa6\x3f\x8c\x87\xe4\x8c\xa5\x3d\xa4\x4d\x9f\xe9\x03\x73\x33\xc6\x2e\x61\x9c\xca\x4b\x21\xf5\xc3\xa2\xd0\x3c\x7c\x16\x54\xde\xf3\x7b\xcd\x22\x31\xae\x7f\xf7\xdb\x3b\x7f\x2f\xa7\x55\x21\xd6\xe6\x1c\x3d\x74\xe7\xf6\x9a\xc5\x9e\x72\x61\x3f\x5e\xfb\xc9\x82\xbd\x78\x59\x37\x56\x28\x97\xed\xc7\x9a\x07\x13\x1e\x63\x3e\xed\x23\xf3\x09\x94\xe6\xe5\x79\xe3\xd1\xf8\x48\xe7\x54\x52\x9e\x39\x79\xf6\x4d\x3d\xa3\x92\x53\x4d\x55\x3b\xbe\x07\x6e\x07\xba\x43\x50\xee\x18\x7b\x72\x53\x4d\xfe\x63\xb5\xe3\x3d\xb6\x50\xf3\x2b\xf7\x58\x44\xcd\xaf\xdc\x6f\x17\x59\xda\x5f\xcd\x3e\x74\xe0\x2c\x8d\x90\x9d\x0f\x1d\xbe\xd1\x0c\x57\xbb\x9c\x48\xde\x3c\xcd\xeb\xfa\x49\x2d\xc2\xab\xc1\x00\x06\xf6\xe0\x9c\xd1\x22\x07\x66\xcc\xb9\x81\x7f\x6d\x37\xcd\x0a\x91\xdd\x38\x8f\xe8\xc7\xb7\xa0\x84\x35\x0f\xcd\x4b\xc1\x98\x88\x99\xe0\xaa\x2e\x29\xb0\xfb\xcf\x6e\x32\x01\xe3\xf1\x4d\x26\xe0\x03\x94\x4c\xc0\xde\x30\x9e\xc2\x04\xb4\x71\x8c\xa7\x95\x7f\x1b\x43\xb8\x53\x02\xe2\xef\x25\x19\x98\x64\x60\x92\x81\x0f\x73\x4d\x32\x10\xf6\x9d\xdb\x1e\xf6\xe4\x03\x7c\xee\x17\x03\xc9\x3d\xdc\xa3\xe4\x1e\xde\xa4\xe4\x1e\xbe\x87\x92\x5e\x4c\x7a\x31\xe9\xc5\xe4\x1e\xf6\x9f\x45\x72\x0f\x27\xf7\x70\x72\x0f\x27\xf7\xb0\x27\xcf\xe4\x1e\xde\x35\xc9\x64\x02\xc6\xe0\x9b\x4c\xc0\x07\x28\x99\x80\xbd\x61\x24\xf7\x70\x72\x0f\x27\x19\x98\x64\x60\x92\x81\x0f\xfd\xee\x73\x72\x0f\xdb\x07\x44\xf3\x7e\xd8\x1f\x4b\xfd\xe2\xae\xfc\xbd\xdd\x80\xea\x37\x1f\xdf\xaa\x06\x34\xbd\x63\xa0\x61\x30\x6a\xf8\xeb\xae\x83\x7a\xde\x7e\x32\xa0\x27\x19\x53\x3c\x8c\x2c\x36\xdf\xfd\x70\xcb\x69\x8e\x69\x76\xc7\xc0\xb4\xf9\x05\x73\x2d\x58\xc6\x74\xb1\x6e\x87\x32\x7d\xb1\xc5\xf6\xb9\x03\xb4\xdf\x7c\x7c\xbb\xb7\xeb\xdd\x2c\xc4\x9d\x87\xc6\x6c\xd8\x1d\x3f\x8c\xe2\x65\x4f\x7e\xf4\xe4\x47\xef\x51\x32\x20\x92\x01\x91\x0c\x88\xa7\x31\x20\x9e\xab\x07\x3a\xf9\x8e\x93\xef\x38\xf9\x8e\x07\x94\x7c\xc7\xbb\x29\xf9\x4d\x06\x94\xcc\x9e\x64\xf6\x3c\xf4\x9b\xff\xf4\x66\x4f\xf2\x1d\xdf\x3d\xd1\x24\x03\x63\xf0\x4d\x32\xf0\x01\x4a\x32\xb0\x37\x8c\xcf\xcf\x77\x0c\xff\x40\x68\x71\x72\x6c\x26\xc7\x66\x72\x6c\xb6\x94\xb4\x5b\xd2\x6e\x0f\xfd\xe6\x3f\xbd\x76\x4b\x8e\xcd\xe4\xd8\x4c\x8e\xcd\xe4\xd8\x4c\x8e\xcd\x64\xf6\x44\xe3\x9b\xcc\x9e\x07\x28\x99\x3d\xbd\x61\x24\xc7\x66\x72\x6c\x26\x19\x98\x64\x60\x92\x81\x0f\xfd\xee\x73\x72\x6c\xde\x7b\x1f\xef\xfb\xbb\xfb\xee\xdb\x3d\x7f\xc7\xb2\xbb\x3f\x68\xf7\xea\xdd\xb9\x5a\x0f\x88\xb9\xfb\x84\xdb\x04\x66\x44\xd1\x3f\xfe\x7e\x50\x39\xbf\xff\xe3\x92\xe6\x8c\x98\x0f\xd8\xf1\xd3\x87\x84\x5d\xc7\xfa\xae\x3d\x79\x70\x5f\xdb\x8f\xf7\xe0\xe0\x4a\x75\x3f\x00\x6a\x36\x1b\x97\x9f\xdb\x5f\xbd\xd2\x92\x68\xba\x58\xf7\xca\xc3\x23\x72\xb8\xd3\x46\xfc\x9e\x06\x1e\x43\x6a\x9d\x94\xb7\x4b\x2a\x29\xb2\x71\x03\x32\xa3\xb5\x1f\xc3\x14\xbe\x07\xd8\x9c\xd1\x7c\x64\x61\xe8\xbb\x37\x75\xd2\xf2\xdf\xfa\xd1\xfd\x1b\xb6\x5d\xd3\x7d\xe7\x82\x35\x8b\xf4\xd6\x7a\xe1\xdf\xb6\xa9\xd1\x9b\xab\x56\x11\x69\xe4\xa1\xf3\xd6\xdf\xb1\x7f\xa8\xe2\x7b\x3c\x36\x76\x62\xb7\xd8\x7b\x50\xaf\xdf\xaf\xcf\x27\xbd\x7c\xee\xdd\xe3\x7a\x58\x8d\xbb\x9e\x29\x97\x54\x96\x4c\xa9\xdd\xe0\xf9\xe1\x70\xef\x17\x89\x0f\x8a\xc2\x3b\xf6\xa0\x99\x47\x6f\x20\xad\xe1\x75\x6f\x4c\xc4\x90\x9c\x91\x0c\x64\x5d\x18\x13\x8d\xe7\xe0\x8a\xab\x03\xc9\x32\x51\x73\x0d\x9c\xd2\xdc\xfa\x57\x76\x9d\xde\x07\xc5\xec\x83\x76\xd7\x3e\x56\xd7\xc4\x8e\xef\xde\xdf\x70\xe3\x3e\xb5\xc3\xde\x2a\xda\x3f\xa4\x7d\x2d\x34\xfc\xd8\x87\x74\xd3\xfe\xca\x6e\x4f\x55\x37\xd8\xe5\x4b\x51\xb0\x6c\xfd\xb1\x2e\x28\x2c\x45\x91\x2b\x6c\x16\x61\xf4\x76\x1b\x26\x69\x4d\xec\x3d\x74\x28\x81\x0a\xf9\xe1\xcc\x8e\x61\x56\x6b\xc8\x05\x55\xc0\x85\x6e\xca\x2a\xf4\x3f\x60\x1f\x8e\x18\x78\xbb\x5d\xda\xc6\x24\x86\x2d\x90\xaa\x2a\x18\xc5\xd0\x9c\x90\x70\xbb\x64\xd9\xd2\x76\x47\xaa\xc8\x83\x1e\x3d\x43\x3b\x18\xed\x6b\xf9\xec\x61\xe6\xc3\xde\xa6\x3e\x34\x1e\xb9\xd9\xc3\x4b\xbb\xbf\xcd\x0f\xb6\xc6\xd1\xd7\x52\xd4\xd5\x5e\xbf\xbc\xed\x3f\xb5\x7f\x6b\x34\x87\xde\x68\xa7\xd4\xfc\x70\x2f\xb6\xe0\xc2\x6c\x76\xdf\x2d\xb3\xd6\x31\x3c\xc5\x44\x9a\xb2\x2e\x34\xab\x0a\x64\xbc\x27\xcf\x85\x1d\x1c\x91\xb4\xd3\x6b\xc7\x40\xf8\xba\x89\xed\xb9\x06\x29\x34\x07\xb2\x30\x9f\xfb\xf0\x76\x59\x12\xbc\x9d\x26\xe5\x75\x49\x8d\x04\xca\xbb\x01\xe3\xc3\x92\xaf\xcd\x48\xef\x2d\xe5\xb4\x49\xb7\xac\x28\x8c\xdd\x4e\x8a\x42\xdc\xee\x52\xc1\xbb\x68\x8c\x81\x0b\x63\x8c\x5c\x18\x6b\xc4\x03\x70\xc1\x1b\x87\xfa\xb7\x1f\xdf\xf9\x1c\xa9\x8b\x21\x07\xd7\x63\x87\x6a\xb3\xdc\x15\x91\x9a\x91\xcd\x76\x2c\x77\x51\x2d\x0b\x65\x4f\x15\x31\x0f\x21\xd9\xb4\x34\x5a\x92\x15\xaa\x14\xaa\x6c\x5f\x1c\xf8\xd7\x7d\xa4\x15\x60\xcf\x91\x76\x6b\xac\xbc\x12\xbc\x58\x03\xb1\xa7\x75\x5e\x17\xc5\x31\xcc\x19\x27\x46\x25\xd1\x7d\xb7\xdc\xe5\x82\x99\xd7\x2c\x5c\x31\x9e\x51\xb3\x86\x93\xd6\x58\xc3\x35\x30\x9f\xcb\xc5\xbe\x67\xb3\x15\x6f\xf9\xb1\x6b\x1c\x64\x7d\x1d\xca\x0d\xd7\x08\xb2\x8c\xcc\x0a\x6a\x1e\x5d\x7b\xf2\x74\x46\xe6\x47\x51\x60\x40\xc4\x85\x4a\x72\xdb\x93\x88\xf4\x7f\xfc\x1f\x8c\xef\xf7\x3c\xb4\xf4\x11\x95\x7d\x46\x38\x50\xa6\x97\xe6\x7d\x5b\x55\xc5\xda\x88\x6b\x73\x77\xba\x0b\x75\xa8\xea\xec\x7e\x4f\x47\x47\x44\xc1\x8b\x4a\xe4\xea\x85\x11\xf9\x2f\x14\xcd\x24\xd5\xea\xc5\x91\xf9\x6a\x73\x6d\xf7\xe4\x68\x76\xc7\x8d\x01\xb9\x9f\x90\x8a\xbd\x38\x3a\x06\x3c\x04\xd8\x54\x49\xe8\xe5\xe7\x77\x5b\x9b\x95\xe8\x75\xe6\x7b\x88\x86\xde\x8f\xfe\xdf\xbb\x2e\x41\xa2\xb2\x4d\x75\x8c\xae\x7d\xf0\x29\xdf\x50\xc1\x14\x5e\x70\x3c\xba\x4d\x9b\xba\x6d\xc5\x0b\x70\xba\x8f\x19\x60\x88\x96\x95\x5e\xa3\xdc\x28\x29\xe1\x8e\x27\x5d\x51\xb9\xd6\x4b\xc6\x17\x38\xd8\xcf\x55\xc8\xee\x15\x30\xed\x68\xe7\x96\x39\xc1\xda\x2c\x7c\xcb\x72\x6f\x65\xcd\xd4\x8e\xed\x69\xb8\x9f\x16\x45\xef\xf1\xb5\xef\xb5\xc5\x3f\x6a\x54\xfe\x67\xb7\x2b\x68\x9b\x79\xec\xc8\x77\xe6\xef\x86\xbb\x61\xbf\x65\x55\x97\x11\x87\xfb\x0e\x58\xc0\xe9\xbb\x77\xb6\xed\x9c\x5b\xc7\x6f\x18\xcf\xed\x5b\xea\x54\xdb\x9e\x6d\xf4\x23\x35\x53\x42\xf3\x67\xdf\x9d\x69\x8a\x9c\xe5\x56\x5b\xb9\xad\x9f\x02\x0e\xd4\x7b\xaf\xb1\x13\xdc\xe7\xb4\xcf\xdb\xcf\xba\xfd\x9e\x63\xf7\xb2\xee\xbd\xfc\x9f\xf6\xc1\x8e\xdd\xf0\x06\xf6\xb7\x91\xc6\xc7\x0f\x07\x88\xcd\xe9\x2a\xc8\x8c\x16\xb6\xf1\x9d\xf9\xcb\x6e\x52\x70\xfa\xee\x7d\xdb\x4b\x52\x52\x72\xaf\x4a\x88\xfa\x4c\x7f\x00\xe0\x30\x79\x68\x62\xfb\xbe\xa2\x70\xea\x63\x82\x2b\x70\x45\xb5\xbd\xef\x25\xa9\xcc\x75\xb7\x1c\x6c\xa4\x60\x18\x07\x78\xf0\x04\xbf\xc3\x75\x7f\xe8\x12\x8d\x78\x8f\xee\xdb\x15\x6f\xd7\x07\xec\x71\x85\xf6\xc1\x6c\xec\x7f\x1f\xef\xf4\x0f\x76\x34\x58\xf8\x8d\xc3\xee\xde\xac\xee\x65\x98\x59\x37\x86\x98\x3f\x3c\x5b\x3c\xe1\xca\x16\x8a\xa0\x4b\xb2\x62\x42\x36\xaf\xc1\xee\x23\x22\x6e\xca\xbe\x2e\x82\x09\x28\x5a\xd0\x4c\x3f\x68\xd6\x4f\x40\xd3\xb2\x2a\xee\xbf\x8d\x30\xd2\x95\x50\x32\xfe\x91\x92\x7c\x7d\x45\x33\xc1\xf3\xbd\xc4\xef\x60\x77\xde\x33\xce\xca\xba\x04\x5e\x97\x33\x8a\x0b\xaa\x2c\x27\x14\x2b\xe8\xba\xd9\x4b\xa2\x13\xe0\xf4\xb6\x58\x3b\x71\x93\x43\x25\xf2\x46\x02\xcd\x28\x48\x33\x44\xec\x54\x29\x6a\x6d\x1e\xe9\x7b\xf1\x14\x73\x60\x5a\x75\xd5\x3e\x21\x93\x44\x19\x43\xf2\x18\x07\xc7\xb4\x51\xbe\x33\x8a\x71\x60\x96\x53\xb9\xb3\xc0\xc8\x8e\xa1\xae\x08\x2b\xcc\x53\x6c\x0a\x6f\xe9\x9c\xd4\x05\xb6\x6a\x85\x97\x70\x68\x06\xdd\x78\x03\x7c\x99\x9a\xa7\x8a\x12\x82\x9b\xff\xda\xfa\x22\x38\xf9\xa3\x7d\xdc\x5e\x78\x38\x1f\xae\x56\xda\xd0\x7e\x55\x4b\x1b\xaa\x48\xad\xf6\x71\x78\x6d\x1c\x90\x73\x9e\x9b\x5b\xda\x7f\x21\xf4\x14\x0d\x53\x8e\xef\x3e\x26\x85\x9d\xdf\x4c\x88\x82\xee\x11\x4b\xad\xa4\x58\x48\xaa\xd4\x5b\x4a\xf2\x82\x71\xea\x7b\xc2\xaf\x97\x14\x4a\xf2\x09\x4f\xb9\x66\x25\x35\xe6\x54\xff\x8c\x93\xde\x7c\xf6\xb3\x8b\x04\x94\xe4\x86\xb6\x03\x84\x19\x9d\x63\x13\x5f\x5c\x8e\xee\xdc\xd8\xd3\xb9\x17\xcb\x39\x61\x05\xcd\xa7\x38\xd6\xde\xea\x76\x3d\xef\xed\xb1\x34\x5f\x33\x5e\xef\xc7\x53\x0b\x33\x42\x74\xb8\x58\xf6\x7d\xab\x07\xed\x07\x62\x18\x5a\xcd\xb3\x17\x47\x73\x7f\x81\xc0\xe5\xc6\xc6\x9c\x7d\xca\x6c\x88\x40\x52\xa2\x04\x6f\x6e\xd0\x5e\x2c\x55\x2d\xe7\x24\x6b\x6c\xdc\xc1\xe4\x5d\x23\x73\xb8\x10\xda\xb5\xb0\x6d\x16\x7c\xcf\xc1\x16\x05\xb8\xd6\xcb\x54\x69\x56\xa2\x58\xca\x6b\xd9\x34\x89\xc6\xb3\x30\x7a\xf3\xbb\x03\x3f\x10\x1e\x7f\x7c\xf9\x72\x2f\xab\xfa\x71\xaf\xb8\xa4\xe8\x65\x1a\x7f\x47\x2e\x5a\xe9\xdf\xa8\xd8\x4a\xe4\xca\x9c\x47\xe6\x5e\x49\xd8\xfb\x7a\xaf\x21\xe3\xc9\xcb\x99\xd2\x8c\x2f\x6a\xa6\x96\x30\xa3\xfa\x96\x52\x0e\xf4\x93\xad\xb3\x04\x7f\xa7\x52\xe0\x01\x34\xdb\x73\x4f\xe8\x73\x17\xf5\x17\xfd\xd5\x73\x58\xf1\x15\x53\x4c\xf0\x3f\x33\xa5\x85\x5c\xbf\x63\x25\xbb\xb7\x20\x75\x43\x5b\x12\xaa\xd3\xbf\xa2\xc8\xb1\xe3\x3f\xcb\xc8\x15\xb5\x13\x95\xd4\x28\xc0\x7d\xd7\x1e\x5d\x2c\x60\xe4\xc6\x8c\x64\x37\x3b\x36\x71\x63\x83\xf6\xe2\xbb\xef\x26\xb6\x1b\xb4\xef\x68\x5f\xbd\x7c\xfa\x5d\x6c\x0c\xb8\xd1\x3b\x87\x2f\x81\xf6\xcf\x51\x9d\xd8\x8b\x73\xf6\xc9\xae\x6f\x7f\x27\xf7\x13\x5b\x4b\xa1\x28\x32\xb1\x01\x14\x64\xdd\x84\x5f\x99\x6a\xcd\x13\x23\xc1\x04\xdf\xd3\x75\x44\xe6\xf3\x21\x97\x4e\xe8\xe1\xdb\xa7\xac\x95\x86\x92\xe8\x6c\xf9\x60\xb0\xb8\x21\x63\x2a\x35\xe6\xec\x81\x72\x4f\xd1\xfd\x77\x72\xcf\x30\xdd\xd8\xb0\x1a\xd8\x59\x9c\x7d\xaa\x8c\x9e\xb8\x3f\x1e\x3f\xa4\xc1\xb6\x6e\x32\x19\x3a\x8a\x70\xae\x7b\xb2\xed\xce\x56\xf3\x9e\x40\xf5\x6b\x35\x7d\xff\x3b\x66\xb7\xf7\xe6\x79\x7a\xf1\x76\x5f\x79\x39\xde\x8d\x33\xd2\x91\xb3\x19\x9c\xb4\xcb\xb3\x73\xda\x7b\x73\x84\x26\x00\xe5\x78\x0c\xa3\x94\xf8\x66\x57\xc7\x40\xe0\x86\xae\x8f\x47\x30\x45\x9b\xa7\x57\x60\x10\xd9\x4a\x5a\x38\xeb\x96\x62\x7f\x7d\xf2\x40\x12\xc7\x90\xec\x58\xf6\xdd\x8a\xd1\xa7\xdf\xd2\xfe\xc1\xea\x86\x26\x66\x2a\x23\x7e\xbb\x59\x92\xbd\xff\x64\xec\xb5\xb4\x74\x43\xd7\x63\x7e\x7d\xe3\x68\x99\xdd\x71\xde\x03\x7b\xc6\xcc\x37\xcc\x1e\x8e\x62\x69\x3d\x09\xed\xd1\x1a\x83\x30\x18\x30\x19\xe7\xa7\x6e\xa8\x59\xe8\x80\x65\x68\x8f\x6f\x0f\x68\x85\x57\xe1\x60\x5f\x3f\x70\x43\x78\xf4\x8d\x7c\x5b\xb2\x0a\x0d\x87\x26\xe4\xeb\x4e\x35\x7c\x47\x0a\x36\xe6\x36\xf4\x67\x68\xf5\xd7\x39\x3f\x36\x06\xbc\xf9\x0f\xaa\x44\x35\xf2\x7e\x19\x7a\x2b\xa8\xba\x10\x1a\xff\xfe\x1f\xb2\x49\x76\xfa\x01\x5b\x64\x19\xb8\xd8\x1c\x4a\x5e\x74\xac\x8c\x1d\x47\x37\x96\x69\x53\xd3\xb4\xdd\x7c\xa6\xe0\x9c\x83\x90\x6e\x75\x3d\xae\x80\x1b\xa4\x1d\x1e\x5a\x00\x33\x1b\x06\xc7\x28\xde\xb8\x85\x86\x5d\xe3\x73\x1b\x2e\xe4\x60\x07\xa3\x0d\xd5\x0e\x13\xad\xdb\x91\x2c\x2d\x1f\xf4\xcc\x54\x05\xbe\x3e\xdd\xb3\x90\x34\xb0\x36\xf6\x50\x76\xd6\x26\x95\x54\x2e\x10\x4f\x90\xed\x19\x91\x6e\xa7\x37\x5a\x3b\x5b\x1a\xa9\xa3\xfb\x1f\x36\xe2\x1c\xa2\x21\x64\xdd\xdd\xfe\x86\x94\xfd\xfb\x81\xf3\xfd\xff\x18\xcd\x8d\xbb\xfa\x7f\xf7\x57\x39\x84\x49\x35\x85\x53\x50\x8c\x2f\x0a\xda\xe7\xd1\x78\x0f\x7a\x1f\xb7\x37\x5b\x33\x22\xa6\xc0\xa8\xd8\x15\x29\x28\x47\xa7\x22\xe1\x40\x6d\x34\xc0\x8c\x76\xd3\x1c\xdc\xff\x08\x5b\x6b\xde\xe8\xa9\x16\x0e\xf2\xe2\x86\xae\x5f\x1c\x6f\x5e\x96\xbd\x39\xbe\x38\xe7\x2f\x8e\xd1\x92\xd9\xba\x18\xad\x81\x84\x88\x93\x17\xf8\xb3\x17\xfb\x9f\xc6\x5d\x16\xa9\x8f\xa5\x39\xca\xb8\xf1\x8b\x7c\x0c\x3f\x70\xcf\xf3\xdc\x20\x56\xbd\x9e\xe7\x03\xbf\x94\xc3\x6d\x6b\x01\xb5\xa2\xf6\x7d\x8e\x72\x64\xaf\x71\xd3\xe6\x65\x88\x6f\x3c\x74\xa9\x71\x7a\x8b\x6f\xb9\x67\xf0\x7c\x92\xa2\x28\x18\x5f\x7c\x5b\xe5\x44\xef\x91\x96\x63\x69\xb0\x5a\x07\x1f\x2d\x0b\xa8\x91\x87\x39\x95\x73\xb6\x80\x8a\x48\x52\x8e\x30\x94\x2f\x5d\xd5\x6e\x3c\xcb\x6c\xde\x8f\x22\xb9\xf5\xbf\x5e\x57\x14\xfe\x5f\xf8\xd8\x1f\xf1\xfe\xfc\x27\x93\x09\x5c\x7f\x78\xfb\xe1\x35\xd8\xbf\xb4\xef\x62\x2d\x60\x2e\xd0\x7d\x22\x6a\x69\x86\xbe\xa2\x7c\x6f\xf7\x28\x58\xbf\x83\xd9\xca\x0f\xf3\x63\xb8\x5d\x12\x4d\x57\x54\xc2\xad\x39\x3e\x19\xcb\x69\x1b\xb1\x98\x1e\x3c\xde\x8d\xf2\xb1\xcc\x4b\xf2\xe9\xaa\x96\x8b\xbd\x37\x1c\xb6\x36\xbd\xef\x64\xef\x5c\x59\xe6\x88\x8f\xd3\x86\xbd\xaa\x2f\x2a\x5b\xd2\xbc\x2e\x68\x0e\x64\x26\x56\xb4\x1f\x00\x1c\xc5\x73\x38\x1c\x34\x6a\x6b\xda\x7c\x88\xb1\xcf\x66\x4a\x14\xf5\xde\xa8\xa9\x01\xd3\x43\xfa\xe9\x35\xfc\x01\x41\x6e\x04\x2a\x2a\x33\xca\x35\x59\xd0\x9e\x23\x75\x14\x57\x14\x09\xc8\xf3\xd5\xcb\x7f\x39\x72\x9e\x3b\x33\x52\xe7\xc7\x7e\x69\x6e\xc2\x7b\xf2\xe9\x5b\xde\x86\x9b\xc6\x19\x0d\x0a\x5e\x4e\xe1\xd4\x4d\xb8\x99\x04\x7e\x46\x91\xd5\x05\x7a\xc8\xe7\x52\x94\xe3\x06\xdd\x4d\x7b\xb6\x06\x29\x6a\x84\x22\x42\x5d\x0d\x3c\xe4\xa3\x58\xfe\xf6\x0f\xff\x32\x85\xb3\x4f\xa4\xac\x0a\xfa\x1a\x6e\x97\xd4\x01\x60\x98\xc2\x17\x8a\x16\xf0\xbb\x97\xff\x32\xce\x90\x44\x68\x05\xbd\xed\xf9\xe3\xba\x73\x46\xcc\x21\xab\x2b\x60\xa5\x4d\x34\xa2\x7b\x83\x7f\x2c\xb9\x01\xd2\x46\x7a\x36\xa2\x4f\x69\x22\xb5\x3a\x06\x44\x30\x8e\x7e\xa8\x62\x8c\x42\x68\x52\x6c\xf8\x86\xd1\xe7\x4a\x6f\xed\x61\xc9\xc7\x2d\xac\x39\x47\x14\xc3\x35\xf0\xea\x77\x2f\xff\x65\xdb\xe1\xff\xe1\xa1\x3a\x4a\x9b\x64\x46\x84\x23\x41\x80\xef\x8c\x52\x0e\x37\xac\x28\x68\x7e\xbc\xb1\xdc\xa3\xb8\x6e\x6d\xcd\xbc\x96\x7a\x49\xe5\x31\x50\xae\x9a\x10\xce\xd8\xf5\xdc\x58\x4b\x1c\xb5\xac\x39\x47\xcb\x1f\xa3\xd2\x18\x13\x1a\xf7\xec\xeb\xe2\x49\x6e\xd3\x8d\x99\xab\xa1\x14\x4a\x6f\x2e\xf1\x68\x51\xb0\xb7\x9a\x00\x74\x6e\xad\x3f\xcc\xc7\x08\xf0\xc9\x68\xa7\xfa\xe6\x5f\x8e\x7e\xd0\x7e\x9a\xdc\xb4\x15\x5e\x26\x8c\xeb\x89\x90\x13\xcb\xe4\x35\x68\xb9\x67\x5c\x13\xac\xc2\xea\xc9\xc0\x67\xa5\xb6\xea\x6e\x5c\xdb\xa7\x63\xdc\xdb\xf0\x2e\x4d\xb5\xa1\x7d\xc6\xdd\xd7\x3b\x35\xd5\xa6\xf6\x19\xc5\xf6\x61\x9d\xd2\xfb\xd0\x51\x9c\xfb\x3a\x25\x17\xb7\x7c\xb7\x56\x1c\xc5\xf2\xbd\x33\x77\x9c\x3e\xec\x87\x14\x07\x9a\xc7\x47\x09\x6c\x69\x29\xfb\xd2\x1b\xc4\xf4\x02\x44\xa1\x59\x01\xc3\xf9\xff\xd9\x16\xde\xe3\x2c\x81\x4e\xd5\x3d\xa0\xbe\xc6\x9d\x83\x0f\x98\x4b\xd1\x68\x27\xf3\x82\x44\xf4\xcb\x71\xe4\x15\x68\xd5\x81\xb5\xd6\x31\xb2\x35\x8a\xa7\x61\x66\xa7\xba\xc3\x32\xe8\xb4\xcc\x78\x29\xb0\x4b\x6b\xdb\xb5\xf0\xb2\xd8\x8c\x5e\x2a\x0a\xd4\x4b\xea\x4e\x65\x53\x50\xb2\x77\x0e\x95\xa5\x1d\xc7\x27\x29\x9b\x5d\x74\x5f\xd2\xf9\x26\x0d\x9d\x06\xe6\x75\x8a\x4b\xdc\x45\x5a\xdf\xd8\x83\xfc\xe2\x23\xb5\x28\xb9\xed\x26\x53\x77\x91\x90\xf0\x62\xf0\xd0\x7d\xd1\x8a\x2d\x73\x06\xbc\xde\xc0\xa3\x96\xb5\x09\xf5\x8e\x77\x9e\xb8\x3f\xec\xd5\x81\xc1\xcc\x2b\x73\x25\xf0\xc2\xdc\xb2\x62\xbf\x60\xea\x8c\x36\xe0\xc2\x67\xe0\x27\x29\xa9\x26\xf7\x95\x34\xd8\xa4\xa1\xd9\x71\xa5\x09\xcf\x89\xcc\xdd\xf8\x0e\x0e\x54\xcb\x70\x0a\xef\xc5\x88\x48\x30\xe3\x73\xf1\x1a\x96\x5a\x57\xea\xf5\xc9\xc9\x82\xe9\xe9\xcd\xbf\xa9\x29\x13\x27\x99\x28\xcb\x9a\x33\xbd\x3e\x41\x10\x19\x9b\xd5\x5a\x48\x75\x92\xd3\x15\x2d\x4e\x14\x5b\x4c\x88\xcc\x96\x4c\xd3\x4c\xd7\x92\x9e\x90\x8a\x4d\x3a\x6f\x87\x9a\x96\xf9\xaf\x9b\x01\x3d\xa2\xab\x62\x70\x43\x31\x96\x25\x57\x74\x52\xf3\x1b\x2e\x6e\xf9\x04\x3d\xa6\x6a\xc4\x5d\xdd\x07\x99\xdc\xd0\xc6\x7e\x6c\x80\x91\x77\x82\x8d\xf7\xbf\xac\xf3\xe6\x88\xdb\xcd\x7c\xc4\x4d\x32\x53\x9e\x10\x9e\x4f\x2c\x58\xee\x11\xf7\x6a\x6c\x0c\x7a\xd2\xc1\x76\xf7\xb5\x4c\x7c\x3c\x57\x24\xd3\x6c\x45\x3d\x20\xa2\x0d\x0d\x0e\xc2\x87\x26\x8d\x2e\xaf\xa5\x3d\x0b\x1d\x56\x74\xf4\xdb\xbd\x12\x39\x94\x64\x8d\xb6\x3b\x8e\x12\x84\x35\xb3\xb8\xc8\xa9\x8b\xbd\x3e\x58\x0d\x79\x83\xad\x80\x2b\x63\x94\x5d\xb3\x92\x36\xa8\x53\x8c\x66\xaf\x95\xa6\xa5\xc5\x06\xd9\xcf\x1a\xe9\xc1\xd0\x72\x6d\x61\xad\xf2\x06\x98\x6e\xf0\xa2\x84\xe7\xf8\x98\x07\xa2\x94\xc8\x8c\xb5\x38\xee\x0d\xdb\x9d\x80\xc6\xeb\xd6\xc4\xee\x08\x54\x42\x31\x5c\x14\x67\x11\x8c\x31\x33\x7d\x4d\x89\x1e\x28\xec\x8f\xbf\xdf\xff\x88\xcd\xb1\xc1\xe5\x28\xe4\xc2\x10\x41\x3d\xef\xe7\xc1\xbb\xa3\x71\xa0\x1a\x07\xe7\x58\x33\x33\x13\x5c\x69\x49\xd8\xfe\x79\x5f\xe0\x0b\x3c\xf1\xc5\x79\x00\x9e\xf1\x53\x8f\x85\x83\xed\xec\x91\xc6\x6c\xc0\x6b\xd3\x6c\xc6\x48\x96\xd0\x5b\x6c\x57\xea\xa4\xc9\x9a\x32\x62\xda\x2b\x8c\x3a\x7a\x2d\x21\x60\x3d\xed\xdf\xd2\x39\x95\x92\xe6\x6f\xf1\x1d\x70\xd5\xce\xe8\x7c\xc1\x45\xfb\xed\xb3\x4f\x34\xab\xf7\xab\x27\xb7\x4d\x5b\x71\xaf\xc6\x09\x2f\xf7\xb7\xd3\x76\x0f\xdb\x88\x97\x86\x99\xb3\xfe\x04\x6e\xe9\xd8\xe0\xbd\x25\x34\x1d\x15\xd1\x4c\xcd\x6d\x5d\x9a\xe6\x60\x00\xed\xe2\xb4\x5e\x9c\xdb\xab\xda\x82\x25\xd1\x10\xb1\xa5\x07\x1e\xa8\x34\x78\x17\x19\x35\x90\x2d\x85\x50\x46\xf2\xe1\x39\xc6\xf1\xaf\x98\x40\xec\x99\x17\x4f\x2c\x86\x21\xa1\x34\x3a\xa0\x29\x8a\xd1\x4d\x7d\xec\x91\xb6\x74\xdd\x68\x27\x1c\x1e\x53\xd6\x8d\xd9\x9e\x3b\x2f\x9e\x0e\xb1\x65\x86\x8b\xc1\x4e\xf3\xc5\x02\xed\x78\xa5\x41\xd5\xe3\x62\x0d\x0d\x89\x39\xdc\x52\xb6\x58\x6a\x75\x0c\x6c\x4a\xa7\x78\x9b\x29\xc9\x96\x38\x7c\xff\x13\x55\x52\xaa\x07\xdd\x8b\x3d\x65\x74\x43\x83\x78\xfa\x61\x5b\x03\xc1\x15\x40\x19\x0b\x85\x19\xf0\xdc\x92\x02\xfe\xb2\x11\x30\x2c\xdd\xc1\x1b\x80\xea\x6c\x7a\x74\x0c\x6d\x99\x42\xbf\x8b\x54\x97\xe6\x0a\x31\x4d\x8d\x2d\x85\x7e\x0b\x29\xea\x85\x3d\x01\x74\xdf\x5c\xcb\x5d\x84\x7b\xd3\x96\xd8\x40\x54\x67\x8e\xfe\xc1\x17\xf6\x50\xec\xff\xae\xee\x93\xb6\x05\x8c\xcc\xb0\xd9\xbc\x33\xd4\x10\xfc\xe1\x2d\xa5\x28\x64\x42\x4a\xaa\x2a\x61\x3d\x98\x9b\x50\x92\xff\xe9\xcd\xd7\x0c\xee\x50\x1d\x75\x97\x6a\xc9\x16\xcb\x90\x3b\x45\x9c\x31\x39\xbc\xf3\x3e\x82\xc4\x17\xd3\x64\xc9\x0b\xd9\x64\x69\x88\x44\xe6\xae\x1e\x45\x98\xfc\x1a\x98\x0e\x9a\xca\xb2\x39\x11\x46\x4c\x78\x72\xb4\xa6\x83\x43\x7f\x34\xed\xc7\x9d\x44\xf3\x64\xf9\x12\x0e\x51\x10\x32\x7d\xa0\x50\xc9\x4c\x44\x75\x34\x85\x53\xe0\xb5\xf7\x30\xdb\x85\xbb\x6b\x09\x3c\xf9\x72\xd1\xae\x80\x1b\xb4\x59\x4c\x25\xba\x71\xfb\xdd\x0a\x7f\xb3\xcc\xd2\x78\x9c\x75\x9f\x26\x6e\xbd\xe8\xd8\x10\x6a\xc7\x20\xe0\x04\x84\x18\x96\x0d\x87\x66\xf4\xbe\x1c\xb6\x52\x01\x50\x80\xee\x99\x1d\x7d\x1f\x99\x33\x77\xdc\x7b\x85\xb6\x42\x2f\x80\xe7\x50\x2e\xdb\x95\xf7\x3b\x77\x10\xe3\xec\x41\x94\x3d\x84\x80\x0c\x98\xdd\xb4\x99\xdc\x61\x73\x60\x82\x58\xc2\xf0\x5c\x0c\x8c\xa4\x40\xc6\xb3\x35\xf2\x1e\x95\x90\x74\x37\x85\xe9\xb1\x8e\x02\x34\x5a\x47\x3b\xae\x56\x20\xc7\xdd\xb9\x49\xc1\x4c\xb7\x53\x77\x82\x59\x6e\xa7\xfe\x04\xb3\xbc\xa1\xeb\xe3\xcd\x84\xa0\x60\xa6\xbb\x12\x8a\x82\x99\x9a\x41\x8e\x4d\x33\xba\x63\x78\x31\x84\x94\xa5\x30\x55\xd9\xd1\xb8\x44\xa5\xbb\x78\x44\xda\xc0\x38\xf2\xd7\xd2\xe8\x54\xa7\xdd\xb4\xe9\x90\x89\xc0\x12\xc2\xb2\xa7\x76\xd3\xae\x9c\xaa\x38\x8c\x47\xe6\x65\xdd\xc1\xc5\x2f\x84\xbc\x9b\xfc\x72\xb8\x76\xd3\x46\x99\xb8\x91\x05\xbd\xee\x27\x97\x14\x36\x48\xf3\x8a\xb4\x27\x5b\xa9\x62\x51\xf8\x62\xba\x59\x97\x40\x16\x67\x11\x06\x49\x68\x51\x58\xda\xbc\xa6\xe3\x80\xbc\xb4\xbb\xe8\x6b\x6d\x75\xd2\xbb\x28\xfc\xa2\x1e\x7a\x9f\x9c\xb8\xdd\xb4\xf1\x48\x8f\xb4\xcb\x21\x39\x76\xbb\x69\x98\x79\x17\x85\xe5\x30\x7b\x2f\x0e\xcb\x26\x03\x30\xda\x20\xb7\x92\xed\xa2\x70\x0d\xc9\x2d\xdc\x4d\x1b\x19\x87\x51\x78\x46\xcb\x5a\xdc\x4d\x9b\x29\x5b\x51\x98\x0e\xf3\x21\x9f\xf3\xd2\x7e\xad\xcd\xb2\xbe\xd3\xcf\xfd\xac\xda\x5a\xd5\x2e\xcf\x30\x0a\x47\xe7\xee\x3e\x1e\x51\x50\xed\x21\x6a\x0a\x81\x60\x45\x97\x4a\xd2\xb1\xc1\xf9\xbb\x88\x60\xd2\xb2\x47\x54\xfe\x6e\x42\xc0\x6e\x93\x74\x1b\x85\xe3\x46\xe2\x6e\x24\x73\xa9\x4d\xfe\xb5\xe9\xbc\x51\xb8\x7a\xa4\x04\xef\xa6\x58\xce\x08\x4b\x51\x5c\x12\xfd\x81\x05\x2b\x5e\x74\x5b\x7d\x65\x31\x5f\xff\x94\x1e\x2b\x8b\x77\x4b\x1e\xab\x7b\x29\x79\xac\x92\xc7\xca\x8f\x92\xc7\xea\x01\x4a\x1e\xab\xe4\xb1\xda\x83\x92\xc7\xaa\x47\xc9\x63\x95\x3c\x56\x7e\x94\x3c\x56\xcf\xdd\x0b\x90\x3c\x56\xc9\x63\x95\x3c\x56\xc9\x63\x95\x3c\x56\x9e\xf4\x4b\xf6\x58\x59\xbc\x58\x24\xa0\xdc\xf7\xc8\xcc\x37\xcb\x6a\x63\x60\x4c\x2f\xad\x2f\xad\x49\x15\x1f\x00\xdd\x02\x38\x73\x91\xd3\x2b\xf7\x60\xba\x46\x40\x9e\xad\xba\x17\xc0\x52\x12\xbe\xa0\xf0\x6a\xf2\xea\xe5\x5e\x45\xc0\x77\x93\x6f\x36\xd8\x90\xc6\x15\x0c\xdf\xa4\xbb\x30\xf9\x8f\x94\x99\xe3\xb4\x5d\x9b\xf3\x12\xec\x8f\xbc\x23\xe9\x65\x64\x0f\xcc\x21\x95\x54\x03\xd1\x03\xe8\x30\x2b\x69\x9b\x00\xe7\xc5\xb3\xdf\xd4\xa1\xab\x0f\x26\xb8\xc5\xee\x7b\xb1\x34\xc7\x7a\xfa\x8f\x5b\xd1\x8c\x12\xe5\x99\xa0\x82\xbd\x6e\x9a\x55\x15\x25\xb5\xe5\xfc\x43\x14\x4a\x25\x72\xa0\xcd\xa9\x84\x43\x3a\x5d\x4c\x21\xaf\xa9\xad\x80\xe9\xc5\xd1\xd6\xa5\x38\x3a\xee\xa7\xa5\x96\xe6\xa1\x23\xcd\x7f\x3c\x37\x48\x37\xf9\xa9\x74\x45\xb9\xae\x49\x51\xac\x81\xae\x58\xa6\xbd\x37\xdd\x4c\x1c\x8b\xd2\x30\x6d\x13\x0b\xfd\xd3\x1c\xbc\x9d\x93\x21\x0e\xc9\xc9\x96\x34\xf6\x39\xa5\xa1\xde\xc3\xad\x31\xf8\xea\xc3\x0d\x9f\x92\x5d\x97\xa9\x0b\xde\x78\x8b\x74\x31\xdf\x08\xdb\x68\x33\xc6\x69\x90\x53\x12\x59\xa0\x58\xfc\xf0\xd1\x2f\x39\x06\xa2\x58\x46\x81\xd6\xd0\x66\x68\xa6\x2e\x0a\x73\x45\xf1\x41\x16\x68\x22\x0c\x97\x3b\x30\x53\x04\x06\xd9\x22\xdb\x5d\x13\x02\xd8\xda\x04\xbf\xb2\x57\xe5\x16\xb9\x5f\x8b\x4a\x14\x62\xb1\xee\x9f\xeb\x80\x4f\x31\x3b\xdd\x6b\x2d\x68\x4c\xf6\x7a\xa6\x46\x16\x40\xda\x35\x70\xb8\xd8\xb8\x7c\x29\x77\x61\x8b\x3e\xd7\x48\x70\xca\x5d\xd8\x83\x52\x24\x38\x45\x82\xfd\x28\x45\x82\x1f\xa0\x14\x09\x4e\x91\xe0\x3d\x28\x45\x82\x7b\x94\x22\xc1\x29\x12\xec\x47\x29\x12\xfc\xdc\xa3\x6b\x29\x12\x9c\x22\xc1\x29\x12\x9c\x22\xc1\x29\x12\xec\x49\xbf\xe4\x48\x30\xa4\xdc\x85\x94\xbb\xb0\x17\x25\x8f\x55\xf2\x58\xf9\x51\xf2\x58\x3d\x40\xc9\x63\x95\x3c\x56\x7b\x50\xf2\x58\xf5\x28\x79\xac\x92\xc7\xca\x8f\x92\xc7\xea\xb9\x7b\x01\x92\xc7\x2a\x79\xac\x92\xc7\x2a\x79\xac\x92\xc7\xca\x93\x7e\x79\x1e\xab\x4a\xe4\x91\x1b\x72\x54\x22\x8f\xd8\x8f\xc3\xa2\x8f\x33\x31\x29\x44\xd6\xf4\xe3\x1e\xcd\xd5\x0c\xc9\x66\x25\x80\x22\xa5\x2d\x92\x7e\x0c\x7f\x17\x9c\xda\xa2\xf6\x40\xc6\xf3\x44\xa8\xb5\xd0\x4b\x2a\x0d\xfb\x43\x75\x34\xba\x3c\x75\xea\x17\x32\x7e\xd8\xa9\x5f\x48\xea\x17\x92\xfa\x85\xa4\x7e\x21\x9f\x5d\xbf\x90\x25\x51\xe3\xdb\xf1\x36\x84\x06\x6b\xdb\x60\x22\x4e\xf6\x5e\x4f\xf1\x5f\x53\x59\xfe\xcf\xad\xee\x21\x9e\xc7\x7f\xd0\x71\xe4\x17\xd7\x3d\xc4\x88\x36\x27\x32\xcc\xf9\x09\xe8\xf5\x61\xcf\x86\xdd\xd3\xdc\xe5\x7a\xd2\xfc\x72\xb8\x2b\x9e\xcc\x6d\xdc\x0d\x17\x9f\xe4\x39\xcd\xa1\xa2\x72\x62\x25\xb2\xf0\x66\xc9\xf3\x1d\x3b\xd9\x9c\x18\xbf\xc3\xf2\xe4\x9d\x39\x22\xac\xf6\x53\xb7\xe7\x18\x4e\x21\x52\xee\x4f\x3f\xd9\xca\x37\x29\xd3\x52\x6b\x50\x6d\x36\xeb\x08\xe0\xd9\x1a\x00\xcf\xb0\x59\x47\x78\x4c\x6e\x02\xda\x25\x1b\x7d\x13\x10\x95\x8b\x13\x46\xc3\x20\x55\x93\x4e\x14\x17\xc3\x80\xe1\xaf\xbf\xd5\x54\x86\xbe\xa4\xc5\x8a\xca\x2e\x14\xd2\x18\x47\x2a\xd4\x59\xc8\x5c\xdb\xfe\x8c\x28\xfb\xd2\x88\x01\x63\x88\x10\xf6\x8d\x17\x1f\x8d\x9b\x55\x05\x9b\x7b\xbc\xc9\x3e\x86\xc3\x44\x01\x69\xd0\x2f\xf6\x04\x45\x60\xba\x13\x02\x13\xc3\x59\x14\x31\x2b\xb1\xa1\x2e\x2b\x31\x1c\x26\x11\xd1\x95\x15\xcd\x91\xb5\x4b\x48\x44\xf1\x8f\x3d\x0a\xc8\x06\x36\x81\x36\x91\xe2\x13\x44\xb7\x60\x9b\x88\x0e\xfa\x63\x1b\x8b\x8e\x13\x44\x89\x0d\xda\x81\x1d\xc0\x9d\x28\x4c\x6f\xe8\x3a\x22\x78\x07\xe2\x02\x78\x20\x22\x88\x07\x22\x01\x79\x20\x26\x98\x07\x22\x03\x7a\x20\x1e\xa8\x07\x36\xc5\x4d\x9c\xa5\xb3\xe4\xbc\x55\xf1\xe4\x17\xb8\xa3\x8c\x77\x24\xd6\xdd\x80\xbe\x60\x8c\x89\x17\x82\x68\x98\x21\x88\x0d\xa1\x80\xc8\xd8\x21\xd8\x3c\x46\x51\x45\x22\xd8\x30\x5b\x4c\x40\x12\x3c\x26\x28\x09\x86\xc0\xa4\x68\x3c\x1b\x18\x08\x82\x93\xa2\x71\x8d\x0b\x72\x82\xc7\x01\x3a\x41\x0b\x76\x32\x7a\x2c\x1a\xcb\xf8\xb8\xa9\x47\xb8\xa8\xf1\xf0\x4e\xb0\x79\x4d\x2d\xeb\x98\x02\x9f\xf0\x88\x78\x12\xb0\x2e\xc2\x88\x6b\x09\x03\x34\x55\xbc\xdb\x1e\x1b\xa2\x02\x76\x35\xcf\x79\x87\xaa\x8a\x3a\xd8\xc8\x1b\x1f\x19\xf5\x02\x8f\x82\xd2\x82\x47\x82\x13\x41\x1f\xad\x15\xef\xdc\x3f\x06\xea\x0b\x3e\xa7\xed\x8f\xbc\xf5\x1d\xf4\x27\xe6\xae\x37\xf0\x9f\x68\x3c\x2d\x8c\xa8\x0f\x01\x8a\xc6\x1a\xa1\x44\xf1\x60\x40\x10\x1d\x0a\x04\x71\xe1\x40\x10\x57\x1b\xa3\x2b\xef\x1d\x96\x1f\x7a\x0c\x27\xa1\xe5\x1c\xcb\x3f\x58\x92\xca\xa8\xce\xff\x73\x43\xd7\xc7\x78\xdb\xff\x6f\x8c\x47\x2c\x61\x52\x4d\xe1\x34\x1e\x1e\xb1\x37\xbe\xf0\x8a\xa9\x0d\xf5\x96\xd3\xac\x43\x9c\x25\xa5\x7f\xab\xd9\x8a\x14\x94\x6b\xff\xf0\x61\x9f\x08\x6f\xe2\xf6\x66\x9f\x36\xdd\xc4\x31\xc4\xfd\xed\x52\x28\xcc\xfb\xb2\x91\xd0\x38\xcb\xf0\xe2\x86\xae\x5f\x1c\xc7\x56\xa2\x86\xf1\x39\x7f\x61\x53\x0e\xe2\x1c\x82\x01\x1e\x37\xa2\x23\x51\xf0\x62\x0d\x2f\x90\xfb\x8b\xb0\x72\x89\x1d\x0d\x90\x2d\x44\xc6\x60\x19\xd5\x3f\x1e\xc9\xcd\x47\xf2\x9c\x19\x81\x47\x8a\xcb\xa8\xde\xb0\x48\x32\x9e\x93\x92\xaa\x8a\x64\xa1\x83\x1a\x88\xf6\x8e\x69\xe0\x44\x1b\x28\x9d\x72\x38\x98\x68\x8c\x5b\x17\xdd\x55\x5c\x27\x98\x16\x70\xd8\x80\x75\xc8\xc2\xdc\x3e\x7d\xf4\x3f\x03\x79\x0e\x6a\x71\xda\x18\x58\x49\x49\xf0\xbd\x7e\x81\x31\xce\x4a\xe4\x07\xaa\x5b\x57\x3f\xe0\x53\x43\xcf\x2a\x61\x3b\xd2\x05\xe9\x45\xe4\x23\xde\x90\x6b\xb7\xf6\xa1\xf7\x63\x29\xea\x22\x37\xef\x86\x16\x26\x1d\xca\xf2\xb0\x81\x6d\x1c\x99\x33\xc7\x85\x8e\xc9\x9a\x6b\x36\xe9\xf8\x7b\x43\xcd\x3a\x72\xa5\xc3\xd5\xa0\xc0\x7d\x20\xcf\xa1\x5c\x88\x62\xa0\x75\x90\xe0\x4e\x82\x85\x5a\x3b\xb7\x4b\x2a\xfb\xfb\x1e\x9e\xdb\x91\xd3\x39\xe3\x34\x07\xa2\x40\xd6\x9c\x9b\xd5\x14\xa1\x59\x72\x0e\xad\x6c\xcd\x32\x34\x20\xc2\x9d\xc3\xad\xf0\xb6\x70\x20\x0c\x8e\x44\xc0\xcd\x58\xea\xa0\x96\x04\x8d\x54\xc2\x43\x39\xe2\x02\x08\xee\x54\x18\xe1\xeb\x38\x2b\x60\xc3\x37\x34\xb7\xe7\x3f\x78\xf3\xdd\x8e\x4f\xe1\x0c\xd5\x4c\xbc\x05\x65\x0a\xa5\x08\x29\x0a\x71\x1b\x6a\x9d\x3d\xb7\x3e\x1d\xb7\x9f\x45\x9f\x8e\x0d\xa0\x60\x6a\xd3\xd1\x51\x6a\xd3\xb1\x4d\xa9\x4d\xc7\x67\xdd\xa6\xc3\x7b\x8f\xac\x4a\xbd\xa3\x5f\x87\x17\x47\xdb\xe3\xe3\xbe\x7e\x1d\x7e\x0b\x6a\x0f\xe2\x46\xbf\x0e\xf8\x7e\x49\x51\xae\x79\xba\x12\xcc\x95\x29\xeb\x42\xb3\xaa\xe8\xb2\x4b\xec\x32\x14\xde\x41\x0e\xd7\x71\x42\x6d\xe0\x95\xcd\x4a\x10\xcf\x44\xe4\x0d\x69\x8e\xe3\xc6\x24\x64\x85\xe6\x80\x9f\x59\x89\x29\x50\xa4\x28\x5c\x3b\x8b\x26\xa7\xdd\xe6\xc7\xb1\xcf\x39\x6d\xe3\x2d\x1a\xb5\x2a\x14\x98\x80\x46\xd6\xa1\xb1\xde\x0b\x23\x16\x8c\x35\xdb\xe8\x6a\x4f\x8e\xdb\x2e\x08\x8b\xc9\x58\x05\xa4\x6a\x60\x6a\x1c\x5b\x51\xde\xbd\x33\x0e\xd5\xd1\x51\x48\x9d\xa1\xc6\x4b\x10\xf3\xad\xf9\x08\x6f\xcc\x5d\x6f\xcb\x63\xfb\x46\xf2\xe4\x38\x78\x59\xed\x78\x1b\x79\xb2\x15\x7c\xf7\x9b\x28\xc0\x22\xdb\x78\x0b\xfd\xa9\x67\xbb\xff\x2f\x4f\x96\x3b\x5e\x41\xcd\x3b\xc6\xd7\xee\xb6\xaf\x1f\x3c\x4a\x4d\x6a\xa4\xc5\xed\x7b\xe7\xc6\xd9\x58\x64\xc0\x6e\x3c\x79\x16\x52\xe8\x2b\x2b\x1c\x60\x19\x29\xcd\xe3\x51\x52\x3c\x1e\x21\xbd\x23\x62\x6a\xc7\x3f\x47\x93\x9c\xc8\xa9\x1c\xdb\x69\x1c\xb1\x10\xf4\x83\x14\x8e\xd8\x09\x18\x91\x92\x2f\x9e\x95\x7f\xfc\x51\x12\x2e\x52\x45\xd3\x54\xd1\xd4\x8f\x52\x45\xd3\x07\xe8\x31\x2a\x9a\xc6\x4a\x7c\xe8\x27\x3d\x44\x63\xda\x24\x3c\xc4\xcd\xb1\x72\x71\xde\x7f\xaa\xc2\xa6\x51\x91\x9f\x5d\x52\x42\x93\x4c\x10\x89\x6d\x97\x90\x10\x07\x6c\x04\xa9\x4a\x2a\x26\x0e\x44\x07\xfc\x7f\x0e\x85\x4d\x23\x82\x7d\x7b\x00\xff\x58\x89\x2d\x76\xed\xa2\x1e\xcb\x47\xaa\x19\x19\x1d\x8c\xff\xa8\x35\x38\x53\x89\xd3\xcf\xa5\xc4\x69\xaa\x49\x19\x4d\x10\xff\x92\x6a\x52\x0e\x29\x1a\xf8\xfc\x91\x80\xe7\x8f\x03\x3a\xdf\x00\x9c\x47\xe4\xec\x0a\x61\xc6\x85\x8a\x6f\xc2\xc4\x81\x84\x62\x86\x1e\x11\x22\xbe\x01\x0f\xef\xc0\xdd\x11\x00\x39\xfd\xea\xe2\x08\xec\x0e\x75\x3a\xb9\xb2\x5b\x11\xc5\x79\xeb\xf6\x18\x00\xba\x03\x99\x6e\xfa\xda\x22\x80\xb9\xa3\xf9\xda\x22\xb8\x26\x1e\x03\xc0\x1d\x41\x3e\xc6\x00\x6e\xdf\x01\xda\xee\x60\xd7\x21\x70\xa6\x0d\xc0\xf6\x76\xbc\x33\x80\x79\xf7\x88\x8f\x0b\xb7\x7e\x04\xa8\x75\x64\x98\x75\x0c\x95\x1f\xac\xe8\x23\x1c\xdf\x28\xb0\xea\x9d\x90\x6a\x17\xa8\x0e\x98\xde\x20\xc4\xdd\x0b\x56\x87\x84\xb2\x36\xc3\xdc\x9b\x01\xeb\x50\xe0\x60\x6c\x20\xf4\x2e\x10\x74\x87\x8d\x0a\xb9\x62\x1d\x00\x7a\x0b\xc2\x1c\x12\xd8\xdb\x15\xa2\x0f\x83\x2f\xc7\x0e\xd3\xc3\x76\xa8\x3e\x0e\xca\xf6\xae\x60\x7d\xc8\x79\x1d\xc2\x95\x07\x80\xe3\x00\xb6\x0e\xaa\xfc\x38\x60\xe3\x58\x40\xe3\xa0\x82\xfa\x5c\xb3\xc7\x28\xaa\xdf\x97\x15\xa3\x27\x76\x47\x65\x7d\xb2\x12\x2c\x87\xaa\xd6\xda\x47\x8c\xb7\xb8\xa0\xfb\xaa\xeb\x8f\xe6\x4a\x54\xaa\xae\x7f\x0f\x7d\xc6\xd5\xf5\x83\x4e\x30\x0c\xeb\x8b\x6f\x83\x74\xbd\x38\x0e\xca\xf2\x6f\x97\xd8\xf7\x9f\x78\x53\x96\x7f\x47\x89\xfd\xd0\xa9\x4f\xb7\x4a\xec\x7b\x71\xdc\x28\xe5\xbc\x51\x62\xdf\x73\xe6\xc3\xb2\xfc\x5b\x25\xf6\xfd\xf6\xa8\x5f\x96\x7f\xbb\xc4\xbe\xf7\x48\xfb\x32\x71\x67\x89\x7d\x6f\x3c\x18\x55\xfa\xf8\xce\xbc\x02\x2f\xae\x83\xbb\xb3\xab\xce\xbe\x17\xd7\xb6\x36\xff\x9d\x75\xf6\xbd\x17\xb7\x41\x4f\x6f\xd7\xd9\xf7\x9b\xff\xb0\x36\xff\xb0\xce\xbe\xf7\x20\x07\xb5\xf9\x87\x75\xf6\xbd\x79\x0e\x51\xde\x9b\x75\xf6\x83\x86\xda\xd4\xe6\xdf\xac\xb3\xef\xb7\xa2\xa9\x36\xff\x6e\x4a\xb5\xf9\x9f\x01\x2a\x36\xd5\xe6\xef\x28\xd5\xe6\x4f\xb5\xf9\xb7\x28\xd5\xe6\x4f\xb5\xf9\x47\x50\xaa\xcd\xdf\xa7\x54\x9b\x7f\x34\xa5\xda\xfc\xa9\x36\x7f\xaa\xcd\xef\x4d\xa9\x36\xff\x38\x4a\xb5\xf9\x53\x6d\xfe\x08\x94\x6a\xf3\xf7\x29\xd5\xe6\x4f\xb5\xf9\x53\x6d\xfe\x08\x94\x6a\xf3\xa7\xda\xfc\xa9\x36\x7f\xaa\xcd\x1f\x4c\xa9\x36\x7f\xaa\xcd\x1f\x44\xa9\x36\x7f\xaa\xcd\x9f\x6a\xf3\xa7\xda\xfc\xa9\x36\xbf\x27\xa5\xda\xfc\x01\x94\x6a\xf3\xa7\xda\xfc\x61\x83\x49\xb5\xf9\x47\x52\xaa\xcd\x9f\x6a\xf3\xa7\xda\xfc\xa9\x36\x7f\xaa\xcd\xbf\x9b\x52\x6d\xfe\x54\x9b\x7f\x0c\xed\xac\xcd\x1f\x9c\xa8\x32\x78\x3c\x45\xcc\x54\x69\x8a\xfa\x6f\x17\xe8\xf7\xe2\x39\x28\xea\xbf\xbb\x40\xbf\x17\xdf\xa6\xa8\xff\x46\x81\xfe\xe7\xbb\xac\x58\xd9\x7f\xbb\x4a\xbf\x17\xc7\x7e\x65\xff\x5d\x55\xfa\xbd\x98\xf6\x2b\xfb\xef\xa8\xd2\xef\xc5\xb3\xab\xec\x7f\x6f\x95\x7e\x2f\xde\x58\xd9\xff\xbe\x2a\xfd\x7e\xe7\x15\x6d\xaa\xbb\xab\xf4\x7b\x31\x2d\x6c\x25\xa6\xbb\xaa\xf4\xfb\x4d\x9f\x64\xcb\x54\xa5\xff\x41\x4a\x55\xfa\x53\x95\xfe\x54\xa5\x3f\x55\xe9\x7f\x90\x9e\x3c\x1f\x29\x55\xe9\xbf\x8f\x52\x95\xfe\x3d\x29\x55\xe9\x4f\x55\xfa\x47\x53\xaa\xd2\x9f\xaa\xf4\xa7\x2a\xfd\x77\xf0\x48\x55\xfa\x47\x51\xaa\xd2\x9f\xaa\xf4\x07\xb3\x4d\x55\xfa\x53\x95\xfe\x10\x4a\x55\xfa\x53\x95\xfe\x54\xa5\x3f\x55\xe9\x4f\x55\xfa\xfd\x28\x55\xe9\x1f\x4b\xa9\x4a\x7f\xaa\xd2\x6f\x29\x55\xe9\x4f\x55\xfa\x47\x0f\x2e\x55\xe9\xf7\xa5\x54\xa5\x3f\x55\xe9\x4f\x55\xfa\x1d\xa5\x2a\xfd\xa9\x4a\x7f\xaa\xd2\xff\xc4\x55\xfa\x49\xad\x45\x29\x6a\xae\xaf\xa8\x5c\xb1\x8c\x9e\x66\x99\xf9\xea\x5a\xdc\xd0\x51\x00\xd2\x61\x54\xee\x1e\xa6\xa3\xa6\xc7\x78\xce\x32\x8c\x21\xdd\x2e\x29\x16\xc0\x27\xa0\x2c\x4f\x20\x96\x29\xe8\xd1\x5c\x3b\x44\x10\xce\x9e\x68\x96\x91\xa2\x58\x03\x0e\x79\xdc\x0e\xd8\x35\x9f\x09\x51\xd0\x11\xcf\x07\x67\xce\x52\x39\x4a\x9b\x0d\x96\xf8\x9d\x8b\x45\x77\xac\x60\x46\x0b\xc1\x17\x63\x55\x9b\x83\xa6\x56\x22\x9f\xc2\x9b\x8e\x59\x46\x38\x0a\xfe\x5a\x4a\xca\xf5\x48\xd8\xe3\xac\x29\xe7\x8b\x01\xd5\x52\xac\x68\x8e\xa1\x6d\x44\x2a\x5a\x97\xcc\xc8\x58\x68\x41\x89\x99\x2f\xa7\xdd\x84\x8d\x70\x27\x70\x89\xe3\xb6\x83\x9d\x8d\x93\x1c\x16\x31\xea\xb1\xdd\x63\xad\x18\x0f\xbb\x65\x23\xc8\xed\x5e\xd4\x68\x3e\x66\x18\x6e\xe8\xd6\x61\xa4\xbc\x40\x61\xbb\x16\x35\xdc\x12\xfb\xec\x95\x35\x47\xc1\x8e\xcb\x69\x8e\xc1\xb8\xe3\xe3\xfb\x5c\xf1\x8b\x9b\x4e\x50\x0f\x8f\xfa\x13\xff\x58\x26\x91\x0b\x0f\x73\x73\xb0\x75\x07\xa7\x72\x51\xdb\xd7\xa5\xbb\x68\x94\x6b\xb9\x46\x50\xb4\x8f\xa4\x37\x6f\xd6\x5c\x64\x37\xe6\xf8\x97\x64\x41\x0f\x0e\x14\xbc\x79\xff\xd6\xe8\x90\x5a\x79\xa9\x38\xe6\x0a\xd2\x3b\x2d\x54\x49\xb1\x62\xb9\xb9\xaf\xdf\x11\xc9\xc8\xcc\xab\x84\x00\x16\xdd\xa6\xdc\xbc\x9e\x7e\x73\xf8\xdd\xe9\xc7\x9f\x2e\x4e\xdf\x9f\x1d\x61\xb4\x88\x7e\xaa\x08\xcf\xbd\x46\x5a\xab\x2e\xd5\xc4\x9d\x7d\x33\x7d\xca\x57\x4c\x0a\x6e\x16\xd9\x67\x45\xcf\xe7\x40\x60\xe5\xe6\xda\x88\xbd\x19\x45\xd8\x56\xb1\xf2\xc3\x25\x6b\xf4\x2c\xb8\x35\x68\x8c\x50\xc6\xab\x5a\xfb\x3f\x3e\x30\x1d\x61\x46\xa1\xe6\xd9\x92\xf0\x85\x93\xa8\xfd\xf5\xf5\x60\xaa\xd6\x5c\x93\x4f\x66\xd6\xe8\x26\x57\x19\xa9\x68\x6e\xcd\x3c\x02\xb9\xa8\xfd\xb6\xff\x37\xbf\x39\x06\x46\x5f\xc3\x6f\x7a\x83\x9b\xc2\x99\xe3\xde\x1d\x0e\xdf\x55\xe0\x74\x45\x25\x0e\xd8\x1d\xa6\x63\x90\x74\x41\x64\x5e\x50\xe5\xc3\x54\xcc\x5b\xf3\xc2\xfa\xad\xdc\x61\xa0\x4d\xbc\xc3\x83\x27\x17\xba\xa7\x97\x5a\x5d\x03\xef\x05\xc2\xde\xe7\xc2\xe7\xf5\xb8\xd4\xba\x52\xaf\x4f\x4e\x6e\xea\x19\x95\x9c\x6a\xaa\xa6\x4c\x9c\xe4\x22\x53\x27\x9a\xa8\x1b\x75\xc2\xb8\x91\xc3\x93\x9c\x68\x32\xe9\x29\x8b\x13\xfb\xc4\x98\x64\xa2\x2c\x09\xcf\x27\xc4\x09\xa5\x49\x7b\x91\x4e\x7e\xed\x4c\xdb\x09\x69\x7f\x8b\xf1\x09\x99\xa8\x25\x2d\x8a\x83\xd1\x63\x0d\x79\xee\x7b\x3f\xf3\x03\x9e\xf7\x6e\xce\xa1\xd2\xfe\xac\x15\xee\x76\xee\x53\xb8\x10\x3e\x5e\x3c\x9b\x23\xe3\xae\x22\x2a\x66\xdc\x87\x69\x4f\xfe\xfb\x88\xfa\x46\x63\x9c\x5d\x5c\x7f\xfc\xcb\xe5\x87\xf3\x8b\xeb\x46\x71\x34\x6a\xc0\x87\xeb\x5d\x8a\x23\xec\xa6\xdf\xa5\x38\x3a\x35\xe0\xc1\xf4\x4e\xc5\x31\x54\x03\x3e\x9c\xb7\x15\xc7\x50\x0d\xf8\xac\xec\xb6\xe2\xd8\xa1\x06\x3c\xad\x88\xfe\xfa\xee\x54\x03\x5e\xd2\xb9\xa7\x38\x76\xab\x01\x0f\xae\xdb\x8a\x63\xa8\x06\xbc\xee\xd7\xb6\xe2\xe8\xa9\x01\x4f\x95\xbf\xad\x38\xfa\x6a\xc0\x83\xe9\x6e\xc5\x91\xd4\xc0\x3e\x1f\xea\xa5\x06\x28\x5f\x05\xaa\x80\xe6\x5d\xde\x13\x2e\xed\xb9\xf0\x11\x83\x5a\x20\x16\xcc\x89\x82\x76\xa3\xe2\x1c\xaa\xcf\x63\x3f\x07\xeb\x7b\xc6\x57\xdf\x11\x39\x00\xf3\xf9\xf9\x4a\x77\x6d\x10\x38\xa6\xc0\xfc\x78\x92\xce\x83\xe2\x9f\x78\xe8\x1d\xfa\x0b\x41\x22\x7b\xbc\xab\x2d\x85\x22\x85\xcd\xc7\xfa\x06\x52\x06\x07\xe3\x82\x94\x8d\x9f\xbb\xbf\xb7\xde\xde\xd4\xe6\x4c\x4c\xe1\x7d\xe3\xb2\x82\x37\x3f\x9d\xbf\x3d\xbb\xb8\x3e\xff\xea\xfc\xec\xa3\xaf\x9f\x36\x38\x06\x85\x1e\xfd\x28\x4b\x76\x10\xc7\x52\xb3\x74\xbf\xbd\xe6\xef\xd4\x5e\xe2\xad\x5c\x31\x51\x77\x91\x92\x98\xfb\xab\xb6\x64\xab\x37\x4b\x9b\x44\xb1\x6e\x3d\xd4\x51\x87\x39\xdd\xe9\xa9\xf0\xe6\x1b\xd5\x50\xb5\x74\x8f\xb9\xea\xcd\x33\xaa\xb7\xc3\xd2\xdd\x3e\x0f\xff\x8d\x8f\x6d\xf2\x5a\xba\xd7\xf0\x0d\xd9\xf9\x3b\xcc\x5f\x6f\x96\xf7\x78\x4f\xbc\x79\x36\xc6\xf3\x5b\x3a\x27\x75\x61\xfd\xa7\x2f\x5e\x4c\xc7\xdb\xa0\x96\xe2\x88\xdd\xaf\xa4\xf0\xee\x5c\x37\x10\xbd\x57\x98\x12\x8a\xbd\x5c\x43\x02\xb3\xbb\x8c\x98\x03\x97\x1c\xe6\x7f\xee\x7a\x6e\x2b\xe7\x1a\xb0\x51\xe4\x00\xc0\xab\xe1\x17\x84\xc2\x8d\x00\x8b\x8a\x91\xd4\x94\x09\x3e\x67\x8b\xf7\xa4\xfa\x86\xae\x3f\xd2\x79\x08\x18\x65\x78\x1e\x30\x46\xed\x32\x53\x82\x40\x5a\x62\x6e\xcd\x50\x3b\xcc\x10\x2c\x5a\x24\x24\x5a\x8c\x04\xb9\xd0\xe4\xb8\x58\xf9\x6c\x11\x72\xd9\xb6\xba\xb4\xc6\x48\x3b\xc3\x57\xa2\x39\x41\x71\x12\x23\x23\xa4\xc8\x84\xd8\xf5\x0d\x0d\x8d\x55\x67\xe0\x87\xaf\x55\x67\xec\x68\xeb\x56\x09\x66\xf9\xa0\x5b\x26\x13\x3c\xa3\x95\x56\x27\x62\x65\x6c\x43\x7a\x7b\x72\x2b\xe4\x0d\xe3\x8b\x89\xb1\x3b\x26\xf6\x8e\xa9\x13\xc4\x18\x9d\xfc\x1a\xff\x13\x3c\xa8\xeb\x0f\x6f\x3f\xbc\x86\xd3\x3c\x07\x81\xca\xb9\x56\x74\x5e\x87\x67\x4a\xdb\x96\xbd\x53\x20\x15\xfb\x8e\x4a\xc5\x44\x84\xfc\x9a\x1b\xc6\xf3\x63\xa8\x59\xfe\xa5\xaf\x7a\x6f\x28\xda\xf9\x15\x95\xc5\xce\x46\x3d\xc3\x57\x88\x43\x0b\xbf\xee\x7d\x7b\xab\x15\xf5\xc1\x5c\x85\xc4\xa2\x54\x37\x74\xdd\xa0\x34\x82\x59\xba\x07\x5b\x94\x4d\x1d\x0b\xb2\xd9\x24\x3c\xb8\x31\x75\xf6\x41\xab\xb4\x83\xe6\x67\x01\xfd\xce\x73\x51\x89\xfc\x35\xa8\xba\xaa\x84\x0c\x2c\xfe\x50\x52\x4d\x72\xa2\xc9\xd4\x48\x93\xe3\xe1\x97\x88\x63\x0c\xbb\xb6\xff\xd5\x32\x44\x68\xa0\xfa\xe1\xe0\xe0\x4f\xdf\x9c\xfd\xe5\x7f\x1d\x1c\xfc\xf8\x5f\xb1\x38\xa3\x19\x6a\x93\x6b\xe3\xb1\x57\x15\xcd\xa6\x5c\xe4\xf4\x02\xd7\x05\xbf\x54\x03\x98\x1a\xfe\x20\xec\x33\x34\xd1\xb5\x9a\x2e\x85\xd2\xe7\x97\xc7\xcd\x97\x95\xc8\xcf\x2f\xa3\x30\x46\x4e\xca\xfb\x2d\x04\xcf\xcd\xb8\xc3\x2b\x70\x49\x82\xea\x2b\xc7\x32\xf1\x3a\xbd\x16\x55\xf4\x3b\x9e\xe1\x42\xda\x61\x5a\xb3\x25\x2d\x49\x94\x3e\x0c\x5f\x35\x8b\x0f\x4c\xc1\xad\x64\x5a\x7b\x96\x23\xec\x13\xe3\xae\x22\x9f\x98\x1f\x1b\x2d\x80\x4f\xf8\x18\x66\xee\x8b\xd5\xab\xe0\xc4\x9f\x68\x46\x42\x7b\x6e\xa3\x1e\x15\xdc\x8b\x48\x86\xae\x55\x2e\xed\xf3\x20\xca\xbe\xf6\x01\xf5\x70\x7a\x79\x1e\xcc\x74\x65\xef\xc6\xb3\xd8\xd6\xa6\x5a\xd7\x57\xcf\xd4\x5a\x68\xc6\xd7\x08\x82\xd6\x6b\x1d\x76\x04\x31\xaf\xae\xad\x54\x06\x05\x2b\x59\xe0\x7d\x25\x3c\x47\xed\x40\x95\x56\x70\x68\x19\x4e\xb3\xaa\x0e\x53\x80\x8e\x4f\x49\x4b\x21\xd7\xc7\xcd\x97\xb4\x5a\xd2\x92\x4a\x52\x4c\x94\x16\x92\x2c\x02\xd5\x77\x33\x6c\x1c\x6e\xf7\x95\xfd\xd0\x68\x8b\xb2\x3d\xea\x90\x64\x1a\x5b\x8b\xa3\x85\x6b\x37\x36\x24\xcd\x7f\x39\x56\x42\x73\x3c\x9f\x81\x91\xd0\xde\xba\x8b\xe8\x6e\x8e\x37\xc1\x61\xa8\x86\xd0\x05\xd3\xae\x3d\xcc\x23\x14\x82\x58\x89\xa2\x2e\xa9\x3a\x6e\x9f\xc7\xe1\xee\x04\x21\x81\xf2\x15\xac\x88\x54\xcf\xe6\xf1\x9f\xb3\x15\x53\xe1\xf5\x8c\x76\xbc\xfd\x63\x34\xae\xc6\x9c\xed\x5a\x57\xb5\x76\xe5\xe4\x63\x19\x95\xf4\x53\x25\x14\xc6\x9b\x22\x54\xac\xb4\x94\xf7\xa3\x37\xaf\xc2\xfa\xf5\x60\x01\x0a\x4d\x25\x7f\x0d\xff\x79\xf8\xd7\x2f\x7e\x9e\x1c\x7d\x79\x78\xf8\xc3\xcb\xc9\xbf\xff\xf8\xc5\xe1\x5f\xa7\xf8\x8f\x7f\x3d\xfa\xf2\xe8\xe7\xe6\x8b\x2f\x8e\x8e\x0e\x0f\x7f\xf8\xe6\xfd\xd7\xd7\x97\x67\x3f\xb2\xa3\x9f\x7f\xe0\x75\x79\x63\xbf\xfa\xf9\xf0\x07\x7a\xf6\xe3\x9e\x4c\x8e\x8e\xbe\xfc\x4d\xe0\xc0\x09\x5f\x7f\x08\x32\x25\xc0\x96\x5d\x8d\xd2\x83\x60\xc8\x2d\x4a\x39\xa4\x4f\x93\xce\xe9\x39\x61\x5c\x4f\x84\x9c\x58\xc6\xaf\x41\xcb\x3a\xec\x91\xd2\x1c\xc7\xb8\x72\xf6\x63\xa4\xba\x7d\x3d\x93\xac\x35\xb3\x9f\x85\x20\x53\x34\x93\x54\x3f\xef\x38\x95\x1d\x63\xf3\xaa\xc0\x64\xf3\xe0\xa8\x03\x3a\xb7\x7e\x29\x36\x4f\x0a\x7b\xdd\x47\x6d\x82\x2f\x9e\xa2\x78\xaf\xdc\xb9\x14\xe5\x14\x7a\xc0\xaf\x55\x94\x76\xfe\x6e\x9c\x37\x34\xb8\x16\x55\x0a\xd3\xf9\x50\x0a\xd3\x85\x51\x0a\xd3\x8d\xa3\x7e\x98\xee\x0a\xef\x7e\x8a\xd1\xed\x22\xca\x57\x7e\xc0\xaa\x9d\xc8\xfb\xc6\x87\xa5\x05\x54\xa2\xaa\x0b\xa2\xbd\x32\x44\x76\xe1\xf7\xb7\x61\xf8\x1e\x9c\x9d\xf2\xeb\xd0\xac\x5d\x8e\x97\xaf\x7b\xa3\xdc\x8d\x50\x86\xd3\xa2\x00\xc6\x7d\x95\x17\x0e\xb2\xc9\x37\x92\xd4\xba\x93\x80\x60\x55\x51\xec\x87\xe4\xc1\xf3\x76\x49\x37\x96\x10\x98\x02\xa5\x89\xd4\x8c\x7b\x35\x83\xfa\xde\x70\x44\x73\xb4\x49\xbb\x61\xbc\xeb\x87\x14\xf0\x90\x6d\x4b\x98\xf5\x1a\xe6\x75\x35\x6b\x0a\xa2\x7c\xe6\xef\x5e\x0a\xb8\xaa\x9a\xdc\x20\xb6\x39\xa3\x39\xe5\x19\x9d\xc2\x77\xbe\xb5\x5f\x9b\x93\x34\x5b\x9b\xbd\x39\xe3\xab\x36\x13\xab\xb6\xc9\x3f\x3e\x87\xca\xac\xe8\xee\x71\xfe\xf3\xa6\x9e\x18\x31\xe5\xa0\x9b\x5d\x06\x8a\x97\xe4\x44\xbb\xb5\xf5\xe4\xb7\x05\x9f\x5b\x34\x87\x57\xae\x50\xd8\xcb\x25\xf4\xb5\xd0\x62\x23\x03\x1e\x9c\x5b\xcf\x84\x76\x41\x42\x6a\x6b\xdb\x67\x01\x9a\xf5\x9e\x3c\x9e\x09\xfc\x34\xd4\x5c\xdf\x69\xaa\x07\x47\x91\x87\x66\xfa\xf3\x33\xb3\x1f\xc1\xc4\xde\x61\x5e\x5b\xf3\x38\x88\x6b\xa8\x69\x1d\xc5\xac\x8e\x61\x52\xef\x32\xa7\x03\x92\x6b\x3b\x1a\x20\xde\xa2\x98\xc0\xe1\xe6\x6f\x38\x3c\xad\x92\x74\xce\x3e\x45\x91\x99\xa7\xbc\xdd\x40\x60\x39\xe5\x9a\xcd\x59\xc0\x9a\x1b\x23\x5a\xd2\x8a\x72\x04\x11\x60\x1f\x47\x63\x17\x78\xe6\x47\xc2\xe6\x0e\x3e\xbb\xe4\x3a\xeb\xa2\x89\xa9\xc0\xae\x62\x39\xa7\x92\xf6\x4a\xda\x2b\x69\xaf\x87\xe8\xd9\x6b\x2f\x27\x0f\x9a\x27\xfb\xd3\xaa\x1f\xac\x08\x13\x5a\xf4\xe6\x6d\xaf\x1e\x19\xde\x71\x6f\x77\xed\xfe\x77\xaf\x2b\x7b\x78\x82\x9f\xeb\x73\xc5\xb0\xf0\x6e\x5b\x4e\xbd\xd5\x9a\x5a\xd8\x52\x9c\x1e\x1c\x97\x6c\x61\x6e\x68\x41\x57\xb4\x70\xcf\x21\x28\x09\x27\x0b\x5b\x17\xde\xeb\x05\xe3\x22\xe8\x20\x24\xf6\x95\x94\x2c\x1f\x38\x4f\x7c\x27\xcf\x38\x18\xb1\x55\x08\x92\x23\x3b\x29\x8a\x82\x4a\x05\x05\xbb\xa1\xf0\x96\x56\x85\x58\xfb\x36\x20\x24\x3c\x87\x2b\x4d\xb4\x11\x53\x57\x54\xfb\xe0\x94\x03\x44\x01\xae\xc8\x65\x5d\x14\x97\xa2\x60\x99\x47\xdc\x6a\x78\xb8\xcf\xf1\x54\x57\x75\x51\x40\x85\x0c\xa7\xf0\x81\xfb\x9c\x6d\x31\x87\xd3\xe2\x96\xac\xd5\x31\x5c\xd0\x15\x95\xc7\x70\x3e\xbf\x10\xfa\xd2\x3a\x11\x7c\x0c\x9e\x7e\x66\xac\x65\x0d\x6c\x0e\xaf\xb1\xe7\x9e\x06\x4d\x7c\x84\x28\xeb\x35\x92\x3f\x36\x67\xae\x3f\x48\xab\x80\x6e\x99\xf2\xca\x2d\xbd\xb7\x18\x9a\xdf\xa5\xff\x35\x72\x32\xaa\xd7\x7e\xfd\x0f\x3d\x68\x05\x9b\xd3\x6c\x9d\x15\xa1\xf2\xf3\x34\xc3\x0c\x87\xae\x6d\x5c\x27\x31\x7c\x1c\x8c\xb6\x8b\xbd\x2b\x71\x8b\xae\x3b\xc6\xc1\xb6\x70\x57\x9e\x1d\xba\x3b\x71\xd3\xce\xd9\x3a\x80\xd5\x93\xfa\x02\x3d\xed\xd9\x30\x4b\xb6\x12\x4a\x5f\x69\x22\x75\x84\x16\xef\x07\x97\x0d\x33\xc0\xd6\xbe\x45\xe1\x6d\x08\xb0\xb2\xa4\x39\x23\x9a\x16\x6b\x20\x73\x8d\x85\x92\x43\x0b\x5a\x98\x31\x49\x6a\x6f\xaa\xeb\x28\xb5\x24\x3c\x2f\xa8\x84\x39\x61\x85\x37\x3a\x6c\xcb\xfd\xaf\xa9\x2c\x19\x0f\x28\xa4\x6e\x61\xb5\x18\x45\xa0\x39\x16\x86\x96\x39\x16\x89\x13\xe0\x0f\x63\x76\x0c\x3b\xb1\x8f\xd6\x77\xd0\xe5\x84\x0e\xb3\xd0\x2d\xc0\xac\x10\xd9\x8d\x82\x9a\x6b\xe6\x6b\xd5\xe3\xd6\x08\x71\x03\x99\x28\xab\x02\x85\x67\x58\xa1\x49\xb8\xbf\xd8\xe4\x2e\x89\xdc\xfe\x73\xd2\x0a\x89\x89\x19\x93\x3a\xf9\x75\xf7\x23\xfc\x86\xdf\x1b\x21\xf8\x0d\x1b\xfe\x82\xa5\x9f\x68\x16\xa9\xe9\xc3\x07\x4e\xf1\xd4\x0a\x3e\xb2\xb4\xf6\x90\x04\x6f\x13\x01\xe6\xc2\x18\xad\xe6\xd4\xc7\xe8\x23\xd1\x1a\x01\x53\x38\xfb\x44\xb3\x28\x9d\x55\xcc\x28\x09\x2a\x3b\xac\x85\x4c\x6e\x02\x4a\x54\x3c\xa3\x26\xe6\xde\xa5\x43\xfb\x34\x38\x1c\x6f\x2c\xc7\xf0\x06\x73\x56\xd0\x58\x66\x05\xe3\x9e\xea\xbf\x4f\xae\x30\x29\x30\xae\xcc\x43\x64\x20\xc9\x62\xf4\xa2\x72\xae\x14\xc8\x99\xc4\x0e\x1e\xa1\x20\x0c\x57\x60\xa5\x5d\x85\xf0\x35\x95\x42\x68\x38\x3c\x38\x39\x38\xda\x42\x03\x04\x77\x94\x9d\xb3\x82\x5a\x03\xce\x96\x3b\x72\xa3\x0e\xe4\x6a\x6c\x7a\x56\x56\xc5\x1a\x77\xef\x20\x3f\x06\x16\x0a\x44\x71\x35\x5f\x65\xcd\x9b\x93\x10\xda\x87\x1c\x0b\x4c\x1e\x83\x12\xa0\x25\x69\x1a\x57\xc5\xe0\x69\x06\xa8\x65\xed\x8c\xec\xc3\x83\x9f\x0f\x42\xcf\x29\xd5\xd9\x11\xdc\x0a\x7e\xa0\xf1\xb8\x4e\xe1\x3a\xf4\x56\xd5\x8a\x36\x25\x7e\x8f\xb1\x36\x3f\xa7\xe1\x80\x1c\x01\xf4\x53\x55\xb0\x8c\xe9\x62\x8d\xc6\x25\x88\x3a\x74\xdf\xb1\x86\x3d\xd1\x4d\x35\xe2\xb3\x4f\xc1\x27\xc9\x66\x34\x1b\x25\xf6\x12\x4d\x41\x6b\x70\x06\x32\x25\x0a\x0a\xb6\xa2\x27\x4b\x4a\x0a\xbd\x5c\x43\xf8\x1d\xe2\x82\x4f\xfe\x4e\xa5\xc0\x7a\xc9\xdc\xf1\x8d\xd1\xe8\x2d\xbc\x3b\x5e\x94\xf6\x97\x11\x7c\xaf\xc6\x5e\xfc\x9a\x7a\xbe\x8b\x60\x53\x07\xfe\xf9\xfa\xfa\xf2\x6b\xaa\xa3\x19\x1e\x66\x74\x4d\xea\x1d\x46\xb5\xa8\x9c\x0b\x59\x3e\xb1\x05\x12\x0e\x12\x9f\x40\x25\xe4\x53\x9b\x40\x4b\xa1\x02\xf6\x1d\xb6\xf6\x5e\x28\xed\x5b\x8f\xb4\x4f\x5a\x18\xdd\xcc\x69\x66\x76\x3c\x5a\x1a\x7a\xd7\x30\x07\xce\x2f\xa7\xf0\x17\x51\x9b\x55\x9c\x91\x59\x90\x25\x6f\xa8\xe9\xc8\xa2\xa8\x86\x17\x66\x11\x5e\x84\x04\x5a\x2d\x99\x73\xff\x67\x4a\x72\x2a\x15\x6a\x42\x4a\xa2\xf4\xa7\x0c\x86\xee\xf6\xc6\x15\xd3\x72\xae\x95\x16\x25\x2c\x2d\xe3\xf0\x8d\xee\x95\x5e\x76\xb2\x23\x14\xb9\x6f\xe4\x9a\x8d\x2f\x28\x90\xb4\x8a\xa1\xed\xdc\x6c\x7f\x41\xda\x68\x4b\x13\xd8\x93\x12\xc8\xb5\xe1\x3b\xa3\x0a\x08\x64\x78\x54\x82\x59\xda\xc5\x37\x67\xc5\x95\x4b\x0c\xe6\xc8\xb8\x3d\x24\x46\xa8\x04\xe7\x17\x44\xeb\x26\x1b\x27\xa1\x09\x42\x4a\x4d\x0f\x99\x20\x34\x37\x90\x4b\xac\xfc\x28\x88\x94\x49\x03\x3b\x00\x24\x11\x58\xb6\xa7\xd4\x06\x3b\x23\x2c\x3f\xc4\xcc\xe1\x80\xd0\xa2\xd6\x7d\x7a\xfc\xe5\x8b\x71\xf0\x20\xde\xfa\x55\xc1\xe5\x67\xb6\x8b\xcf\x68\x01\x24\xcb\xfc\x9a\x29\xf5\x49\x58\xd5\x89\xe2\x4c\x51\xb9\xf2\x4b\x98\xe8\x28\xd6\x92\x09\xdf\xf0\x4d\x43\x3b\x2a\xcf\x4b\xe0\x75\x39\x0b\x56\x52\x6d\x1d\x38\xa9\x63\x6f\x43\xaf\x79\xc4\x45\x8c\xa1\x36\x10\x96\xc6\x40\x22\x7c\x11\x7a\x2f\x5e\x99\x39\xff\xf1\x0f\x7f\xf8\xdd\x1f\xa6\x76\x59\xcd\x67\x04\xf2\x9c\x51\x20\x1c\xce\x4f\x2f\x4e\x7f\xba\xfa\xee\x0d\xd6\xe4\x0e\x3b\x85\x11\x92\xf9\x63\xa6\xf2\x47\x4c\xe4\x7f\xc4\x34\x7e\x2c\x58\x16\x28\xe1\x87\xb8\x2c\x64\x18\xee\xd1\xae\x95\x2d\xc3\xed\x5e\x8a\x36\x6c\x18\xc1\x93\x6d\xde\xc4\x83\xea\xe5\x11\x1e\x0e\x4f\x2e\x3d\x75\x56\x5d\x89\xec\x26\x9a\x97\xe7\xe0\xfa\xcd\xa5\x65\x18\xc5\xd1\x43\x78\x13\x60\x62\x7c\x25\x8a\x95\xd9\x4c\x02\xd7\x6f\x2e\x03\x95\xc5\xd4\xf0\xc0\x08\xab\xf5\x7b\xaf\x83\x32\x39\xdb\xd2\x4c\x0e\xda\xc9\xca\xaa\x08\x89\x28\x03\x76\x20\x90\x94\x14\x4c\x69\x96\xe1\x58\xdb\x18\x6c\x90\x57\x47\xdc\xf8\xe3\x39\x93\x7f\xac\xa3\xc8\xfe\xb1\x83\x0f\x91\xb2\x9e\x5b\x47\x5b\xcf\x55\x16\xec\x34\x39\x1e\x14\xfd\x09\xaf\x50\xe9\x1c\x6d\x61\x29\xe7\xcf\xd4\x72\x44\x33\xcc\xaf\xc1\x68\x9f\x78\xaf\xf7\x91\xb3\x1c\x43\x23\x28\x68\x77\x6e\x5b\x8e\x81\x6c\xdd\x84\x87\x96\x63\xa8\x5f\xc2\xd8\x9d\x5b\x96\x63\x24\xdb\x36\x59\x8e\xfb\xd1\x23\x58\x8e\x95\xa4\x57\x5a\x54\x51\x70\x76\x96\x55\x54\x94\xdd\x8c\xce\x85\xa4\x71\x60\x76\x1d\x00\x0e\xf2\x1a\x85\x31\xe1\x01\x95\x55\x9b\x30\x97\xe8\xc3\xd5\xbc\x53\xf6\x01\x4d\x96\x6c\xd9\x44\x55\x39\x55\xea\x04\xa1\x71\x75\x65\x9d\x94\x9e\x4c\xe7\x84\x15\xb5\xa4\xc7\x66\xa7\x69\x89\x7b\x75\x1c\x5a\xe4\xd1\x6c\x06\xe5\x96\x15\xd5\x99\x85\x51\x38\xd4\xa2\xff\xfe\x18\x9b\xcf\x1e\x1c\xdb\x27\x37\xbc\x59\x58\x26\x89\x5a\x52\x6c\x11\x4a\x3f\x31\xad\xec\x40\x25\x25\xca\xbb\x46\x34\x42\x5d\xdc\x41\x42\x13\x58\x41\x45\x94\xa2\xb9\xbf\x36\xe8\x41\x3e\xed\x00\x2f\x45\x7e\x70\xa0\xfa\x1f\xe3\xc9\x79\x21\x49\x46\xa1\xa2\x92\x89\x1c\xb0\xea\x7a\x2e\x6e\x39\xcc\xe8\x82\x71\xdf\x17\x80\xbb\x91\x66\xd0\xcd\x85\x37\x26\x2c\x0d\x00\x52\x35\x7d\x98\xa7\xf0\x71\xd0\x27\xd6\x5f\x6b\x89\x5a\x67\xa2\xd3\xd6\x6e\x75\x8f\x03\x38\x76\x48\x52\xac\xd6\x80\xd7\xbc\x26\x45\xb1\xee\xc4\x8a\x27\x67\x57\x98\x44\x3f\xd6\xc6\x7f\x66\x98\x5a\x73\x59\x43\x39\xf6\x2f\x68\x7f\x29\xfc\x65\x93\xa4\x24\x5b\x86\x25\x53\x24\xe8\xee\x03\x94\xa0\xbb\x09\xba\x7b\x27\x25\xe8\x6e\x82\xee\x26\xe8\x6e\x82\xee\x26\xe8\x6e\x82\xee\x8e\xa4\x04\xdd\x7d\x88\x12\x74\xf7\x4e\x7a\x96\xa1\x89\x04\xdd\x4d\xd0\xdd\xbd\x29\x41\x77\x13\x74\x77\x1c\xdf\x04\xdd\xf5\xa2\x04\xdd\xbd\x97\x12\x74\x37\x84\x12\x74\xd7\x97\x12\x74\x77\x34\x25\xe8\x6e\x82\xee\x06\x50\x02\x60\x78\x50\x82\xee\x46\x78\x38\x3c\xb9\xf4\x4c\xd0\xdd\x04\xdd\xdd\x93\x92\x7f\xac\xa3\x04\xdd\x0d\xa0\x04\xdd\x7d\x90\x12\x74\x37\x41\x77\x03\x78\x3d\x3f\xcb\xb1\x81\x88\x5e\x4a\x31\x0b\x2e\x2d\x7d\x89\xe0\x28\x96\x59\x8f\x9a\xb9\x27\x21\xc0\xcb\x66\x68\x53\x78\x33\xc4\xcc\x61\x7f\x2b\x57\x3e\xd2\x83\xaf\xc3\x84\xda\x31\x62\x69\xcc\xe9\x8e\x6a\xb7\x1e\x8c\x47\x42\xba\x9a\x82\xce\xea\xa4\x12\xf6\xff\x3a\x40\x57\x0f\xc9\x65\xbd\x93\xbe\xb5\x72\x9f\xa4\xea\xaa\x3f\x7c\xeb\x4e\xe8\x16\x08\xaf\x32\xce\xd0\x3d\xf4\x37\x61\x5b\x43\xf0\x95\x27\xef\x21\x64\x6b\x08\xbc\xf2\xb5\xfc\xbd\xe1\x5a\xcf\x00\xb8\x17\x0c\xd1\xba\x03\x9e\x15\xa8\xbd\x36\xa0\x59\x0d\xb8\x2a\x80\xe3\x4e\x58\x56\xe0\x28\xb7\x20\x59\x0d\xa8\x2a\xc2\xcc\x11\x7b\xda\x07\x54\x05\x46\xf9\x7b\x50\xac\x3e\x98\x2a\x80\x6b\x0f\x86\xb5\x0d\xa4\x0a\xd9\x29\xbd\x0b\x44\xe5\x30\x40\x21\x8f\xcb\x01\x80\x6a\x07\x04\x2a\x80\x37\x82\xa7\x22\xc3\x9f\x76\x42\x9f\xc2\xec\xd7\x1d\xb0\xa7\x06\xb8\x14\xb2\xb0\x1d\xe4\xa9\x0f\x5a\x0a\x39\x02\x2d\xdc\x69\x13\xb0\x14\xe4\x02\xc9\x63\x83\x95\x62\x84\x86\x83\xc3\xc2\x81\x96\xaa\x4b\x13\xba\x5e\x4a\xaa\x96\xa2\xf0\x54\x05\x03\x35\xf0\x9e\x71\x56\xd6\xa5\x91\x39\xca\xc8\x6d\xb6\x0a\xcc\x61\x52\x2d\x5a\xd5\x1a\x81\x18\x53\xf6\xd6\x78\x28\x51\x24\xcd\x91\xbb\x39\x62\x58\xd0\x7d\x49\x56\xfe\xa6\xbe\xaa\xb3\x8c\xd2\x9c\xe6\x03\xbf\x26\xfc\x6e\xda\xac\x85\x27\x5f\xdb\x20\x95\x29\x78\x15\x62\x61\x84\xbc\x88\xe6\x42\x96\x44\x23\x8f\xdf\xfd\xd6\x83\x43\x10\xf6\xed\x51\x70\x6f\xd1\x31\x6f\xc1\x66\x5c\x98\x2f\x2f\xc0\x8f\x17\x6e\x3f\x86\xf9\xef\x76\x63\xdb\xc2\x74\xdc\x2e\x5c\x5b\x18\xc7\x47\xc0\xb4\xed\xc4\xb3\xf5\x91\x5f\x61\x96\x6e\x18\x96\x2d\x12\xe2\x35\x18\xc3\xf6\x38\xf8\xb5\xdd\xd8\x35\x94\x2e\x21\xc6\xc5\x10\xb7\x16\x8e\x3c\x7b\x16\xa6\xc5\x63\xa0\xcd\xb6\x91\x66\x6e\xb1\xc2\xbc\xd8\x2d\xca\x2c\x1e\x4a\x2c\x12\x42\x2c\x06\x3a\x2c\x18\x19\x16\x8e\x0a\x8b\x85\x08\x8b\x81\x06\xdb\xea\x02\x1a\xe1\x04\x41\xd3\xb8\x31\x0a\xbe\x3a\x96\xf7\x38\x0a\xfa\xeb\x71\x97\x2b\x06\xea\x2b\xc2\x7a\x85\xa1\xbd\x1e\x07\xe9\x15\x13\xe5\x15\x63\x89\x82\x62\x74\x8f\x83\xec\xda\x89\xea\x02\xef\xfc\x77\xd8\x74\x77\x4d\xfb\x91\xb5\x00\xa6\x1b\x68\xae\x7e\x54\x2d\x80\x6b\x8b\xe4\x8a\x1b\x51\x0b\x8c\xa6\xc5\x8a\xa4\x45\x8a\xa2\x3d\x12\xf6\x2a\x14\x77\xb5\x1b\x73\x65\x6c\x90\x80\x03\xb1\x85\xb7\xea\x10\x53\x01\x5c\xfb\x3e\x89\x30\xb4\x54\xe0\x86\x32\xce\x34\x23\xc5\x5b\x5a\x90\xf5\x15\xcd\x04\xcf\x3d\xad\x89\x8d\x5e\xd5\x0e\x2d\x30\x07\x65\x99\x7a\xce\xcf\x7a\x82\x86\xb5\x2e\x96\x44\x81\x7f\xec\x12\xba\xc2\x29\x4d\x78\xd4\x19\xa6\x40\x30\xf8\x68\xd6\xc3\x33\x7c\x09\xcf\x2e\x84\x09\xcf\xc2\xe5\x64\x4b\x7e\xc4\x3b\x5e\x7f\x16\xb7\x20\xe6\x9a\x72\x38\x64\xbc\x39\x61\x47\xbe\xde\xa7\xd6\xd9\xd4\xf9\x33\x5b\xa7\xa1\x3f\xcf\x57\x2f\x9b\x81\xb5\x2e\xc7\x20\xc3\xec\x73\x76\x39\xa2\x33\x56\xa9\xe7\xe9\xd1\x76\x83\x7b\x2c\x97\xb6\x63\x3f\xaf\x0b\x2b\xcc\x7c\xfd\x37\xe8\x0c\x77\x0e\xf2\xa1\x4f\xdb\xf3\x58\x00\xbc\x77\x66\xce\x2b\x9c\x79\x2b\x0d\x09\xcf\xc1\x95\x3b\xf3\xe6\xdc\x3f\xf0\x9f\xf5\xd1\x0d\x44\x11\x3f\x16\x82\xf8\x4e\xf4\xb0\xc5\x00\x7b\x72\xdd\x42\x0e\x77\xf8\x5f\x5f\x8e\x43\xd4\x70\x1f\xfb\x1b\x30\xc6\xae\x2b\xb3\x3f\xee\x37\xc5\x08\xfc\xfe\xf6\x4e\x7c\x2f\x86\x0b\x02\x4c\xe2\x0d\x6c\x6f\xac\x34\xf8\x61\x0a\x7c\x28\x46\xfc\xd9\xbc\xf6\x1b\x34\x6e\xa8\x6f\x2c\xbd\xf6\xd3\x6b\xff\x01\x7a\x84\xd7\xbe\x66\x25\x15\xb5\x7e\xb6\x0f\xce\xdb\x25\xcb\x96\x7d\x5b\x90\x95\xde\xaa\x5a\xd4\x7a\xc3\x5e\x73\x43\x8c\x08\x45\x48\xaf\xce\x0d\xf2\x8b\x69\xec\x70\xa8\x86\x57\xbf\x6d\x11\xb2\x40\x14\x10\x78\x7b\x71\xf5\xd3\xbb\xd3\xff\x38\x7b\x37\x85\x33\x92\x2d\x83\x58\x33\x0e\x04\x35\x1b\x8a\xb0\x25\x59\x51\x20\x50\x73\xf6\xb7\x9a\xfa\xea\x85\xc3\x76\x7c\x47\x51\x30\xdd\x01\x12\xc8\xe8\x24\x0f\xd9\x30\xd8\xc4\x77\x4c\x69\xb3\x89\xc8\xcb\xd5\x19\x13\x5e\xfe\xc0\xb9\x14\xe5\xa6\x6a\x3b\x33\xcc\xac\xe9\xed\x69\xcd\x2d\xa9\xa4\xb0\x60\x2b\x87\x7c\xb6\x18\x50\x20\x79\x40\x55\x39\x23\x05\xcc\xc5\x31\x8f\x03\x32\x43\x40\xe1\x92\x02\xa7\xda\x5c\xfa\xd6\x95\xe9\x87\xae\xec\x15\xff\x86\x5a\x51\x75\x0c\xb3\x1a\xc1\xa1\x95\x64\x25\x91\xcc\x0b\x82\xd1\x1b\x30\x29\xa6\x70\x21\x9a\xe7\xd1\x1a\x97\xd6\xc7\xdf\x64\xac\x19\x5c\xda\xb7\x1f\xce\xae\xe0\xe2\xc3\x35\x54\x12\xeb\x04\xfb\x22\x2b\x91\x23\x1e\x81\x19\x35\xa3\xb2\xc7\x28\x9f\xc2\x29\x5f\xfb\xee\xbd\x55\x32\x4c\x81\x79\x0f\x51\x6e\xd8\xba\xf0\x54\xee\xed\x7c\x7a\xf1\x72\x8a\xff\x7b\x61\xce\x90\x34\xa6\x5c\x0b\xd7\x0d\x11\x34\x4d\xd2\x88\x35\x0f\xd9\xac\xa0\xdd\x7d\x70\x27\xcb\xc7\x5a\x8a\x26\x5f\xfc\x50\x19\xde\x68\x8c\x0d\x88\xbd\x5b\xd7\x4b\x73\x46\x24\xad\x24\x55\x94\x7b\xbe\x59\x48\x7b\x51\xf1\xc4\xa1\x80\x37\x12\xa6\x08\x4c\x6c\x0b\x7c\xed\x86\xbc\x75\x27\xdd\xc8\x2f\xfd\x2e\x4a\xe8\x83\x77\xf0\xf9\xbe\x66\xf9\xce\xe7\xd7\x3c\x2c\x63\xb7\xd5\x47\xcd\xc5\xaf\x44\x7e\xa0\xe0\xdc\x1f\xf7\xe4\x6e\xfd\x14\xae\x97\x4c\x75\x2f\x1b\x63\x2b\x32\xff\x72\x4f\x78\x16\x6d\x60\xf9\x18\x5e\xc2\x9f\xe0\x13\xfc\x09\x1f\x5f\x7f\xf4\x7d\x23\xc5\x78\xe0\x84\xba\xf6\xac\x1f\xe4\xfc\x32\xca\x89\xf8\x7e\x49\x34\xf2\x83\xf3\xcb\x10\x70\xe3\x8c\xf1\x1c\x8f\x02\xfd\xa4\xa9\xe4\xa4\x68\x9e\xe6\x61\x2b\x1d\xf0\x04\x34\x93\x7a\xf6\x17\xc7\x56\xb0\x38\x9f\x7b\x73\x6c\xad\xf4\x63\xd0\x83\xab\xe3\xcd\x11\xaf\xdc\xce\xab\xe3\xcd\xd2\x5e\x39\x38\x9f\xa3\xaf\xed\xc2\x69\x0a\xa6\x7a\xa3\xf7\x5f\xd2\x76\xd6\x25\xd1\xd9\x72\xa8\xd6\xfc\x5d\x21\xef\xcd\x95\xe8\x4a\xef\x43\x2e\xd0\xb7\x1c\x54\x34\xd8\x0c\xf5\xf3\x16\x3c\x21\x90\xbb\xc1\x7d\x3a\x9f\x6f\x9e\x5c\xef\x55\xbd\xcb\x0d\x16\x54\x91\xd8\x3d\x46\x7b\x8d\x35\x2a\x91\xdb\x97\xaf\x37\x4f\xb3\x78\x79\xcf\x3e\x1a\x3c\x80\xfd\x35\x67\xff\xe1\xec\x2a\x3a\x85\x26\x0f\x5a\xd1\x6d\x34\x43\x46\xb8\x4d\xba\x9e\x53\x29\x43\x8e\xbe\x80\xd9\x1a\x91\x6b\x2c\xa3\x81\x97\x20\x40\x27\x54\x52\x68\x91\x09\xef\xa2\x1e\x43\x70\x9f\x63\x86\xcb\x1d\x12\xbe\xea\x22\x9a\xdf\xbe\xbd\x3c\x86\xeb\x37\x97\xc7\x20\x24\x5c\xbd\x09\xc1\xd7\xf4\x3d\x77\x2f\xae\xdf\x5c\xbe\x78\xb2\x45\x87\xe6\x5d\xf8\xda\xab\x4c\xd0\xc0\x8d\x6b\x9e\x9c\x93\x92\x54\x93\x1b\xba\xf6\xb0\xaa\x43\x6d\xfa\x49\x7b\x82\x22\x4c\xc3\x2e\x6c\x49\xaa\x91\xbc\x24\x25\x39\x7b\xa6\x95\x1b\xdc\x0d\xef\xc6\xb8\x59\xc2\xc1\x83\x27\xca\x9f\x52\xac\x68\x6e\x1f\xef\xcd\x67\x50\x9e\x57\x82\xf9\xbd\x58\x53\x25\x88\x87\x29\x55\x82\xd8\x8f\x52\x25\x88\x21\xa5\x4a\x10\x01\x3c\x53\x25\x88\x54\x09\xc2\x52\xaa\x04\x91\x2a\x41\x78\x52\xaa\x04\xf1\xf0\xe0\x52\x25\x88\xcf\x16\xdb\x9a\x2a\x41\x3c\x4c\x09\xe5\x99\x2a\x41\xa4\x4a\x10\x5b\x94\x2a\x41\x3c\xb5\x69\x91\x2a\x41\xa4\x4a\x10\x0d\xa5\x4a\x10\x23\x28\x55\x82\x18\x47\xa9\x12\xc4\x83\xf4\xcc\x72\x43\x52\x25\x88\x94\x1b\xb2\x2f\x9f\xe7\x97\x1b\x02\xa9\x12\x84\x1f\xa5\x4a\x10\xe3\x29\x55\x82\x18\x47\xa9\x12\xc4\x78\x9e\xa9\x12\x44\x47\xa9\x12\x44\xaa\x04\xf1\x99\x1e\xdd\x54\x09\x22\x55\x82\xd8\x4d\x29\x46\x90\x2a\x41\x8c\xa3\x54\x09\xc2\x9f\x69\x7a\xed\xfb\xf3\x79\x7e\xaf\xfd\x54\x09\x22\x55\x82\x78\x90\x42\x4c\x37\x49\x95\xa8\x65\xe6\xa3\x22\x87\xe7\xea\x8d\x28\xab\x5a\x53\xf8\xd8\x30\x6c\xf5\xbe\xc7\x9c\x66\x6b\x9b\x70\xd5\x93\x8e\x4f\x01\x9b\xce\x04\x9f\xb3\x45\x2d\x31\xf9\xfe\xa4\x24\x9c\x2c\xe8\x24\xb3\x13\x9d\xb4\x2b\x37\x69\x47\x79\xf2\x59\x41\xa7\x0b\x56\x32\x9f\x0a\x12\xb0\xb5\xf7\xef\x90\x53\x17\x1f\x0d\x80\xb7\x94\xe4\x13\x3e\x88\x48\x29\x6a\xae\x6d\x9e\x00\xae\xb7\x27\xcf\x76\x97\x6c\x9c\xdb\x3c\x09\xbb\x43\x10\x00\x11\x78\x06\x47\x07\x62\x18\xe7\x5d\x2d\x8d\xcb\x60\x6b\xb9\x22\x5a\x53\xc9\x5f\xc3\x7f\x1e\xfe\xf5\x8b\x9f\x27\x47\x5f\x1e\x1e\xfe\xf0\x72\xf2\xef\x3f\x7e\x71\xf8\xd7\x29\xfe\xe3\x5f\x8f\xbe\x3c\xfa\xb9\xf9\xe2\x8b\xa3\xa3\xc3\xc3\x1f\xbe\x79\xff\xf5\xf5\xe5\xd9\x8f\xec\xe8\xe7\x1f\x78\x5d\xde\xd8\xaf\x7e\x3e\xfc\x81\x9e\xfd\xb8\x27\x93\xa3\xa3\x2f\x7f\xe3\xfd\x38\x0c\x30\x3f\xe2\x18\x1f\x51\x4c\x8f\x47\x30\x3c\x1c\xba\x24\x8a\x78\xf8\xe8\x78\xc5\x11\x10\xce\x63\x12\x5f\x40\x34\xfa\x0a\x33\x88\x9b\x31\xfb\x3b\x21\x45\xc9\xb4\xa6\x39\xba\x8c\x7a\xe5\x45\x7c\x71\xe0\x4c\x0f\x9a\x71\x3b\x91\x8b\x09\x46\xde\x10\x68\xa6\xfa\xb8\xea\x5e\xa6\xac\xd0\x4b\x2a\x6f\x99\x77\x3c\xc8\x3c\x90\x78\xe7\xcd\x40\x21\x38\xc9\xe9\x9c\x71\x6f\x07\x09\x1a\x71\xa3\xed\xb7\x24\x86\x93\x18\x1e\xc3\xe5\x39\x89\x61\x45\xb3\x5a\x32\xbd\x7e\x23\xb8\xa6\x9f\x3c\x1c\x22\x43\x29\x7c\xe5\xd8\x81\xc0\xef\xf8\xe6\x39\x55\x22\x6f\xb2\xda\x64\xcd\x31\x75\x3d\xd0\xa4\xda\xe7\x1e\x57\xa2\x60\xd9\xfa\xa4\x59\x12\xbc\xb0\xf4\x93\x3e\x79\xb4\x37\x80\x26\xea\xa6\x13\x1f\x74\x62\x5e\x7e\x9d\x94\xd8\x1a\xc7\x67\x65\xf8\xa3\x25\x7c\x29\xd9\x8a\x15\x74\x41\xcf\x54\x46\x0a\x94\x8f\x31\x74\xfd\xe9\x1d\xbc\xfd\xe3\x43\x5a\x8a\x42\xc1\xed\x92\x1a\x9d\x04\xc4\xcc\x1d\x5d\x6f\x19\xf1\x65\xba\x20\x8c\x43\x69\x8e\x41\xd5\x0c\xd4\xdc\x06\xa3\xb1\xbc\x15\x7e\x45\x24\xe5\xba\x19\x9c\x2b\x30\x34\x13\xa2\x70\x29\x76\xde\x98\xeb\x76\x05\x5c\x2e\x31\x17\x3f\x71\x7a\xfb\x93\x19\xb9\xef\x58\xe7\x05\x59\xb4\x35\xcb\x14\xd5\x0d\xd8\x2b\x24\x23\x1b\xec\xa9\xb4\x93\x8f\x7c\x08\x30\xa7\xaa\xa6\x40\x8a\x5b\xb2\xc6\xa3\x10\x67\xbc\x4c\xbd\x86\x57\x47\x28\xc6\x88\x82\x76\xbc\x39\xfc\xd6\x37\x44\xbe\x24\x0a\xde\x9c\x5e\xfe\x74\xf5\x97\xab\x9f\x4e\xdf\xbe\x3f\xbf\x08\x31\x27\xcc\xe9\xa1\x5e\x87\x3c\x23\x15\x99\xb1\x82\xf9\x5b\x11\x5b\xb8\xcb\x3e\xcb\x00\xa3\x30\xcf\x4f\x72\x29\x2a\xbb\x87\xb2\xe6\x58\xd6\xaf\xab\x7f\xe3\xeb\x49\xee\x7b\x0d\x7b\x15\x02\xcd\xe1\xf6\x75\x46\xce\x07\x53\x86\x85\x24\xdc\x58\xf3\xe8\x99\x0a\x88\x76\x3b\x68\x8e\xac\xb9\x66\xe5\xe7\x9b\x7c\x4d\xf2\x58\x89\xd7\xa7\x79\x4e\xf3\x18\xc7\xeb\x39\x26\x1e\xbc\x69\xa6\x15\x92\x71\x03\x5d\xd5\x44\xb8\xfc\x70\x75\xfe\xbf\xe3\xac\x16\xb8\x15\x0b\x09\x60\x45\xa8\xd9\x22\x45\x15\xe9\x24\x7d\x74\xd5\x3b\xd2\x59\xba\x8f\x7e\xa1\x67\xa9\xb5\xe4\x62\x60\xa6\x3e\xd6\xbc\x27\xab\xbd\x0b\x18\x74\x63\x82\x52\xe4\x74\x0a\x97\xd6\x40\xa2\x2a\x0a\xcf\x5e\xd9\x38\x22\x29\x18\xc6\x5c\x33\x52\x78\x9b\x9a\xf4\x6f\x35\x5b\x91\x82\xda\x04\x3f\x2c\xe1\xd0\xaf\x1f\x18\x41\x37\xcf\x49\xa1\x82\x94\x9e\xbf\x4d\x64\x8c\xd3\xf7\xa2\xe6\x31\xf0\x49\x2d\x2f\xc8\x29\x17\x3a\xc8\x9f\x69\xe6\x85\x05\x1f\xa5\xc8\xc0\xfa\x34\x83\xa0\xd8\x0d\x36\xaf\x67\x54\xa1\x01\xe7\x5f\x34\x19\xac\x09\xee\xf6\xf1\xb2\x9d\xbb\x8d\xfd\xd6\x2a\x68\xfa\x5b\x26\x51\x28\x94\xc5\xcc\x5f\x52\x92\x63\x25\x9f\x8a\xe8\xa5\xc5\xe9\x95\x44\xdd\x78\xfb\x1e\x91\x8d\x7b\xd3\x39\x2f\xb1\x2d\xc0\xd3\x2e\xc6\xb5\xbf\xf0\x9b\x53\xa2\x6b\x49\xed\xab\xcc\x26\x03\x52\x4e\x66\x85\x2f\xb2\x3a\x50\x90\x9a\xb5\xfb\xc0\x8b\xf5\x47\x21\xf4\x57\x6d\xb5\x95\x08\x97\xe6\x7b\xf7\x82\x1f\x06\x76\x03\x1e\x5a\x08\x91\xcb\x27\xb8\xd1\x28\xac\xc2\x8b\xc3\xb8\x33\x6e\x8e\xfb\x13\x8a\x2a\x59\xf3\x53\xf5\xb5\x14\xb5\xa7\x65\xb4\xf5\x78\xfb\xfa\xfc\x2d\x4a\xf4\x9a\x07\x3c\x5e\x28\xd7\x72\x8d\x95\xd0\x62\xb4\x7d\x80\xbe\xbf\xe0\x5b\xa3\x12\x37\xee\xbf\xaf\xa0\x9a\x43\xcd\x15\xd5\x53\x78\x4f\xd6\x40\x0a\x25\x1a\x27\x87\xb7\xca\xbd\x44\x44\x7e\xdf\x15\x3b\x05\xac\x2c\xea\xfd\xb8\x64\x1c\x66\x42\x2f\x61\x83\x6d\x40\x29\xd1\xed\x31\x62\x85\xa8\x20\x20\x7d\xd7\x99\x83\xf1\xcd\xa1\xfa\x4a\x7c\x72\x43\x15\x54\x92\x66\x34\xa7\x3c\x0b\xba\x5f\x91\x10\x33\x7f\xfc\xbd\xef\x0d\xbd\x10\xdc\x08\xc9\x08\x77\xf4\x9c\xe7\x2c\x23\xda\x7a\x21\x75\x14\x07\x03\x62\xf5\x9c\x67\x8b\x60\xf1\x20\x23\x22\x3d\xd9\xd6\x8a\x4a\x8c\x8a\x6a\x59\x53\x7b\xb0\xbe\xa9\x67\xb4\xa0\xda\xb7\xd8\x22\x34\x15\xa0\x89\xb6\x95\xcd\x58\x49\x16\x14\x88\x6e\xc4\x80\xbf\x8f\x89\x72\x65\xd4\x29\xae\x24\xd3\x90\x0b\xda\x96\xe4\xf2\x75\x76\x28\xf8\xf6\xfc\x2d\xbc\x84\x43\xb3\x86\x47\x68\x4f\xcc\x09\x2b\xfc\x6b\x73\x60\xd6\xc0\x86\xfd\xc3\xe6\xcd\x70\x7d\xb5\xd7\xb9\x93\x7d\x20\xa4\x55\x5f\xc7\xc0\x05\xa8\x3a\x5b\x36\x6b\xed\xef\x83\x6d\xdc\xc5\x2e\x03\x08\x71\x34\x4e\xc0\x7a\x72\x6c\xc5\xf2\x5d\x02\xd6\x77\x6d\x2d\xd3\x5d\x02\xd6\x3b\x3e\x99\xdf\x25\x60\x83\x10\x89\xcf\x5c\xc0\x06\x1a\x30\xdf\x2a\x2a\x23\xd9\x2f\xdf\x3e\x73\xfb\xa5\xff\xc4\x35\xb2\xb2\xdb\x59\x7f\x03\xc1\x0a\xc4\x92\x6a\x92\x13\x4d\x9c\x5d\x13\x5a\x43\x74\xdb\x26\x4a\x97\xef\x79\x5e\xbe\xa7\xb4\x6e\x14\x7d\xc7\x78\xfd\xc9\x26\xac\xc4\x0a\x20\x5d\x9d\x21\x53\xc8\xc2\x96\x18\x8f\x2e\xa9\xaa\x82\x61\x45\xc9\x8d\x1c\x8a\x20\xc5\xd9\x6f\x14\x10\x2e\x1c\x9a\xe7\x0c\x2a\x4e\x52\x14\xc2\x18\x78\xe6\xcd\x4a\x78\x2e\x7c\x91\xec\x1b\x8b\x88\xce\x0e\x3a\x68\x93\x37\xc5\x4b\xee\x7b\xd7\x92\x68\xf8\x0c\x44\xc3\x93\x06\xfe\x0a\xba\xa2\xde\x7d\x0d\x36\xbb\x0f\x1a\x5e\xc0\x54\x73\xac\x03\xa2\x07\x38\x2c\x28\xc8\x8c\x16\xd6\xf2\xb7\x22\x22\x42\x3e\x5c\xb0\x70\x89\x12\x26\x93\xa2\x88\x55\xef\xe3\xa3\x28\x30\x19\x86\x44\x58\x76\x33\xac\x5f\xf0\xaa\x23\x8b\x38\xab\x7e\xbd\xae\xa2\xad\x3a\x86\x0c\x7e\xb9\xab\x5e\x7b\x3f\x1c\x60\x73\xd5\xcd\x1b\x24\xd6\xaa\xa3\x61\xff\xcb\x5c\x75\x45\xb3\x4c\x94\xd5\xa5\x14\x73\xe6\x2b\x67\xb6\x0c\x3e\xc7\xb4\x81\x9b\xfa\x1b\x7c\xb5\xa2\xbb\x12\xc2\x02\x0c\x91\xc1\xc0\x30\x78\x5a\x49\xb1\x62\xb9\xf7\x7b\x8d\x68\x6b\xd7\x34\x09\xd4\xff\x23\xd8\x7c\x44\x85\xb6\x61\x89\x06\x2e\xa5\x58\x51\x29\x9b\x4e\x02\x66\x94\x8e\xdd\x67\x5a\x3a\xd8\x1b\x6f\x10\xc1\x08\x12\x19\x29\xb0\xf1\x5f\xc8\x8d\x81\xcd\x5b\xb3\xc9\x36\x40\xb4\xb0\xd6\xa3\x8c\x80\x59\xc3\x0d\xc2\xf2\x2f\xa0\x69\xa8\x8d\xbc\x1c\x2e\x80\x8b\x9c\x3a\x34\x78\x00\x5b\x57\xfe\xd4\xc6\xa9\x9b\xd1\x86\xa7\xc1\x1b\x6b\xbb\xc1\x6f\xe7\x6e\xc4\x01\x1c\x71\xae\x5a\xb8\xfe\x08\xef\x83\x1b\x20\xda\xcd\xa7\x3c\x67\x7c\x81\x11\xe6\x63\x90\xb4\x20\x01\x05\x7a\xa0\xd3\x29\x37\xd6\x3d\x7f\x80\x12\xd3\x2d\x41\x00\xd7\x46\x64\x36\x9b\x83\xaf\x59\x26\x78\x48\x49\x01\x5c\x41\x0c\xde\x36\x2f\xce\x79\x28\x86\x88\x29\x78\xf1\xae\xb9\x44\xde\x9d\xc8\x9e\x9b\xe9\xf8\x02\xed\xbd\xf6\x46\x07\xac\x8f\x45\x6c\xdc\x30\x9e\xbb\xfc\xff\xfe\xa6\x86\xf0\x6d\xfa\x5f\x5b\xbf\xcc\x14\xbe\xc3\xe6\x9e\x61\xea\xca\x10\x91\xf4\x35\xfc\x95\x43\xbb\xa9\x30\xe9\x04\x5a\xd0\xcd\x43\x51\xb8\x25\xd0\x42\xc5\x43\xd7\xee\xc9\x0a\xb4\x8f\xd6\x09\x14\x56\x23\x0d\xac\xba\xdb\x05\x96\x09\x5b\x02\x84\x3a\x34\x57\xba\x1d\x7a\x98\x89\x9c\x4f\xe1\x5b\x8e\x32\xc7\xac\xef\x04\xb8\x88\xb0\x5d\xdd\xb2\x36\x27\xec\xc5\x53\xdd\xed\x5b\xc6\x73\x71\xab\xe2\xfa\x46\xbf\xb7\x4c\x1b\xc7\x93\x6f\xc5\x27\x45\xb5\x66\x7c\xa1\xfa\xfe\x51\x52\x14\x11\xf0\xf5\xbb\x1c\xa4\x61\xb7\xbb\xed\x8f\xbf\xed\xc0\x0b\x8c\x50\xda\x43\x68\xf1\x19\x8d\xc3\xd1\xd7\xdd\xba\x8d\xcf\xd8\xe5\x70\x0c\x80\xbf\x25\x87\xe3\x43\xb4\x28\x15\x79\x23\xcd\x24\x34\x23\xc5\x55\xe5\xdb\xee\x0f\x36\x2f\xde\xd7\xef\xaf\x4e\x87\x8c\xc3\x2c\x8f\xdb\x25\x95\xf6\x6d\x65\x38\x03\xc9\x4b\xa6\x94\x7f\xc0\xdd\xd0\x2d\x9d\x2d\x85\xb8\x81\xc3\x26\x51\x71\xc1\xf4\xb2\x9e\x4d\x33\x51\xf6\x72\x16\x27\x8a\x2d\xd4\x89\x13\x4c\x13\xb3\x5e\xbe\xe9\x4b\x38\x13\x5e\x30\xee\xe0\x8d\x18\x66\xe0\x5a\x81\xf0\xef\x1c\x0e\xdd\x92\x64\xed\x6a\xe3\x89\x0f\x51\xb6\xd8\xe3\xd8\xe6\xe2\xec\xd8\xc8\x8b\xb0\x52\x5f\x58\x1c\xfe\x49\xad\xc7\xed\x43\x7f\x11\xd4\x7b\xe0\x81\x83\x1f\xb8\x5e\xb6\x67\xa2\xad\x4b\xe7\x42\xeb\xe6\x33\x02\x38\x6e\x9c\x14\xe7\x05\x7a\x5a\x0f\x7c\x83\x69\x88\xb8\x13\x88\x6d\x70\x2c\xc3\x9e\xe5\x8d\x05\xd1\xa1\x24\x7a\x78\x87\x00\xd6\x9b\x48\x89\x16\xf3\x10\xc0\x73\x33\x59\x2f\x0a\x62\x02\x1e\x11\x35\x01\x7b\x23\x27\x02\x3e\x60\x68\xb0\x44\xb2\x02\xe0\xee\x28\x69\xa0\x40\x7f\x34\xc3\x05\xa2\x19\x2f\x10\x76\xf1\x5d\x65\xdf\x28\xdd\xaf\xaf\x7a\xbc\x82\x5e\xf2\x0d\x3e\xd4\xec\xa8\xad\xef\xde\x56\x4d\x2e\xd6\x4d\x8d\x7a\xf6\x77\xbf\xb3\x6e\x8e\x60\x67\xe3\x73\x61\xcb\xc0\xf4\x8a\xbe\x7b\xf0\x74\xed\x6f\x73\x30\x0f\xd6\xa2\x71\xe2\x97\x55\x61\x2c\x97\xc1\xe8\x3d\x47\x8c\x1c\x7b\x0d\xb6\x8f\xdb\xe5\x09\xe9\x03\xee\xca\xe6\x1f\xc3\x7f\xd7\x4a\x03\x69\xb3\xef\x9b\xda\xcf\xb8\x93\x1e\xcc\x9b\xb2\xd4\x98\x4a\x92\x11\xde\xb6\x7e\xd2\xa2\x89\x41\x78\x70\xcd\xd9\x7c\x4e\x9b\xfa\x03\x33\x0a\x15\x91\xa4\xa4\x1a\x33\xc3\x7c\xe1\xc4\x33\xba\x60\x36\x3d\x5b\xcc\x81\x98\x05\x3d\x38\x50\x5d\x41\x61\x1f\xf9\x81\x49\xdf\x4c\x43\xc9\x16\x4b\x8d\x97\x1c\x08\x14\x82\x2f\xb0\x6c\xa4\x1f\x9a\xb6\x10\x24\x07\x94\xf5\x42\xc2\x2d\x91\x25\x10\xc8\x48\xb6\x44\x98\xb2\x17\x78\x31\xaf\x25\x76\xee\xd6\x94\xe4\xeb\x89\xd2\x44\x9b\xb7\x2e\xb5\x25\x84\xec\xce\x79\x70\xcd\xb6\xca\x17\xda\x33\x80\xc1\xc9\x19\xd5\x3e\x7e\xe4\x26\x73\xc8\xa5\x0b\x35\xf6\x70\x5f\xd8\x04\x70\x9d\x17\x64\xf1\xdc\xea\x65\xa6\x46\xf3\x8e\x52\xa3\xf9\x7d\x29\x35\x9a\xdf\x9b\x52\xa3\xf9\xd4\x68\x3e\x35\x9a\x4f\x8d\xe6\x53\xa3\xf9\x0d\x4a\x8d\xe6\x53\xa3\xf9\x7b\x28\x35\x9a\x7f\x98\xe1\x53\xa3\xc5\x7e\x19\x4d\x64\x52\xa3\xf9\xd4\x68\x7e\x40\xa9\xd1\xfc\x53\x9b\x16\xa9\xd1\x7c\x6a\x34\xdf\x50\x6a\x34\x3f\x82\x52\xa3\xf9\x71\x94\x1a\xcd\x3f\x48\xcf\xac\xf5\x5c\x6a\x34\x9f\x5a\xcf\xed\xcb\xe7\xf9\xb5\x9e\x83\xd4\x68\xde\x8f\x52\xa3\xf9\xf1\x94\x1a\xcd\x8f\xa3\xd4\x68\x7e\x3c\xcf\xd4\x68\xbe\xa3\xd4\x68\x3e\x35\x9a\xff\x4c\x8f\x6e\x6a\x34\x9f\x1a\xcd\xef\xa6\x14\x23\x48\x8d\xe6\xc7\x51\x6a\x34\xef\xcf\x34\xbd\xf6\xfd\xf9\x3c\xbf\xd7\x7e\x6a\x34\x9f\x1a\xcd\x3f\x48\x21\xa6\x9b\xd2\x39\xf3\xe8\x30\xf8\x38\x2d\x04\x1c\x5a\xb6\x57\x96\x71\x56\xcf\xe7\x54\xa2\xd9\x8d\x23\xf5\x72\xdc\xec\x4e\xd2\x9f\x36\x69\x0a\x3e\x3c\xad\xe1\xa7\xa8\x3e\xc6\x6e\x07\xca\x26\x4e\xe3\x10\xfd\x00\x8f\xc3\x21\xba\xea\x94\xd8\x57\x4f\x52\xe5\xf7\xbe\x66\x1c\xce\x3e\x7c\x35\x8d\xd0\x3d\x21\xa4\xf0\x30\xae\xc9\x07\x9e\x85\x26\xeb\x74\x87\x2c\xac\x08\x68\x53\x00\xd4\x9d\xb5\xac\x10\xca\x62\x6b\xed\xe6\x65\x4b\xc2\x39\xf5\x49\x50\xb1\x02\x91\x69\x74\xbb\xcd\x28\xe5\x20\x2a\xca\x2d\xfe\x9f\x80\x62\x7c\xe1\x55\x6c\x81\x68\x4d\xb2\xe5\xd4\xcc\x9f\x37\x07\xcc\x35\x5e\x6c\x47\xed\x73\xd5\xb4\xa4\xa4\xb4\x07\x4d\xd2\x92\x30\x3b\x5c\x20\x99\x14\x4a\x41\x59\x17\x9a\x55\x01\x03\x06\x45\x31\xcd\x5a\xd9\x9c\xff\xe6\x10\x80\xd7\x75\x53\xd4\x82\x3d\xb1\xcc\x7d\xbb\x06\x6e\x79\xbd\x4c\xb0\xee\xaa\xe1\x03\xfe\x18\x7b\x6e\x97\x95\x5e\xdb\x84\x28\xcf\x0b\x3c\x67\x52\x69\xc8\x0a\x86\x2f\x38\x5c\x07\x8a\x9a\x0c\xc7\xec\x83\x00\x26\x3c\x37\x9c\xb9\xdb\x23\xe5\x36\x89\xe7\x68\x80\x56\x5e\x06\x3f\xa6\xe5\x34\x79\x5f\xb4\x19\x6e\xce\x94\x7b\x50\x28\xaf\x81\x36\x8d\x87\xec\xe5\x6a\xf6\x08\xaf\x57\xee\xd9\x41\xa3\x99\xb3\x63\xd2\x1b\x72\xc0\xfd\xc7\x5e\x41\xce\x2b\xde\xaa\x00\xdb\xe5\xa7\x11\x90\x5e\xf3\xdf\x4e\xc6\x6d\xfa\x46\xa0\x82\xf0\x60\xd9\x53\x29\x78\x4d\x39\x5d\x19\xed\x45\x33\xca\x56\xc6\x08\xf7\x60\xb9\x53\x1f\xfc\x43\xd5\x81\xa6\xb2\x64\x1c\x93\xb6\xde\x53\xa5\xc8\x82\x5e\x7a\x45\xbf\xef\x7a\x5b\x63\x00\xbc\x39\x8c\xde\xd7\xb8\xb0\x25\xc5\x5a\xe3\xb6\x4b\x41\x38\xf0\x4a\x0f\xed\x26\x0d\xa5\x9d\x75\x5b\x17\xe5\x56\x32\xad\xa9\x97\x61\xa3\x6c\x63\x32\x04\x0e\x6d\x16\xad\xf4\x1b\x68\x2f\xbd\x02\xde\x37\x03\xb5\x03\x34\x1f\x67\x8c\x54\xee\x57\x8e\xd1\xa2\x9c\x66\x92\xd1\x39\xcc\x19\x66\x31\x20\xde\xfe\xd8\x36\xc2\x20\x3e\xa3\x25\x1c\x88\x52\x54\xe2\xba\x3a\xbc\x75\xb3\xbe\x53\xf8\xde\x3b\xcf\x54\xcb\x9a\x67\xa4\x6b\x2b\x6b\x8b\x48\xb1\x39\x2c\x10\xd9\xef\x23\x75\xb0\x8d\xf5\xef\x5f\xfe\xfb\x1f\x61\xb6\x36\x0f\x0d\xc4\xb2\x68\xa1\x49\xd1\x0c\xd8\x83\x69\x41\xf9\xc2\x9c\x76\xab\xb2\x87\x25\x85\x02\xd2\x6c\x0b\x56\x32\x6d\x73\x5f\x5f\xfd\xf6\x66\x36\x78\x93\x79\x70\x3c\xc9\xe9\xea\xa4\x77\x03\x26\x85\x58\x4c\xe1\x4d\x93\x78\xe9\xc1\xb1\x49\xd5\xf4\x4d\x54\xf4\x7a\xe6\xef\x10\x5c\xd8\xfc\x3e\x50\x74\x35\x3d\x86\x60\x29\x6e\x6d\xe3\xc1\xee\x73\x3c\x96\xa6\x91\x2e\x5d\xde\x61\x25\xaa\xba\xb0\x99\xad\x5f\xf9\x95\xfb\x42\x49\x55\x2b\xba\x59\x7b\xe6\x0e\x59\xee\x27\x1c\x9a\x61\x6e\x3c\x84\xac\x90\x08\x58\x08\xe1\x0a\x37\xb8\xe8\x52\xdb\x24\xa8\x96\x5e\x99\x8f\x5f\x91\xa2\x98\x91\xec\xe6\x5a\xbc\x13\x0b\xf5\x81\x9f\x49\x29\xe4\x60\x85\x7c\xee\x31\x31\x56\xe3\xb2\xe6\x37\xd8\xdf\xba\x9d\x7c\x21\x16\x20\x6a\x5d\xd5\x5e\xaf\xbf\xf9\xe6\x71\x6a\xd7\xc4\xb3\xec\x5b\x6b\x22\x3b\xa3\xb4\x37\x52\xfa\x89\xf9\x85\x3e\x6e\x99\x11\x60\x1c\xa8\x59\x47\x2b\x15\xbb\x59\xfb\x3d\x16\x7a\xe2\xeb\xb7\x2f\x7f\xff\x6f\x56\xe0\x82\x90\xf0\x6f\x2f\x31\x29\xd3\xcb\xbc\x45\x53\x00\xed\x2f\xa6\x40\x95\xa4\x28\xa8\x0c\x15\x8c\xe6\x3a\xf6\x04\x61\x2b\xd6\xfe\xa1\x52\x4d\x87\x0a\xb0\x47\x74\xfe\x5c\x5f\xff\x05\x3d\x3f\x4c\x2b\x5a\xcc\xbd\xac\xf2\x42\x89\xae\x35\xe8\x01\x1a\xd3\x07\xce\x16\x31\xaf\x49\x1f\x11\xf0\xb4\xee\x94\x95\x28\xea\x92\xbe\xa5\x2b\x96\xf9\x84\xb5\x06\x5b\x37\xe0\xe5\x9f\xf9\x5c\x30\x85\xbd\x9b\x66\x85\xc8\x6e\x20\x77\xec\x3a\x58\xbb\x8f\x15\xb2\x0e\x2d\xc1\x1e\x92\x84\xe0\x9d\x7c\x70\xe7\xea\x76\xa9\x03\x5e\x0e\x5e\x02\x25\xa9\xaa\xb6\xe8\x87\x24\xb7\x83\xc5\xf6\xe2\x69\x24\x2f\xd6\x59\x0d\xaa\x73\x1f\x18\x1c\x0e\x09\x0d\x4f\xdc\xec\x3d\x6d\x0e\xef\xbc\x84\xd0\xa8\x72\x37\x6a\xdf\xc0\xd7\xe0\x98\x75\xec\x42\x6b\x17\x54\xc8\xc3\x26\xad\x47\x6a\xc5\xd6\xab\x8c\x64\xc7\xd9\x3e\x7b\xcd\x81\x0e\xa8\x2a\xa6\x85\x6f\xd0\x31\x38\xd2\x17\x92\x05\x32\xd8\x39\xde\xc6\x54\x4b\xa2\xbd\x9c\x15\x96\xfa\x45\xfe\x08\x54\x54\x2a\xa6\x8c\x8d\xfe\x1d\x0a\xa0\x37\x05\x61\xbe\x81\xb3\x36\x78\x52\x09\xdf\xad\x0a\x58\x6e\x2b\x40\xb1\x8f\x77\xa8\xa6\xbb\x14\xb9\x63\x87\x8a\x09\xdd\x26\x5e\x11\x95\x2d\x37\x4b\x68\x49\x8a\x68\xe6\xdf\x53\xaa\xba\xef\xba\x9d\x0a\xd7\x74\x86\x4b\xab\xea\x2c\x67\xa7\xac\x3c\x39\x7e\xbe\x0a\x0e\xd7\xe2\x73\xd3\x6f\xed\xa0\xa3\x08\x49\x54\x6c\xce\x56\x09\x51\x6e\xdd\x5b\xb5\x8b\x54\x2c\xa9\x13\x0a\xde\x5c\x3b\x37\x8b\xf3\xc4\x4e\x1d\x58\x94\x7b\x37\x75\x6e\x87\x0a\x07\xaf\x0f\x9e\x4c\xc9\xd9\x4d\x94\xa2\x22\x0b\xf4\x1d\x44\xd9\xcb\x4d\xa6\x01\x08\x2f\xeb\xd6\xa0\x0a\xdd\x66\xc8\xd7\xb7\x12\xa2\xa5\xca\x8d\x8a\xe6\x5d\x09\x74\x6c\x6c\x10\x90\x7e\xdf\x3b\x72\xce\x61\x62\x0b\x37\xde\x06\xe4\x45\x13\x29\x6a\x9e\xbb\x68\x70\x0b\x41\x78\xbf\xb1\xb0\x17\xfe\x15\xcc\xd0\xcd\xd3\xb4\x7d\x31\x4f\x5c\x4c\x94\x64\xca\xb7\x18\x9e\xe3\xc9\xe1\xd5\xf4\xd5\xcb\xcf\xdf\x66\xc3\x35\x89\x64\xb3\x5d\xb4\x36\x9b\xd5\x72\x4f\xb6\x3a\x92\x92\xfc\x03\x2f\x3c\x3c\x41\x96\x86\xf9\x06\x2e\x24\x65\x98\x4e\x04\x0f\xa8\x35\xc1\x9a\xc6\xf6\xc8\xea\x56\x32\xed\x6e\xd0\x2d\x0b\x48\x54\x3b\x44\xa7\x0d\x08\xd9\x2f\x41\x7c\xd4\xf9\xf2\x02\x9e\x24\xbe\xfe\x20\xf7\xf7\x81\xdd\xbd\x01\x54\x3d\x7b\x76\x7a\xd7\x2a\x58\x2b\x54\x77\xc5\x53\xfd\xd7\xdb\x71\xde\x56\xc1\xde\x1c\xfb\xd8\xc3\x17\x2f\xe0\xd0\x7e\xc2\x81\xad\x66\x77\xf4\x64\xd7\xd3\x6d\xeb\xd9\xa7\xca\xbb\xff\xe2\x60\x6b\xcf\x3e\x55\x84\xe7\x34\xb7\x0f\xfe\x00\xd3\x1a\x9a\xa2\xd3\xbb\xf6\x38\x5c\x6d\x1e\xa8\xe1\x1e\x7b\x73\xec\x9b\x67\xff\x41\x97\x64\x45\xb1\xe6\x1f\x2b\x88\x0c\x10\x4f\x5a\xc0\x95\xdd\x19\x98\xd5\x1a\x28\x5f\x31\x29\x78\x49\x03\x0a\xbb\xaf\x88\x64\x64\x56\x50\x90\x14\x0b\x07\x67\x54\xc1\x6f\x0e\xbf\x3b\xfd\x88\x30\x6b\xff\xf6\x11\x44\x52\xa0\xcd\xae\xd7\x0a\xd3\x73\x23\xdd\xc2\xde\xb4\xa7\x1b\x17\xc8\x5f\x44\x6f\x5c\xbc\x66\x9d\xcd\x0d\xf0\x5f\x03\x9e\xb7\xfb\x65\xd6\xa3\xac\x75\x4d\x0a\x2c\xfb\x98\x15\xb5\x62\xab\xa7\xd0\xbf\xae\x0c\xe7\x5b\xe6\x71\xb3\x37\xca\x97\x76\x97\x66\xab\xb6\xa7\x67\x09\x6f\x34\x2f\xe3\x75\x5f\x77\xc0\xcb\x03\xd5\xf6\xb8\xea\xb7\x06\xf2\x0e\xca\xb9\xb2\xd5\x33\xda\x6b\xa9\x07\xde\x4a\xab\xb3\xd9\xb1\x65\xc1\xd3\x85\xe7\x72\xae\xde\xe0\x7c\xc6\x1c\x8c\x61\x5e\xff\xa0\x54\xf0\xdb\x8b\xab\x5e\xfd\xf1\x51\x73\xb0\x6e\x45\x91\x4f\xe1\xb2\x2b\x60\xde\xb5\x18\xc0\xfe\x3a\xa3\xd1\x26\x46\x26\x53\xb9\xb0\x71\x5a\x33\xc0\x05\xe5\x54\xe2\x03\xcc\x0c\xb5\xd9\xcb\xf1\xef\xc4\x19\x51\xb6\xad\xe4\xdb\x8b\x2b\x8b\xd0\x18\xb3\x63\x9e\xee\x1e\x5f\x9f\x89\x79\x97\xd8\xea\x2a\xa3\x9d\x2d\x83\xbd\x3e\x6d\x83\x70\x66\xf1\xd0\x19\x6c\xd9\x8e\x3e\xac\xe7\x97\x40\xf2\x5c\x22\x7c\xd1\x3d\x01\x7b\x6d\x04\xfd\xd0\x5f\x6e\x87\xcd\xce\xf4\x67\xdc\x6d\xf9\x68\x8e\x68\x6a\x74\x1b\x0c\x6f\xeb\xaa\x60\x16\xb2\xd5\xfb\x80\xd1\x6c\x9b\x99\x4a\x5a\x8a\xd5\xf8\xab\xee\xef\x88\xf5\x74\xc3\x7a\x6b\x1e\xe1\xd7\x27\xef\x9e\x33\x27\xa9\x12\x85\xcf\x81\x6b\xba\x1d\x0f\xcf\x9a\x93\x0d\xc6\x38\x1d\xbf\x2a\xcd\x59\x6b\x3a\x49\x77\xa2\x65\xe3\xdc\x8c\x66\xdd\x3b\x67\x94\x6b\x69\x84\x6b\xe0\x99\x01\xf8\x68\x56\xae\x46\x80\x4e\x3b\x60\xb6\xa2\xdc\x28\xb1\x0f\x9e\xcd\xfc\x70\x50\xbd\xc6\xd2\x36\xc7\xc1\x76\x47\xa7\x44\xfa\xa4\xa8\xb4\xab\xea\xbd\x7c\xff\xf0\xeb\xb1\x19\x02\x7a\x7b\x71\x65\x75\xaa\x5d\x56\xd7\x6e\xd4\xc7\xf6\xed\x9f\xf8\x76\xd7\x5a\x3d\xe9\x79\x8f\x9f\xa4\x7f\x82\xbf\x67\x6c\xb0\xba\x1f\x5d\x9c\x23\xa4\x7a\x81\xf7\x13\x39\xa0\xd2\x9c\xf7\x27\x2b\x4a\x64\xb6\x1c\xbf\xe6\xf7\x88\x50\xcb\x12\x72\x81\x59\x0f\xe3\x75\xa2\x90\xe8\xb2\x9e\xa0\xfa\x2f\x84\xb8\xa9\xab\xa1\x54\x1d\xcd\xb2\xd1\xf8\x03\x0d\xee\x86\x59\x11\xbd\x1c\x3f\xc8\x3b\x45\x71\x4f\xb4\x8e\x66\xda\x1f\xd1\x3f\x87\x0e\xcf\xb9\x1a\x8f\x3e\x1e\xbe\x0e\xa8\xb6\x6f\x02\x64\xd3\x55\x74\x19\x2b\xbe\x06\x4f\xfe\x37\x45\xad\x34\x95\x5f\x31\xa9\xf4\x8b\xa6\xdd\x34\xde\xce\x71\x27\xc5\xbc\xcf\x0f\xfa\xcc\xbe\x67\x7a\xf9\x67\xa1\xf4\x05\xd5\x07\xc7\xc3\x1f\x1d\x8c\x7b\x39\x1e\xb8\x01\x1f\x80\x90\x70\x70\x21\x38\x3d\x98\x6e\x3c\x8e\xac\xfa\x1d\xc5\x95\xe1\x73\xc3\x2a\x97\x5d\x36\x8c\x5b\x5b\xb3\xd4\x23\xa5\x4c\x41\x33\xdd\x30\xe9\xdd\x96\x6b\x01\x4b\xb2\xb2\xcf\x3a\x9f\x8e\xbf\x8a\x6a\x20\xd8\xe3\x09\x39\x2f\xed\xda\xde\x0a\x79\x63\x1b\x36\x20\xf3\x91\xb1\x2f\xfb\x24\x5c\xf7\x8f\x55\xaf\x6b\x83\x16\x77\x6f\xe9\xf8\x17\xda\xc8\xfb\x62\x5b\x31\x5d\x51\xb9\x62\x19\x7d\xc7\xf8\xcd\xa8\x8b\x3a\xcc\x35\x3a\xdb\xe2\xe5\xd9\x3a\xee\xd6\x21\x67\x19\xb7\x09\xdc\xc6\x24\x21\x33\x51\x6b\x7c\xbb\x21\x88\xd2\xc3\xf1\x89\xf5\x1f\xfe\xdb\x9e\x1a\xc4\xab\x54\xb6\x45\x58\xcf\x51\xd7\xfa\x19\x47\x42\xa1\x31\xe4\xd5\x38\x0f\xd5\x9a\x6b\xf2\x09\x75\x97\xc8\x6e\xa8\x84\xc2\x2c\xc5\x14\xda\x54\x2c\x6f\x31\x82\xc0\xdc\x31\xb9\x1d\x7e\x91\x13\x5a\x2d\x69\x49\x25\x29\x5a\xdf\x99\xff\xa1\x78\xe7\xd4\x78\xcb\xb3\x97\x89\x33\x6a\x1d\x6c\xdf\x18\xd7\x3d\x4f\xe4\x53\x38\x0b\xe5\x58\x92\x35\xaa\x43\xcb\x98\x70\xa0\x9f\x98\x42\x80\x4d\x25\xf2\x5e\x4d\xb7\x51\x4c\x6b\x45\xe5\xa4\xad\x00\xe8\x2a\x2c\xa9\x26\x95\x0b\x72\x3a\xab\x17\x0b\xc6\x17\xe3\x74\x09\xda\x2a\x68\x11\x75\x6d\xd9\x3a\x3f\x13\xb6\xa9\xcb\x24\x25\x7a\xac\xad\x86\x56\xf9\x31\x7a\x80\x59\x9f\x77\x29\x72\xcb\x7a\xb6\xb6\xde\xbd\xb1\x8c\x9b\x7a\x39\x66\x90\x53\x38\xe7\x20\x64\x4e\x25\x96\x87\xc9\x73\x5c\xeb\x66\xf7\x46\xb1\xed\x9c\x90\x86\xd3\x70\xc7\x8e\xbd\xf2\x4c\x8c\x0c\x50\xdd\x68\x7a\x69\x62\xaa\x9e\x99\x87\x4c\x2d\xc7\xb6\xf3\x1c\xa2\x03\x48\x51\x2d\xc9\xa4\xa0\x2b\x5a\x80\xeb\xaa\x34\x3a\xf6\xbb\x14\x5c\x48\xbb\x1b\x8d\x87\x08\xdf\xac\x56\x78\xe3\x62\x9f\x6d\xdf\xd9\x51\x1f\xe1\x9a\xe8\x8d\xd7\x37\x63\x0d\x42\x0f\x63\x70\xf8\x32\xe0\x3b\xe6\x3a\x3e\x1f\xa6\x9f\x95\x8c\x6b\xe9\xa4\x01\xc9\xd1\xaa\xa7\x65\x25\x24\x91\x6c\x74\x14\x6c\xfb\x5c\xa2\x05\x39\x14\x0b\x63\xc7\x9a\x69\xb6\x62\xe6\x1d\xbb\x43\x8e\x74\xab\x31\x92\x6b\xef\xa8\xa3\x4d\xc3\x05\x34\xe7\xdd\x58\x80\x2a\x5b\xd2\xbc\x2e\xc6\xbf\x3b\x17\x35\x91\x84\x6b\x4a\xd5\x71\x03\xef\x59\xbb\x34\x6d\x2b\x5c\xda\x24\xf3\xb1\x21\x21\x23\xe6\x90\x1b\xfd\xc4\x34\xb6\xcf\x34\xdf\x41\x19\x66\x93\xd7\xf1\x5d\x33\x92\xab\x90\x1b\x59\xef\x7d\xe1\xe4\x1d\xd6\xc9\x48\xad\xb0\x1b\x82\x53\x25\xf4\x53\x46\x8d\xd9\xa1\x55\xbb\xc8\x63\x0f\x81\xcd\xfe\x61\x82\x1f\xb7\xd2\xd5\x9d\x59\xba\x62\x99\x47\xfc\x65\x97\x02\x45\x96\x6e\x9f\xf0\x2a\x8c\xe4\x39\x5b\xbb\xe0\x5a\xd1\x29\x8e\x0d\x65\x70\xbd\xa4\x63\x2f\x55\x5b\x5e\x0b\x2f\xe7\x8a\x91\x86\xe5\x6e\xd1\x3d\x92\x7b\x4f\xd0\x6f\x9e\x58\x5f\xa7\x60\x7f\xc6\x20\x78\xe6\x86\xde\x6b\xa1\x3a\x96\x23\xaa\x91\xbb\x1a\xa8\x86\x0a\xff\x8d\x1e\xaa\xe3\x34\xbd\xaf\x87\xce\x0f\x00\xec\x01\xde\xf5\x77\x03\x12\xb9\x08\x75\xae\x1e\x9c\xca\x45\x5d\x62\x5e\xb0\x73\x15\x75\x6d\xee\x7d\x5c\x82\xd7\x4b\x0a\xb9\x7d\x56\x60\x1c\xd6\x3c\x60\xde\xbc\x7f\xdb\x60\x13\x3d\x38\x32\x57\xe8\xc3\x55\x6e\x72\x4d\x9d\xf3\x29\x7c\xe7\xde\x42\x3e\x11\xed\x9d\x28\x8d\x01\xda\xc2\x83\xeb\x2e\x7c\xc6\xf0\xfd\xe6\x19\xcf\x27\x1d\xbe\xa4\xb3\x81\x9d\x17\xdb\x2b\xfe\x6e\xbb\x10\xb9\x35\x68\x52\x45\x18\xaf\xcc\x0b\xd6\xd7\x97\xdb\x62\x02\x78\xb6\x24\x7c\x61\xa5\x09\x0d\x44\xc1\xb8\xb7\xaa\x6b\xec\x4d\x55\x46\xaa\xc6\xa7\x42\x20\x17\xb5\xdf\xf6\xff\xe6\x37\xc7\xc0\xe8\x6b\xf8\x4d\x6f\x70\x53\x38\x73\xdc\xbb\xc3\xe1\xbb\x0a\xb6\xde\xcb\xac\x3b\x4c\xc7\x20\xe9\x82\xc8\xbc\xf0\x6b\xed\x21\xe6\xad\xcb\x01\x51\x5b\xcd\x61\x40\x33\x4e\x81\xf0\x01\x75\x70\xa1\x77\x61\x24\x7a\x65\xf6\x3c\x98\xde\x53\x98\x4f\x13\x75\xa3\x4e\xac\x83\x63\x92\x13\x4d\x26\xa4\xb2\x7e\x63\x26\xf8\x89\x0d\xe8\x4c\x5c\x6b\xd7\x09\x71\x42\x69\xd2\x5e\xa4\x93\x5f\xcb\x1a\xbb\xa7\x4f\x48\xfb\x5b\x8c\x4f\xc8\x04\x1b\x81\xfa\xd6\x93\xf8\x07\xa7\xde\x04\x44\x4b\xbc\x7b\x26\x6f\xba\xc0\x1a\xe1\x6e\xe7\x3e\x85\x0b\xaf\x7c\x07\xd7\x1b\x39\xef\x92\x51\x5d\x43\xd6\x4e\xfe\xfb\x88\xfa\x46\x63\x9c\x5d\x5c\x7f\xfc\xcb\xe5\x87\xf3\x8b\xeb\x46\x71\x34\x6a\xc0\x87\xeb\x5d\x8a\x23\xec\xa6\xdf\xa5\x38\x3a\x35\x10\x82\x62\xda\x54\x1c\x43\x35\xe0\xc3\x79\x5b\x71\x0c\xd5\x80\xcf\xca\x6e\x2b\x8e\x1d\x6a\xc0\xd3\x8a\xe8\xaf\xef\x4e\x35\xe0\x25\x9d\x7b\x8a\x63\xb7\x1a\xf0\xe0\xba\xad\x38\x86\x6a\xc0\xeb\x7e\x6d\x2b\x8e\x9e\x1a\xf0\x54\xf9\xdb\x8a\xa3\xaf\x06\x3c\x98\xee\x56\x1c\x49\x0d\xec\xf3\xa1\x5e\x6a\x80\xf2\x55\xa0\x0a\x68\x1d\xde\xbb\xa2\x0a\x3e\x93\x19\xb4\xb6\xec\x15\xc5\x8e\x71\xa8\x3e\x8f\xfd\x1c\x62\xf4\xf9\xea\x3b\x22\x41\xd2\x4a\x52\x85\xef\x2a\xcf\x9c\x90\x5d\x1b\x04\x8e\xa9\x6f\x6b\x7e\xd2\xc1\x8d\x3f\xbb\x94\xda\x27\x4a\x8a\x8d\x96\x80\xd6\x24\x8d\xd9\x37\x76\xbc\x94\x83\x69\xdb\xe4\x84\xc0\x9b\x9f\xce\xdf\x9e\x5d\x5c\x9f\x7f\x75\x7e\xf6\xf1\xc9\xb2\x5e\x82\xda\x47\x0e\xcd\xd5\x38\x96\x9a\xa5\xfb\xed\x35\x6f\xb6\xb6\x82\x3a\x5d\x31\x51\x2b\x87\x4b\xcb\xa3\xee\xaf\xda\x92\xad\xde\x2c\xb1\xfa\x2c\x5f\x37\x51\xea\xb8\xc3\x9c\xee\xf4\x54\x78\xf3\x8d\x6a\xa8\x5a\xba\xc7\x5c\xf5\xe6\x19\xd5\xdb\x61\xe9\x6e\x9f\x87\xff\xc6\xc7\x36\x79\x2d\xdd\x6b\xf8\x86\xec\xfc\x1d\xe6\xaf\x37\xcb\x7b\xbc\x27\xde\x3c\x1b\xe3\x79\x98\x3a\xe5\xdd\x7e\x25\x8e\xd8\xfd\x4a\x8a\x32\x8a\xe8\xbd\xb2\x81\x36\x87\x2e\xf3\x5e\xa4\x5d\x46\xcc\x81\xb2\x63\xf5\x3f\x77\x3d\xb7\x95\x73\x0d\x34\x8d\x22\xbc\x59\x1a\x7e\x58\x23\x31\x4c\x6d\x06\x35\xee\x8e\xd1\xed\xda\xa6\xdf\xbc\x27\xd5\x37\x74\xfd\x91\x06\x74\x68\xd9\x42\x1d\x16\x34\x33\xc6\x2c\xdc\x8c\x0e\x8f\x0d\x09\xc1\xd6\x6f\x9a\x61\x86\xb4\xb6\x79\x56\xbd\xd2\xc3\x96\x25\x56\xa3\xf3\x1b\xea\x5d\x0b\xa0\xa1\xad\xc6\xdd\xa1\x1b\x0e\xcd\x2b\xd1\x9c\xa0\x90\xfd\x86\x98\x4d\xce\xa3\xb7\x84\x3f\x70\x06\x7e\xf8\x5a\x75\xc6\x8e\xb6\x6e\x95\x60\x96\xfb\xb7\xcd\x11\x2b\x63\x1b\xd2\xdb\x13\x97\x8b\x3a\x31\x76\xc7\xc4\xde\x31\x75\x82\x29\x5a\x27\xbf\xc6\xff\x04\x0f\xca\x36\xce\x3b\xcd\x73\x57\x5d\xa5\x56\x74\x5e\xfb\x54\xbe\x1e\x12\x22\x9b\xd4\x14\x48\xc5\xbe\xa3\x52\x31\xe1\xd5\xbe\x61\x48\x37\x8c\xe7\xc7\x50\xb3\xfc\x4b\xff\xee\x6a\x96\xa2\x9d\x5f\xe1\x85\xd6\xdc\xa6\x1d\x99\xa7\xe1\xd7\xbd\x6f\x6f\xb5\xa2\x3e\x98\xab\x2d\x28\x6b\xe4\x51\x83\xb8\x08\x66\xe9\x1e\x6c\x51\x36\x35\xa4\x00\x08\x34\x07\x37\xa6\xce\x3e\x68\x95\x76\xd0\xfc\x2c\x54\xb0\xed\xa2\x97\xbf\x6e\x5a\x66\x86\x89\x80\x92\x6a\x92\x13\x4d\xa6\x46\x9a\x1c\x0f\xbf\x54\x15\xc9\xbc\x9a\x79\x74\xf4\x5f\x2d\xc3\x82\xcc\x68\xa1\x7e\x38\x38\xf8\xd3\x37\x67\x7f\xf9\x5f\x07\x07\x3f\xfe\x57\x2c\xce\x68\x86\xa2\xe7\x3a\x22\x7b\x44\x21\x71\x91\xd3\x0b\x5c\x17\xfc\xd2\x3d\xd8\x4f\xb3\x4c\xd4\x5c\xe3\x0f\xc2\x3e\x03\x8b\xb3\x4f\x97\x42\xe9\xf3\xcb\xe3\xe6\xcb\x4a\xe4\xe7\x97\x51\x18\x23\x27\x15\xd0\x8a\xf2\x99\x19\x77\x78\x05\x3c\xcb\xf9\x35\x14\xcb\xc4\xeb\xf4\x5a\x54\xd1\xef\x78\x86\x0b\x69\x2b\x27\x54\xb6\xa4\x25\x09\x7a\x3b\x36\xf4\x55\xb3\xf8\xc0\x54\x40\xd3\x95\x21\x31\x8e\x05\xf6\x15\x88\x79\x94\x1e\xac\x96\xb4\x80\x17\xab\x57\x2f\x9e\x8d\x91\xdb\x9e\xdb\xa8\x47\x05\xf7\x22\x92\xa1\x6b\x95\x4b\xfb\x3c\x88\xb2\xaf\xcb\x7e\xf2\xc1\xe9\xe5\x79\x30\xd3\x95\xbd\x1b\xcf\x62\x5b\x1b\x28\xe8\x57\xcf\xd4\x5a\xe8\x30\xda\x1b\x85\xa8\xc3\x8e\xa0\xe0\xc5\xba\xe5\xad\x6c\xab\x88\xb0\xfb\x4a\x78\x8e\xda\x81\x2a\xad\xe0\xd0\x32\x9c\x66\x55\x1d\xa6\x00\x1d\x9f\x92\x96\x42\xae\x8f\x9b\x2f\x5b\x10\xf0\x44\x69\x21\xc9\x22\x50\x7d\x37\xc3\xc6\xe1\x76\x5f\xd9\x0f\x8d\xb6\x28\xdb\xa3\xf6\xf7\x69\x83\xcb\x0d\xcd\x6a\x69\x9e\xb5\xc5\xba\x6b\xbb\xfe\xcb\xb1\x12\x3c\x91\xf3\x7d\x8a\x65\x24\xb4\xb7\xee\x22\xba\x9b\xe3\x4d\x70\x18\xaa\x21\x74\xc1\xb4\x6b\x0f\x73\x2f\x1c\xe3\x90\x5c\xa9\xf0\xe3\xf6\x79\x1c\xee\x4e\x10\x12\x28\x5f\xc1\x8a\x48\xcf\x36\xc1\x1d\x45\xd3\xeb\x39\x5b\x31\x25\x02\x45\xea\x5d\x55\xa7\xa2\xe8\x75\xd7\x07\xc8\xe6\xc7\xc6\x32\x2a\xe9\xa7\x0a\xfb\x49\xb6\x7a\x20\xdc\xb3\x93\xf7\xa3\x37\xaf\xfc\x2b\xdf\x59\xaa\x88\xd6\x54\xf2\xd7\xf0\x9f\x87\x7f\xfd\xe2\xe7\xc9\xd1\x97\x87\x87\x3f\xbc\x9c\xfc\xfb\x8f\x5f\x1c\xfe\x75\x8a\xff\xf8\xd7\xa3\x2f\x8f\x7e\x6e\xbe\xf8\xe2\xe8\xe8\xf0\xf0\x87\x6f\xde\x7f\x7d\x7d\x79\xf6\x23\x3b\xfa\xf9\x07\x5e\x97\x37\xf6\xab\x9f\x0f\x7f\xa0\x67\x3f\xee\xc9\xe4\xe8\xe8\xcb\xdf\x04\x0e\x3c\xb0\x9d\xbb\xa5\x58\x4d\xdd\x87\xdc\x22\x5c\x97\x47\x69\xf0\xde\x51\x73\x1c\xe3\xca\xd9\x8f\x11\x74\xd2\x70\x7c\x9d\x99\xfd\x2c\x04\x99\xa2\x99\xa4\xfa\x79\xc7\xa9\xec\x18\x7b\xcd\x34\x02\x0a\x6e\x42\x53\x36\xae\x22\x41\x36\xc2\xb3\xb2\x79\x52\xd8\xeb\x3e\x6a\x9c\x21\xf6\x14\xc5\x7b\xe5\xce\xa5\x28\x9b\x86\x05\x08\xfc\x5a\x91\x82\x85\x7a\xb1\x9b\x1b\x69\x66\xfe\x2c\x9e\xba\x90\xc2\x74\x29\x4c\x37\x86\x52\x98\x6e\x1c\xf5\xc3\x74\x57\x78\xf7\x53\x8c\x6e\x17\x51\xbe\xf2\x03\x56\xed\x44\xde\x37\x3e\xac\x5e\xef\x5c\x8f\xb9\xed\xc4\xef\x6f\xc3\xf0\x3d\x38\x3b\xe5\xd7\xa1\x59\xbb\x1c\x2f\x5f\xf7\x46\xb9\x1b\xa1\x0c\xa7\x45\x01\x8c\xfb\x2a\x2f\x1c\x64\x57\x35\xce\xba\x93\x80\x28\x2c\x91\xb0\xf2\x03\xb5\x36\x45\x1c\xfa\xf5\xa4\x15\x60\xfd\x85\xd1\x55\x71\x2c\x7d\x6f\x8b\x40\xdc\xd8\xba\x10\x4a\xe3\x26\x95\x75\xa1\x59\x55\x50\x08\x78\xc8\x5a\x30\x63\x51\x53\x20\x4a\x89\xcc\x16\xf4\x69\x6b\x96\x15\x44\xf9\xcc\xdf\xbd\x14\x70\x55\x35\xb9\x41\x6c\x73\x46\x73\xca\x33\x8a\x65\xe1\xc6\x16\x84\xb3\xd4\x9c\xa4\xd9\xda\xec\xcd\x19\x5f\xb5\x99\x58\x4d\xed\x40\xbf\xed\xbf\x63\x9c\xff\xbc\xa9\x27\x46\x4c\x39\xe8\x66\x97\x81\xe2\x25\x39\xd1\x6e\x6d\x3d\xf9\x04\x93\x7c\xc4\xbc\x43\x73\x78\xe5\x0a\x85\xbd\x5c\x42\x5f\x0b\x2d\x36\x32\xe0\xc1\xb9\xf5\x4c\x68\x17\x24\xa4\xe1\x94\x7d\x16\xa0\x59\xef\xc9\xe3\x99\xc0\x4f\x43\xcd\xf5\x9d\xa6\x7a\x70\x14\x79\x68\xa6\x3f\x3f\x33\xfb\x11\x4c\xec\x1d\xe6\xb5\x35\x8f\x83\xb8\x86\x9a\xd6\x51\xcc\xea\x18\x26\xf5\x2e\x73\x3a\x20\xb9\xb6\xa3\x01\xe2\x2d\x8a\x09\x1c\x6e\xfe\x86\xc3\xd3\x2a\x49\xe7\xec\x53\x14\x99\x79\xca\xdb\x0d\x04\x96\x53\xae\xd9\x9c\x85\x74\x29\x16\x66\x70\x15\xe5\xb6\x8c\x15\xc9\x96\x68\x17\x04\xf6\x45\xea\xe0\xe9\xcf\x2d\xb9\xce\xba\x68\x62\x2a\xb0\xab\x58\xce\xa9\xa4\xbd\x92\xf6\x4a\xda\xeb\x21\x7a\xf6\xda\xcb\xc9\x83\xe6\xc9\xfe\xb4\xea\x07\x2b\xc2\x84\x16\xbd\x79\xdb\xab\x47\x86\x77\xdc\xdb\x5d\xbb\xff\xdd\xeb\xaa\xfd\x9d\xe0\xe7\x7a\x60\x07\x02\x8e\x1b\x7e\xe4\x65\x5d\x14\xe3\x6b\xcd\x5b\x1a\x2e\xe0\x39\xae\x5c\x55\x17\x85\x2b\x0f\x3e\x85\x0f\x5e\x7d\x6a\xc5\x1c\x4e\x8b\x5b\xb2\x56\xc7\x70\x41\x57\x54\x1e\xc3\xf9\xfc\x42\xe8\x4b\xfb\x50\xf5\x51\xaa\xfd\xec\x4b\xcb\x1a\xd8\x1c\x5e\x17\x44\x53\xa5\x41\x13\x9f\x8b\xca\x54\xbf\x7b\x9a\x90\x83\x41\x76\x8d\x4c\xe3\x34\x8d\x1f\x2b\xd4\xb7\x0e\xd6\xaf\x9b\x3a\x96\x93\x27\x38\x68\x05\x9b\xd3\x6c\x9d\x15\xa1\x77\xf4\x5d\xc3\xa7\xa9\xd6\x44\x8a\x42\xdc\x7a\x89\x1d\x04\xec\xec\x28\x1d\xfa\x59\x35\x77\xa9\x84\xd2\x57\x9a\x48\x1d\xa1\xc3\xcb\xc1\x65\xc3\xcc\x2c\x6e\x46\x8a\xc2\x5b\x9c\xb3\xb2\xa4\x39\x23\x9a\x16\x6b\x20\x73\x4d\x65\xbf\x4e\xb1\x2f\x4f\x65\x6b\x83\xbb\xf2\xb6\xd8\xbf\x9b\xf0\xbc\xa0\x12\xe6\x84\x15\xde\x18\x9f\x2d\x27\xae\xed\x3c\xee\xd5\xa7\xc4\x92\x05\x47\xba\x5a\xbc\x40\xb2\x4c\xc8\x1c\x4b\x7d\x09\xf0\x07\xa3\x3a\x86\x9d\x60\x45\x1b\xaa\x24\x9c\x2c\x68\x40\x61\x86\x4d\xf4\x2d\xcc\x0a\x91\xdd\x28\xa8\xb9\x66\xbe\xb6\x99\x6d\xad\x2e\x6e\x20\x13\x65\x55\xa0\x78\x0a\x2b\x17\x08\xf7\x97\x0c\xdc\x25\xf3\xda\x7f\x4e\x5a\xd1\x33\x31\x63\x52\x27\xbf\xee\x7e\x84\xdf\xf0\xb3\xf4\x82\x5f\x22\xe1\xef\x10\xfa\x89\x66\xfe\xd6\xe1\xe0\xea\x7f\xe0\x14\x4f\x6d\x50\x37\x6f\x00\xc1\x5b\x38\xf7\x5c\x18\xc1\x6c\x4e\x7d\x60\x6b\x5f\x18\xf4\x08\x98\xc2\xd9\x27\x9a\xb5\x5f\x87\x3c\x48\xcc\x28\x6d\x5b\x03\xac\x68\x4b\x6e\x02\x0a\x0d\x44\x81\xda\xc4\x01\xb9\x78\x17\x80\xec\xd3\x46\xe7\x59\xe4\x18\x52\x35\xc1\x92\x15\x34\x96\x59\xc1\xf8\xe8\xf6\x33\xdb\xe4\xca\x4b\x02\xe3\xca\xb6\xc1\xeb\x49\xb2\x50\x98\x80\x61\xb6\xd5\x68\x37\x90\x67\xd3\x84\xa9\x59\x85\xf0\x35\x95\x42\x68\x38\x3c\x38\x39\x38\xda\x8a\xe9\x06\x42\xd0\xcc\xeb\xba\xa0\x6a\xad\x34\x2d\x6d\xd1\x1a\x37\xea\x40\xae\x0c\x5b\x73\x57\xd8\x97\x99\x66\x07\xf9\x31\xb0\x50\x38\x81\xb3\x05\x6d\x07\x14\x3c\x09\x61\xb9\x29\x60\xab\x94\x1e\x83\x12\xa0\x25\xc9\x59\x14\x8c\x38\xf2\x34\x03\xd4\xb2\x76\xed\x54\x0e\x0f\x7e\x1e\xd9\xdd\x6a\x9b\xa8\xce\x8e\xe0\x56\xf0\x03\x8d\xc7\x75\x0a\xd7\xa1\xb7\xaa\x56\xb4\x29\xd4\x6a\x7b\x45\x71\x1a\x0e\xab\x10\xfd\x56\x51\xc6\xb8\x04\x51\x87\xee\x3b\x56\x22\x27\xba\xa9\x29\x7b\xf6\x29\xf8\x24\xd9\xbc\x54\xa3\xc4\x5e\xa2\x29\x68\x0d\xce\x40\xa6\x44\x41\xc1\x56\xf4\x64\x49\x49\xa1\x97\x6b\x08\xbf\x43\x5c\xf0\xc9\xdf\xa9\x14\x58\xf5\x96\x3b\xbe\x61\x58\xbc\x90\xb0\x74\x9f\xbc\x43\xd4\xdb\x83\x09\xf2\xa0\x19\x7b\xf1\x6b\xea\xf9\x2e\x82\x4d\x1d\xf8\xe7\xeb\xeb\xcb\xaf\xa9\x8e\x66\x78\x98\xd1\x35\x09\x54\xbd\x16\x4d\x4f\x6c\x81\x84\x43\x7d\x27\x50\x09\xf9\xd4\x26\xd0\x52\xa8\x80\x7d\x87\xad\xbd\x17\x4a\xfb\x56\x95\xec\x93\x16\x46\x37\x73\x9a\x99\x1d\x8f\x96\x4c\xec\xba\x31\x54\x22\x87\xf3\xcb\x29\xfc\x45\xd4\x66\x15\x67\x64\x16\x64\xc9\x1b\xba\x25\x5c\x37\x65\x5b\x5f\x98\x45\x78\x11\x12\x2e\xb3\x64\xce\xfd\x9f\x29\xc9\xa9\x54\xa8\x09\x29\xf1\x6c\x28\xdb\x50\x24\x00\x66\x6f\x5c\x31\x2d\xe7\x5a\x69\x51\xc2\xd2\x32\x0e\xdf\xe8\x5e\x01\x5d\x27\x3b\x42\xf1\xd7\x46\xae\x59\x1f\x9a\x02\x49\xab\x18\xda\xce\xcd\xf6\x17\xa4\x8d\xb6\x34\x81\x3d\x29\x81\x5c\x1b\xbe\x33\xec\xaf\x94\xe1\x51\x09\x66\x69\x17\xdf\x9c\x15\x57\xf4\x2e\x98\x23\xe3\xf6\x90\x18\xa1\x12\x8c\x12\x8f\x94\x92\x02\x91\xd2\x52\x20\xa4\x60\xf0\x90\x09\x02\x2c\x03\xb9\xc4\xca\x72\x81\x48\xf9\x10\xb0\x03\x06\x10\x81\x65\x7b\x4a\x6d\x4d\x87\x08\xcb\x0f\x31\x91\xf8\x10\x5a\x9a\xb8\x4f\x8f\xbf\x7c\x31\x0e\x1e\xc4\x5b\xbf\x2a\xb8\x88\xc8\x76\x09\x11\x2d\x80\x64\x99\x5f\x4b\x9c\x3e\x09\xab\x3a\x51\x9c\xd9\xfe\x93\xcf\xc2\xf6\x30\x16\x73\xc4\x25\xb3\x70\x12\x09\xbc\x2e\x67\xc1\x4a\xaa\xad\xe6\x25\x75\xec\x6d\xe8\xb5\x00\xb8\x88\x31\xd4\x06\x88\xd0\x18\x48\x84\x2f\x42\xef\xc5\x2b\x33\xe7\x3f\xfe\xe1\x0f\xbf\xfb\xc3\xd4\x2e\xab\xf9\x8c\x40\x9e\x33\x0a\x84\xc3\xf9\xe9\xc5\xe9\x4f\x57\xdf\xbd\xc1\xca\xca\x61\xa7\x30\x42\x4a\x76\xcc\x84\xec\x88\xe9\xd8\x8f\x98\x8c\x8d\x65\xa7\x02\x25\xfc\x10\x5d\x83\x0c\xc3\x3d\xda\xb5\xb2\xc5\x94\xdd\x4b\xd1\x86\x0d\x23\x78\xb2\xcd\x9b\x78\x50\x83\x3a\xc2\xc3\xe1\xc9\xa5\xa7\xce\xaa\x2b\x91\xdd\x44\xf3\xf2\x1c\x5c\xbf\xb9\xb4\x0c\xa3\x38\x7a\x08\x6f\x02\x4c\x8c\xaf\x44\xb1\x32\x9b\x49\xe0\xfa\xcd\x65\xa0\xb2\x98\x1a\x1e\x18\x61\xb5\x7e\xef\x75\x50\x3e\x5e\x5b\x60\xc7\x01\xf4\x58\x59\x15\x21\x11\x65\xc0\x3a\xf2\x92\x92\x82\x29\xcd\x32\x1c\x6b\x1b\x83\x0d\xf2\xea\x88\x1b\x7f\x54\x5e\xf2\x8f\x75\x14\xd9\x3f\x76\xf0\x21\x52\xee\x6a\xeb\x68\xeb\xb9\xca\x82\x9d\x26\xc7\x83\xd2\x2d\xe1\x75\x06\x9d\xa3\x2d\x2c\x71\xf8\x99\x5a\x8e\x68\x86\xf9\xb5\x89\xec\x13\xef\x75\xb0\x71\x96\x63\x68\x04\x05\xed\xce\x6d\xcb\x31\x90\xad\x9b\xf0\xd0\x72\x0c\xf5\x4b\x18\xbb\x73\xcb\x72\x8c\x64\xdb\x26\xcb\x71\x3f\x7a\x04\xcb\xb1\x92\xf4\x4a\x8b\x2a\x0a\xce\xce\xb2\x8a\x8a\xb2\x9b\xd1\xb9\x90\x34\x0e\xcc\xae\x03\xc0\x41\x5e\xa3\x30\x26\x3c\xa0\x3e\x66\x13\xe6\x12\x7d\xb8\x9a\x77\xe2\x35\xa0\xc9\x92\x2d\x9b\xa8\x2a\xa7\x4a\x9d\x20\x34\xae\xae\xac\x93\xd2\x93\xe9\x9c\xb0\xa2\x96\xf4\xd8\xec\x34\x2d\x2b\xdb\xa1\x3e\xb0\x54\x9f\xd9\x0c\xca\x2d\x2b\xaa\x6d\xd3\xf8\x06\xb5\xe8\xbf\x3f\xc6\xe6\xb3\x07\xc7\x76\x3b\x0d\x6f\xf9\x94\x49\xa2\x96\x14\x1b\x3d\xd2\x4f\x4c\x2b\x3b\x50\x49\x89\xf2\xae\xf4\x8b\x50\x17\x77\x90\xd0\x04\x56\x50\x11\xa5\x68\xee\xaf\x0d\x7a\x90\x4f\x3b\xc0\x4b\x91\x1f\x1c\xa8\xfe\xc7\x78\x72\x5e\x48\x92\x51\xa8\xa8\x64\x22\x07\xac\x9d\x9d\x8b\x5b\x0e\x33\xba\x60\xdc\xf7\x05\xe0\x6e\xa4\x19\x74\x73\xe1\x8d\x09\x4b\x03\x80\x54\x4d\x37\xdd\x29\x7c\x1c\x74\xfb\xf4\xd7\x5a\xa2\xd6\x99\xe8\xb4\xb5\x5b\xdd\xe3\x00\x8e\x1d\x92\x14\x73\xee\xf1\x9a\xd7\xa4\x28\xd6\x9d\x58\xf1\xe4\xec\xca\x4b\xe8\xc7\xda\xf8\xcf\x0c\x53\x6b\x2e\x6b\x28\xc7\xfe\x05\xed\x2f\x85\xbf\x6c\x92\x94\x64\xcb\xb0\x74\x85\x04\xdd\x7d\x80\x12\x74\x37\x41\x77\xef\xa4\x04\xdd\x4d\xd0\xdd\x04\xdd\x4d\xd0\xdd\x04\xdd\x4d\xd0\xdd\x91\x94\xa0\xbb\x0f\x51\x82\xee\xde\x49\xcf\x32\x34\x91\xa0\xbb\x09\xba\xbb\x37\x25\xe8\x6e\x82\xee\x8e\xe3\x9b\xa0\xbb\x5e\x94\xa0\xbb\xf7\x52\x82\xee\x86\x50\x82\xee\xfa\x52\x82\xee\x8e\xa6\x04\xdd\x4d\xd0\xdd\x00\x4a\x00\x0c\x0f\x4a\xd0\xdd\x08\x0f\x87\x27\x97\x9e\x09\xba\x9b\xa0\xbb\x7b\x52\xf2\x8f\x75\x94\xa0\xbb\x01\x94\xa0\xbb\x0f\x52\x82\xee\x26\xe8\x6e\x00\xaf\xe7\x67\x39\x36\x10\xd1\x4b\x29\x66\xa1\xc5\x47\x91\x87\xc2\xfe\xd4\xa9\xf4\x68\x00\x86\xe9\x4e\xfc\x12\x08\xaf\x6a\xc1\xd0\xbd\x76\x37\xb1\x4b\x43\x04\x92\x27\xef\x21\x6e\x69\x88\x3e\xf2\x35\x7f\xbd\x31\x4b\xcf\x00\xbd\x16\x8c\x53\xba\x03\xa3\x14\x28\xc2\x37\xf0\x49\x0d\xc2\x28\x80\xe3\x4e\x6c\x52\xe0\x28\xb7\x70\x49\x0d\xb2\x28\xc2\xcc\x11\x80\xd9\x47\x15\x05\x86\xba\x7b\x78\xa4\x3e\xa2\x28\x80\x6b\x0f\x8b\xb4\x8d\x26\x0a\xd9\x29\xbd\x0b\x49\xe4\x80\x30\x21\x2f\xac\x01\x8a\x68\x07\x0e\x28\x80\x37\x22\x88\x22\x63\x80\x76\xe2\x7f\xc2\x8c\xb8\x1d\xd8\x9f\x06\xbd\x13\xb2\xb0\x1d\xee\xa7\x8f\xdc\x09\x39\x02\x2d\xe6\x67\x13\xb5\x13\xe4\x07\xc8\x63\x23\x76\x62\xc4\x47\x83\x63\xa3\x81\xe6\x9a\xcb\x95\xb9\x5e\x4a\xaa\x96\xa2\xf0\x54\x05\x03\x35\xf0\x9e\x71\x56\xd6\xa5\x91\x39\xca\xc8\x6d\xb6\x0a\x4c\xe4\x51\x2d\x64\x13\xe3\x9f\x36\xb0\xea\xad\xf1\x50\xa2\x48\x9a\x23\x77\x73\xc4\xb0\xaa\xf9\x92\xac\xfc\xed\x5d\x55\x67\x19\xa5\x39\xcd\x07\xce\x3d\xf8\xdd\xb4\x59\x0b\x4f\xbe\xb6\xd7\x23\x53\xf0\x2a\xc4\xc2\x08\x79\x16\xcc\x85\x2c\x89\x46\x1e\xbf\xfb\xad\x07\x87\x20\x00\xd8\xa3\x80\xbf\xa2\x03\xbf\x82\xcd\xb8\x30\x87\x56\x80\x33\x2b\xdc\x7e\x0c\x73\x62\xed\x06\x78\x85\xe9\xb8\x5d\xe0\xae\x30\x8e\x8f\x00\xec\xda\x09\xea\xea\xc3\x9f\xc2\x2c\xdd\x30\x40\x57\x24\xd8\x67\x30\x90\xeb\x71\x40\x5c\xbb\x01\x5c\x28\x5d\x42\x8c\x8b\x21\x78\x2b\x1c\x7e\xf5\x2c\x4c\x8b\xc7\x80\x5c\x6d\xc3\xad\xdc\x62\x85\xb9\x72\x5b\xa8\x55\x3c\xa8\x54\x24\x98\x54\x0c\x88\x54\x30\x3c\x2a\x1c\x1a\x15\x0b\x16\x15\x03\x12\xb5\xd5\xd0\x30\xc2\x09\x82\xa6\x07\x5d\x14\x90\x71\x2c\x17\x6a\x14\x08\xd4\xe3\x2e\x57\x0c\xe8\x53\x84\xf5\x0a\x83\x3c\x3d\x0e\xdc\x29\x26\xd4\x29\xc6\x12\x05\x05\xaa\x1e\x07\xde\xb4\x13\xda\x04\xde\x49\xe0\xb0\xe9\xee\x9a\xf6\xc3\x4b\x01\x4c\x37\x20\x4d\xfd\xd0\x52\x00\xd7\x16\xce\x14\x37\xac\x14\x18\x52\x8a\x15\x4e\x8a\x14\x4a\x7a\x24\x00\x52\x28\xf8\x68\x37\xf0\xc8\xd8\x20\x01\x07\x62\x0b\x74\xd4\xc1\x86\x02\xb8\xf6\x7d\x12\x61\x90\xa1\xc0\x0d\x65\x9c\x69\x46\x8a\xb7\xb4\x20\xeb\x2b\x9a\x09\x9e\x7b\x5a\x13\x1b\x6d\x77\x5d\xc8\x7c\x0e\xca\x32\xf5\x9c\x9f\xf5\x04\x0d\x0b\x3e\x2c\x89\x02\xd7\xff\xcd\x93\xab\xab\x1e\xd2\x84\x2f\x9d\x61\x8a\xb1\x47\xbb\x1e\xda\x3f\x9e\x35\xb2\x34\xc3\xad\x90\x37\x85\x20\xb9\x3a\xa9\x84\xfd\xbf\xae\x30\x43\xaf\x22\x83\x1d\x61\x48\x49\x86\xa7\x74\x39\xd9\xba\x17\xf1\x8e\xd7\x9f\xc5\x2d\x88\xb9\xa6\x1c\x0e\x19\x6f\x4e\xd8\x91\xaf\xf7\xa9\x75\x36\x75\xfe\xcc\xd6\x69\xe8\xcf\xf3\xd5\xcb\x66\x60\xad\xcb\x31\xc8\x30\xfb\x9c\x5d\x8e\xe8\x8c\x55\xea\x79\x7a\xb4\xdd\xe0\x1e\xcb\xa5\xed\xd8\xcf\xeb\xc2\x0a\x33\x5f\xff\x0d\x3a\xc3\x9d\x83\x7c\xe8\xd3\xf6\x3c\x16\xd0\x76\xd5\x7f\x85\x33\x6f\xa5\x21\xe1\x39\xb8\x9a\x5f\xde\x9c\xfb\x07\xfe\xb3\x3e\xba\x81\x50\xda\xc7\x82\xd1\xde\x09\xa1\xb5\x40\x58\x4f\xae\x5b\xf0\xd9\x0e\x04\xeb\xcb\x71\x08\x9d\xed\x03\x60\x03\xc6\xd8\x6a\xc8\x00\xf0\x6b\x8a\x11\xf8\xfd\xed\x9d\x20\x57\x0c\x17\x04\x98\xc4\x1b\x00\xd7\x58\xb9\xe0\xc3\x3c\xf0\x50\xa0\xf4\xb3\x79\xed\x37\x90\xd4\x50\xdf\x58\x7a\xed\xa7\xd7\xfe\x03\xf4\x08\xaf\x7d\xcd\x4a\x2a\x6a\xfd\x6c\x1f\x9c\xb7\x4b\x96\x2d\xfb\xb6\x20\x2b\xbd\x55\xb5\xa8\xf5\x86\xbd\xe6\x86\x18\x11\x8a\x90\x5e\x9d\x1b\xe4\x17\xd3\xd8\xe1\x50\xb5\xe2\xb1\xc5\x13\x7b\x4c\xa4\x73\x5c\xb4\x58\x59\x20\x0a\x08\xbc\xbd\xb8\xfa\xe9\xdd\xe9\x7f\x9c\xbd\xf3\x11\x34\xd7\x4b\xa6\xac\xca\x6c\xc4\x57\xcd\xd9\xdf\x6a\x0a\xa4\x14\xc6\x16\x2c\x82\x86\xaa\x8e\xd1\x11\xd2\xfb\x86\x67\x71\xa6\x98\x40\x6c\x2f\x31\x66\x14\x9b\x87\x80\x19\x46\x1f\x0c\x8f\x67\x88\x4c\xf7\x8b\x45\x7b\xc7\xa0\x37\x80\xc5\x6e\xf4\x66\x71\x40\xd2\x4a\x52\x45\xb9\xa7\xa5\x46\x80\x53\x6d\x64\x92\xb5\x43\x18\x07\x02\x8a\xf1\x45\x11\x98\xd3\x12\x68\xe3\x87\x58\xf8\x93\x6e\xe4\x97\x7e\x86\x7e\xa8\x99\x3f\xf8\x7c\x5f\x63\x64\xa7\xd1\x39\x0f\x4b\xd6\xb3\x25\xef\x84\xa2\x4d\x34\xae\x12\xf9\x81\x82\x73\x7f\xb4\x07\xc9\x73\x49\x15\x16\xd6\x66\xaa\xb3\xe7\x8c\x86\x64\xfe\x95\x5e\xf0\x2c\xda\x70\xda\x31\xbc\x84\x3f\xc1\x27\xf8\x13\x9a\x9c\x7f\xf4\xb5\x0c\x63\x98\x75\xa1\x0e\x0d\xfb\xfa\x3b\xbf\x8c\x72\x22\xbe\x5f\x12\x8d\xfc\xe0\xfc\x32\x04\xd2\x35\x63\x3c\xb7\x8a\xf6\x93\xa6\x92\x93\xa2\x79\x90\x84\xad\x74\x80\xe1\x6b\x26\xf5\xec\x2f\x8e\x4d\x5e\x3f\x9f\x7b\x73\x6c\x2d\x92\x63\xd0\x83\xab\xe3\xcd\x11\xaf\xdc\xce\xab\xe3\xcd\xd2\x5e\x39\x38\x9f\xa3\x87\xe1\xc2\x69\x0a\xa6\x7a\xa3\xf7\x5f\xd2\x76\xd6\x25\xd1\xd9\x72\xa8\xd6\xfc\x1f\x80\xef\xcd\x95\xe8\x19\x4f\xb9\x40\xd3\x21\xa8\x5e\xa8\x19\xea\xe7\x2d\x78\x42\x80\x46\x83\xfb\x74\x3e\xdf\x3c\xb9\xde\xab\x7a\xd7\xe3\x3f\xa8\x18\xa9\x33\xc5\x7b\x35\xf5\x2b\x91\x4f\xe1\x8c\x64\x4b\x6f\x9e\x66\xf1\xf2\x9e\x7d\x54\x89\xdc\x0e\x7e\x49\xbc\x43\x1f\xc6\xf2\x72\x63\x35\xec\x5d\x31\x97\xd0\x94\x29\x2b\xba\x8d\x66\xc8\x08\x37\x6b\x2b\xe9\x9c\x4a\x19\x72\xf4\x05\xcc\xd6\x88\xd7\x61\x19\x0d\xbc\x04\x01\x3a\xa1\x92\x42\x8b\x4c\x78\xe7\xf3\x6f\xe6\xbb\x22\x33\x5c\xee\x10\xa7\x7d\x17\xc7\xf9\xf6\xed\xe5\x31\x5c\xbf\xb9\x3c\x06\x21\xe1\xea\x4d\x08\xaa\xa0\xef\xaf\x78\x71\xfd\xe6\xf2\xc5\x93\x2d\x3a\x34\x4e\xe0\xd7\x1e\x15\x42\x24\x25\x39\x4b\x19\xca\xbb\x29\x65\x28\xef\x47\x29\x43\x79\x48\x29\x43\x39\x80\x67\xca\x50\x4e\x19\xca\x96\x52\x86\x72\xca\x50\xf6\xa4\x94\xa1\xfc\xf0\xe0\x52\x86\xf2\x67\x8b\xb9\x4a\x19\xca\x0f\x53\x42\x1f\xa5\x0c\xe5\x94\xa1\xbc\x45\x29\x43\xf9\xa9\x4d\x8b\x94\xa1\x9c\x32\x94\x1b\x4a\x19\xca\x23\x28\x65\x28\x8f\xa3\x94\xa1\xfc\x20\x3d\x33\xcc\x72\xca\x50\x4e\x98\xe5\x7d\xf9\x3c\x3f\xcc\x32\xa4\x0c\x65\x3f\x4a\x19\xca\xe3\x29\x65\x28\x8f\xa3\x94\xa1\x3c\x9e\x67\xca\x50\xee\x28\x65\x28\xa7\x0c\xe5\xcf\xf4\xe8\xa6\x0c\xe5\x94\xa1\xbc\x9b\x52\x8c\x20\x65\x28\x8f\xa3\x94\xa1\xec\xcf\x34\xbd\xf6\xfd\xf9\x3c\xbf\xd7\x7e\xca\x50\x4e\x19\xca\x0f\x52\x88\xe9\x26\xa9\x12\xb5\xcc\x7c\x54\xe4\xe0\x5c\x7d\x6c\xf8\x3c\x26\x30\x19\xce\x62\x24\x40\x2b\xc4\xa7\xa9\xca\x0c\x54\x76\xc3\x2e\x24\x25\xb9\x4f\xc4\xd2\x4c\x34\xc3\xd0\x69\xa7\x42\x3f\x2b\x0c\x75\xc1\x4a\xe6\x93\x9d\x0c\x5b\xc2\xe5\x1d\x72\xea\x02\xa5\x01\x38\x97\x92\x7c\xc2\x97\x11\x29\x45\xcd\xb5\x91\x57\x99\x28\x2b\x7f\x24\x6d\x7f\xa7\xf1\x60\xf6\x65\x41\x00\x56\xe0\x21\x09\x92\x09\x3e\x67\x8b\x5a\x12\xb3\x44\x27\x25\xe1\x64\x41\x27\x6e\x2a\x93\x76\x50\x93\xf6\x74\x9e\x3c\x91\x95\x4e\xf2\x06\x5f\x7a\x19\x6c\x36\x57\x44\x6b\x2a\xf9\x6b\xf8\xcf\xc3\xbf\x7e\xf1\xf3\xe4\xe8\xcb\xc3\xc3\x1f\x5e\x4e\xfe\xfd\xc7\x2f\x0e\xff\x3a\xc5\x7f\xfc\xeb\xd1\x97\x47\x3f\x37\x5f\x7c\x71\x74\x74\x78\xf8\xc3\x37\xef\xbf\xbe\xbe\x3c\xfb\x91\x1d\xfd\xfc\x03\xaf\xcb\x1b\xfb\xd5\xcf\x87\x3f\xd0\xb3\x1f\xf7\x64\x72\x74\xf4\xe5\x6f\xbc\x5f\x89\x01\x76\x48\x1c\x2b\x24\x8a\x0d\xf2\x08\x16\x88\x83\x99\x44\x11\x0f\x1f\x1d\xaf\x38\x02\xc2\xb9\x4e\xe2\x0b\x88\xe6\xc1\x8a\xc9\x9e\xcd\x98\xfd\xbd\x91\xa2\x64\xda\x68\x07\xa3\xd6\x48\x0f\xc2\xef\xcb\x51\x0f\x5a\xa6\x3a\x91\xcb\xe6\x21\x58\x68\xa6\xfa\x00\xeb\x5e\x52\xa3\xd0\x4b\x2a\x6f\x99\x77\x60\xc8\xbc\x94\x78\xe7\xd6\x40\x21\x38\xc9\xe9\x9c\x71\x6f\x4f\x09\x5a\x73\xa3\x0d\xb9\x24\x86\x93\x18\x1e\xc3\xe5\x39\x89\x61\x45\xb3\x5a\x32\xbd\x7e\x23\xb8\xa6\x9f\x3c\x3c\x23\xc3\x78\xef\x90\x9b\xcb\x58\xf1\xb4\x7b\x6f\x9d\x5c\xfb\xec\xf3\x08\x71\x32\x97\x92\xad\x58\x41\x17\xf4\x4c\x65\xa4\x40\x51\x11\x43\xed\x9d\xde\xc1\xdb\x3f\x66\xa2\xa5\x28\x14\xdc\x2e\xa9\x11\xcf\x40\xcc\xdc\xd1\x1d\x95\x11\x5f\xa6\x0b\xc2\x38\x94\x46\xa6\x56\xcd\x40\x95\xd1\x28\x1c\x98\xb7\xee\x33\x2f\x2c\xae\x9b\xc1\xb9\xb2\x28\x33\x21\x0a\x97\x76\xe6\x8d\x43\x6e\x57\x80\x59\xa7\x1c\x17\x3f\x71\x7a\xfb\x93\x19\xb9\xef\x58\xe7\x05\x59\xc0\x2d\x2b\x0a\xcc\xd5\xa4\x7a\xab\x99\xb5\xef\x1a\x34\x93\x8f\x7c\x08\x30\xcf\xa8\xa6\x40\x8a\x5b\xb2\xc6\xa3\x10\x67\xbc\x4c\xbd\x86\x57\x47\x98\xbf\x46\x14\xb4\xe3\xcd\xe1\xb7\xbe\x61\xe3\x25\x51\xf0\xe6\xf4\xf2\xa7\xab\xbf\x5c\xfd\x74\xfa\xf6\xfd\xf9\x45\x88\x66\x35\xa7\x87\x7a\x1d\xf2\x8c\x54\x64\xc6\x0a\xe6\xaf\x50\xb7\xb0\x88\x7d\x96\x01\xf6\x51\x9e\x9f\xe4\x52\x54\x76\x0f\x65\xcd\x39\xe3\x8b\x20\x31\x6a\xe9\xed\xb0\xaf\x7e\x63\x34\x9a\xc3\xed\xeb\xa0\x9b\x0f\xa6\x0c\x0b\x49\xb8\x31\x6c\x67\xeb\x80\xcc\xd1\x0e\xae\x22\x6b\xae\x59\xf9\xf9\x26\x24\x93\x3c\x56\x32\xf2\x69\x9e\xd3\x3c\xc6\xf1\x7a\x8e\x60\xfc\x37\xcd\xb4\x42\xb2\x50\xa0\xab\xf5\x06\x97\x1f\xae\xce\xff\x77\x9c\xd5\x02\xb7\x62\x21\x41\x9d\x08\x95\x26\xa4\xa8\x22\x9d\xa4\x8f\xb4\x14\xab\x74\x96\x1e\xa0\x5f\xe8\x59\x6a\x2d\xb9\x18\x38\xa2\x8f\x35\xef\xc9\x6a\xef\xa4\xfe\x6e\x4c\x50\x8a\x9c\x4e\xe1\xd2\x1a\x48\x54\x45\xe1\xd9\xaf\x14\x2a\x29\x18\xc6\x5c\x33\x52\x78\x9b\x9a\xf4\x6f\x35\x5b\x91\x82\xda\xa4\x37\x2c\x6b\xd0\xaf\x7a\x16\x41\x37\xcf\x49\xa1\x82\x94\x9e\xbf\x4d\x64\x8c\xd3\xf7\xa2\xe6\x31\x30\x3b\x2d\x2f\xc8\x29\x17\x3a\xc8\xb5\x67\xe6\x85\x65\xea\xa4\xc8\xc0\xba\xf7\x82\xe0\xc9\x0d\x5e\xad\x1f\x4a\xba\xee\x4c\x22\x7f\x13\xdc\xed\xe3\x65\x3b\x77\x1b\x0f\xad\x55\xd0\xf4\xb7\x4c\xa2\x50\x78\x87\x99\xbf\xa4\x24\xc7\xea\x36\x15\xd1\x4b\x8b\x5d\x2b\x89\xba\xf1\x76\xc3\x21\x1b\xf7\xa6\x73\x0e\x53\x5b\x94\xa6\x5d\x8c\x6b\x7f\xe1\x37\xa7\x44\xd7\x92\xda\x57\x99\x4d\x90\xa3\x9c\xcc\x0a\x5f\xb4\x71\xa0\x20\x35\x6b\xf7\x81\x17\xeb\x8f\x42\xe8\xaf\xda\x0a\x24\x11\x2e\xcd\xf7\xee\x05\x8f\xf5\xff\x42\x9f\x6e\x4b\x2c\xe7\x6c\xc6\x3a\xc1\x8d\x46\x61\x15\x5e\x30\xc5\x9d\x71\x73\xdc\x9f\x50\x54\xc9\x9a\x9f\xaa\xaf\xa5\xa8\x3d\x2d\xa3\xad\xc7\xdb\xd7\xe7\x6f\x51\xa2\xd7\x3c\xe0\xf1\x42\xb9\x96\xeb\x4a\x30\x1b\x7f\x88\xea\x2f\xf8\xd6\xa8\xc4\x8d\xfb\xef\x2b\xa8\xe6\x50\x73\x45\xf5\x14\xde\x93\x35\x90\x42\x89\xc6\xc9\xe1\xad\x72\x2f\x11\xa5\xde\xf7\x23\x4e\x01\xeb\x21\x7a\x3f\x2e\x19\x87\x99\xd0\xcb\x2d\xf7\xa4\x7f\x01\xc4\xed\x31\x62\xd5\xa4\x20\x70\x79\x57\x3b\x9d\xf1\xcd\xa1\xfa\x4a\x7c\x72\x43\x15\x54\x92\x66\x34\xa7\x3c\x0b\xba\x5f\x91\x50\x24\x7f\xfc\xbd\xef\x0d\xbd\x10\xdc\x08\xc9\x08\x77\xf4\x9c\xe7\x2c\x23\xda\x7a\x21\x75\x14\x07\x03\xe2\xd7\x9c\x67\x8b\x60\x41\x1d\x23\x22\x3d\xd9\xd6\x8a\x4a\x0c\x10\x6a\x59\x53\x7b\xb0\xbe\xa9\x67\xb4\xa0\x1a\xdd\x88\xfe\xc1\x2d\x96\x13\x6d\xab\x7d\xb1\x92\x2c\x28\x10\xdd\x88\x01\x7f\x1f\x13\xe5\xca\xa8\x53\x5c\x49\xa6\x21\x17\xb4\x2d\x53\xe5\xeb\xec\x50\xf0\xed\xf9\x5b\x78\x09\x87\x66\x0d\x8f\xd0\x9e\x98\x13\x56\xf8\xd7\xab\x40\x24\xfd\x86\xfd\xc3\xe6\xcd\x70\x7d\xb5\xd7\xb9\x93\x7d\x20\xa4\x55\x5f\xc7\xc0\x05\xa8\x3a\x5b\x36\x6b\xed\xef\x83\x6d\xdc\xc5\x2e\x2b\x06\x21\x25\x4e\xc0\x7a\x72\x6c\xc5\xf2\x5d\x02\xd6\x77\x6d\x2d\xd3\x5d\x02\xd6\x3b\x54\x97\xdf\x25\x60\x83\x50\x7a\xcf\x5c\xc0\x06\x1a\x30\xdf\x2a\x2a\x23\xd9\x2f\xdf\x3e\x73\xfb\xa5\xff\xc4\x35\xb2\xb2\xdb\x59\x7f\x03\xc1\x0a\xc4\x92\x6a\x92\x13\x4d\x9c\x5d\x13\x5a\x57\x73\xdb\x26\x4a\x97\xef\x79\x5e\xbe\xa7\xb4\x6e\x14\x7d\xc7\x78\xfd\xc9\x26\x71\xc4\x0a\x20\x5d\x9d\x21\x53\xbc\x74\x01\x4b\x8c\x47\x97\x54\x55\xc1\x3a\x0c\x6a\x50\xc3\x12\x68\x15\x67\xbf\xbc\x79\xb8\x70\x68\x9e\x33\xa8\x38\x1b\xd8\xac\x79\xb3\x12\x9e\x0b\x5f\x74\xf7\xc6\x22\x5a\x38\x02\xc9\x96\xfd\xd4\x0a\x73\xc9\x7d\xef\x5a\x12\x0d\x9f\x81\x68\x78\xd2\xc0\x5f\x41\x57\xd4\xbb\x1a\xfb\x86\x58\x78\x67\x78\x01\x53\xcd\xb1\x0e\x88\x1e\xe0\xb0\xa0\x20\x33\x5a\x58\xcb\xdf\x8a\x88\x08\x39\x62\xc1\xc2\x25\x4a\x98\x4c\x8a\x22\x56\x0d\x8c\x8f\xa2\xc0\x04\x11\x12\x61\xd9\xcd\xb0\x7e\xc1\xab\x8e\x2c\xe2\xac\xfa\xf5\xba\x8a\xb6\xea\x18\x32\xf8\xe5\xae\x7a\xed\xfd\x70\x80\xcd\x55\x37\x6f\x90\x58\xab\x8e\x86\xfd\x2f\x73\xd5\x15\xcd\x32\x51\x56\x97\x52\xcc\x99\xaf\x9c\xd9\x32\xf8\x1c\x53\x10\x55\x48\xd9\x6e\xfb\xa2\xb2\xb0\x9b\x7e\xdc\x20\xa0\x07\xd3\xc6\xc0\x30\x78\x5a\x49\xb1\x62\xb9\xf7\x7b\x8d\x68\x6b\xd7\x34\x49\xc5\xff\x23\xd8\x7c\x44\x85\xb6\x61\x89\x06\x2e\xa5\x58\x51\x29\x9b\xea\xfa\x66\x94\x8e\xdd\x67\x5a\x4e\xd7\x1b\x6f\x10\xc1\x08\x12\x19\x29\xb0\x5d\x59\xc8\x8d\x81\xcd\x5b\xb3\xc9\x36\x40\xb4\xb0\xd6\xa3\x8c\x80\x59\xc3\x0d\xc2\x52\x11\x2c\x57\x20\x18\x65\x6b\x70\x01\x5c\xe4\xd4\xf5\xfd\x08\x60\xeb\x4a\x82\xda\x38\x75\x33\xda\xf0\xd4\x70\x63\x6d\xbb\x4c\x08\x9a\xbb\x11\x07\x70\xc4\xb9\x6a\xe1\x7a\x06\xbc\x0f\x6e\xdb\x66\x37\x9f\xf2\x9c\xf1\x05\x46\x98\x8f\x41\xd2\x82\x04\x14\xad\x81\x4e\xa7\xdc\x58\xf7\xfc\x01\x4a\x4c\xb7\x04\x01\x5c\x1b\x91\xd9\x6c\x0e\xbe\x66\x99\xe0\x21\x69\xf6\xb8\x82\x18\xbc\x6d\x5e\x9c\xf3\x50\x0c\x11\x53\xf0\xe2\x5d\x73\x89\xbc\xfb\x27\x3d\x37\xd3\xf1\x05\xda\x7b\xed\x8d\x0e\x58\x1f\x8b\xd8\xb8\x61\x3c\x77\x39\xf1\xfd\x4d\x0d\xe1\xeb\x82\x03\xce\x2f\x33\x85\xef\xb0\x25\x61\x98\xba\x32\x44\x24\x7d\x0d\x7f\xe5\xd0\x6e\x2a\x4c\x3a\x81\x16\x74\xf3\x50\x14\x6e\x09\xb4\x50\xf1\xd0\xb5\x40\xb2\x02\xed\xa3\x75\x02\x85\xd5\x0d\x03\xab\xee\x76\x81\x65\xc2\x96\x00\xa1\x0e\xcd\x95\x6e\x87\x1e\x66\x22\xe7\x53\xf8\x96\xa3\xcc\x31\xeb\x3b\x01\x2e\x22\x6c\x57\xb7\xac\xcd\x09\x7b\xf1\x54\x77\xfb\x96\xf1\x5c\xdc\xaa\xb8\xbe\xd1\xef\x2d\xd3\xc6\xf1\xe4\x5b\x05\x49\x51\xad\x19\x5f\xa8\xbe\x7f\x94\x14\x61\x69\x4a\x96\x76\x39\x48\xc3\x6e\xf7\x5c\x0a\x5b\x5a\x6f\xdb\x81\x17\x18\xa1\xb4\x87\xd0\xe2\x33\x1a\x87\xa3\xaf\xbb\x75\x1b\x9f\xb1\xcb\xe1\x18\x00\x7f\x4b\x0e\xc7\x87\x68\x51\x2a\xf2\x46\x9a\x49\x68\x46\x8a\xab\xca\xb7\x05\x1e\x6c\x5e\xbc\xaf\xdf\x5f\x9d\x0e\x19\x87\x59\x1e\xb7\x4b\x2a\xed\xdb\xca\x70\x06\x92\x97\x4c\x29\xff\x80\xbb\xa1\x5b\x3a\x5b\x0a\x71\x03\x87\x4d\xd6\xef\x82\xe9\x65\x3d\x9b\x66\xa2\xec\x25\x00\x4f\x14\x5b\xa8\x13\x27\x98\x26\x66\xbd\x7c\xd3\x97\x70\x26\xbc\x60\xdc\xc1\x1b\x31\xcc\xc0\xb5\x02\xe1\xdf\xef\x18\xba\x25\xc9\xda\xd5\xc6\x13\x1f\xa2\x6c\xb1\x33\xab\xcd\xc5\xd9\xb1\x91\x17\x61\xe5\xaf\xb0\x60\xfa\x93\x5a\x8f\xdb\x87\xfe\x22\xa8\x1e\xff\x03\x07\x3f\x70\xbd\x6c\x1f\x41\x5b\xab\xcd\x85\xd6\xcd\x67\x04\x70\xdc\x38\x29\xce\x0b\xf4\xb4\x1e\xf8\x06\xd3\x10\x71\x27\x10\xdb\xe0\x58\x86\x3d\xcb\x1b\x0b\xa2\x43\x49\xf4\xf0\x0e\x01\xac\x37\x91\x12\x2d\xe6\x21\x80\xe7\x66\xb2\x5e\x14\xc4\x04\x3c\x22\x6a\x02\xf6\x46\x4e\x04\x7c\xc0\xd0\x60\x89\x64\x05\xc0\xdd\x51\xd2\x40\x81\xfe\x68\x86\x0b\xfc\xff\xec\xbd\x8d\x77\x1c\xb7\xb1\x27\xfa\xaf\xe0\x30\xd9\x47\x32\xe1\x0c\x25\x3b\x37\x37\xd1\xe6\xc5\x87\x91\x28\x87\xcf\x12\xc5\x27\xca\xf2\xcb\xb3\x7c\x13\x4c\x37\x66\x06\x97\xdd\x40\x07\x40\x0f\x39\x59\xef\xff\xbe\x07\x55\x40\x7f\xcc\x8c\x2c\x77\xa1\x25\x52\xce\x60\xcf\x59\x5b\xca\x75\x0d\x1a\x1f\xf5\x85\x5f\xfd\x6a\x34\xe7\x85\xa5\x5d\xfc\xc0\x76\xbb\x6f\x63\xbc\x3d\xf6\x6d\x8c\x7f\xde\xd8\xb7\x31\xee\x8f\x7d\x1b\xe3\x94\x60\x60\xdf\xc6\x78\xdf\xc6\x18\xc6\xbe\x8d\xf1\xbe\x8d\x31\x71\xec\xdb\x18\x7f\x78\x72\xfb\x36\xc6\x9f\x6d\x63\x86\x7d\x1b\xe3\x0f\x8f\x7d\x8b\x82\x7d\x1b\xe3\x7d\x1b\xe3\xad\xb1\x6f\x63\x7c\xdf\xae\xc5\xbe\x8d\xf1\xbe\x8d\x71\x1c\xfb\x36\xc6\x03\xc6\xbe\x8d\xf1\xb0\xb1\x6f\x63\xfc\xc1\xf1\xc0\x1a\x1b\xed\xdb\x18\xef\x1b\x1b\xfd\x5c\x39\x0f\xaf\xb1\x11\xdb\xb7\x31\xa6\x8d\x7d\x1b\xe3\xe1\x63\xdf\xc6\x78\xd8\xd8\xb7\x31\x1e\x2e\x73\xdf\xc6\xb8\x1d\xfb\x36\xc6\xfb\x36\xc6\x9f\xe9\xd1\xdd\xb7\x31\xde\xb7\x31\xde\x3d\xf6\x6f\x04\xfb\x36\xc6\xc3\xc6\xbe\x8d\x31\x5d\xe8\x3e\xda\xa7\xcb\x79\x78\xd1\xfe\xbe\x8d\xf1\xbe\x8d\xf1\x07\x47\x8a\xeb\x66\x5d\x2e\x09\xbd\xba\x3e\x0e\x19\x77\x40\xcb\x76\x08\xce\x66\xf5\x7c\x2e\x0c\xb8\xdd\x30\x53\x52\xe2\x66\x77\xb9\x2b\x72\xd0\x2e\x25\xe5\xb8\x06\x94\x9f\x15\xee\x04\x78\xc3\x2d\x96\x20\xc2\x14\x69\x80\xc7\xfe\x14\x03\xcf\x1b\x74\xa8\x32\xc2\xd2\xe2\x6b\xa9\xd8\xf9\xab\xe7\xd3\x11\x78\xc8\x53\x28\x3c\x61\x4d\x5e\xa9\x2c\x15\xf6\xde\x1e\xb2\x34\x3a\xbd\x48\xa5\x17\xce\x5a\x56\x68\x8b\xd8\x5a\xdc\xbc\x6c\xc9\x95\x12\x14\x16\x62\x54\x88\xd2\x41\xda\x6d\x26\x84\x62\xba\x12\x0a\x2b\xcb\x38\xb3\x52\x2d\x48\x65\xcb\xdc\x39\x9e\x2d\xa7\xfe\xfb\x55\x3c\x60\xa1\x85\x59\x33\x6b\xca\x55\x73\x46\xf0\x12\x0f\x9a\x11\x25\x97\x38\x5d\xc6\x33\xa3\xad\x65\x65\x5d\x38\x59\x25\x4c\x98\x59\x01\x05\x8b\x16\xab\x67\xe3\x21\x60\xa4\xeb\x66\x05\x82\x3d\x81\x30\xba\x59\x83\xb0\xbc\x24\x17\xac\xbd\x6a\x10\xc0\x9f\x40\x23\xd7\xb2\x72\x6b\xe6\x8f\x07\x65\xfb\x01\xf7\x2f\x8d\x75\x2c\x2b\x24\x44\x70\xb0\x0e\x02\x2c\x19\xcc\x99\x82\x00\xe6\x2a\xf7\x92\x55\xd8\x23\x1b\x36\x49\xe5\xe0\x80\x56\x24\x87\x1f\x8a\x99\xe0\x33\xf1\x32\xe1\x74\x73\x69\x43\x40\x61\x49\x13\x8d\x2d\x3c\xf0\x72\xc5\x3d\x82\xeb\x95\x13\xb9\xe8\xe3\x37\x07\x21\x9d\x29\x27\xdc\x7f\xe8\xba\x11\xb2\xe2\x8d\x09\xc0\x7e\x19\x51\x41\x92\xbe\x7f\xbb\xac\x2d\x32\xb0\x83\x81\x20\x88\xec\x98\x14\xb8\xa6\x4a\xac\xbc\xf5\x12\x99\x90\x2b\xef\x84\x13\x44\xee\xb4\x07\x9f\xd4\x1c\x38\x6e\x16\xc2\x3d\x8d\x6b\x45\xab\x7f\xec\xf3\xdd\xcf\xd1\x0e\x6f\x54\x8d\x26\x29\x05\x58\xfa\x2b\x9d\x5f\x43\xbd\x28\xd2\xe8\x93\x34\xd7\x8e\xfa\xaa\xb0\x04\xd8\x49\x67\x24\x91\x91\xae\x80\x46\x4b\x1f\x3c\x24\xbf\x78\xb6\xe2\x99\xb0\xec\xe8\xe2\xea\xe9\x09\xbb\xba\x78\x86\x95\x01\x04\x99\x7a\xbe\x83\x63\x2d\x3a\x4d\xa0\xd2\x88\x3a\x76\xd7\xe7\x4b\x1b\x0a\x2e\x08\x32\x6f\x97\xdc\xc1\xc5\xea\x7c\x3e\x37\xde\x3f\xe0\x06\x7b\xf4\x12\x27\x5a\xe9\x7c\xca\x2e\xb5\x13\x4d\x1f\x86\x51\xfc\x16\x08\xc2\x43\xb6\x31\xe8\x2e\xec\xf9\x43\x75\xeb\x48\x41\xaf\x13\xa6\x94\x0a\x68\x9b\x5e\x0a\x6b\xf9\x42\x5c\x91\x40\x2c\xef\x4b\x91\x01\x8e\x25\xda\x14\xb2\x35\x2e\x90\x63\xab\x89\x51\xdb\x4a\xa2\x43\xca\x65\xee\x7c\x34\x2b\xf1\xab\x9b\x9b\x77\x6b\xa4\x73\xa4\x43\x2d\x2d\x76\xea\x02\xfc\xdf\x26\x8b\x23\x6d\xa2\x9d\x2a\x29\xf6\x32\x4e\x14\x27\xe8\x7f\xce\xc7\x9a\x8a\xc6\x4f\x88\x60\xc5\x99\x91\x62\xce\xe6\x12\x8a\x91\xa0\x6c\xe6\x04\x3b\x43\x70\xca\x6c\xb9\x62\xdc\x5a\x61\x60\x5d\x43\xd9\x44\x5c\xdf\x29\xfb\x8e\xd6\x13\x64\x26\xbc\xbb\xa8\x32\xde\xf6\x59\x45\x56\x25\x39\x67\x0b\x28\xd0\xa1\xdd\x6b\xae\xd8\xef\x1e\xfd\xf1\xf7\x6c\xb6\x76\x22\x34\x43\x73\xda\xf1\x22\x4e\x98\x20\xb4\x10\x6a\xe1\x4f\x3b\x7a\xde\x7d\x8e\x1d\x6a\x4b\x94\x99\x60\x85\x2c\xa5\x43\xde\x9e\xc7\x5f\xdc\xcc\x7a\xa9\x15\x82\xc4\xd3\x5c\xac\x4e\x3b\x37\x60\x52\xe8\xc5\x94\x3d\xe5\xca\xeb\x74\xd2\xfb\x5f\x5d\xe5\x80\x1f\x18\x9e\x36\x19\x57\x71\xe9\x42\x66\xeb\x54\x27\x24\x10\xaa\xb1\xa5\xbe\xc5\x4e\x7c\xed\xef\x10\x96\x26\x6a\x97\xb6\x7c\xb8\xd2\x55\x5d\xc0\x72\xb1\xe7\x34\xfe\x2b\xd0\x54\xb5\x15\x9b\x64\x2c\xef\xd1\xe5\x34\xe5\x10\xa7\xb9\x91\xcf\x40\x25\x91\xb0\x10\x3a\x30\x19\x84\x47\xe2\xa6\x6b\x0e\xc9\xee\x31\xf6\x9c\x17\xc5\x8c\x67\x37\x6f\xf4\x0b\xbd\xb0\xaf\xd4\xb9\x31\xda\xf4\x56\x88\x72\x8f\xb9\x0f\xfe\x96\xb5\xba\x81\x86\xcf\xcd\xc7\x17\x7a\xc1\x74\xed\xaa\x9a\x94\xc4\x99\x6f\x1e\xa7\x66\x4d\x88\x3c\x68\x4d\xa4\x1b\x62\xcb\xce\x4c\xc5\x9d\xa4\xbd\x60\xde\x4a\xaf\xc0\x14\x13\x7e\x1d\x51\x2b\xb6\x5f\x4d\x8b\xf9\x3b\xea\xeb\x8b\x47\xbf\xfb\x03\x2a\x5c\xa6\x0d\xfb\xc3\x23\xa8\xad\x26\x45\xa9\xe0\x0a\x80\xb7\x27\x2d\xb3\x25\x2f\x0a\xef\x98\xa6\x29\x46\x7f\x1d\x3b\x8a\xb0\x51\x6b\x9f\x54\xab\xb9\x54\x05\xf6\x11\x73\xb8\x6f\xde\xfc\x0d\x12\xb8\xd2\x59\x51\xcc\x49\xc1\x75\x61\x75\xdb\x2b\xf3\x10\x62\xe2\xc3\xe0\x8b\x38\x53\x93\x54\xc0\xfd\x66\x45\x57\xba\xa8\x4b\xf1\x4c\xac\x64\x46\x79\x9d\xee\x6d\x5d\x4f\x16\x9d\xc0\xa0\x90\x16\x9a\x19\xcd\x0a\x9d\xdd\xb0\x3c\x88\x6b\xab\x53\x28\x5e\xc8\x3a\x95\x93\x3c\xa5\x96\x88\x5c\x43\xf4\xde\xd5\x6d\x2b\x80\x48\xef\x34\x9c\x95\xbc\xaa\xa4\x5a\xf8\x65\xe6\xcc\xf0\xdb\xde\x62\x93\x64\x7a\xcd\x0b\xc4\xa3\x49\xc4\xef\x89\x18\x8f\x14\x84\xc7\x24\x7c\x3d\xd1\xe7\x20\x97\x17\xa5\x82\x43\xda\x59\x53\xdf\xaf\x7b\xc7\xac\x15\x97\x4a\x41\x52\x81\x0c\xe4\x9e\x18\xa9\x37\x19\x6b\x53\x18\x38\xcf\x26\xec\xf5\x07\x3a\x81\x66\xcb\x69\x2a\x76\x20\xf9\xc1\x3e\xa5\x98\xab\xb7\x73\xaa\x81\x46\x94\xdc\x91\x92\x15\x38\xba\xf9\x4b\xce\x2a\x61\xac\xb4\xde\x47\x7f\x0b\x0a\xe8\x69\xc1\x25\xf5\xfd\xbb\xc9\xf0\x55\x9a\xba\x55\x09\xcb\x8d\x0a\x14\x1a\x5b\xa7\x5a\xba\x2b\x9d\x07\x71\x60\x98\x20\x6d\x42\xca\x77\x6e\xa5\x59\x52\x99\x65\x46\x73\xff\xee\xd3\xd4\xbd\x6d\x77\x2a\xdd\xd2\x79\x29\x8d\xa9\x43\xc9\xc1\x58\x11\x25\x7e\xbe\x06\x0e\xd6\xe2\x73\xb3\x6f\xcd\xa4\x47\x51\x92\x60\xd8\x82\xaf\x92\x62\xdc\xda\x58\xb5\x7d\x70\x5c\x8a\xa0\x14\xc8\x52\xdb\x34\x4b\xc8\xc4\x4e\x03\xe6\x5b\x91\xbb\x1c\x37\x53\x65\x87\x4f\x0e\xef\xcd\xc8\xe1\x26\x1a\x5d\xf1\x05\xe4\x0e\x46\xd9\xcb\x4d\xa1\xe4\x15\xca\x05\xa6\x35\x84\x85\xb4\x19\xc8\x85\xc7\x17\xba\xef\x13\x66\x25\xf2\x96\x13\x1c\x98\xfe\x13\x58\x34\x3a\x47\x2e\x24\x4c\x34\x44\xca\xb7\x09\xf4\x06\xdc\xe8\x5a\xe5\x01\xd4\xd1\x20\x89\x5e\x6e\x2c\xec\x25\x9d\x88\x10\xd2\x3c\xb1\x0f\x8a\x0f\x71\xa1\xde\x59\x5a\x36\x13\x8e\xde\x65\x44\x2a\xf6\x78\xfa\xf8\xd1\xe7\xef\xb3\xc1\x9a\x8c\xe4\xb3\x5d\x36\x3e\x1b\x5a\xb9\x7b\x5b\x1d\x23\x78\xfe\x4a\x15\x84\x4c\x10\x8e\x7e\xd9\x50\x78\x92\xf2\x42\x27\x5a\x25\x50\xc6\xc8\xd8\xe9\x1d\x44\xdd\x1a\xe9\xc2\x0d\xba\x95\x09\xf5\xa6\x47\x90\xb4\x61\xda\x74\x39\x79\x8f\xdb\x5c\x5e\x42\x48\x42\xcd\x07\x85\xff\x3e\xb1\xdd\x35\x63\xb6\x9e\x3d\x38\xbb\x8b\x06\x16\x95\xea\xae\xf7\x54\xfa\x7a\x07\xc9\xdb\x26\x98\x2c\xb1\x0b\x21\x3e\x38\x60\x47\xf8\x0b\x87\x48\x4a\x79\x7c\x6f\xd7\x33\x6c\xeb\xf9\x5d\x45\x6e\x48\xd8\xdb\xda\xf3\xbb\x8a\xab\x5c\xe4\x18\xf0\x27\xb8\xd6\x2c\xb2\x30\xef\xda\xe3\x74\xb3\x79\x68\xfb\x7b\x4c\x96\xd8\x75\xcf\xfe\x22\x96\x7c\x25\x80\xba\x53\x16\xdc\x24\xa8\x27\xa7\xd9\x35\xee\x0c\x9b\xd5\x8e\x09\xb5\x92\x46\xab\x52\x24\x30\x9d\xaf\xb8\x91\x7c\x56\x08\x66\xc4\x5c\x18\xa1\x32\x61\xd9\xaf\x8f\xde\x9e\xbd\x86\x6a\x09\x7a\x3f\x05\x6e\x04\x13\x71\xd7\x6b\x0b\x55\xf6\x23\xdd\xc2\xce\x67\x4f\x37\x2e\x10\x5d\x45\x6f\x5c\xbc\xb8\xce\xfe\x06\xd0\xd7\x40\xe5\xcd\x7e\xf9\xf5\x28\x6b\x57\xf3\x02\xd8\x5b\xb3\xa2\xb6\x72\x75\x1f\xf6\x37\xb0\xe9\x3e\x93\x84\x9b\xbd\xc1\x42\xdc\x5e\x9a\x2d\x8a\x5e\xca\x87\x45\xcc\xd5\x78\xed\xc8\x03\x0e\xe9\xd0\x36\x4d\x9f\xba\xbd\x72\xc8\x8f\x72\xac\x94\x8b\x25\x24\x50\x3a\x6d\xf6\xc8\x46\xab\x03\x0d\x2b\x01\x45\x72\x5f\xcf\x73\x3e\xf8\x38\x2b\x24\xb7\xc3\xc2\xf0\x2d\x76\xc1\x20\x03\xda\xcf\xaa\xd0\x2d\x89\x0f\x03\x86\xc4\xf7\x1d\x3f\x25\x7c\x40\xbf\xb8\x0a\x08\xd5\xb8\x83\x52\xfd\xb7\xc8\x86\xbe\x00\x37\xd9\xb4\x4a\xe7\x87\x36\x88\x07\xec\x95\x9c\x53\x59\xcf\xc1\x3f\x97\x16\xe9\xd8\x57\xd0\xff\x6d\xae\x0d\x70\xe0\x7a\xf9\x97\xc2\xf9\xdb\x31\x48\x64\xa5\xf3\x41\x9c\x76\xb4\x74\x1c\x21\x11\xb7\x7b\xaf\xd9\x52\x17\x39\xb2\xbc\x87\x47\xa3\x81\x07\x76\x26\xdc\xad\x10\x8a\x5d\x5c\xc1\x5e\xfb\x65\x03\x84\x63\x6f\xc7\x07\xca\x8c\xe7\x83\x71\x38\x86\xd0\x14\xa4\x93\x5b\x8e\xbb\x3f\x50\xaa\x3f\x2b\xc3\x8e\x07\x39\x9b\x47\x4f\x8a\x35\xeb\x97\xa8\xe1\xff\xda\xec\x43\x24\x51\xe0\x33\x4d\xa2\x64\xf0\x1b\x9b\xe7\x86\xd4\x3f\xe5\x5e\x72\xcd\x09\x06\x56\x56\xa9\xf8\xac\x66\xb1\xe2\x9b\xd8\x92\x56\x84\x0d\x8a\x0d\x0e\xfe\x27\xb4\x20\x17\x57\x4f\xc9\xd6\xe3\xf0\xdb\x00\xf9\xf2\x82\x0e\x0f\x2d\x93\x55\xd6\x62\x9d\x87\x7d\x44\x8b\xcf\x8d\xe8\x89\x26\x5a\x1e\x02\xe2\xa3\x85\xc8\x1d\xc5\x9f\x64\x4a\x99\x42\x21\xde\xb7\x0a\x1c\xaa\x04\x9c\x37\xe0\x64\x00\xe2\xdd\x5b\x5f\x1b\xa5\x53\x97\x38\x16\xa4\xa0\x89\x07\x98\x52\x2c\x6e\xa8\xb4\x71\x76\x38\xe3\x7d\xd7\x3d\x6b\x4a\xb8\x5b\xbb\x4c\x22\xf0\xa1\x24\x49\xe8\xbb\x7e\x75\xf1\x6c\xbc\xe3\x5f\xc9\xfc\xb3\x3d\xfe\x43\xf3\x9f\x7d\x9e\xb7\x5e\xeb\x98\x28\x8e\x52\x2d\x73\xa5\xf3\xf7\x04\x16\xad\x13\x30\xf8\xd5\x2a\x1e\xd3\x50\xeb\xc7\x19\x3e\xc6\x4e\x62\x77\x5d\x28\xe2\x1e\x7e\xde\x06\x6a\x5b\x08\x17\xae\xea\xa2\xb8\x16\x99\x11\xc3\x1e\xac\xfb\xe7\xee\x62\x43\xd2\x18\xae\x7b\x27\x9f\x00\x5c\xd0\x41\x30\x3a\x60\x76\xe8\x8a\x37\xb7\x20\x70\xff\x81\x47\x52\xd5\x45\x01\x1c\x39\x6a\x4d\x39\x1a\xb0\x7e\xf8\xf2\x80\xe8\x2f\x69\x63\x1d\x15\x16\x82\x36\xe7\x65\xa0\xb6\x15\x56\x34\x1f\x1c\x8f\x4a\xc5\xad\x45\x84\xa8\x54\xb9\x5c\xc9\xbc\x1e\xb8\xae\xfe\x63\x21\x46\x0c\xac\x3b\xf0\xea\xd2\x78\x66\x25\xa9\x53\xe0\x73\x6d\x98\xb8\xe3\x5e\xe4\x49\x53\x7b\xce\x2d\x5c\xb4\x5c\x67\x37\xc2\x9c\xb0\xc1\xf9\xf4\x67\xf0\x1f\x3e\x85\xc8\x18\x0e\x76\xb3\x16\xdc\xf8\xbb\xac\xb4\x19\x1a\x62\x0d\x24\x42\x68\x4b\x12\x4e\x71\x8f\x7f\x85\x5b\xb9\x96\x6a\x31\x81\xbf\xf1\x8b\x19\x66\x35\xd1\x6a\xc2\x27\x5e\x19\x3c\xf8\x80\x0b\x9a\x81\xbf\x82\x48\xe2\x75\xbc\x5d\x31\x7d\x30\x34\x90\x11\x4a\xd7\x8b\x25\x2c\xaa\x29\x79\x68\xcd\xc5\x0a\xe1\xa0\x07\x0e\xe2\x61\x07\x8a\x44\xa2\xf7\x30\xaf\x3c\x84\x3c\xdd\x8e\x50\x83\x6f\x3d\xa3\x5a\xbf\x7b\x08\xba\x68\xef\x7d\x1b\x7c\x27\x9d\x46\xa2\x61\x25\x49\xb4\x5f\x03\xef\x8b\x5e\x09\xb3\x92\xe2\xf6\x34\xb8\x9a\x93\x5b\xe9\x96\x13\x5c\x3d\x7b\x0a\x5b\x70\xfa\x2b\xf8\x07\x61\x2e\x48\x16\x76\x96\xe7\xe1\x29\xba\xb6\x62\x5e\x17\xf8\xc8\x6b\xa7\x8c\x57\xf2\xad\x30\x56\x6a\x52\xc9\xf9\x8d\x54\xf9\x09\xab\x65\xfe\xd5\x27\x2a\xcc\x91\x4a\xb6\x05\xc1\x09\x16\xf7\x45\xb0\x92\x81\xa9\x55\xfe\x0b\xaf\x60\xab\xb9\x06\x7d\xce\x4c\x14\x5a\x2d\x3a\x4c\xb6\xe0\xec\x5f\x28\xe9\xa8\x12\x31\x7d\x0f\xdd\xe0\x20\xb5\xa9\x4d\x0e\xc5\xe2\xd2\x9b\x1b\x4d\x9f\x27\xf4\x19\xec\x14\xb4\x7b\xd3\x2d\x7b\xf3\x84\x52\x99\x81\x05\x13\x91\x0b\x0c\xcb\x01\x22\x49\xa3\xd3\x6c\xc9\x57\xa2\xe9\x3f\x34\xb0\xae\x5f\x5a\xb6\xe4\x2a\x87\xff\x34\xcb\xb4\xc9\xc3\xfa\x4a\xd7\x54\xe5\x63\x39\xd6\xd0\x74\x61\x80\x4e\x7a\xcb\xcd\xd5\xe6\xd7\x43\xe6\xd0\x94\x03\x9d\x83\xf6\xbf\x8f\x41\x53\xad\xe4\x3f\x6b\xc1\x78\xa9\xbd\x83\x94\xd0\x0b\x7f\xe3\x14\xb1\x92\xaf\xc1\x9b\x86\xa5\x7d\x11\xf9\x85\x86\x1d\x2e\x6c\x04\x77\xc2\x5e\x0b\x9e\xcb\x0e\x59\xef\x09\x7b\xd1\x67\xef\x1d\x76\x0c\xb4\x61\xd7\x48\x71\x19\xfe\x73\xac\xee\x31\xc2\xea\xda\x64\xe2\x35\x02\xe3\xbc\xf3\x34\xec\xd8\xea\xf9\x8e\x8d\xf2\x37\xc4\xf1\x1b\xa1\x30\xa9\xec\x8f\xc8\x50\x84\x67\x5e\x1b\xb8\x0f\xd9\x52\xe4\x35\x78\xb2\xb3\x35\x9b\x7b\xff\x30\xbc\x96\x2d\xe5\x62\x29\x06\xa6\x7e\x42\x9a\xe0\x14\x6a\x92\xb0\x6f\x2a\xcf\x96\xcd\x22\x80\xda\x1b\xb6\xac\x0d\xaf\x47\xfb\x8c\x57\xf2\x3b\xbf\x2a\x60\xaa\xb8\x23\x50\xe0\x86\x7c\xa2\xad\xcb\x68\xef\xf0\xd4\x77\x8f\x29\x7b\xe1\x3f\x61\xb8\xde\xe2\x55\x55\xc8\xe8\x6b\xf7\x0f\x2f\x54\x1f\x84\x77\xd8\x41\x72\xe7\xdc\x2e\xa5\x56\x5b\x4a\x95\x65\xf8\x58\x93\xd5\xc6\x1b\xeb\x81\xae\xf2\x4c\x30\x9e\xe7\xde\x57\x32\xcc\x88\x52\xaf\xbc\x56\x4c\x7c\xfe\x49\x23\x0d\xf3\x0b\x36\xe9\xf8\xcf\x0f\xdf\x29\x3e\x0b\x74\x45\xb8\xed\xd9\x86\x1d\x1d\xec\xc2\x72\x74\x80\x63\xe7\x28\x53\xab\xb6\x6c\xc5\x5b\xd5\x4f\xe3\x86\xd2\x30\xbc\x04\xfc\x2d\xdd\xdf\xe5\x66\x91\xfa\xbe\x70\x78\x66\x16\x35\xa8\xe3\xe8\xb7\xb4\xad\xdb\x29\x6e\xaf\x57\xf6\x18\xb6\x62\x6c\x7f\x78\x68\xd9\xd3\x97\xcf\x22\xbc\x90\x20\x51\x86\x0c\x67\xe0\x50\xab\x8c\x5e\x49\x68\x3f\xf8\x36\xc0\x26\x28\x8f\xd2\x3b\x81\x16\x3d\xc0\x04\x41\xea\x2e\x88\xc5\xa1\xed\x61\x25\x68\x4f\xf2\xbc\x85\x88\x64\x8d\x66\xf2\xd6\xa4\x58\xd1\x9e\xd0\x7b\x61\x62\xcc\x3a\x48\x55\xd5\x8e\x8e\x58\x6a\xf2\xc6\x2a\x5b\x72\xb5\x40\x28\xa9\x48\x04\xb2\xd8\xb5\x72\xfc\xce\x7f\xb5\x17\x2d\x6c\xc6\x2b\x91\x87\xf2\x61\x96\xeb\x9a\xb6\xfd\xbf\xfe\xf5\x09\x93\xe2\x09\xfb\x75\x67\x72\x53\x76\x1e\xa4\xb7\x87\x83\xba\x0a\xc8\xbc\x34\x6b\x0f\xd3\x09\x33\x62\xc1\x4d\x5e\xd0\x9a\xec\xe8\x39\xbb\xed\xd0\xd9\x35\x87\x41\xdc\x49\xeb\x2c\x23\x51\xce\x28\xed\x76\xd9\xb9\x8e\xed\x22\x08\xfd\x09\x6b\xe7\xb8\xbd\xf1\xb6\xcd\xeb\xe1\x49\xce\x1d\x9f\x74\x8c\xc5\x29\x66\x6d\x27\xa1\xc9\xf2\x84\x07\xa5\xd4\x9a\xc1\xd3\x5f\x99\x5a\x29\x1f\x18\xf3\xe6\xff\x4a\xaa\x09\x9f\x40\x4b\x5e\x6a\xe4\xf9\xf9\xbc\x68\x92\xbb\x97\xf7\xb5\xfd\x79\xa3\xdc\xf1\xdb\x81\x71\x88\xf0\x25\x4d\x5c\xda\x18\xe6\xd0\x1a\xb9\xd5\xff\x14\x55\x1f\x2d\xc6\xf9\xe5\x9b\xd7\x7f\xbb\x7a\x75\x71\xf9\x26\x1a\x8e\x68\x06\x28\x52\xdf\x67\x38\xd2\x6e\xfa\xfb\x0c\x47\x6b\x06\x52\x80\x48\x9b\x86\xa3\x6f\x06\x28\x92\xb7\x0d\x47\xdf\x0c\x50\x56\x76\xdb\x70\xec\x30\x03\x44\x2f\xa2\xbb\xbe\x3b\xcd\x00\x49\x3b\x77\x0c\xc7\x6e\x33\x40\x90\xba\x6d\x38\xfa\x66\x80\x74\xbf\xb6\x0d\x47\xc7\x0c\x10\x4d\xfe\xb6\xe1\xe8\x9a\x01\x82\xd0\xdd\x86\x63\x6f\x06\x7e\xce\x8f\x92\xcc\x80\x50\xab\x44\x13\x10\xb3\x9e\x1d\xe5\xd2\x9c\x0b\x12\xc9\x59\xaf\xc9\x6c\x87\xbe\x6f\x8c\x43\xf5\x79\xec\x67\x1f\x66\xaf\x56\x6f\xb9\x61\x46\x54\x46\x58\x88\xab\x88\x65\x1d\xbb\x36\x88\x05\xa1\x34\xea\x42\xc6\x78\x8b\x18\xfe\xec\xaa\x62\xef\xa9\xae\x75\xb4\x1a\xb2\xee\xc3\xd2\x98\x55\x03\xd3\xa6\xdd\x10\x67\x4f\xff\x7e\xf1\xec\xfc\xf2\xcd\xc5\xf3\x8b\xf3\xd7\xf7\x56\xb8\x92\xd4\xc8\xb5\xef\xae\x8e\xe3\xa9\xe1\xf8\x69\x7f\x8d\x2c\x16\x7b\x19\x88\x95\xd4\x35\x40\xdc\x01\x7c\x32\xe6\xfe\xda\x2d\xdd\x4a\x16\x09\x3c\xd0\x6a\x0d\x0d\x5a\x65\x36\xee\x31\xb4\xd3\x9d\x99\x0a\xb2\xdc\x51\x1d\x55\x1c\x3f\xe1\xae\x92\x65\x8e\x9a\xed\xc0\xf1\xfe\x9c\x07\x7d\xe3\xc7\x76\x79\x71\xfc\xa4\xe3\x9b\xb2\xf3\xef\x71\x7f\xc9\x22\x7f\x22\x7b\x42\x96\x19\x9d\xe7\x7e\xf5\x13\xb9\x11\xd2\x38\x6a\xf7\xb9\xd1\xe5\x28\xaa\xf7\x1a\x5f\xaa\x02\xb4\x89\xbc\x48\xbb\x9c\x98\x43\x3b\x1c\x9c\xd7\x1f\x9d\xb4\x55\x48\x0d\xc4\x96\x2d\x64\x91\x5e\x1e\xd0\x1c\xa6\x99\xcd\xa4\x16\xfa\x63\xf4\x9d\xc7\x6a\xa8\x97\xbc\xfa\x46\xac\x5f\x8b\x84\x5e\x49\x9b\xe7\x41\x14\x22\xf3\xce\x2c\xbb\x11\xf4\xe2\x49\x16\x5e\x72\xd9\xd3\x38\xcd\x94\x26\x53\x23\x2c\x39\x4b\xee\x37\x87\x63\x92\xb8\x2c\x63\x6c\xbd\x1f\x37\x82\x5c\xce\x1f\xc7\x56\x0b\xfd\xd4\x0d\x67\x31\x4a\xf4\x27\x28\x65\xbf\xd9\x38\xdd\xe2\x70\xa4\xf8\xf5\x71\xec\x44\x8e\xa5\xaf\x55\x17\x79\x06\x69\x95\x64\x91\x0f\x04\x87\xd6\x1f\xbb\x51\x69\xc9\x62\xc7\x41\xb5\xf5\x47\x0a\xc6\xad\x3f\x46\x3b\xbf\x11\x18\x3e\xea\x19\x46\xcc\x7f\xfa\x75\xef\xfa\x5b\x8d\xaa\x4f\x96\x8a\x9c\xb0\x5e\x1f\x45\x88\x55\xb2\xc8\x10\xb0\x8d\xb2\xa9\x29\x1c\x1e\x2c\x1e\xdc\x31\x6d\xf6\x61\x63\xb4\x93\xbe\x0f\xb9\x80\x9a\x7e\x96\xf9\x93\xd8\x4e\x22\x4d\x05\x94\xc2\xf1\x9c\x3b\x3e\xf5\xda\xe4\xa4\xff\x47\x80\x1b\xa7\x5d\xdb\x7f\x34\x02\x0b\x3e\x13\x85\xfd\xfe\xf0\xf0\x4f\xdf\x9c\xff\xed\xcf\x87\x87\x3f\xfc\x63\x2c\xc9\xe0\x86\x62\x11\xc0\x78\xe2\x6d\x25\xb2\xa9\xd2\xb9\xb8\x84\x75\x81\x3f\x86\x80\xfd\x0c\x01\x6e\xf0\x3f\xa4\xfd\x06\xf0\xab\x4f\xb1\x56\xf0\x24\xfe\xb1\xd2\xf9\xc5\xd5\x28\x82\x41\x92\x4d\x68\x0a\xfb\xc0\x9c\x3b\xb8\x02\x44\x46\xbe\x38\xc6\x72\xf1\x5a\xbb\x36\xaa\xea\x0f\x32\xd3\x95\x34\xea\x09\x9b\x2d\x45\xc9\x93\x62\xc7\x38\x9e\xc7\xc5\x67\xd2\x26\xf4\x4d\xe9\x0f\xa9\x80\x23\xdf\x32\x3d\x1f\xa5\x1b\x32\x0e\xa7\xd9\xc1\xea\xf1\xc1\x83\x71\x72\x9b\x73\x3b\xea\x51\x81\xbd\x18\xc9\xd1\x45\xe3\xd2\x84\x07\xa3\xec\xeb\xb2\x53\xaf\xca\xce\xae\x2e\x92\x85\xae\xf0\x6e\x3c\x88\x6d\x8d\x20\xe2\xe7\x0f\xd4\x5b\x68\x40\xce\x9b\x5c\xd2\x69\x47\x10\x98\x3d\xa2\x6c\x8b\xdd\x1e\xd2\xee\x2b\x57\x79\x04\x6a\x5b\x76\x84\x02\xa7\x59\x55\xa7\x19\xc0\x20\xa7\x14\xa5\x36\xeb\x93\xf8\xc7\xa6\x09\xd9\xc4\x3a\x6d\xf8\x22\xd1\x7c\xc7\x69\xc3\x74\xdb\x3f\xe1\x8f\x8e\xb6\x28\xdb\xb3\xa6\xe7\xb4\x59\xc0\x85\x37\x18\xed\xe8\x43\x92\xfa\xf9\xb4\xe3\x41\x79\x09\xf1\x78\x3e\x00\x27\x21\x4b\x6b\x98\xd8\x1f\x7d\x35\xf1\x34\xf9\x19\x2a\x0e\x48\xc1\x34\x6b\x4f\x6c\x9d\xd7\x1f\x81\xed\xfb\x84\x56\x37\xbd\x6b\x40\xf5\x86\x5a\xb1\x15\x37\xc4\x86\xdd\xed\x18\xcd\xae\xe7\x72\x25\xad\x4e\x54\xa9\xef\xab\xf7\x1f\xc5\xae\x87\x56\x3e\x58\xd9\x3a\x96\x53\x29\xee\x2a\xe8\xec\xda\xd8\x81\xf4\xcc\x4e\xde\x7d\xbd\x79\x4c\x27\xaf\xc3\x51\x71\xe7\x84\x51\x4f\xd8\x7f\x1d\xbd\xfb\xed\x8f\x93\xe3\xaf\x8e\x8e\xbe\x7f\x34\xf9\xe3\x0f\xbf\x3d\x7a\x37\x85\x7f\xf9\xcd\xf1\x57\xc7\x3f\xc6\x3f\xfc\xf6\xf8\xf8\xe8\xe8\xfb\x6f\x5e\x7e\xfd\xe6\xea\xfc\x07\x79\xfc\xe3\xf7\xaa\x2e\x6f\xf0\x4f\x3f\x1e\x7d\x2f\xce\x7f\xf8\x99\x42\x8e\x8f\xbf\xfa\x75\xe2\xc4\xb9\x5a\xbf\x4a\x72\x25\x18\x68\xc0\xf4\xde\xf4\xdb\xd2\x46\xb8\x2e\x8c\xdd\x4d\xda\xa4\xe7\x44\x2a\x37\xd1\x66\x82\x82\x9f\x00\xdb\xec\x28\x2e\xcf\xb8\x7a\xf6\xf5\x08\x36\xa9\x3f\xbf\xd6\xcd\x7e\x10\x8a\x0c\x8b\xff\x1f\xf6\x3b\x15\xce\xb1\xc7\x59\x96\xfc\xea\x00\xc9\xad\x5f\x8a\xcf\xb3\x7f\xf6\xfa\xa9\x11\x93\x21\x78\x8a\xc6\x8b\x72\xe7\x46\x97\xb1\xe7\x00\x00\xbf\x80\xf3\x30\x59\x6c\x98\xe7\x8d\x20\xbf\x82\xc7\xb1\x7f\xa6\xa3\x8c\xfd\x33\x5d\xda\xd8\x3f\xd3\x0d\x1b\xdd\x67\x3a\xa4\x9d\xda\xbf\xd1\xed\x1a\x42\xad\x68\xc0\xaa\x9d\xc8\xfb\x98\xc3\xea\xb4\xbf\x25\x7c\xdb\x4e\xfc\xfe\x36\x0c\x9f\x20\x39\x18\xbf\x16\xcd\xda\xd6\x78\x51\xd3\x1b\xe5\x6e\x84\x32\x3b\x2b\x0a\x26\x15\xd5\x78\xc1\x24\x63\xbd\x91\x11\x98\x4e\x8a\x5c\xb3\x2b\x1a\xa8\xf5\x76\x29\x36\x96\x10\x38\x15\x1d\x37\x4e\xaa\x05\x65\x39\xa1\x67\x0b\xb8\xa3\xb1\xec\x46\x2a\x56\xd6\x85\x93\x55\x21\x58\x42\x20\x8b\x60\xc6\xa2\x16\x8c\x5b\xab\x33\xc9\x63\x3d\x1e\xfc\x2f\x05\x27\xf1\x95\x86\x48\x01\x56\xd5\xf1\x1b\xc0\x36\x67\x22\x17\x2a\x13\x53\xf6\xd6\xff\x1a\xc5\xa2\xc4\x93\x34\x5b\xfb\xbd\x39\x57\xab\xa6\x12\xab\xc6\xe2\x1f\xca\xa1\xf2\x2b\xba\x7b\x9e\xff\xbe\xa5\x27\x5e\x4d\x05\xe8\x66\x5b\x81\x42\xd2\x9c\xe0\xb7\x36\x99\x7c\x0e\x45\x3e\x7a\xde\xa2\x39\x48\xb5\x42\x69\x91\x4b\x6a\xb4\xd0\x60\x23\x13\x02\xce\xad\x30\xa1\x59\x90\x94\x9e\x51\x18\x16\x80\x5b\x4f\x94\xf1\x40\xe0\xa7\xa9\xee\xfa\x7b\xb9\xd8\x12\x13\x34\x5d\x37\xfd\xe1\xb9\xd9\x1f\xc1\xc5\xde\xe1\x5e\xa3\x7b\x9c\x24\x35\xd5\xb5\x1e\xc5\xad\x1e\xc3\xa5\xde\xe5\x4e\x27\x14\xd7\xb6\xa3\x87\x78\x1b\xc5\x05\x4e\x77\x7f\xd3\xe1\x69\x95\x11\x73\x79\x37\x8a\xce\x3c\x6b\x39\x6d\x99\xcc\x85\x72\x72\x2e\x53\x1a\x0d\x6b\x3f\xb9\x4a\x28\x00\x11\x00\xcd\x96\xf7\x0b\x12\x5b\x1b\xb5\xf0\xf4\x87\x56\x5c\x87\x29\x9a\x31\x0d\xd8\xf5\x58\xc9\xa9\xbd\xf5\xda\x5b\xaf\xbd\xf5\xfa\xd0\x78\xf0\xd6\x2b\xe8\x83\x18\xb2\xdf\xaf\xf9\x01\x46\x98\x54\xd2\x9b\x67\x1d\x3e\x32\xb8\xe3\xe4\x74\x6d\x02\xff\x35\x29\x11\xd3\xed\xc4\xda\x58\x4d\xa7\x19\x2f\x0a\x7d\x4b\x90\x08\x64\x96\x86\x15\x62\x25\x8a\x10\x0e\xb1\x92\x2b\xbe\x00\x46\x4e\x5a\x04\x13\xdb\x7a\x69\xc3\xbc\xc2\x31\x32\x17\x9b\xfd\xb4\x48\xac\x3d\x8a\x45\x5e\x44\x10\x67\x74\x51\x08\x63\x59\x21\x6f\x04\x7b\x26\xaa\x42\xaf\x87\xb3\x88\xe2\x80\x9e\x70\x8e\x3b\xaf\xa6\xae\x85\xa3\xe0\x94\x53\x7a\xd3\x44\xa2\x7f\x64\xae\x4d\x3d\xdc\xd0\x37\x00\x98\xe9\x59\x85\x54\xb8\xec\x15\xa9\x0d\xb0\x9e\xb3\xb3\xe2\x96\xaf\xed\x09\xbb\x14\x2b\x61\x4e\xd8\xc5\xfc\x52\xbb\x2b\x4c\x22\x50\x1c\x9e\x6e\x65\x2c\x8a\x66\x72\xce\x9e\x14\xdc\x09\xeb\x98\xe3\x14\x25\x2a\x6d\xb7\x87\x84\x36\xbd\x49\xb6\x7d\x62\xc7\xe9\xc9\x9f\x4e\x7a\x0f\x92\x1a\xca\x7b\x02\x80\x28\xe1\xa0\x15\x91\x18\x38\xf1\x88\x9d\x21\x55\x30\x12\x73\x22\xf3\x6c\xd4\x18\x94\x04\x23\xb4\xe9\x88\xfd\x5b\x21\x75\x27\x15\x33\xc2\x56\x5a\x59\x41\x53\x41\xad\xba\x69\xbe\x19\x13\xc0\xf6\x5e\x73\x81\x44\x7f\x36\xcd\x93\xad\xb4\x75\xc0\xc0\x4c\x73\x30\xfa\xca\xe5\x2a\x0a\x03\x5a\x6f\x5e\x14\x64\x47\x40\x96\xa5\xc8\x25\x77\xa2\x58\x33\x3e\x77\xc2\x30\x9e\x4c\x68\xe1\xe7\x64\x04\x8f\x3c\xe6\xc0\xd6\x0c\x6c\xe1\x24\x02\xf3\x76\x6c\xa5\xff\xb1\xed\x3c\x1f\xda\xe9\xb0\x1d\x08\xab\x0d\xa4\xeb\x5b\x54\xe6\x44\xa1\x41\x60\xab\xf6\xc1\xfb\x4e\xba\x9c\xac\xc5\x2c\xb4\x0b\x30\x2b\x74\x76\x63\x59\xad\x9c\xa4\x7a\xf5\xd8\x41\x48\xdf\xb0\x4c\x97\x55\x01\xca\x33\x8d\x68\x92\xfd\x34\xd9\xe4\x2e\x8d\xdc\xfc\xeb\xa4\x51\x12\x13\x3f\x27\x7b\xfa\xab\xf6\x7f\x82\xbf\xa0\xc5\x08\xc9\x31\x6c\x7a\x04\x2b\xee\x44\x46\x8f\x2b\x7a\x57\xff\x95\x12\x70\x6a\x93\x5a\xb9\x33\xa6\x55\x53\x08\x30\xd7\xde\x69\x05\xb2\xf5\xb4\xbe\xce\x6c\xa3\x21\xd9\xf9\x9d\xc8\x9a\x3f\xa7\x84\xb2\xd0\x5d\x31\x8b\x7d\x58\xbc\x69\xa2\xc3\x60\x46\x01\x69\x8d\x03\x8f\x22\x53\x87\x76\xc7\x46\xdb\x61\x90\x98\xc2\xb7\x81\x03\x15\x0d\x0a\x2b\xa4\x22\x9a\xff\xee\x08\xc4\xa4\xdd\x96\x37\xcd\xed\x4e\x05\x98\x78\x61\x5b\x5d\x96\x13\x65\xc6\xae\x9e\x71\x15\xd2\xd7\xd4\x68\xed\xd8\xd1\xe1\xe9\xe1\xf1\x16\x1a\x20\x11\xbc\x88\xdd\x2c\xd1\x81\x43\xba\xa3\x30\xeb\x44\xa9\x12\xfa\xb2\x57\xd0\x94\x5b\x64\x87\xf9\x09\x93\xa9\x40\x94\xc0\xf9\x6a\x6a\x15\x4f\x42\x5a\x55\x13\x43\x7e\xdb\x13\x66\x35\x73\x86\xe7\x72\x94\xea\x02\x90\xe9\x27\xe8\x4c\x1d\x9c\xec\xa3\xc3\x1f\x0f\x53\xcf\xa9\x70\xd9\x31\xbb\xd5\xea\xd0\xc1\x71\x9d\xb2\x37\xa9\xb7\xaa\xb6\x22\x52\xfc\x9e\x00\x37\xbf\x12\xe9\x80\x1c\xcd\xc4\x5d\x55\xc8\x4c\xba\x62\x0d\xce\x25\xd3\x75\xea\xbe\x03\x87\x3d\x77\x91\x8d\xf8\xfc\x2e\xf9\x24\x61\x45\xb3\x37\x62\x8f\xc0\x15\x44\x87\x33\x51\x28\xb7\xac\x90\x2b\x71\xba\x14\xbc\x70\xcb\xf5\xe0\xbe\x38\xdb\x43\x69\x35\xf9\x97\x30\x1a\xf8\x92\x55\x90\x9b\x86\xe2\x4c\x01\x34\x74\x07\x19\xdc\xb0\x3d\x99\xa4\xdc\xab\xf7\x17\xbf\x16\xc4\xb8\x88\x6d\xb5\x86\x7d\xf3\xe6\xea\x6b\xe1\x46\x73\x3c\xfc\xec\x62\xe9\x1d\xbc\x6a\x09\x33\xd7\xa6\xbc\x67\x0f\x24\x1d\x24\x3e\x81\x3e\xb4\xf7\xec\x02\x2d\xb5\x4d\xd8\x77\xb6\xbb\x2d\x30\x8d\x8f\xb4\x3b\xb0\x8b\x97\x12\x99\xdf\xf1\xd1\xca\xd0\xdb\xfe\x63\xec\xe2\x6a\xca\xfe\xa6\x6b\x68\xc5\xc4\x67\x49\x9e\xbc\x1f\xb1\x23\x8b\x15\x8e\x1d\xf8\x45\x38\x48\x79\x68\xc5\xe1\xcf\xfd\x5f\x05\xcf\xb1\x35\x90\x75\x82\x93\x18\xc3\xdb\x31\x12\x74\xb7\x33\xaf\x31\x3d\xe7\xda\x3a\x5d\xb2\x25\x0a\x4e\xdf\xe8\x0e\xf5\x72\xd0\x1d\xa9\xc8\x7d\xaf\xd7\xf0\x7d\xc1\x32\x23\xaa\x31\xac\x5d\xf8\xda\x5f\x90\x35\xda\xb2\x04\x78\x52\x12\xa5\x46\xb9\x33\x61\x19\x67\x19\x1c\x95\x64\x91\xb8\xf8\xfe\xac\x04\xba\xc4\x64\x89\x52\xe1\x21\xc1\xfe\x6e\xa3\xd8\xf5\xe4\x62\x26\x36\x52\x41\x13\x4b\xa1\x9a\xee\x0b\x19\xde\x90\x6d\x7b\x8c\x55\x1f\xc5\x46\xaa\xa4\x61\x3b\x00\x24\x23\x88\x6c\x4e\x29\x3e\x76\x8e\xb0\xfc\x6c\xcc\x1a\x0e\x96\x4a\x6a\xdd\x1d\x1f\x7f\xf9\xc6\x38\x78\x6c\xbc\xf5\xab\x92\xe9\x67\xb6\xc9\x67\xb0\xd9\x23\xad\x99\x52\x77\x68\x34\x9d\xa0\xce\xac\x30\x2b\x5a\xc1\x44\x3b\xc6\x5a\x32\x4d\x7d\xbe\x89\x63\x07\xf3\xbc\x61\xaa\x2e\x67\xc9\x46\xaa\xe1\x81\x33\x6e\xec\x6d\xe8\x34\x8f\xb8\x1c\x63\xaa\x11\xc2\x12\x1d\x24\xae\x16\xa9\xf7\xe2\xb1\xff\xe6\xdf\xff\xc7\x7f\x7c\xf9\x1f\x53\x5c\x56\xff\x1b\x89\x32\x67\x82\x71\xc5\x2e\xce\x2e\xcf\xfe\x7e\xfd\xf6\x29\x70\x72\xa7\x9d\xc2\x11\x8a\xf9\xc7\x2c\xe5\x1f\xb1\x90\xff\x23\x96\xf1\x03\x61\x59\xa2\x86\xef\xe3\xb2\x40\x60\x7a\x46\xbb\xb6\x48\xc3\x1d\x22\x45\x7c\x36\x1c\x21\x93\xed\x63\xe2\x1e\x7b\xf9\x08\x81\xc3\xbd\x6b\x4f\x97\x55\xd7\x3a\xbb\x19\x2d\xcb\x73\xf8\xe6\xe9\x15\x0a\x1c\x25\xd1\xc3\x55\x7c\x60\x92\x6a\xa5\x8b\x95\xdf\x4c\xce\xde\x3c\xbd\x4a\x34\x16\x53\x2f\x03\x5e\x58\x31\xef\xbd\x4e\xaa\xe4\x6c\xa8\x99\x02\xb4\x53\x96\x55\x91\xf2\xa2\xcc\xa0\x03\x81\x11\xbc\x90\xd6\xc9\x0c\xe6\x5a\x90\xba\x56\xf7\x87\xff\x5e\x3a\x9e\x73\x9f\x1f\x6b\xc7\xc8\xf9\xb1\xc3\x57\x23\x55\x3d\x37\x89\xb6\x4e\xaa\x2c\x39\x69\x72\xd2\x23\xfd\x49\x67\xa8\x0c\x89\xb6\xb4\x92\xf3\x07\xea\x39\x82\x1b\x46\x6b\x30\xda\x1d\xaa\xd3\xfb\x28\x78\x8e\xa9\x2f\x28\xe0\x77\x6e\x7b\x8e\x89\x62\xc3\x07\xf7\x3d\xc7\xd4\xbc\x84\xf7\x3b\xb7\x3c\xc7\x91\x7c\xdb\xbd\xe7\xf8\xf3\xc6\x47\xf0\x1c\x2b\x23\xae\x9d\xae\x46\xc1\xd9\xa1\xa8\x51\x51\x76\x33\x31\xd7\x46\x8c\x03\xb3\x6b\x01\x70\x2c\xaf\x41\x19\x73\x95\xc0\xac\x1a\x9f\xb9\x74\x17\xae\x46\x2e\xd9\x67\xe0\xb2\x64\xcb\xf8\xaa\xaa\x84\xb5\xa7\x00\x8d\xab\x2b\x4c\x52\x12\x85\xce\xb9\x2c\x6a\x23\x4e\xfc\x4e\x8b\x12\xf6\xea\x24\x95\xe4\xd1\x6f\x86\x50\x28\x4a\xb8\x0c\x61\x14\x01\xb5\x48\xdf\x1f\xef\xf3\xe1\xc1\xc1\x3e\xb9\xe9\xcd\xc2\x32\xc3\xed\x52\x40\x8b\x50\x71\x27\x9d\xc5\x89\x1a\xc1\x2d\x99\x23\x1a\xa0\x2e\xe1\x20\x81\x0b\x6c\x59\xc5\xad\x15\x39\xdd\x1a\x74\x20\x9f\x38\xc1\x2b\x9d\x1f\x1e\xda\xee\xcf\x10\x25\x2f\x0c\xcf\x04\xab\x84\x91\x3a\x67\xc0\xba\x9e\xeb\x5b\xc5\x66\x62\x21\x15\x35\x02\x08\x37\xd2\x4f\x3a\x5e\x78\xef\xc2\x8a\x04\x20\x55\xec\xc3\x3c\x65\xaf\x7b\x7d\x62\xe9\x56\x4b\xd7\x2e\xd3\xad\xb5\x0e\xab\x7b\x92\x20\xb1\x45\x92\x02\x5b\x03\x5c\xf3\x9a\x17\xc5\xba\x55\x2b\x44\xc9\x81\x98\xc4\x7d\xac\x8d\xff\xcc\x30\xb5\xfe\xb2\xa6\x4a\xec\x5e\xd0\xee\x52\xd0\x75\x93\x11\x3c\x5b\xa6\x15\x53\xec\xa1\xbb\x1f\x18\x7b\xe8\xee\x1e\xba\xfb\xde\xb1\x87\xee\xee\xa1\xbb\x7b\xe8\xee\x1e\xba\xbb\x87\xee\xee\xa1\xbb\x03\xc7\x1e\xba\xfb\xa1\xb1\x87\xee\xbe\x77\x3c\xc8\xa7\x89\x3d\x74\x77\x0f\xdd\xfd\xd9\x63\x0f\xdd\xdd\x43\x77\x87\xc9\xdd\x43\x77\x49\x63\x0f\xdd\xfd\xc9\xb1\x87\xee\xa6\x8c\x3d\x74\x97\x3a\xf6\xd0\xdd\xc1\x63\x0f\xdd\xdd\x43\x77\x13\xc6\x1e\x80\x41\x18\x7b\xe8\xee\x08\x81\xc3\xbd\x6b\xcf\x3d\x74\x77\x0f\xdd\xfd\x99\x63\x9f\x1f\x6b\xc7\x1e\xba\x9b\x30\xf6\xd0\xdd\x0f\x8e\x3d\x74\x77\x0f\xdd\x4d\x90\xf5\xf0\x3c\xc7\x08\x11\xbd\x32\x7a\x96\x4c\x2d\x7d\x05\xe0\x28\x99\x61\x46\xcd\xdf\x93\x14\xe0\x65\x9c\xda\x94\x3d\xed\x63\xe6\xa0\xbf\x55\xa0\x8f\x24\xc8\x0d\x98\x50\x9c\x23\x50\x63\x4e\x77\xb0\xdd\x12\x04\x0f\x84\x74\x45\x42\x67\x7b\x5a\x69\xfc\xff\x5a\x40\x57\x07\xc9\x85\xd9\x49\x2a\x57\xee\xbd\xb0\xae\xd2\xe1\x5b\xef\x85\x6e\x31\x4d\xa2\x71\x66\x6d\xa0\xbf\x09\xdb\xea\x83\xaf\x88\xb2\xfb\x90\xad\x3e\xf0\x8a\xea\xf9\x93\xe1\x5a\x0f\x00\xb8\x97\x0c\xd1\x7a\x0f\x3c\x2b\xd1\x7a\x6d\x40\xb3\x22\xb8\x2a\x41\xe2\x4e\x58\x56\xe2\x2c\xb7\x20\x59\x11\x54\x35\xc2\x97\x03\xf6\xb4\x0b\xa8\x4a\x7c\xe5\xef\x40\xb1\xba\x60\xaa\x04\xa9\x1d\x18\xd6\x36\x90\x2a\x65\xa7\xdc\x2e\x10\x55\xc0\x00\xa5\x04\x97\x3d\x00\xd5\x0e\x08\x54\x82\x6c\x00\x4f\x8d\x0c\x7f\xda\x09\x7d\x4a\xf3\x5f\x77\xc0\x9e\x22\x70\x29\x65\x61\x5b\xc8\x53\x17\xb4\x94\x72\x04\x1a\xb8\xd3\x26\x60\x29\x29\x05\x92\x8f\x0d\x56\x1a\xe3\x69\x38\xf9\x59\x38\xd1\x53\x0d\x65\x42\x6f\x96\x46\xd8\xa5\x2e\x88\xa6\xa0\x67\x06\x5e\x4a\x25\xcb\xba\xf4\x3a\xc7\x7a\xbd\x2d\x57\x89\x35\x4c\xb6\x41\xab\xa2\x13\x08\x6f\xca\x64\x8b\x07\x1a\xc5\x88\x1c\xa4\xfb\x23\x06\x84\xee\x4b\xbe\xa2\xbb\xfa\xb6\xce\x32\x21\x72\x91\xf7\xf2\x9a\xec\xcb\x69\x5c\x0b\xa2\x5c\x6c\x90\x2a\x2d\x7b\x9c\xe2\x61\xa4\x44\x44\x73\x6d\x4a\xee\x40\xc6\x97\x5f\x10\x24\x24\x61\xdf\x3e\x0a\xee\x6d\x74\xcc\x5b\xb2\x1b\x97\x96\xcb\x4b\xc8\xe3\xa5\xfb\x8f\x69\xf9\xbb\xdd\xd8\xb6\x34\x1b\xb7\x0b\xd7\x96\x26\xf1\x23\x60\xda\x76\xe2\xd9\xba\xc8\xaf\x34\x4f\x37\x0d\xcb\x36\x12\xe2\x35\x19\xc3\xf6\x71\xf0\x6b\xbb\xb1\x6b\xa0\x5d\x52\x9c\x8b\x3e\x6e\x2d\x1d\x79\xf6\x20\x5c\x8b\x8f\x81\x36\xdb\x46\x9a\x85\xc5\x4a\xcb\x62\x37\x28\xb3\xf1\x50\x62\x23\x21\xc4\xc6\x40\x87\x25\x23\xc3\xd2\x51\x61\x63\x21\xc2\xc6\x40\x83\x6d\x75\x01\x1d\xe1\x04\xb1\xd8\xb8\x71\x14\x7c\xf5\x58\xd9\xe3\x51\xd0\x5f\x1f\x77\xb9\xc6\x40\x7d\x8d\xb0\x5e\x69\x68\xaf\x8f\x83\xf4\x1a\x13\xe5\x35\xc6\x12\x25\xbd\xd1\x7d\x1c\x64\xd7\x4e\x54\x17\x23\xd7\xbf\xb3\xcd\x74\xd7\xb4\xfb\xb2\x96\x20\x74\x03\xcd\xd5\x7d\x55\x4b\x90\xda\x20\xb9\xc6\x7d\x51\x4b\x7c\x4d\x1b\xeb\x25\x6d\xa4\x57\xb4\x8f\x84\xbd\x4a\xc5\x5d\xed\xc6\x5c\x79\x1f\x24\xe1\x40\x6c\xe1\xad\x5a\xc4\x54\x82\xd4\x6e\x4e\x22\x0d\x2d\x95\xb8\xa1\x52\x49\x27\x79\xf1\x4c\x14\x7c\x7d\x2d\x32\xad\x72\xa2\x37\xb1\xd1\xab\x3a\xa0\x05\xe6\xcc\xa2\x50\xe2\xf7\x61\x26\xa8\xcf\x75\xb1\xe4\x96\xd1\xdf\x2e\x59\x4b\x9c\x12\x9f\x47\x83\x63\xca\x38\x3c\x3e\xfa\xf5\x20\x3e\x5f\xb2\x07\xf7\x84\xc9\x1e\x44\xca\x09\x29\x3f\xc6\x3b\x5e\x7f\xd5\xb7\x4c\xcf\x9d\x50\xec\x48\xaa\x78\xc2\x8e\xa9\xd9\xa7\x26\xd9\xd4\xe6\x33\x9b\xa4\x21\x5d\xe6\xe3\x47\x71\x62\x4d\xca\x31\xc9\x31\xfb\x9c\x53\x8e\x90\x8c\xb5\xf6\x61\x66\xb4\xc3\xe4\x3e\x56\x4a\x3b\x88\x9f\xd7\x05\x2a\x33\x6a\xfe\x06\x92\xe1\x21\x41\xde\xcf\x69\x13\x8f\x05\x63\x2f\x83\x9b\xf3\x18\xbe\xbc\xd1\x86\x5c\xe5\x2c\xd0\x9d\x91\x25\x77\x0f\xfc\x67\x7d\x74\x13\x51\xc4\x1f\x0b\x41\xfc\x5e\xf4\x30\x62\x80\x89\x52\xb7\x90\xc3\x2d\xfe\x97\x2a\xb1\x8f\x1a\xee\x62\x7f\x13\xe6\xd8\x76\x65\xa6\xe3\x7e\xf7\x6f\x04\xb4\xff\xf6\xbd\xf8\x5e\x78\x2e\x48\x70\x89\x37\xb0\xbd\x63\x95\xc1\xf7\x4b\xe0\x53\x31\xe2\x0f\x26\xda\x8f\x68\xdc\xd4\xdc\xd8\x3e\xda\xdf\x47\xfb\x1f\x18\x1f\x21\xda\x77\xb2\x14\xba\x76\x0f\x36\xe0\xbc\x5d\xca\x6c\xd9\xf5\x05\x65\x49\x36\xd5\xba\x76\x1b\xfe\x5a\x98\xe2\x88\x50\x84\x7d\xd4\xb9\x31\x68\x6f\x1a\x3b\x12\xaa\xe9\xec\xb7\x0d\x42\x96\x71\xcb\x38\x7b\x76\x79\xfd\xf7\x17\x67\x7f\x39\x7f\x31\x65\xe7\x3c\x5b\x26\x89\x96\x8a\x71\xb0\x6c\xa0\xc2\x96\x7c\x25\x18\x67\xb5\x92\xff\xac\x05\xd5\x2e\x1c\x35\xf3\x3b\x1e\x05\xd3\x9d\xa0\x81\xbc\x4d\x22\xe8\x86\xde\x26\xbe\x90\xd6\xf9\x4d\x04\x59\x81\x67\x4c\x93\xf2\x81\x73\xa3\xcb\x4d\xd3\x76\xee\x85\xa1\xeb\x4d\xf4\xe6\x96\xc2\x08\xb6\x90\xab\x80\x7c\x46\x0c\x28\xe3\x79\x02\xab\x9c\xd7\x02\xfe\xe2\xf8\xe0\x80\xcf\x00\x50\xb8\x14\x4c\x09\xe7\x2f\x7d\x93\xca\xa4\xa1\x2b\x3b\xe4\xdf\xac\xb6\xc2\x9e\xb0\x59\x0d\xe0\xd0\xca\xc8\x92\x1b\x49\x82\x60\x74\x26\xcc\x8b\x29\xbb\xd4\x31\x3c\x5a\xc3\xd2\x52\xf2\x4d\xde\x9b\x81\xa5\x7d\xf6\xea\xfc\x9a\x5d\xbe\x7a\xc3\x2a\x03\x3c\xc1\x54\x64\x25\x48\x84\x23\x30\x13\x7e\x56\x78\x8c\xf2\x29\x3b\x53\x6b\xea\xde\xa3\x91\x91\x96\xf9\x78\x48\x28\x2f\x36\x3c\x4f\xe5\xe4\xe4\xd3\xc1\xa3\x29\xfc\xbf\x03\x7f\x86\x8c\x77\xe5\x1a\xb8\x6e\x8a\xa2\x89\x45\x23\xe8\x1e\xca\x59\x21\xda\xfb\x10\x4e\x16\xc5\x5b\x1a\x4d\xbf\xd0\x50\x19\x64\x34\xc6\x06\xc4\x3e\xac\xeb\x95\x3f\x23\x46\x54\x46\x58\xa1\x88\x31\x0b\x6f\x2e\x2a\x9c\x38\x50\xf0\x5e\xc3\x14\x89\x85\x6d\x89\xd1\x6e\x4a\xac\x3b\x69\x67\x7e\x45\xbb\x28\xa9\x01\x6f\xef\xf7\xa9\x6e\xf9\xce\xf0\x6b\x9e\x56\xb1\xdb\xd8\xa3\x78\xf1\x2b\x9d\x1f\x5a\x76\x41\xc7\x3d\x85\x5b\x3f\x65\x6f\x96\xd2\xb6\x91\x8d\xf7\x15\x25\x9d\xee\x09\xce\x22\x3e\x2c\x9f\xb0\x47\xec\x4f\xec\x8e\xfd\x09\x82\xaf\xdf\x53\x63\xa4\x31\x02\x9c\xd4\xd4\x1e\xe6\x41\x2e\xae\x46\x39\x11\xdf\x2d\xb9\x03\x79\xec\xe2\x2a\x05\xdc\x38\x93\x2a\x87\xa3\x20\xee\x9c\x30\x8a\x17\x31\x34\x4f\x5b\xe9\x84\x10\xd0\x7f\xd4\x83\xbf\x38\xc8\x60\x71\x31\x27\x4b\x6c\xbc\xf4\x13\xe6\x7a\x57\x87\x2c\x11\xae\xdc\xce\xab\x43\x16\x89\x57\x8e\x5d\xcc\x21\xd7\x76\x19\x2c\x85\xb4\x9d\xd9\xd3\x97\xb4\xf9\xea\x92\xbb\x6c\xd9\x37\x6b\xf4\x54\xc8\x4b\x7f\x25\x5a\xea\x7d\x96\x6b\xc8\x2d\x27\x91\x06\xfb\xa9\x7e\xde\x8a\x27\x05\x72\xd7\xbb\x4f\x17\xf3\xcd\x93\x4b\x5e\xd5\xf7\xa5\xc1\x92\x18\x89\x43\x30\xda\x69\xac\x51\xe9\x1c\x23\x5f\xb2\x4c\xbf\x78\x79\xc7\x3f\xea\x05\xc0\x74\xcb\xd9\x0d\x9c\x03\xa3\x53\x6a\xf1\x20\xaa\x6e\x6f\x19\x32\xae\xb0\xe8\x7a\x2e\x8c\x49\x39\xfa\x9a\xcd\xd6\x80\x5c\x93\x99\x48\xbc\x04\x09\x36\xa1\x32\xda\xe9\x4c\x93\x49\x3d\xfa\xe0\xbe\x20\x0c\x96\x3b\xe5\xf9\xaa\x7d\xd1\xfc\xf6\xd9\xd5\x09\x7b\xf3\xf4\xea\x84\x69\xc3\xae\x9f\xa6\xe0\x6b\xba\x99\xbb\x83\x37\x4f\xaf\x0e\xee\x6d\xd1\x59\x8c\x0b\x9f\x90\x68\x82\x7a\x69\x5c\x1f\x72\x4e\x4a\x5e\x4d\x6e\xc4\x9a\xe0\x55\xa7\xfa\xf4\x93\xe6\x04\x8d\xf0\x19\xb8\xb0\x25\xaf\x06\xca\x32\x82\xe7\xf2\x81\x32\x37\x84\x1b\xde\xce\x71\x93\xc2\x81\x20\x13\xf4\x4f\xa9\x57\x22\xc7\xe0\x3d\xfe\x86\x50\x79\xa5\x25\x2d\x62\xdd\x33\x41\x7c\x78\xec\x99\x20\x7e\xde\xd8\x33\x41\xf4\xc7\x9e\x09\x22\x41\xe6\x9e\x09\x62\xcf\x04\x81\x63\xcf\x04\xb1\x67\x82\x20\x8e\x3d\x13\xc4\x87\x27\xb7\x67\x82\xf8\x6c\xb1\xad\x7b\x26\x88\x0f\x8f\x3d\xca\x73\xcf\x04\xb1\x67\x82\xd8\x1a\x7b\x26\x88\xfb\x76\x2d\xf6\x4c\x10\x7b\x26\x88\x38\xf6\x4c\x10\x03\xc6\x9e\x09\x62\xd8\xd8\x33\x41\x7c\x70\x3c\xb0\xda\x90\x3d\x13\xc4\xbe\x36\xe4\xe7\xca\x79\x78\xb5\x21\x6c\xcf\x04\x41\x1b\x7b\x26\x88\xe1\x63\xcf\x04\x31\x6c\xec\x99\x20\x86\xcb\xdc\x33\x41\xb4\x63\xcf\x04\xb1\x67\x82\xf8\x4c\x8f\xee\x9e\x09\x62\xcf\x04\xb1\x7b\xec\xdf\x08\xf6\x4c\x10\xc3\xc6\x9e\x09\x82\x2e\x74\x1f\xed\xd3\xe5\x3c\xbc\x68\x7f\xcf\x04\xb1\x67\x82\xf8\xe0\x48\x71\xdd\x8c\xb0\xba\x36\x19\xc5\x44\xf6\xcf\xd5\x53\x5d\x56\xb5\x13\xec\x75\x14\xd8\xd8\x7d\xc2\x37\xcd\xd6\x58\x70\xd5\xd1\x8e\xf7\x01\x9b\xce\xb4\x9a\xcb\x45\x6d\xa0\xf8\xfe\xb4\xe4\x8a\x2f\xc4\x24\xc3\x0f\x9d\x34\x2b\x37\x69\x66\x79\xfa\x59\x41\xa7\x0b\x59\x4a\x0a\x83\x04\xdb\xda\xfb\x17\x20\xa9\x7d\x1f\x4d\x80\xb7\x94\xfc\x0e\x02\x22\x5e\xea\x5a\x39\xac\x13\x80\xf5\x26\xca\x6c\x76\x09\xdf\xb9\x7d\x48\xd8\x1e\x82\x04\x88\xc0\x03\x38\x3a\x6c\x0c\xe7\xbc\xe5\xd2\xb8\x4a\xf6\x96\x2b\xee\x9c\x30\xea\x09\xfb\xaf\xa3\x77\xbf\xfd\x71\x72\xfc\xd5\xd1\xd1\xf7\x8f\x26\x7f\xfc\xe1\xb7\x47\xef\xa6\xf0\x2f\xbf\x39\xfe\xea\xf8\xc7\xf8\x87\xdf\x1e\x1f\x1f\x1d\x7d\xff\xcd\xcb\xaf\xdf\x5c\x9d\xff\x20\x8f\x7f\xfc\x5e\xd5\xe5\x0d\xfe\xe9\xc7\xa3\xef\xc5\xf9\x0f\x3f\x53\xc8\xf1\xf1\x57\xbf\x26\x07\x87\x09\xee\xc7\x38\xce\xc7\x28\xae\xc7\x47\x70\x3c\x02\xba\x64\x14\xf5\xf0\x3a\xc8\x1a\x47\x41\x84\x8c\xc9\xf8\x0a\x22\xda\x2b\xa8\x20\x8e\x73\xa6\x27\x21\x75\x29\x9d\x13\x39\xa4\x8c\x3a\xf4\x22\x54\x1c\xb8\x74\xbd\x66\xdc\x41\xe5\x42\x81\x11\x19\x02\x2d\x6d\x17\x57\xdd\xa9\x94\xd5\x6e\x29\xcc\xad\x24\xbf\x07\xf9\x00\x49\xb5\xd9\x0c\x50\x82\x93\x5c\xcc\xa5\x22\x27\x48\xc0\x89\x1b\xec\xbf\xed\xd5\xf0\x5e\x0d\x0f\x91\xf2\x90\xd4\xb0\x15\x59\x6d\xa4\x5b\x3f\xd5\xca\x89\x3b\x42\x42\xa4\xaf\x85\xaf\x83\x38\xa6\xe1\x6f\xa8\x75\x4e\x95\xce\x63\x55\x9b\xa9\x15\x94\xae\x27\xba\x54\x3f\xe7\x1e\x57\xba\x90\xd9\xfa\x34\x2e\x09\x5c\x58\x71\xe7\x4e\x3f\x5a\x0c\xe0\xb8\xbd\x69\xd5\x87\x98\xf8\xc8\xaf\xd5\x12\x5b\xf3\xf8\xac\x1c\x7f\xf0\x84\xaf\x8c\x5c\xc9\x42\x2c\xc4\xb9\xcd\x78\x01\xfa\x71\x0c\x5b\x7f\xf6\x1e\xd9\xf4\xf7\x21\x67\x74\x61\xd9\xed\x52\x78\x9b\xc4\xb8\xff\x76\x48\xbd\x65\x9c\x2a\x74\xc1\xa5\x62\xa5\x3f\x06\x55\x9c\xa8\xbf\x0d\xde\x62\x91\x0d\x7e\xc5\x8d\x50\x2e\x4e\x2e\x10\x0c\xcd\xb4\x2e\x42\x89\x1d\x19\x73\xdd\xac\x40\xa8\x25\x56\xfa\xef\x4a\xdc\xfe\xdd\xcf\x9c\x3a\xd7\x79\xc1\x17\x0d\x67\x99\x15\x2e\x82\xbd\x52\x2a\xb2\x19\x9e\x4a\xfc\xf8\x91\x0f\x01\xd4\x54\xd5\x82\xf1\xe2\x96\xaf\xe1\x28\x8c\x33\x5f\x69\x9f\xb0\xc7\xc7\xa0\xc6\xb8\x65\xcd\x7c\x73\xf6\x05\xf5\x89\x7c\xc9\x2d\x7b\x7a\x76\xf5\xf7\xeb\xbf\x5d\xff\xfd\xec\xd9\xcb\x8b\xcb\x14\x77\xc2\x9f\x1e\x41\x3a\xe4\x19\xaf\xf8\x4c\x16\x92\xee\x45\x6c\xe1\x2e\xbb\x22\x13\x9c\xc2\x3c\x3f\xcd\x8d\xae\x70\x0f\x4d\xad\x80\xd6\xaf\xe5\xbf\xa1\x66\x92\xbb\x59\xc3\x0e\x43\xa0\x3f\xdc\xd4\x64\xe4\xbc\xf7\xc9\x6c\x61\xb8\xf2\xde\x3c\x64\xa6\x12\x5e\xbb\x03\x34\xc7\xd4\xca\xc9\xf2\xf3\x2d\xbe\xe6\xf9\x58\x85\xd7\x67\x79\x2e\xf2\x31\x8e\xd7\x43\x2c\x3c\x78\x1a\x3f\x2b\xa5\xe2\x86\xb5\xac\x89\xec\xea\xd5\xf5\xc5\xff\x37\xce\x6a\xb1\xb0\x62\x29\x0f\x58\x23\x70\xb6\x18\x5d\x8d\x74\x92\x5e\x07\xf6\x8e\xfd\x59\xfa\xa9\xf1\x0b\x3d\x4b\x8d\x27\x37\x06\x66\xea\x75\xad\x3a\xba\x9a\x4c\x60\xd0\xce\x89\x95\x3a\x17\x53\x76\x85\x0e\x92\xb0\xa3\xc8\xec\xd0\xc6\x71\x23\x98\x17\xac\x9c\xe4\x05\xd9\xd5\x14\xff\xac\xe5\x8a\x17\x02\x0b\xfc\x80\xc2\xa1\xcb\x1f\x38\x82\x6d\x9e\xf3\xc2\x26\x19\x3d\xba\x4f\xe4\x9d\xd3\x97\xba\x56\x63\xe0\x93\x1a\x59\x2c\x17\x4a\xbb\xa4\x7c\xa6\xff\x2e\x20\x7c\x34\x3a\x63\x98\xd3\x4c\x82\x62\x47\x6c\x5e\xc7\xa9\x02\x07\x8e\x4e\x9a\xcc\xd0\x05\x0f\xfb\x78\xd5\x7c\x3b\xbe\xfd\xd6\x36\xe9\xf3\xb7\x5c\xa2\x54\x28\x8b\xff\x7e\x23\x78\x0e\x4c\x3e\x15\x77\x4b\xc4\xe9\x95\xdc\xde\x90\x73\x8f\x20\x26\xc4\x74\x21\x4b\x8c\x04\x3c\xcd\x62\xbc\xa1\x2b\xbf\xb9\xe0\xae\x36\x02\xa3\x32\x2c\x06\x14\x8a\xcf\x0a\x2a\xb2\x3a\x51\x91\xfa\xb5\x7b\xa5\x8a\xf5\x6b\xad\xdd\xf3\x86\x6d\x65\x84\x4b\xf3\x5d\x88\xe0\xfb\x0f\xbb\x09\x81\x16\x40\xe4\xf2\x09\x6c\x34\x28\xab\x74\x72\x98\x70\xc6\xfd\x71\xbf\x47\x55\x65\x6a\x75\x66\xbf\x36\xba\x26\x7a\x46\x5b\xc1\xdb\xd7\x17\xcf\x40\xa3\xd7\x2a\x21\x78\x11\xca\x99\x35\x30\xa1\x8d\xd1\xf6\x81\x75\xf3\x05\xdf\x7a\x93\xb8\x71\xff\xa9\x8a\x6a\xce\x6a\x65\x85\x9b\xb2\x97\x7c\xcd\x78\x61\x75\x4c\x72\x90\x4d\xee\x15\x20\xf2\xbb\xa9\xd8\x29\x03\x66\x51\x72\x70\x29\x15\x9b\x69\xb7\x64\x1b\x62\x13\xa8\x44\xb7\xe7\x08\x0c\x51\x49\x40\xfa\xb6\x33\x87\x54\x9b\x53\xa5\x6a\x7c\x7e\x23\x2c\xab\x8c\xc8\x44\x2e\x54\x96\x74\xbf\x46\x42\xcc\xfc\xfe\x77\xd4\x1b\x7a\xa9\x95\x57\x92\x23\xdc\xd1\x0b\x95\xcb\x8c\x3b\xcc\x42\xba\x51\x12\x0c\x80\xd5\x0b\x99\x2d\x0e\xe4\x41\x5e\x45\x12\xc5\xd6\x56\x18\x78\x15\x75\xa6\x16\x78\xb0\xbe\xa9\x67\xa2\x10\x8e\x4a\xb6\xc8\x22\x03\x34\x77\xc8\x6c\x26\x4b\xbe\x10\x8c\xbb\xa8\x06\xe8\x39\x26\xa1\xac\x37\xa7\xb0\x92\xd2\xb1\x5c\x8b\x86\x92\x8b\x9a\xec\xb0\xec\xdb\x8b\x67\xec\x11\x3b\xf2\x6b\x78\x0c\xfe\xc4\x9c\xcb\x82\xce\xcd\x01\x55\x03\x1b\xfe\x8f\x9c\xc7\xe9\x52\xad\xd7\x45\xd0\x7d\x4c\x1b\x34\x5f\x27\x4c\x69\x66\xeb\x6c\x19\xd7\x9a\x9e\x83\x8d\xe9\xe2\x50\x01\x04\x38\x9a\xa0\x60\x89\x12\x1b\xb5\xfc\x3e\x05\x4b\x5d\x5b\x14\xba\x4b\xc1\x92\xdf\x27\xf3\xf7\x29\xd8\x24\x44\xe2\x03\x57\xb0\x89\x0e\xcc\xb7\x56\x98\x91\xfc\x97\x6f\x1f\xb8\xff\xd2\x0d\x71\xbd\xae\x6c\x77\x96\xee\x20\xa0\x42\x2c\x85\xe3\x39\x77\x3c\xf8\x35\xa9\x1c\xa2\xdb\x3e\xd1\xfe\xf2\x3d\xcc\xcb\x77\x9f\xde\x8d\x15\x2f\xa4\xaa\xef\xb0\x60\x65\xac\x07\xa4\xeb\x73\x10\xca\xb2\xb4\x25\x86\xa3\xcb\xab\xaa\x90\xc0\x28\xb9\x51\x43\x91\x64\x38\xbb\x8d\x02\xd2\x95\x43\x0c\x67\xc0\x70\xf2\xa2\xd0\xde\xc1\xf3\x31\x2b\x57\xb9\xa6\x22\xd9\x37\x16\x11\x92\x1d\xa2\xd7\x26\x6f\x0a\x97\x9c\x7a\xd7\xf6\xaa\xe1\x33\x50\x0d\xf7\xfa\xf0\x57\x88\x95\x20\xf7\x35\xd8\xec\x3e\xe8\x65\x31\x69\xe3\xb1\x4e\x78\x3d\x80\x69\xb1\x82\xcf\x44\x81\x9e\x3f\xaa\x88\x11\xea\xe1\x92\x95\xcb\x28\xcf\x64\x46\x17\x63\xf1\x7d\xbc\xd6\x05\x14\xc3\xf0\x11\x96\xdd\x4f\xeb\x17\xbc\xea\x20\x62\x9c\x55\x7f\xb3\xae\x46\x5b\x75\x78\x32\xf8\xe5\xae\x7a\x4d\x0e\x1c\xd8\xe6\xaa\xfb\x18\x64\xac\x55\x07\xc7\xfe\x97\xb9\xea\x56\x64\x99\x2e\xab\x2b\xa3\xe7\x92\xaa\x67\xb6\x1c\xbe\x20\x34\xc2\x4d\xe9\x0e\x5f\x6d\xc5\xae\x82\xb0\x04\x47\xa4\x37\x31\x78\x3c\xad\x8c\x5e\xc9\x9c\x1c\xaf\x71\x87\x7e\x4d\x2c\xa0\xfe\xbf\x92\xdd\x47\x30\x68\x1b\x9e\x68\xe2\x52\xea\x95\x30\x26\x76\x12\xf0\xb3\x0c\xe2\x3e\x53\xea\x60\x32\xde\x60\x04\x27\x48\x67\xbc\x80\xc6\x7f\x29\x37\x86\x6d\xde\x9a\x4d\xb1\x09\xaa\x45\x36\x19\x65\x00\xcc\x7a\x69\x2c\xad\xfe\x82\xc5\x86\xda\x20\x2b\xe0\x02\x94\xce\x45\x40\x83\x27\x88\x0d\xf4\xa7\xf8\x4e\x1d\x67\x9b\x5e\x06\xef\xbd\xed\x88\xdf\xce\xc3\x8c\x13\x24\xc2\xb7\x3a\x1d\xfa\x23\xbc\x4c\x6e\x80\x88\x9b\x2f\x54\x2e\xd5\x02\x5e\x98\x4f\x98\x11\x05\x4f\x20\xe8\x61\xad\x4d\xb9\xc1\xf4\xfc\x21\x68\xcc\xb0\x04\x09\x52\xa3\xca\x8c\x9b\x03\xd1\xac\xd4\x2a\x85\x52\x00\x56\x10\x1e\x6f\x63\xc4\x39\x4f\xc5\x10\x49\xcb\x0e\x5e\xc4\x4b\x44\xee\x44\xf6\xd0\x5c\xc7\x03\xf0\xf7\x9a\x1b\x9d\xb0\x3e\x88\xd8\xb8\x91\x2a\x0f\xf5\xff\xdd\x4d\x4d\x91\x1b\xfb\x5f\x63\x5e\x66\xca\xde\x42\x73\xcf\x34\x73\xe5\x07\x37\xe2\x09\x7b\xa7\x58\xb3\xa9\x6c\xd2\x2a\xb4\xa4\x9b\x07\xaa\x70\x4b\xa1\xa5\xaa\x87\xb6\xdd\x13\x2a\xb4\xd7\x98\x04\x4a\xe3\x48\x63\x68\xee\x76\x81\x65\xd2\x96\x00\xa0\x0e\xf1\x4a\x37\x53\x4f\x73\x91\xf3\x29\xfb\x56\x81\xce\xf1\xeb\x3b\x61\x4a\x8f\xb0\x5d\xed\xb2\xc6\x13\x76\x70\x5f\x77\xfb\x56\xaa\x5c\xdf\xda\x71\x73\xa3\xdf\xa1\xd0\x98\x78\xa2\x32\x3e\x59\xe1\x9c\x54\x0b\xdb\xcd\x8f\xf2\xa2\x18\x01\x5f\xbf\x2b\x41\x9a\x76\xbb\x9b\xfe\xf8\xdb\x09\xbc\xc4\x17\x4a\x3c\x84\x88\xcf\x88\x09\x47\x6a\xba\x75\x1b\x9f\xb1\x2b\xe1\x98\x00\x7f\xdb\x27\x1c\x3f\x34\x16\xa5\xe5\x4f\x8d\xff\x08\x27\x79\x71\x5d\x51\xdb\xfd\xb1\xcd\x8b\xf7\xf5\xcb\xeb\xb3\xbe\xe0\x34\xcf\xe3\x76\x29\x0c\xc6\x56\x5e\x32\xe3\x79\x29\xad\xa5\x3f\xb8\xfb\x71\x2b\x66\x4b\xad\x6f\xd8\x51\x2c\x54\x5c\x48\xb7\xac\x67\xd3\x4c\x97\x9d\x9a\xc5\x89\x95\x0b\x7b\x1a\x14\xd3\xc4\xaf\x17\xb5\x7c\x09\xbe\x44\x15\x52\x05\x78\x23\x3c\x33\x28\x67\x99\xa6\x77\x0e\x67\xed\x92\x64\xcd\x6a\xc3\x89\x4f\x31\xb6\xd0\xe3\x18\x6b\x71\x76\x6c\xe4\x65\x1a\xd5\x17\x90\xc3\xdf\xab\xf7\xb8\x7d\xe8\x2f\x93\x7a\x0f\x7c\xe0\xe0\x27\xae\x17\xf6\x4c\x44\x5e\xba\xf0\xb4\xee\x7f\x23\x41\xe2\xc6\x49\x09\x59\xa0\xfb\xcd\xc0\x47\x4c\xc3\x88\x3b\x01\xd8\x86\x20\x32\x2d\x2c\x8f\x1e\x44\x8b\x92\xe8\xe0\x1d\x12\x44\x6f\x22\x25\x1a\xcc\x43\x82\xcc\xcd\x62\xbd\x51\x10\x13\xec\x23\xa2\x26\xd8\xcf\x46\x4e\x24\xfc\x40\xdf\x61\x19\xc9\x0b\x60\xef\x7f\x25\x4d\x54\xe8\x1f\xcd\x71\x61\xa3\x39\x2f\x2c\xed\xe2\x07\x66\xdf\x51\xba\x5f\x5f\x77\x64\x25\x45\xf2\x11\x1f\xea\x77\x14\xf9\xdd\x1b\xd6\xe4\x62\x1d\x39\xea\xe5\xbf\x68\x67\xdd\x1f\xc1\xd6\xc7\x57\x1a\x69\x60\x3a\xa4\xef\x04\x99\xa1\xfd\x6d\xce\x7c\xc0\x5a\xc4\x24\x7e\x59\x15\xde\x73\xe9\xcd\x9e\x38\x63\x90\xd8\x69\xb0\x7d\xd2\x2c\x4f\x4a\x1f\xf0\x40\x9b\x7f\xc2\xfe\xbb\xb6\x8e\xf1\xa6\xfa\x3e\x72\x3f\xc3\x4e\x12\x84\x47\x5a\x6a\x28\x25\xc9\xb8\x6a\x5a\x3f\x39\x1d\xdf\x20\x08\x52\x73\x39\x9f\x8b\xc8\x3f\x30\x13\xac\xe2\x86\x97\xc2\x41\x65\x18\x15\x4e\x3c\x13\x0b\x89\xe5\xd9\x7a\xce\xb8\x5f\xd0\xc3\x43\xdb\x12\x0a\x53\xf4\x07\x14\x7d\x4b\xc7\x4a\xb9\x58\x3a\xb8\xe4\x8c\xb3\x42\xab\x05\xd0\x46\xd2\xd0\xb4\x85\xe6\x39\x03\x5d\xaf\x0d\xbb\xe5\xa6\x64\x9c\x65\x3c\x5b\x02\x4c\x99\x04\x5e\xcc\x6b\x03\x9d\xbb\x9d\xe0\xf9\x7a\x62\x1d\x77\x3e\xd6\x15\x48\x21\x84\x3b\x47\x90\x9a\x6d\xd1\x17\xe2\x19\x80\xc7\xc9\x99\x70\x94\x3c\x72\xac\x1c\x0a\xe5\x42\xd1\x1f\xee\x2a\x9b\x04\xa9\xf3\x82\x2f\x1e\x1a\x5f\xe6\xbe\xd1\x7c\x18\xfb\x46\xf3\x3f\x77\xec\x1b\xcd\xff\xec\xb1\x6f\x34\xbf\x6f\x34\xbf\x6f\x34\xbf\x6f\x34\xbf\x6f\x34\xbf\x31\xf6\x8d\xe6\xf7\x8d\xe6\x7f\x62\xec\x1b\xcd\x7f\x58\xe0\x7d\xa3\xc5\x7e\x19\x4d\x64\xf6\x8d\xe6\xf7\x8d\xe6\x7b\x63\xdf\x68\xfe\xbe\x5d\x8b\x7d\xa3\xf9\x7d\xa3\xf9\x38\xf6\x8d\xe6\x07\x8c\x7d\xa3\xf9\x61\x63\xdf\x68\xfe\x83\xe3\x81\xb5\x9e\xdb\x37\x9a\xdf\xb7\x9e\xfb\xb9\x72\x1e\x5e\xeb\x39\xb6\x6f\x34\x4f\x1b\xfb\x46\xf3\xc3\xc7\xbe\xd1\xfc\xb0\xb1\x6f\x34\x3f\x5c\xe6\xbe\xd1\x7c\x3b\xf6\x8d\xe6\xf7\x8d\xe6\x3f\xd3\xa3\xbb\x6f\x34\xbf\x6f\x34\xbf\x7b\xec\xdf\x08\xf6\x8d\xe6\x87\x8d\x7d\xa3\x79\xba\xd0\x7d\xb4\x4f\x97\xf3\xf0\xa2\xfd\x7d\xa3\xf9\x7d\xa3\xf9\x0f\x8e\x14\xd7\xcd\xba\x5c\x12\x3a\x0c\x7e\x9c\x16\x02\x01\x2d\xdb\xa1\x65\x9c\xd5\xf3\xb9\x30\xe0\x76\xc3\x4c\x49\x89\x9b\xdd\x45\xfa\xd3\x58\xa6\x40\x91\x89\x8e\x9f\x15\xee\x04\xba\x1d\x58\x2c\x9c\x86\x29\xd2\x00\x8f\xfd\x29\x06\x76\x4a\xe8\xab\x67\x84\xa5\xc5\xd7\x52\xb1\xf3\x57\xcf\xa7\x23\x74\x4f\x48\x21\x1e\x86\x35\x79\xa5\xb2\xd4\x62\x9d\xf6\x90\xa5\x91\x80\x46\x02\xd0\x70\xd6\xb2\x42\x5b\xc4\xd6\xe2\xe6\x65\x4b\xae\x94\xa0\x14\xa8\xa0\x42\x94\x0e\xd2\x6e\x33\x21\x14\xd3\x95\x50\x88\xff\xe7\xcc\x4a\xb5\x20\x91\x2d\x70\xe7\x78\xb6\x9c\xfa\xef\x57\xf1\x80\x85\xc6\x8b\xcd\xac\x29\x57\xcd\x19\xc1\x4b\x3c\x68\x46\x94\x5c\xe2\x74\x19\xcf\x8c\xb6\x96\x95\x75\xe1\x64\x95\x30\x61\x66\x05\x94\x59\x5b\xac\xf9\x8f\x87\x80\x91\xae\x9b\x15\x08\xf6\x04\x9a\xfb\x66\x0d\xc2\xf2\x92\x5c\xb0\xf6\xaa\x41\x00\x7f\x02\x3d\xb7\xcb\xca\xad\xb1\x20\x8a\x78\x81\xe7\xd2\x58\xc7\xb2\x42\x42\x04\x07\xeb\x20\xc0\x92\xc1\x9c\x29\x08\x60\xae\x72\x2f\x59\x85\x3d\xb2\x61\x93\x54\x0e\x0e\x68\x45\x72\xf8\xa1\x2c\x27\xd6\x7d\x89\x38\xdd\x5c\xda\x10\x50\x58\xd2\x44\x63\xe3\x21\xbc\x5c\x71\x8f\xe0\x7a\xe5\xc4\x0e\x1a\xf1\x9b\x83\x90\xce\x94\x13\xee\x3f\xf4\x0a\x0a\x59\xf1\xc6\x04\x60\x97\x9f\xa8\x20\x49\xdf\xbf\x5d\x8c\x1b\xfb\x46\x80\x81\x20\x88\xec\x98\x14\xb8\xa6\x4a\xac\xbc\xf5\x12\x99\x90\x2b\xef\x84\x13\x44\xee\xb4\x07\x9f\xd4\x1c\x38\x61\x4a\xa9\xa0\x68\xeb\xa5\xb0\x96\x2f\xc4\x15\xe9\xf5\xfb\x7d\xb1\x35\x3c\x80\xc7\xc3\x48\xbe\xc6\x05\x52\x8a\x35\xce\x6d\x5b\x82\x70\x48\x2a\x0f\x6d\x3f\x9a\x95\xf8\xd5\x0d\x2f\xca\xad\x91\xce\x09\x92\x63\x63\xb1\x31\x19\x00\x87\x36\x49\x2b\x69\x13\xed\x94\x57\xb0\x97\x71\xa2\x38\x41\xff\x73\xde\x49\x55\x34\x3a\x46\x44\x39\xcd\x8c\x14\x73\x36\x97\x50\xc5\x00\x78\xfb\x13\x6c\x84\xc1\x29\xb3\xe5\x8a\x71\x6b\x85\x81\x75\x0d\x78\xeb\xb8\xbe\x53\xf6\x1d\xb9\xce\xd4\x99\x5a\x65\xbc\x6d\x2b\x8b\x24\x52\x72\xce\x16\x80\xec\xa7\x68\x1d\x68\x63\xfd\xbb\x47\x7f\xfc\x3d\x9b\xad\x7d\xa0\x01\x58\x16\xa7\x1d\x2f\xe2\x84\x09\x42\x0b\xa1\x16\xfe\xb4\xa3\xc9\xee\x53\x0a\x25\x94\xd9\x16\xb2\x94\x0e\x6b\x5f\x1f\x7f\x71\x33\xeb\xc5\x64\x04\x89\xa7\xb9\x58\x9d\x76\x6e\xc0\xa4\xd0\x8b\x29\x7b\x1a\x0b\x2f\x09\x12\x63\xa9\x26\xb5\x50\x91\x14\xe6\xef\x50\x5c\xd0\xfc\x3e\x51\x75\xc5\x1e\x43\x6c\xa9\x6f\xb1\xf1\x60\xfb\x3b\x84\xa5\x89\xda\xa5\xad\x3b\xac\x74\x55\x17\x58\xd9\xfa\x9c\x46\xf7\x05\x9a\xaa\xb6\x62\x93\x7b\xe6\x3d\xba\x9c\xa6\x1c\xe2\x34\x37\x02\x21\x54\x12\x09\x0b\xa1\x03\x71\x43\x78\x5d\x6a\x9a\x04\xd5\x86\x54\xf9\xf8\x9c\x17\xc5\x8c\x67\x37\x6f\xf4\x0b\xbd\xb0\xaf\xd4\xb9\x31\xda\xf4\x56\x88\x72\x8f\xb9\xf7\x1a\x97\xb5\xba\x81\xfe\xd6\xcd\xc7\x17\x7a\xc1\x74\xed\xaa\x9a\x14\xfd\xcd\x37\x8f\x53\xb3\x26\x44\xda\xb7\xc6\x45\x0e\x4e\x69\x67\xa6\xe2\x4e\xd2\x9e\x3e\x6e\xa5\x57\x60\x8a\x09\xbf\x8e\xa8\x15\xdb\xaf\xa6\x05\x0b\x1d\xf5\xf5\xc5\xa3\xdf\xfd\x01\x15\x2e\xd3\x86\xfd\xe1\x11\x14\x65\x92\xdc\x5b\x70\x05\xc0\xff\x92\x96\xd9\x92\x17\x85\x30\xa9\x8a\xd1\x5f\xc7\x8e\x22\x6c\xd4\xda\x27\xd5\x6a\x2e\x55\x81\x7d\xc4\xe4\xcf\x9b\x37\x7f\x83\xcc\x8f\x74\x56\x14\x73\x92\x57\x5e\x58\xdd\xb6\x06\x3d\x04\x67\xfa\x30\xf8\x22\x3e\x9a\xa4\xa8\x80\xfb\x4d\xa7\xac\x74\x51\x97\xe2\x99\x58\xc9\x8c\xf2\xac\xd5\xdb\xba\x9e\x2c\x7a\xe5\x73\x21\x2d\xf4\x6e\x9a\x15\x3a\xbb\x61\x79\x10\xd7\xc2\xda\x29\x5e\xc8\x3a\x95\x82\x3d\xa5\x08\x81\x5c\x7c\xf0\xde\xd5\x6d\x4b\x07\x48\x09\x5e\xce\x4a\x5e\x55\x0d\xe9\x87\xe1\xb7\xbd\xc5\x26\xc9\xf4\x9a\x17\x78\x56\x93\x78\xee\x13\x1f\x87\x53\x9e\x86\x27\xe1\xeb\x89\x3e\x07\xb9\x2e\x21\xf5\x55\xb9\x9d\x35\xf5\xe1\xab\x77\xcc\x5a\x71\xa9\xdc\x05\x15\xc8\xc0\xa2\xf5\x91\x5a\xb1\x75\x98\x91\x70\x9e\x4d\xd8\xeb\x0f\x74\x02\xab\x98\xd3\xd4\x47\xc7\xe4\x97\xbe\x94\x2a\x90\xde\xce\xa9\xe6\x4d\xb5\xe4\x8e\x94\xac\xc0\xd1\x25\xf9\xe3\xac\x12\xc6\x4a\xeb\x7d\xf4\xb7\xa0\x80\x9e\x16\x5c\x52\x1f\xce\x9a\xc7\x93\x4a\x53\xb7\x2a\x61\xb9\x51\x81\x42\x1f\xef\x54\x4b\x77\xa5\xf3\x20\x0e\x0c\x13\xa4\x4d\x48\x2f\x2a\x5b\x69\x96\x54\x4a\x8a\xd1\xdc\xbf\xfb\x34\x75\x6f\xdb\x9d\x4a\xb7\x74\x5e\x4a\x63\xea\x50\x72\x30\x56\x44\x89\x9f\xaf\x81\x83\xb5\xf8\xdc\xec\x5b\x33\xe9\x51\x94\x24\x18\xb6\xe0\xab\xa4\x18\xb7\x36\x56\x6d\x5f\x2a\x96\x22\x28\x05\xb2\xd4\x36\xcd\x12\x32\xb1\xd3\x00\x16\x55\xe4\xa6\xce\xcd\x54\xd9\xe1\x93\xc3\x7b\x33\x72\xb8\x89\x46\x57\x7c\x01\xb9\x83\x51\xf6\x72\x53\x68\x02\xc2\x0b\xd3\x1a\xc2\x42\xda\x0c\xe4\x52\x99\x10\x71\x54\x61\x56\x22\x6f\x29\xd0\xa1\xb1\x41\x42\xf9\x7d\xe7\xc8\x85\x84\x09\x12\x37\xde\x26\xd4\x45\x73\xa3\x6b\x95\x87\xd7\xe0\x06\x82\xf0\x72\x63\x61\x2f\xe9\x0c\x66\x90\xe6\x89\x6d\x5f\x7c\x88\x0b\x85\x92\xd2\x52\xc9\xf0\x82\x4c\xc5\x1e\x4f\x1f\x3f\xfa\xfc\x7d\x36\x58\x93\x91\x7c\xb6\xcb\xc6\x67\x43\x2b\x77\x6f\xab\x63\x04\xcf\x5f\xa9\x82\x90\x09\xc2\xd1\xaf\x37\x08\x4f\x52\x5e\xe8\x44\xab\x04\xae\x09\x19\x1b\xdb\x83\xa8\x5b\x23\x5d\xb8\x41\xb7\x32\xa1\x50\xed\x08\x92\x36\x4c\x9b\x2e\x05\xf1\x71\x9b\xcb\x4b\x08\x49\xa8\xf9\xa0\xf0\xdf\x27\x76\xf7\x66\xcc\xd6\xb3\x07\x67\x77\xd1\xc0\xa2\x52\xdd\xf5\x9e\x4a\x5f\xef\x20\x79\xdb\x04\x93\x25\x76\xb1\x87\x07\x07\xec\x08\x7f\xe1\x10\xd9\xec\x8e\xef\xed\x7a\x86\x6d\x3d\xbf\xab\xc8\xfd\x17\x7b\x5b\x7b\x7e\x57\x71\x95\x8b\x1c\x03\xfe\x04\xd7\x9a\x45\xd2\xe9\x5d\x7b\x9c\x6e\x36\x0f\x6d\x7f\x8f\xc9\x12\xbb\xee\xd9\x5f\xc4\x92\xaf\x04\x70\xfe\xc9\x82\x9b\x04\xf5\xe4\x34\xbb\xc6\x9d\x61\xb3\xda\x31\xa1\x56\xd2\x68\x55\x8a\x04\x62\xf7\x15\x37\x92\xcf\x0a\xc1\x8c\x00\xe2\xe0\x4c\x58\xf6\xeb\xa3\xb7\x67\xaf\x01\x66\x4d\x6f\x1f\xc1\x8d\x60\x22\xee\x7a\x6d\xa1\x3c\x77\xa4\x5b\xd8\xf9\xec\xe9\xc6\x05\xa2\xab\xe8\x8d\x8b\x17\xd7\xd9\xdf\x00\xfa\x1a\xa8\xbc\xd9\x2f\xbf\x1e\x65\xed\x6a\x5e\x00\xed\x63\x56\xd4\x56\xae\xee\xc3\xfe\x06\x1a\xce\x67\x92\x70\xb3\x37\xe8\x4b\xdb\x4b\xb3\xc5\xed\x49\xa4\xf0\x06\xf7\x72\xbc\xee\xeb\x01\x78\x79\x68\x9b\x1e\x57\xdd\xd6\x40\xe4\x47\xb9\x40\x5b\x3d\x13\x9d\x96\x7a\x8c\x6c\xb4\x5a\x9f\x1d\x5a\x16\xdc\xdf\xf3\x9c\xd2\xb9\x18\xda\xd2\xa2\x5f\xf8\x12\x04\x20\x95\x75\x87\x30\xce\x66\x4b\x91\xd7\x03\x5f\x80\x91\xce\x5d\xe7\x4c\x2b\xa7\x19\x6f\x5a\x62\xc1\x3c\x01\x46\x27\x07\x3f\xd7\x2a\xad\x26\xf0\xa0\x8c\x67\x2b\xce\xcb\x44\x3e\xd6\xf8\x17\xc3\xa4\xf6\x67\x0a\xe9\x67\x3f\xc7\x13\xc6\xad\xad\x4b\x54\x7d\x03\x39\x43\xa5\x63\x73\xe9\x00\x37\xa8\x6b\x93\x89\x98\xd5\xf1\x4a\x6f\x10\x4f\x16\xf9\x24\x5c\x8b\x02\xae\x32\xf9\x34\x1c\x5e\x76\xa4\xe0\x91\xb0\xe1\x4f\x83\x96\x22\x5c\xb9\x50\x08\x04\x28\xe4\xa6\x18\x58\xc3\x9b\xfb\x5c\x0e\x5b\x5c\xad\x18\x0f\xa7\xa8\x99\x5f\xe7\x57\x20\xcc\x1a\xd8\xce\xd3\x4b\x03\x56\x7c\x3e\x13\x85\xdd\x9c\xe0\xac\x3d\x6a\xc3\x5c\x0a\xa0\xc4\x09\xc7\x69\x70\x21\x49\x54\x4e\x10\x9f\x9f\x72\x6b\xe5\x42\x4d\x2a\x9d\x4f\xbc\xb4\xd3\x21\x48\x26\x62\x46\x92\xe7\x91\x3f\xf8\x8a\x98\xe0\x23\x9d\x5e\xbd\x12\x66\x29\xf8\xa0\x04\xe8\x06\xb6\x33\x48\x60\x46\x54\x46\x58\x00\x1f\x21\xff\x1d\xde\xc6\x61\x7b\x18\x85\x71\x6b\x75\x06\xfc\x15\x88\x41\x31\x35\x76\x55\xe0\x83\xdf\x3a\xfc\xf1\xe2\x6c\x21\x57\x42\xc5\xc6\x92\x4f\x0b\x6e\x6d\x2f\x81\x32\x18\x8d\x37\x13\x8c\xd7\x4e\x37\xe8\x2d\xc6\x5d\xdb\xbb\x0c\x41\xd6\xb3\x61\xbe\xab\x5f\xb3\xee\xfc\x3a\xe2\xbc\xd5\x33\x1a\x30\x2d\x83\x44\x5e\xcc\x7f\x9e\xd4\x61\xda\xd6\xc6\xce\x09\x27\xed\x76\x95\x21\xa9\xda\xf6\xf9\x19\x24\xf3\x4a\xe7\x2c\x03\xf0\x66\xb4\x84\x01\x82\xd9\x9d\xfa\x20\x89\xbb\x3e\x33\x56\x53\xf8\x9b\xd9\xf9\xc9\x41\x72\xe3\xf4\x82\x0e\xf4\xc1\x0a\xa6\x0e\x9b\x83\x5b\x18\xc1\xf3\x61\x5b\x6f\x85\x03\x1b\xdd\xdb\x28\xd9\x6d\x42\x3c\x18\xa1\x8f\xd6\xa3\x71\xb5\xa0\x95\x51\x25\xb2\x13\xd6\x5c\x57\xca\x91\x8f\x85\x1e\x4d\x27\xa3\x4e\x47\x58\xf4\x3f\x8d\x11\xb6\xd2\xd0\x9d\x79\x90\xf0\xee\xa7\x9f\xb4\x69\x24\x6f\xdb\x3b\x35\x30\x83\x44\xd6\xca\x4f\x17\x72\xbb\x2d\xe3\xf7\xbf\x84\xd1\x5d\xe3\x30\x48\x62\xa7\x9f\xe0\xf4\xe6\x0f\x60\x45\x84\x5a\x72\x95\xa1\xab\x71\x7a\x23\x2a\x7b\x6a\xe5\x02\x8d\xc6\x17\x8f\x1e\xff\xf1\xd1\x17\x5f\xfc\x1e\xcc\x48\x3c\x1f\xd3\x72\xd8\x3e\xf6\x93\xbc\xbc\xa8\x96\x7c\x02\x4d\xee\xfd\xc7\xe8\x39\xfb\xa6\xb1\x69\x83\xc4\xae\x1e\x4f\x1f\xff\xfe\x84\x05\x82\x7d\xe8\xaa\xb1\xd4\x4a\x1b\xc4\x54\x23\xa1\xdc\x50\xbf\x8e\xbb\xa0\x18\xe2\x81\x6b\x8e\x5a\xe8\x8d\x32\x08\x10\x7c\x6f\x66\xb4\xe2\xce\x09\xa3\x9e\xb0\xff\x3a\x7a\xf7\xdb\x1f\x27\xc7\x5f\x1d\x1d\x7d\xff\x68\xf2\xc7\x1f\x7e\x7b\xf4\x6e\x0a\xff\xf2\x9b\xe3\xaf\x8e\x7f\x8c\x7f\xf8\xed\xf1\xf1\xd1\xd1\xf7\xdf\xbc\xfc\xfa\xcd\xd5\xf9\x0f\xf2\xf8\xc7\xef\x55\x5d\xde\xe0\x9f\x7e\x3c\xfa\x5e\x9c\xff\xf0\x33\x85\x1c\x1f\x7f\xf5\xeb\x61\x0a\x6e\x78\x69\x76\x4a\x39\x76\x42\x09\xf6\x68\x65\xd7\x95\x11\x3e\x1e\x91\x5a\x0d\x87\x76\xf7\x93\xa7\x1b\x82\x62\x2b\x46\xfc\xd3\x60\xef\x22\xce\x4b\x2d\xbc\x73\x62\xd1\x61\x29\xf4\x2d\x94\x1a\x49\x6d\xa4\x1b\x18\xe2\xbf\x52\xf0\xf0\x70\x29\x56\xc2\x9c\xc4\xd9\xbe\xf0\x02\xaf\xa2\x3c\x5a\x3e\xdc\xe9\x9d\xd2\x42\xc3\x3f\x6f\x85\x06\xf7\x69\xea\x3d\x40\xa1\x6a\x3a\x61\x8b\x6e\x75\xc6\xa5\x56\x57\xcd\x0a\xc5\x9f\x1c\xf6\x1b\xa8\x3f\x26\x5e\xec\x47\x8f\xe7\xe2\x96\x91\x4f\xd7\x1b\xa8\xb6\x0f\x2b\x0b\x66\x72\xca\xde\x72\x23\xf5\x40\xa0\x3c\x82\x56\xa0\xed\x9b\x56\xe0\x56\x23\x84\xbd\x31\x08\x10\xcd\x0d\xf4\x0b\x5c\x77\x72\x0d\x67\x46\x7c\xb1\x24\xed\xce\x59\xe3\x6a\x3d\x6d\x5d\xad\xae\x97\x28\x9d\xbf\x22\x2b\xff\x09\xc3\x0c\xb8\x15\x26\x56\x6e\x63\x8f\xee\xce\xd7\xa3\x7f\x48\x6b\x17\xdc\x71\x09\xa3\x03\x6f\xbb\x0b\x0b\x3f\x19\xd7\x02\x5c\x92\x4b\x3e\xf4\xfd\x0f\xc8\x70\xe5\x22\x96\x44\xc3\x39\xc0\x44\x4a\xe7\x6f\x29\xea\x81\xaa\xc3\x69\x2c\x04\xd5\xe6\x2a\x90\xaf\x45\xbf\x4d\x62\xd3\xcd\x71\x70\x22\xb0\xd2\xf9\xa1\x6d\x57\x8e\x1d\xe0\x3d\x01\x9f\x6b\x92\x19\xe9\x64\xc6\x8b\x61\xc9\x6d\xef\x06\x45\x31\x59\x51\x5b\x27\x4c\x2b\x09\xb2\xd1\xee\x76\x18\xce\x00\xbe\x94\x17\xec\x46\xac\x6f\xb5\xc9\x63\xb8\x10\xbf\xba\x3d\x07\x03\xb9\x64\xc2\x67\x4b\x11\xac\x0c\x76\x33\x33\xa5\x30\x6c\x26\xe2\xbb\x41\x82\xe0\xf5\x94\x9d\xa9\x75\x00\x42\xa8\x2e\xa9\x4c\xf0\xf4\x87\x45\x0c\x6b\x0c\xb1\x30\x70\xef\x5d\xa8\xe0\xd9\xc1\x57\x0c\xf7\x33\xfd\xcc\xa6\xef\xc9\x81\x57\x3a\x6f\xbe\x66\x58\xee\x2c\xa4\xbb\x63\xfa\x5b\x1b\x86\x0d\x7d\x40\x4b\x1a\x81\xac\x12\x83\x44\x06\x51\x1f\xdd\x66\xf9\x90\x53\x2a\x61\xed\xd7\xfe\x4a\xd1\x73\x39\xfd\x3b\xca\x21\xee\x0a\x92\x07\x7d\xf7\x02\x6e\x76\x5c\x50\xe1\x95\x1f\x62\x77\xbc\xb7\xa4\xf3\x56\xea\x30\x9d\x7a\x06\xff\x31\x54\x88\xf3\x7c\x8d\x8d\x31\xfd\x24\xa5\xeb\x94\xb6\x0c\xcc\x13\x18\x11\xa4\x9d\x5d\x3e\x8b\x35\x9a\x18\x42\x58\x62\x77\xe5\xa6\xff\x43\xf8\xc6\xb0\x1a\x90\x2a\x08\x4d\xac\xc4\x3f\x6b\x3e\x2c\xf8\x76\x9a\x1d\xbc\x31\xb5\x38\xd8\x95\xd8\xfc\x70\x3c\x2a\xdc\xad\x36\x37\xa7\x8f\x1e\x3d\xfa\x4f\x08\x47\xe1\x93\xff\xc7\x17\x7f\xf9\x1f\x5f\xfc\x65\x5a\xe6\xc3\xe3\xb2\xa1\x68\x56\x02\x8e\x75\x13\x20\xfc\xba\x7b\xc6\xe3\x76\x0f\x7d\x18\xc5\x8d\x09\x8f\xb7\xc0\x13\x06\x47\xaa\xd9\x73\x42\xc2\x95\x80\x3d\xa5\xa1\x4e\x27\xed\x34\xdf\xac\xab\x81\x46\x93\x0c\x1a\xed\xfd\x66\xfa\x2b\x68\x2b\x0b\xf7\x81\x54\xae\xaf\x11\x35\x8c\xb2\x3a\x18\xf8\x43\x4b\xdc\x49\x1c\x50\x28\x05\x66\x15\x5e\x35\xc0\x9c\xae\x2b\x72\x01\xd9\x60\x1d\x0e\xac\x17\x89\xa1\xed\xe1\x6b\x14\xc3\x2a\x8c\x6c\x21\xfb\xdd\xab\x3c\x1f\x68\x13\x23\xc2\x08\xa3\x84\x10\x99\x9e\x01\xf5\xd1\x09\x7b\xa5\x9e\x63\xad\xee\xb0\xe7\x61\x08\x6c\x5b\xa2\x0b\xa7\x83\xc0\x51\xe9\xbf\x4e\x7f\x15\x56\x74\x82\x4b\x31\x5c\xc9\x0d\xdd\xc0\x4e\x0a\x33\xc9\x53\x3e\x7c\xbd\x21\x29\x5c\x95\xa1\x60\x57\xde\x4f\x28\x07\x8f\x2b\x6c\x27\xbc\x92\xa1\xd1\x18\x66\xda\x8d\xae\xab\x93\xe0\xcf\xb6\xe0\xae\xd8\x8d\xdb\xd4\x6a\x38\x69\x17\x1c\x2d\x74\xe7\xfa\x53\x6e\x5e\x74\xe1\x42\x0e\x7e\x69\xc6\xba\x9b\x9c\x65\x98\x55\x8e\xde\x21\xb2\xb5\xe0\x63\x85\xa9\xd5\xe0\x37\x15\x4c\x2c\x6b\xc3\x3a\xaf\xe3\x07\x85\x58\xf0\x6c\x7d\x40\x7f\xb1\xe8\xa1\x2d\x62\xbc\x60\x19\x57\xc0\x3a\x2b\x33\xe9\xf0\x3b\x06\xdf\x5f\xa8\xdf\x86\xc2\x70\xf0\xe1\x51\x69\x82\x1b\x5d\x5b\x42\xfc\x15\xdd\xe3\x48\xd4\xb5\xe4\x2a\x87\x6a\x6b\x92\x63\xa2\x73\x71\x1a\x24\x4d\xe0\xf3\x48\x09\xf2\xa6\x1d\x78\xd3\x86\x3b\x39\x3b\xfe\x3b\x42\xb6\x7a\xa0\xc2\x68\x10\x15\x23\xc6\xd5\xdd\x33\x3e\xf4\x75\x27\x97\xb6\x82\x7b\x86\x8f\x00\x51\x68\x3b\xcf\xc1\x37\xe5\x3d\xe1\x59\x13\x69\x35\x3f\x38\x34\xac\x8c\x87\x90\x34\x35\xda\x66\x89\xac\x86\xe8\x55\x2b\x27\xee\x06\xd1\xdf\xf6\x95\xfb\x75\x5f\x10\x5b\xea\x22\x07\x44\x0c\x26\x4f\x07\xbe\xf2\xa1\x2c\xc6\x9d\x33\x72\x56\xfb\x38\x83\xab\x1c\x9a\x27\x87\xa7\xcf\xe1\x70\xb0\x90\x6b\xb3\x53\xd6\xd2\x36\x75\x91\x83\xa0\x4b\xa6\x8c\x5d\x8b\x81\x18\x25\xef\xf4\x75\xd6\x02\x7c\x93\xb8\x91\x90\x1f\xf3\x77\x76\x90\x48\xc1\xb3\x65\x48\x07\x7e\x82\xb7\x25\xaa\x13\x3d\xb7\x5f\x7b\xa3\x39\xd4\x79\xee\x1d\x9b\x83\xb3\x26\xa7\x64\xeb\x2a\xb0\x90\x0f\x8c\x21\x59\x34\xdf\xa8\xfd\x79\x55\x15\x12\x0b\x2e\x13\x3c\x44\x86\x11\x2f\x47\x23\x7e\xad\xcb\x06\x6f\xec\x57\xd9\x62\xfb\xc2\xe1\x1e\xf4\x52\x80\xf2\x2e\xf0\xc1\x39\x5b\x02\x57\x32\x3c\xb4\xdf\xfa\x29\x2e\x65\x35\x58\x26\x64\xbb\xb9\x6b\xa6\x07\x50\x23\x2f\x2e\xbe\x54\x0c\x96\x58\xe9\xfc\x09\x7b\xa7\xd8\x63\x4c\x46\xeb\x5b\x80\xa8\x7c\x7d\xf1\x2c\x6a\x38\xd2\x77\x3f\xbf\x86\xe3\xc2\xbe\x40\xa9\x56\xb8\x85\xcc\xd9\x0c\x9b\x97\x5b\x31\x1c\xbe\x7c\xa4\xc4\x2d\x96\xc1\x06\xc4\x43\xf3\x5e\xbf\x8a\xe5\x9b\x04\x2e\xaa\xee\xe2\x85\x29\x1f\xb3\x2f\x71\xce\x95\x30\x94\xbc\x3c\x88\x95\x58\x2a\xc6\x5e\xbd\x3e\x8c\xd8\x9f\xdb\x89\xb9\x9d\x4c\x26\x13\xbf\xd6\x17\xc3\x34\x04\x8b\x40\x80\x93\xde\x99\x6a\x5c\xc0\x52\xe7\x72\x3e\x1c\x64\xde\x3b\x89\xa0\x72\xdb\x4f\x06\xcf\x83\xab\xe1\x42\x71\x37\xa6\x43\x81\xd9\x29\x04\xc5\x9d\x47\x81\xdf\xff\x8e\xa2\xd4\x9e\xc2\xcd\xa4\x51\x6d\xf5\xed\xe2\x0e\x81\x21\xe9\x3c\x5c\x21\xcd\xc4\x92\xaf\xa4\x06\x1a\x6d\xd0\x1d\x50\xb0\xdc\xdd\xaf\xe1\x77\xbd\xd9\xdf\xf8\x6c\x16\x2e\x4f\xe8\xc1\x04\xe9\xf7\xc1\x52\xc5\x5d\xa5\xb1\xb3\x28\xd0\x3a\x5c\xe9\x3c\x0d\x96\xc6\x00\x07\x59\xac\x41\xb9\xaf\xbd\x8e\xeb\x29\xe3\x10\xb5\x61\x2f\x8c\xc1\x82\xc3\x0e\xb1\x19\xf7\x53\x6e\x96\xf3\x68\xe3\xf8\x13\x2a\x71\x2e\xc2\x8d\x84\x1c\xa9\xd2\x4c\xcc\xe7\x3e\x54\xd5\x8a\x89\x6a\x29\x4a\x61\x08\x96\xae\xf7\xe1\x81\xc4\xf0\x89\xf7\x98\x8c\x57\x06\x08\xad\x2a\x79\x35\xfc\x70\xf9\xcf\x05\x1f\x28\x97\x66\xca\xde\xf2\x42\xe6\xd1\x7d\xf1\x7a\xeb\xe0\x95\x7a\xad\xb5\x7b\x29\x2d\x04\xad\xc3\xcb\x2c\xe0\x35\x0a\x13\x22\x07\xdb\x8f\x1c\xf4\x56\x12\x4e\xb7\x62\x87\x52\xf3\x91\xc1\x1f\xa6\x56\x67\x23\xb8\x3f\xde\xa8\x78\xbb\xda\x64\x18\x04\x13\xca\x99\x75\xa5\x25\xa1\x9e\x67\x93\x3d\x25\x32\xc2\x4e\xd9\xb7\x3e\x22\x0e\xf1\x28\x21\xd7\x19\x98\xa7\x1a\x34\xc5\x4b\xbe\x46\x8e\x2b\xc4\xce\x51\x1c\xab\x8d\x70\x01\xf3\x24\xa1\xcd\xf4\x4c\x13\xa8\x07\x36\xe3\x0f\x7f\xdc\xae\xa0\xa9\x59\xf7\xaf\x87\xd7\x7b\xb4\xa0\xc0\xf6\xac\x6e\xcf\x7f\xb8\x58\x7e\x23\x2c\xab\x8c\xc8\x44\x0e\x49\x7b\x84\x8b\x73\x47\xe7\x8d\xb8\x1f\x83\x09\x37\xe1\x52\x83\x72\x48\xba\x0b\x17\x9d\xa7\xf3\x40\xde\x43\xaf\xfb\x81\xe7\x5d\x7f\xa5\xb8\x05\x9c\xbf\x9a\x18\xad\x21\x33\x64\x90\x7d\xd9\xd4\x04\xbe\xe5\x2d\x57\x6b\xe5\xb5\x64\x7c\xf8\x86\xd2\x9d\xe1\x6a\xb1\x4d\x39\xf9\x20\x54\xd9\xda\x08\x5c\x01\xe9\x58\xae\x09\x5e\x82\xd7\xab\xe1\xd3\xbf\xbd\x78\xc6\x1e\xb1\x23\xa8\x67\x6b\x38\x28\x29\xe4\x02\x98\x7c\xef\x6b\x17\x39\x8f\x53\x9c\x92\xdd\x57\xa6\x4d\x20\xbf\xf6\xf6\x11\xcc\x59\x58\x53\x8a\x93\x1d\x13\x30\xa1\x5f\xa0\xc8\xf7\xaa\xea\x23\xa8\x2a\x9a\x5e\xa2\x54\x98\x83\x6e\xf9\xd6\x8a\xc1\x65\x8a\x5b\x46\xf6\xdb\x4f\x60\x64\xc9\xa5\xfc\xd8\x03\xd7\xf4\x77\x0d\xb4\x09\x2b\x85\xe3\x39\x27\x50\x60\xa0\xb1\x8e\x02\xb7\xee\x01\xa5\x5b\xc8\x87\xee\x41\xf2\x41\x7b\xcf\x3d\x68\xcf\xf5\x70\xb5\xf5\x13\xf7\x00\xcf\xf5\xf0\x80\xe9\xf3\x37\xd9\x56\xbc\x90\xaa\xbe\xc3\x34\xe8\xe0\x97\xf3\xad\xbb\x75\x7d\x0e\xe2\x90\xa3\xf9\x8e\xc4\x5d\x33\x13\x21\x6d\x97\x6f\xa7\xed\xa6\xe1\x6d\xaa\xc9\xb7\x93\xf4\xe2\x56\x1f\x9e\xd8\xec\x06\x69\x5f\x87\x9f\x55\x66\xb8\xca\x75\xb9\xf5\xf5\xfe\x50\x08\x4e\xe0\x68\xe9\xb4\x64\xdb\x71\x5b\x77\xde\xbe\xe1\xf7\xe1\xfd\xb7\xf5\x73\xb3\x42\xa3\xdd\x3e\x12\xc9\x5a\x0a\x5b\x19\xbc\x87\x24\x93\xdf\xbd\x80\x6a\x19\x69\x9b\x03\x38\xfc\x99\xa5\x99\x10\x9f\x89\x62\x2b\x79\x9e\xc8\x84\x9b\xc8\x40\x62\x74\x41\xa2\x4e\xea\xad\xd1\x6b\x5d\x84\x42\xf4\xb8\x48\x5e\xec\x2f\x66\x8d\x1c\x09\xba\xb4\xa9\xc1\xd7\xd5\xc6\x1a\xb9\xa1\x28\xac\x38\x1e\xe2\x1a\xd5\x04\xef\x91\x6d\xae\x91\x77\x41\xfb\x6b\xe4\xc5\xfe\x22\xd6\xc8\x8a\x2c\xd3\x65\x75\x65\xf4\x5c\x0e\xbf\x71\x5b\xbe\x40\x10\xc7\x34\xfa\x16\x14\x5f\xa0\xb6\x62\x8b\x88\xdb\xe2\xcb\x0e\x52\x2c\x7c\x42\x35\x4f\xe5\xd1\x9c\x50\x2e\x51\x92\x4d\xd1\x19\x2f\x96\xda\x3a\xe2\x46\xb2\xcd\xcd\xdc\x14\xd8\x56\x36\x90\x8e\x3d\xf7\x5f\x07\x72\x3a\xa5\xb5\x1c\x5b\x1e\x11\x19\x19\x9b\x0e\x39\x7d\xb4\x56\x78\xa9\xc3\x5f\x23\x09\x8e\xa5\x01\xde\xd7\x68\x2b\x95\x75\x8b\x2f\xa3\x4d\x57\x03\x43\xce\xb4\xe9\xea\xce\x61\xc1\xc5\xf0\x9a\xe2\x38\x2a\xee\x96\x27\xcc\x88\x82\x3b\xb9\x12\x51\x8d\xdc\x60\x7e\x8a\xc8\xad\xd4\xf9\xe0\x78\x95\xe3\xc6\x81\xa3\x2c\xf5\x40\x5c\x59\x1c\xf0\xd5\xf0\x84\x13\x5d\xda\x39\x22\x27\xa4\x65\x07\x2f\xe2\x61\x3b\xf8\x3c\x6d\xe8\x01\x7e\x49\x93\xc0\xa4\x76\x01\x63\xec\x46\xaa\x3c\x34\xc9\xed\x2d\x3e\xf5\xe1\xdd\x8f\x10\x59\xc5\x37\x9d\xa8\x9a\xb9\x11\x4f\xd8\x3b\xda\xdd\x6b\x36\x8c\x4d\xb6\xaf\x36\x49\x62\x57\x1d\xec\xb8\xda\x24\x99\xa8\x0e\x02\x72\x31\xa2\x72\x27\x23\x30\xcc\xc7\x10\x32\xbe\x8c\xc4\x05\x48\x20\x8c\x6b\xb4\xd7\xb7\x0a\xee\xa0\x57\x91\x13\xa6\x74\x92\x26\x6b\x35\x63\x3c\x03\x14\x76\x34\xba\x6f\xd1\x41\xf4\xc0\x5b\x59\x5a\xae\xe1\xac\x69\xf9\x01\x68\x1f\x1b\x3f\x8a\x92\x6f\x6b\xdb\x66\x86\xf4\x1d\xa4\x06\xa5\x42\xe8\x55\x73\x3a\x86\x47\xbf\xfe\x1c\x87\x5a\xfd\x2d\xc7\x0e\xeb\xfb\x4a\x6e\x86\x63\x28\xbe\xbe\x78\x36\x65\x9b\x89\x10\x7f\x3c\xc2\x52\x50\xa1\x2e\x3c\xcf\x43\xce\x45\xad\x53\x03\x69\x0a\x15\x3c\x91\x08\x3e\xad\x79\x75\x42\xe6\x6c\x6d\x33\x57\xa4\x1d\xe3\x6b\x94\x01\x00\x49\xc6\xe3\x99\x1e\xfe\xca\xc3\x4b\x61\x2b\x9e\x79\x4b\x1d\x24\x02\x58\xbd\x43\x3b\x35\xdc\x98\x5e\x35\x75\xfe\xb5\x0a\x70\x8a\x8e\xfc\xa3\x81\xd4\x3f\xec\x7d\xb9\xb7\xe3\xc0\x9e\x37\xe7\x84\x9e\xb7\x4e\xb3\x82\xd7\x2a\x5b\x3e\xf8\x53\xba\x63\xdb\x23\xf4\x87\x71\x76\x23\x0c\xad\xe3\x73\xc5\x0d\x2f\x85\x13\x26\xd2\x8a\x11\x9e\xb5\x92\xfa\x0b\xd0\xbb\x0b\x10\xbb\x03\x4c\x88\xe9\xff\xb4\x9e\x02\x74\xf6\xee\x3e\x23\x62\xdb\x23\x05\xa7\x43\xe5\x7e\x75\x9a\xb4\xd5\x2c\x9d\x0c\x18\x56\x7f\x84\xa5\x78\x0b\x69\xe1\xcf\x75\x2d\x6e\xa5\xca\xf5\xad\x1d\xeb\xd9\xe4\x3b\x14\xd7\x72\x5a\x46\x80\xfa\xf0\xb7\x88\x8f\xfb\x74\x12\x03\x86\xed\xd6\x5d\x87\x36\x39\xad\xdf\x2d\x0f\x9a\xfe\x9b\x3f\x28\x7e\x26\xef\x17\x8b\xd2\xf2\xa7\xc6\x4f\xd9\x49\x5e\x5c\x57\x22\x4b\x0e\xa0\xbf\x7e\x79\x7d\xd6\x17\x49\x0b\x22\x7d\xe8\x2d\x0c\xc2\x71\xbc\xcc\x0e\x5f\xde\xad\x98\x2d\xb5\xbe\x21\xc9\x3d\xea\x14\x7e\x2d\xeb\xd9\x34\xd3\x65\xa7\x7e\x73\x62\xe5\xc2\x9e\x06\xed\x30\xf1\xab\x43\xa3\xcc\x96\x0a\xfa\x84\x6e\xf7\xbb\x0d\x1f\x43\x4b\xe8\x34\xab\x0a\x67\x37\x54\x0e\x86\xfc\xea\xf6\xb2\x5f\xd2\x9a\xf7\x04\xbe\xa4\x4f\x9e\xbd\xd9\x3e\x8a\x43\x6b\xce\xe2\xf8\xc0\x71\x24\xaf\x4b\xa0\xe0\x8a\x8d\xd2\x9a\x83\xd9\xee\x0b\x2d\xb2\xf7\x7b\x89\xb8\x91\x4f\xff\x34\x17\x51\x39\xa3\xac\x35\xa0\x73\x82\x30\xaf\x54\x83\x59\xa4\xe6\x58\xb7\x11\x3e\xe3\x34\x15\xdc\x42\xf9\xc4\xe8\x9e\xfc\x12\xf4\x13\x68\x1f\x26\x87\xc7\x83\x0c\x21\x75\xa3\x22\x7e\x18\x86\x84\x5b\xd0\x83\xc6\x4c\xd3\x52\x5d\x1f\x13\x7d\xc0\x3e\x1e\x02\x81\x8d\x80\x85\x63\xf4\x3a\x4d\xb3\x92\x99\x38\xcb\x32\x5d\xab\x84\x32\xcd\x67\xc2\x4f\x9e\x3b\x91\x5f\xf7\x24\x0e\x65\x51\xe7\x2c\x07\x49\xc8\x65\xcc\x0b\xc9\x91\xf1\xba\x2f\x75\x38\xbf\x58\x3b\x3f\x78\x76\xdd\xf8\xee\xa0\x24\xac\x13\x9c\x52\x1a\x99\xb4\xe6\x69\xdc\x07\xdb\xeb\x42\xe9\x9b\xda\x35\x23\x1b\xfb\x87\xc6\x20\xa8\xc0\x41\x42\x9b\x77\xd5\x9f\x49\x53\xe1\xb8\xbd\x69\x99\xc5\x05\x10\xef\x34\xca\xb5\xf3\xf7\x61\xf9\x26\x1c\x67\x48\x60\x1b\x1f\xbc\x5f\xee\xaf\xda\x3a\xbf\x48\x67\xf6\xf9\xff\xfb\xec\x32\xa5\xf8\x1c\x48\xe6\x5b\x02\x96\x65\x10\x3c\x30\x62\xc4\xe0\xa6\x4b\x78\x6c\x3b\x42\xfd\x1c\x87\xa9\x38\xc3\x43\xd7\x73\x8e\x66\xae\x10\x7c\x8e\xa7\xe2\x08\xbb\xdd\x82\x71\x1a\x58\xaa\x74\xa1\x58\x8b\x61\xc3\xc8\xf1\x04\x4f\x45\x29\xb8\xb2\x31\x30\x1d\x78\xa8\x04\x7c\x5e\x2c\xc9\x8c\xeb\x17\x2a\xc0\xf0\x0c\x0f\x92\x88\xf9\x32\xfc\x4e\xa5\x73\xd1\x97\x66\x9d\xa9\x33\xc7\x6a\x67\xfd\xdf\x0f\x5f\x80\x18\x8d\x8f\xbc\x04\x46\x2c\xa4\x75\x26\x10\x66\xfa\x89\xb6\x0b\x81\x89\xda\x61\xdb\x1f\xc5\xdd\x88\x35\xfb\xeb\x37\xe7\x7f\xfb\xfb\x8b\x57\x4f\xcf\x5e\xfc\xfd\xe5\xd9\xd3\xbf\x5e\x5c\x9e\xbf\x7b\x77\xfd\xb7\xeb\x37\xe7\x2f\xdf\xbd\x7b\x5a\x1b\x23\x94\x0b\xcc\x95\xd7\xc2\xbd\x7b\x17\xf4\x85\x7d\xf7\xee\x4d\x56\xc9\xea\xdd\xbb\xab\x98\x47\x1c\x4c\xb6\xea\x37\x16\xbc\x00\xa4\x99\xca\xb5\xb0\x50\x75\x00\x75\x6e\xc3\x0f\x35\xac\xf3\x92\xdb\xb6\x44\xae\x47\xa2\x33\xb8\xbd\x19\x0d\x70\x6e\x97\xdc\x88\x2b\x74\xf3\x2e\x63\x72\x3d\x41\xe1\x7b\x71\x8c\x33\x2b\xd5\xa2\x10\xcd\x33\x53\x93\xb6\x1f\xb4\x42\x33\xe1\x6e\x45\x60\x85\xdb\x74\x67\x6d\x5b\xa7\x3e\x48\x26\x30\xa3\xba\x40\x33\xe2\xdd\xb9\x8e\xc4\xa8\xb8\xf8\x6c\x68\xc3\x16\xcd\x56\x52\xdc\x82\x3b\x67\xe5\x42\xf1\x22\x7e\xb9\x08\x94\xa7\xc0\xc1\x38\x48\xe6\x26\x0a\x48\x30\xeb\xef\x4f\xa5\xf3\x93\xa6\xc5\x25\xbc\xe5\x0d\x92\x1a\x37\x64\xeb\xcd\xaf\xcb\xa3\x33\xcc\x25\x82\xee\x1a\x22\x67\x57\x17\xcf\xd8\xe3\x29\xf3\xb6\xc8\xff\x2b\xb4\x80\xda\x75\xb8\x86\xad\x42\xe8\x08\xe4\x9d\x67\xf4\xe8\x77\x10\x59\x0c\xdd\x2b\xbc\x5a\xc3\x0d\xf3\xe0\xbb\x55\xcf\x72\x5d\x72\x39\xa8\xa1\xeb\x07\xe8\x60\xe6\x75\x51\xac\xd9\x3f\x6b\x5e\x0c\xe7\x32\xbc\xd2\x79\xab\x88\xe3\x61\x3f\xf8\x53\xfc\xab\x3f\x4f\xff\xd4\xcc\xf8\xcf\xd3\x3f\x0d\x6d\xcd\xd1\xdc\xf1\x3f\x4f\xed\x2a\x9b\xfe\x29\x70\xaf\xb2\x20\xb0\xa9\x7e\x1d\xf6\xf4\xf8\x1e\xbe\x99\x46\xef\xf2\x20\x7f\xb0\x97\xc2\x9d\xd7\x2b\x1f\x9d\x69\x06\x7b\xe7\x02\x84\xe8\x6b\xc3\x33\x71\x25\x8c\x84\x80\x4f\xab\x9c\xce\xed\x19\xaf\x00\xcb\x43\x93\x1b\x7f\xa1\x2d\x0a\x1d\x6c\xad\xfd\xa2\x2a\x21\x72\x0c\xee\xc3\x7c\x05\x5b\xf8\xe9\xc2\x71\x1b\xa6\x61\x7d\x04\x0e\xc4\xab\x99\x11\x1c\xcb\xe1\x59\x2e\x0a\xd1\xb6\x03\x99\xe2\x93\xc8\x20\xa9\x11\x9e\xa6\xb4\x9a\x28\xb1\x40\xf0\x57\x78\x0a\x47\xf0\xdb\xf0\xd4\x36\x12\xc2\x36\xf8\xa5\x30\x49\x59\x96\x22\xf7\x01\x5e\xb1\x1e\x5c\xe1\x07\x86\x05\x9d\x1e\x69\x99\x92\x05\x1e\xdb\x88\x98\x81\x25\x65\x15\x1c\x01\x92\x4b\x5d\x07\x7a\x01\x88\x04\xe1\xab\xc9\x22\x43\x8a\x6e\xc7\x01\x62\x7c\xee\x1a\x4a\xeb\x60\xc5\x86\xf9\x6b\xa1\xbd\x4f\xcb\x35\x08\xb5\xf4\x56\x28\xc7\x78\xf7\x46\x0c\x53\x05\x68\x58\xa3\xed\xc3\x6a\x16\xb4\xe6\xd4\x89\xfa\x59\xcd\xb5\xc9\xe4\xac\x58\xb3\x25\x2f\x9a\x06\x45\x9c\xdd\xf8\x15\xc7\x9f\x1c\x76\xfc\xaf\x85\xeb\x1e\x83\x42\xab\x45\x37\x74\x11\x77\x15\xb4\x72\x19\x66\x05\xbd\xd9\xa9\x2b\xfc\x66\xef\x41\xaf\x75\x9d\x5a\x82\xe7\x34\xfb\xf2\x51\xdc\xf2\x4f\x4c\x59\x3e\x00\x7f\xe2\x74\x21\xf0\x84\xd2\xb5\xe5\x4e\x52\xb5\x43\xdb\x95\x3d\x7c\x01\x3e\x35\x69\xee\x9b\xd8\x54\xcd\x9f\xad\x37\xcd\xcc\x87\x66\xb0\xbc\xe1\x73\x1c\x68\xe1\xbc\xb6\x47\x39\x40\x34\xb6\x66\xde\x13\x74\xc3\x3b\xf6\xb1\x48\xe8\x88\xf7\xd2\xc8\xaa\x10\xec\x4f\x37\x62\x7d\x82\x3c\xf9\x18\xdc\xfc\x79\xa0\xcc\xb6\x73\x6a\xc3\xdf\xaa\x2b\x3f\x59\x6d\xd8\x9f\xe2\xbf\xfd\x79\xd8\xdd\x24\x3f\x1d\xd2\x1f\x0e\xf1\xe3\x13\x51\x34\xe7\xc8\xa0\x42\xa7\xd9\xc7\x81\xfb\x1b\xe8\x58\x9c\xc6\x85\x9d\xb2\x73\xa0\x93\x84\x88\x9f\x20\x34\xf4\x0c\x2c\x8a\x9e\x78\x1b\x7a\x50\x24\x3c\xc2\x33\x64\x1b\x13\x3d\x3e\x96\x4b\x7d\x1d\x48\x02\xa1\x95\xca\x5c\x98\xf6\x6f\x28\xbf\xa0\x72\x76\xa9\xcf\xef\x44\x56\x0f\x6b\x46\x82\x23\xe1\x41\xe9\x46\x10\x3a\xc0\xf7\x0e\xc5\x37\xa2\x69\x75\x83\x2b\x7f\x23\x28\xb8\x92\x86\x76\xa2\xd5\x86\x9d\x1a\x1d\x4a\xa6\xbf\x73\x9e\xb6\x4e\xc7\x8d\x58\x0f\xa4\x89\xc7\x11\x9a\xdf\xdd\xe0\x37\x07\xaa\xd6\x46\x1f\x78\xe7\x90\x20\x74\x26\xd8\xf9\x9d\xb4\xce\xfe\x4f\xd4\xaa\x99\x2e\x67\xc1\x33\x21\x5f\x87\x78\xad\xe0\x9b\xe3\xc1\x55\x39\xfc\x91\xf6\xf1\x09\x87\x2c\x2e\x50\xe2\x49\x7b\x15\xd7\xb9\xd3\x14\x72\x78\x6d\x3e\x9c\xf9\x43\x1b\x4a\x37\xb4\x02\xf2\xae\x6e\xff\x39\xca\xb9\x88\xe0\x7e\x9c\x20\xea\x08\xdc\x53\x58\xf5\x73\x1f\x28\x53\xe4\x76\xdf\x3b\x51\x48\x14\x2b\x81\xf0\x5f\xae\x78\x41\x6b\x3e\xee\xb4\xf7\xe6\xf3\x8c\x1b\x44\xad\x86\x5e\x32\x36\xb4\xcf\xa5\xac\x2b\x90\xde\x7b\xff\x32\x58\xf3\xf6\xbe\x21\x7b\x1d\x45\x24\x37\x4e\x66\x75\xc1\x0d\xf3\x16\x67\x41\x6a\x6c\x9d\x70\x72\x5b\x65\x44\x08\x95\x71\xf4\xbd\xa7\x4d\x79\x9d\xb3\x4c\x52\x9a\x31\xe6\x82\xc4\x24\xd0\xd8\xf4\x54\x28\x41\xe6\x51\xbf\xdd\xaf\x9e\x47\x4b\xdd\x18\x28\x8a\x0d\x6d\x9b\x2f\xba\x5e\xf3\x41\xb9\x80\x06\x81\x14\xcc\x4e\xeb\x34\x36\xb6\x67\xca\xfe\xd2\xd0\xf8\x52\x66\x89\x74\x98\x40\x8d\x26\x5c\xe4\xcb\x46\x0b\x12\x7f\x8d\xb8\x4b\x68\x76\xe6\xda\x88\x95\x30\xec\x28\xd7\xf0\x2b\x62\x25\xb3\xa1\xef\x45\x38\xfe\x7f\x61\x34\xa8\x96\x26\x09\x11\x94\x3c\xbd\x56\xa9\xd3\xd0\xf2\x11\x3b\x82\xa9\x75\x93\x10\x94\x2d\x0a\x48\x27\xec\x82\x44\xbd\xb8\x9f\xbe\xd0\x80\x8c\xb9\xdd\x81\xb7\xed\xb9\x46\x34\xd8\x23\xdb\xf4\x8b\x9a\x38\x47\x4f\x83\x47\x42\xb9\x91\xd1\x9a\x4a\x1b\x6c\xca\x49\x17\xbb\x41\x2d\xa6\x9a\x89\xc6\x2d\x6a\xae\xfc\x7f\x7b\x5d\xc2\x99\x11\x0b\xaf\xc9\x09\x42\x51\x77\x7f\x22\xcd\xef\x74\xa5\x0b\xbd\x58\x5f\x57\x46\xf0\xfc\xa9\x56\xd6\x19\x30\x62\xf4\xe6\x7d\xef\x93\x18\xfe\xcf\x66\x03\xf3\x45\x4b\x7d\xcb\x78\x60\x5d\xd6\x73\xec\x0f\xa9\xeb\xc5\x12\x5b\xfd\xc3\x8f\x30\x9e\x19\x3d\x90\xd7\x3f\x7e\x78\x48\x65\xdb\x29\xbb\x6e\xda\xf3\x83\x5a\xb1\x94\x08\x07\x66\x07\x8f\x64\xb7\x7c\x1d\x54\x2a\x9f\xc9\x5c\xd8\x4e\xa1\x79\x5c\x90\x81\xad\x9b\xbc\x7f\xf1\xde\xb5\xf5\x3e\xd8\xd9\xe5\x33\x31\xe8\x65\xee\x9e\x92\x2a\xef\xf9\x88\x81\x07\x3e\x46\xb9\x16\x4e\x48\x7b\x16\x9a\xcc\x85\xdf\x8b\xa1\x69\x9a\x52\x87\xfc\x07\x76\x3b\x8f\xeb\xfd\x89\x32\x1e\xd4\xae\x46\x25\xbf\xbb\xbe\x11\xc3\x38\xc2\x27\xcd\xc7\x7d\x33\x30\x84\x9d\x40\x06\xf8\x5b\x65\xb9\x93\x76\x2e\x07\x3f\xdc\xd2\xf3\x3a\xc0\x68\x71\x0d\x7d\xb9\x93\xe3\xab\x17\x5d\x59\xde\x2c\xd4\x96\x54\x4f\x1c\x5a\x88\xf6\x8f\xdd\x14\xcb\xdb\x08\x59\x3d\xd6\x64\x77\xc0\x75\x44\x0e\x0f\x1b\xa7\xe9\x6f\x39\x20\x9c\xa8\x53\xcd\x05\xbe\x04\xa0\xeb\xac\xea\x72\x26\x4c\xd4\xaa\x14\x17\x12\xf2\xeb\xd2\xf4\xdb\x96\x37\x27\x8b\x20\x11\xb5\x31\xd5\xf8\x11\xab\xcc\xd2\x8a\xb7\x60\xbb\xce\xef\x7c\x64\x63\x29\xe5\x3a\x38\x7a\x87\x73\x53\x24\x49\x22\x43\x1e\x99\x58\xc9\xdc\x3f\x4a\x44\x89\x41\x43\x41\x0f\x1a\x7c\x0b\xeb\xfe\x0d\x51\x28\xc9\x76\xb5\x83\x5e\x6c\x89\x83\x58\x72\x89\x63\xb3\x6c\x7c\x8c\x45\xee\x2d\x33\x6e\x62\xb2\xc4\x2e\x7d\x59\x78\x26\xb3\x27\x50\x1a\xba\xa6\x21\x9f\x59\xc8\xe4\x72\xd5\x3a\xd7\xf0\x23\x90\x6a\x22\x72\xb7\xb0\xe0\xfe\xdf\x88\x35\x08\xc7\x79\xd2\x8e\x45\xa2\x4e\xc0\x41\xaf\x3f\xc5\x31\x21\x26\x88\xf1\xbf\x8d\x0b\x4b\x14\x90\xa6\xd6\x70\x90\x52\xe6\xed\xe8\x5d\x8f\x9b\x26\x79\x9e\x20\x31\xf2\x5a\x79\x61\x4d\x1a\x3d\xf9\x7a\xb0\xa6\xb6\x91\x9a\x80\x8f\x23\xb1\xfe\x15\x07\x3d\x87\xdc\x8e\xde\xd2\xeb\xed\x6c\x72\xda\x5a\xed\xce\x2b\x27\xca\x04\x96\xe6\x79\xbc\xf5\x98\x67\x4e\x12\xd9\xcf\x51\x5f\xa8\x13\x76\xa9\xdd\x85\xa2\x6b\x3c\x3f\x3a\xa9\xee\x67\x5a\xd8\x4b\xed\xe0\x6f\xee\xfd\xd0\xe0\xb2\x8d\x76\x64\x42\x8a\x0d\x1a\xe8\xa5\xed\xab\xb7\xcc\x01\x38\xed\xbd\xc3\x34\xa5\x8e\x23\x3c\x4d\x75\xd3\x3a\x17\x69\xb3\xd4\x26\x9c\x8d\x36\x2f\x64\x13\x9c\x8a\x38\xba\x10\xaa\xd0\xf6\x8b\x40\xa6\xda\x1d\x9b\xdf\x8d\xc7\x31\xf5\xdb\xbb\x27\xb9\xbb\x04\x23\xec\x7c\x5c\x82\xf0\xf9\x6f\x86\xf6\xb6\xdc\x2d\x15\x7a\x58\x57\x05\xb0\x92\xe4\x75\xd2\xc5\x61\xa8\x7c\x9c\xe1\x4e\x2c\x64\xc6\x4a\x61\x16\x82\x41\x5f\xbd\xf4\x4b\x9d\x7a\x84\x92\xbc\xd3\xee\x44\xc8\xda\x05\x82\x11\x08\x97\x47\x0b\x6d\x50\x1a\xe8\x16\xe2\x97\x95\x1c\xb2\x81\xff\xab\x41\xbc\xfc\x6f\x56\x71\x69\xec\x94\xd1\x8a\x97\x59\x44\xcf\x77\x25\x06\x2c\x5d\x67\xca\x09\xb3\xed\xbd\x61\x22\x0f\x12\x13\xc8\x59\x45\x94\xaa\xe7\x5b\x81\xe2\x09\xbb\x5d\x6a\x2b\x12\xbc\xce\xe6\xb1\xea\xe0\x46\xac\x0f\x4e\x7a\xea\x86\x1e\x86\x1e\x5c\xa8\x83\x16\x42\x3f\x82\x76\x6d\x42\x19\x20\xfa\x3b\x00\x89\x07\x0f\x2b\x22\x4d\x08\x3c\x22\xaf\x17\x2f\xae\x92\x7d\xf8\x84\xdb\x1f\xf2\x8a\x89\x99\xb6\xc3\x97\x28\xa6\xcd\xff\x13\x43\x80\x5c\x2c\x8c\x80\xba\x43\x4c\xac\x43\xb2\xbd\x44\xe4\x73\xad\xc4\x4a\xa8\x82\x94\x72\x92\x36\xb4\xfe\xcc\x03\x80\xea\x1f\x5b\x09\xce\xff\xfb\x99\xbe\xd4\x2e\xbe\x10\xfc\x83\xfe\xdc\x8a\xfa\xe4\x4e\x96\x75\x89\x1d\xbf\x9c\xf3\x06\x4c\xce\x43\x47\x7d\xd2\x23\x14\x56\xec\xf4\x33\x7a\x29\x69\x70\xd6\xa4\xf6\x98\xe3\x66\x01\x1d\x24\xc3\x6b\x49\xbc\xc2\x8b\x42\xcf\x48\x84\x02\xa5\x54\xfe\xe3\xa7\xec\xb9\x36\x4c\xdc\xf1\xb2\x2a\xc4\x09\x3e\x99\x7c\x39\xf9\x97\x56\x94\x15\x08\x55\x0f\x27\x2c\x9e\xb4\x50\x66\xe4\x34\x7b\x7c\x42\xea\x55\x17\x5e\x72\x00\x97\xdc\x94\x01\xf5\xd2\xcf\x94\x87\xbd\xf0\x58\x65\xd9\xe3\xd3\xc7\xa7\x8f\x9e\xb0\x1f\x99\xff\xe0\xc7\xe1\x9f\x5f\x10\x44\xe2\x7f\xf9\x25\xfb\x91\xfd\xc8\x18\xbb\x82\xbf\x69\xff\x09\xff\x17\x04\xa9\x13\x26\xe7\xdd\xb5\x7c\xec\x37\x28\xd3\x65\x38\x4e\x94\x1d\xe2\xaa\xa5\x64\x0d\xb7\x08\xc0\xb0\x38\x7d\x52\xe4\x38\x13\x99\x2e\x05\xac\xe5\xe3\xff\x19\xa5\x02\x04\xde\x31\xad\x48\x22\x61\x3b\x8e\x60\x33\x8e\xd9\x2d\x30\x5a\x96\xfc\x06\x93\xe5\x67\x99\xab\x79\xe1\x97\xe4\xe8\x8b\xc9\x23\x0a\x40\x40\xab\xfe\x0f\xac\xa4\x2e\xb8\x13\x71\xa5\x8f\x1e\x93\xc0\x11\x9b\x9b\xf5\xc5\x28\x9b\xd5\xdb\x27\xbf\x9a\x00\x56\xf6\x13\xa7\xcc\xf1\x7d\x5a\x35\x2a\xd4\x33\xb5\xbe\xe5\xeb\x04\xb5\x1a\x9b\xe7\x2f\xe4\x4a\xb0\xa5\x5c\x2c\xa1\x5b\x4e\xa4\x4e\xa0\xbd\x95\x04\x9d\x27\x63\x9b\x30\x9c\xf8\x9a\x49\x37\x65\x17\xee\x90\x44\x7b\xcc\x9b\x8c\x62\xa0\xb1\x69\xaa\x4f\xa9\x68\x09\x7f\x3d\x41\x2b\x3f\x8a\x68\x9e\x80\xe0\x1d\xdc\xa1\x70\x44\x08\xca\x97\x43\x75\x59\xe7\x2d\x32\x19\x74\xd6\x48\x8a\xf6\x96\xe6\x0c\xeb\x39\x12\x03\x83\xd6\xb7\x53\x76\xa9\xf3\x78\x12\x96\x7c\x45\x02\x3e\x87\xd4\x65\xb0\x2a\xd2\x36\x79\x6e\x09\x04\x3d\x19\xc9\xa0\x76\x80\xda\x99\x86\x26\xa8\x06\xef\xc2\x4c\x04\x23\x4e\x31\x55\x1c\x9a\xc4\x85\xd7\x6f\xf6\x5d\x2b\x9b\xd6\x71\x86\x61\x6d\x02\x4e\xf6\xcf\xd8\x2a\xef\x60\x56\x67\x37\xc2\x1d\x50\x2d\xb4\x33\xd0\x9e\xb5\xaa\x1d\x9b\xf1\x82\xab\x4c\xe4\x63\xbc\x68\x3a\x8d\x55\xba\x38\x3b\xb8\xea\xb6\x73\x6f\x09\x32\x89\x84\x55\x09\x8e\xfb\x96\xa6\x4d\x75\xe1\xbf\xdb\x14\x98\x44\xd2\x1f\x00\x1b\xb9\xe0\x45\x2c\xfd\xaa\x74\xde\xe9\xf2\xa7\x0e\x0f\x29\x81\x53\xd4\xd0\xe0\xb1\xa1\xb3\xd5\xc2\x6d\xa6\x6c\x42\x10\xd9\xf3\xfb\xd9\x51\x64\xbd\x60\x4e\x14\x05\x35\x8e\xb1\x0d\xd0\xc8\xab\x6b\xa7\x9b\xbf\x00\xd3\x42\x99\x65\xdf\x8e\xb6\x93\x6b\x7f\x8a\x66\x02\x9b\x89\xc5\x92\x42\xef\xa7\xab\x75\x43\xd0\x7f\xe2\xdd\xb0\x9a\xb2\x55\x0b\xb9\xf2\x0e\xca\x96\xa9\xee\x1b\x5e\xca\xac\xbd\x82\x46\xd7\x6d\x29\x8a\x8a\x19\x91\xd7\x19\x7e\x00\x63\xf6\x46\xdc\x52\xfc\x97\xb3\xce\x39\x62\x50\xb4\xd0\x28\xda\x83\xde\xb5\xa0\x90\x9e\xcf\xb5\x61\x5c\xf5\x9c\x36\x7f\x15\xbc\x5d\xd0\xb4\x88\x56\xce\x99\x58\x09\xb3\x66\x95\xb6\x56\xfa\xdb\x0a\x96\x0c\x58\x03\x88\xf9\xa6\xa6\x05\x16\x54\x83\xc3\xf2\x46\xf7\xf5\x20\x38\x9f\x94\x6f\xd7\x8a\x59\xdd\x33\x35\x1b\x61\x21\xc9\xcc\x62\x20\xf9\xbe\xb0\x90\x76\x15\x30\x90\xfc\xb8\x61\xe1\x97\x3e\x94\x19\x3b\x2c\xbc\x82\xff\xb7\x15\x1e\x12\xa4\x5e\xcc\xd9\x0e\x3b\xd0\x84\xda\x3d\x55\x49\x72\xe5\xbb\x37\x60\x67\xc4\x48\xdb\x3a\x58\x45\x08\xba\xbe\x3c\x46\xc7\x08\x02\xc7\x2f\x4f\xbf\x38\x7d\x7c\xe4\xd7\xfc\x0b\x4a\x34\xc7\x6d\x3f\x24\x7c\x7c\x1c\x03\xbc\xf8\x5b\x64\x0b\xe6\x43\x8e\x4e\x50\xc8\x2e\x14\xe2\x8b\xd9\xad\x36\xb9\xa5\x2c\x2d\x20\x4f\x03\x37\x84\x5f\x59\xeb\x42\x71\xbb\x2c\xa3\xef\x44\x11\x3b\xab\x5d\xc7\x9a\xdd\x6a\x6f\xb7\x31\x62\x96\x8e\xfd\xa6\xd4\x46\xfc\x86\x72\x0e\x9a\x39\x85\x40\x6b\x3b\x6c\xa2\xc6\x36\x83\xbd\xa9\xbb\x49\x87\x7d\xb5\x90\xd6\x4d\x4a\x5e\x4d\x6e\xc4\x7a\x50\x3e\x96\x0a\xb6\x4c\x83\x5a\x6e\xcf\x1d\x17\xa1\xe4\xd5\xcf\x96\xb2\xd2\x45\x5d\x0e\x4b\x3e\xf7\x3d\xc7\x17\x01\x7e\x16\x04\x05\x20\x12\x64\x18\x06\xed\x61\x89\xb0\x47\x36\x5b\x77\x59\x7a\x66\xa2\xd0\x6a\x81\x98\xc3\xc1\xde\xd8\x00\x22\xba\x4c\xab\x4c\x54\xce\x9e\x5a\xa7\x0d\x5f\x88\xd3\xf0\x39\xc3\xf9\x6c\x3e\x35\xda\xfa\x2d\x4c\xb4\x57\x45\x88\xcc\xbc\x03\x6f\x10\x7e\x70\x43\x00\x85\xfb\x18\x92\xef\x3c\x03\x1e\x88\xa1\x22\x67\xeb\x7e\x2f\x90\x0e\x77\xc5\x03\x07\x5c\x0f\x26\xbe\xa1\x43\xb1\xf8\xad\x3d\x2f\xb8\x75\x32\xfb\x4b\xa1\xb3\x9b\x6b\xa7\x4d\x72\x34\x77\xf6\xdd\xf5\x96\x4c\x82\x9e\xee\x9e\x29\xc5\xce\xbe\xbb\x66\xcf\xa4\xbd\x61\x46\x58\x5d\x1b\x5a\xd6\x0d\x9a\xd1\xdb\x1e\x5d\x02\x6f\xfa\x8c\x91\x32\x6e\xd0\x3a\xaa\xe4\xd9\x52\x2a\x11\x5f\x2f\x14\x13\x77\x95\xc6\x94\x21\xd1\x98\x8e\xa0\x3b\x7e\xc5\x6f\xad\xc0\x6d\x98\xf9\x6d\xf0\xff\xb3\xa0\x1a\xb6\x7b\xe8\xaf\x81\x9f\x71\xf1\x6c\xf0\x7f\x9a\x86\x4b\x9c\xdb\x37\xc4\x46\x6a\x9b\xd7\xe0\xb9\x2c\x04\x56\xeb\xd1\x1b\x91\x36\x5d\xda\x83\x7e\x84\x13\xbc\xd6\x35\xbb\xe5\xe4\x77\x7d\xa7\xd1\xda\x4d\xd9\x1b\x59\x3d\x61\xe7\xca\xd6\x46\x34\x60\x47\xf2\xbb\x7e\xef\x63\xc1\x6f\x8f\x6d\x77\x88\x22\x43\x45\x13\xdc\x30\x84\x08\x78\x43\x4c\xad\x7f\xc4\x71\x8e\xa1\x9f\x7d\xc2\x0e\xc4\x9d\xfb\xdd\xc1\x09\x3b\xb8\x9b\x5b\xff\x0f\xe5\xe6\x96\xd4\xb4\xcf\x8f\x8b\xb2\x2a\x64\x26\x5d\xb1\xf6\xf7\x55\x98\x36\x45\x8a\x3f\x43\x45\x36\x6c\xb6\xbe\x1f\x5f\x21\x10\x67\xf6\xe6\xd5\xb3\x57\x4f\x20\xd1\x96\x6b\x76\x0b\x1d\x26\x57\x42\x39\x26\x8c\xd1\x03\x59\x38\x3b\x9f\xab\x02\x03\x62\x73\x94\x80\x67\x31\xd3\x65\x65\x74\x29\x2d\x1d\x84\x85\xcf\xe2\xa0\xa4\x87\x6b\x40\x96\x8e\x71\x82\xd2\x7b\x50\x0b\x23\xe8\x15\x60\x0d\x8a\x02\xa9\xd4\xe5\xec\xbd\x5a\x85\x8e\xb3\x0d\x5a\xe5\x62\xce\x34\x02\x0f\x7a\x4c\x69\x74\x74\x4f\x54\x58\x5e\x23\x84\x19\xab\xc1\x74\xdc\xed\x68\x75\xc0\x73\x6d\xa2\xc0\xd3\x5c\xac\x4e\x6d\xce\x1f\x53\xc1\xbb\x7e\xf9\xf0\xaa\xa2\xda\x6a\x77\x88\x53\xef\xc3\xc1\xe3\x83\x29\xbb\x96\xa5\x2c\xb8\x29\xd6\x27\xdd\x1d\x6b\xa4\x53\xd5\xb5\x36\xcd\x27\x03\x80\xea\xd1\x01\x3b\x42\x12\x32\x2a\x62\x8a\x2b\x56\x08\xbe\x12\x91\xbb\x0d\x9a\x22\x21\x2a\xf3\x98\x10\x50\xb3\xe4\x07\x43\x96\xf8\x68\xc8\xc0\x81\xe1\xf9\x2b\x55\x10\x8b\x14\x36\x78\x74\xc3\xe9\x38\x70\xa6\x16\x07\xf4\x6b\x36\xd7\x26\x43\x5f\x13\x32\x63\x4b\xc1\x5e\x87\x59\xa6\xf6\xa2\x92\x2a\xc4\x73\x2f\xfd\x75\x83\x8b\x87\x93\x4d\x40\x15\xef\x52\x05\x70\xe2\x80\xb1\x95\x6c\x71\x1f\x84\x6f\xcc\xc8\x34\xb2\xed\x88\x6e\xee\x18\x27\xec\x5b\x25\xff\x59\x0b\x76\xf1\x8c\xc2\x4a\xde\x8e\x4a\x18\x2b\xad\xf3\xf6\x3c\xef\x46\x5c\x74\x5b\xe3\x83\xb7\xa3\xb3\x92\xff\x4b\x2b\x76\xfe\x97\xeb\xf0\xd1\xc7\xe8\xd1\x90\x0f\xeb\x43\xd9\x7c\x92\x5b\xc0\xff\x55\x1b\xe1\x03\xda\xc4\x68\xfb\x2c\xca\x49\xab\xbd\xf1\x11\xb6\x97\xc4\x9e\x71\xc7\x31\xd0\x46\x9b\xab\xa9\x6f\xfc\xe0\xb7\x7b\x2d\x35\x83\xfa\xe5\xd8\xda\x81\xdc\xd1\xf3\xde\x02\x51\x7f\x07\x48\x5d\x93\xf0\x3f\xfd\xf6\xf5\xc5\x27\x0e\x61\x33\xf0\x74\x17\x2f\x75\x3e\x4a\x1c\xfb\x57\xbf\x91\x4f\x51\x26\x2b\xc9\x42\x19\xbb\xd4\x4a\x9c\x80\xb1\x62\xde\x5a\x85\x7f\xfd\xce\x48\x37\x8c\xb9\xbb\x1d\x89\x6e\x79\xdc\xd9\x11\x56\xc9\x3b\xe5\x97\x9d\x9e\x26\x39\x77\xd4\xda\x03\xd0\xb9\x21\x16\x9a\x15\x7a\xc6\x82\xfe\xba\xaf\x15\xfa\xf6\xf5\xc5\x48\x0b\xf4\xed\xeb\x8b\x5f\xd2\xe2\x8c\x96\x2a\xda\xc8\x14\x25\x47\x60\x2f\x43\x49\x14\xef\xc4\xd2\xd4\x28\xd1\xcf\xa7\x6d\xa0\xbc\x33\x27\x43\x14\x1d\x32\x39\xec\xfc\x6e\xfa\x39\x66\x63\xee\xe3\xc4\xdd\x48\x45\xac\x15\xef\xab\xf4\xf3\xc0\x58\x9d\x56\x85\x07\xad\x20\xf2\x27\xac\xac\x0b\x07\x04\xc1\x70\x21\xfd\x0d\xa5\x4a\xac\x84\x89\x17\x9a\x85\x66\x4b\x8c\x3d\x13\x08\x05\x23\x57\xc9\x87\xd2\xab\x66\x76\xdd\x9f\x21\x8a\x6c\x26\xf7\x92\x2b\xbe\xf0\x8b\x00\xfe\x1c\x2b\xf1\x8f\x54\xe5\xe6\x7d\x2f\x98\xe1\x11\x60\x13\xa4\x8a\x02\x19\x5f\x71\x59\xf0\x99\x2c\x24\x39\xba\xb3\xc2\x1d\x4f\x63\x08\x06\xc1\x1d\x34\x8a\xc9\xef\xc5\xf4\x8e\x18\x58\x77\x79\x3d\x21\xa8\x24\xae\xcf\x91\x9f\xd3\xe9\xad\x77\x47\x8e\xa7\x6d\x4c\xbd\x14\xe4\x10\x05\x88\xbe\x30\x5c\xef\x85\xe9\x94\x1e\x4c\xed\xd8\x88\xd2\x53\x14\x11\x2d\x6c\x85\xa3\xee\x6d\xd6\x18\xa1\x8b\x97\x33\x52\xe8\x02\xa2\x42\x73\xa8\x7d\xf4\x02\x63\xc2\xac\xc8\x8c\x70\xc4\xf8\x05\x14\x04\xe9\xbf\x4d\x8b\x60\xf6\xda\xe1\xf3\xd5\x0e\x0c\x4c\x4d\x3c\x74\x23\xec\x60\xb7\xeb\x30\x0a\x26\xbf\x78\x74\x49\x8a\x50\x67\x5c\x27\xb9\x01\xb1\x65\x25\x44\x7e\x5e\x5b\x0c\x25\xbb\x6b\xa6\x96\x66\x4d\x9b\x7b\x3a\xc2\x72\x63\xbb\x37\x72\x9b\xe8\x84\x2f\xc9\x44\xb5\x9c\xa7\xb2\x42\x3f\x15\xd5\xf2\xf9\x75\x1f\x90\xe4\xff\x8e\xf0\x31\xcf\xaf\x7b\x56\x04\x6d\x02\xd6\x6a\xf9\x35\xa2\x15\x68\x61\x9b\x92\x42\xce\x85\x93\x84\x25\xbe\x37\x3b\x52\x6a\x25\x1d\xe5\x6d\x37\x91\xfd\x2e\xfc\xec\x18\x51\xcf\xeb\xf8\xf9\xec\x25\xf5\x63\x70\x00\x67\x5a\xa6\x8b\x42\x64\xf0\xc2\xa7\xe7\x70\xc4\xe8\x6b\x84\x63\xc7\x9b\x46\x80\xaa\xdb\xe9\xcd\x1f\x20\xb1\x1d\x52\xd8\xa7\x78\x55\x4e\x5f\x9f\x9f\x3d\x7b\x79\x3e\x2d\xf3\x5f\x2d\xf5\xed\xc4\xe9\x49\x6d\xc5\x44\xba\x14\x8f\xfe\x9e\x88\xee\x92\x1f\xd8\xdd\x72\x8c\x23\xd2\xf6\x21\xfc\xd6\x02\x7d\x77\x0a\xe0\x20\x40\x4a\x8d\xd6\xee\xa4\xdb\xef\x36\x41\xe6\xbc\x2e\x0a\x3c\x6b\xce\x08\x71\x92\xfe\xb6\x3e\xa8\x97\x71\x67\x2e\x0f\x26\xfa\x3b\xdc\x6a\x1d\x49\xde\xb3\xe0\x20\xbe\xc7\xd5\x23\x4a\xf5\x0e\xe2\xfb\x5c\x3d\x7a\x20\xef\x42\x2f\xb6\x9e\xab\x37\xde\x6b\xda\xa7\x57\x3b\xa9\xbe\x26\x2d\x1c\x65\x3f\x71\x9a\xae\x1b\xb9\x09\xc8\x15\x00\x82\xb8\xa5\x3f\x5b\x37\x62\xcd\x80\xa0\x6c\x4e\x66\xba\xf9\xd6\x0a\x73\xd2\x7d\x44\x3f\x15\x2e\x83\x4d\x39\xad\xad\x30\xd3\x24\xef\xf8\x41\x58\x1f\xba\x07\x0c\x9f\xfe\x5a\xcc\x3f\xc6\x21\x78\x2d\xa8\xe8\x07\xa0\x11\x0b\xdc\x2b\x31\x7f\xc0\x6b\xb7\xc4\x7a\xec\x04\x00\x0f\x7e\x2f\xe0\x78\x36\x4f\x05\x51\x62\xe0\x4f\x7b\x10\xc7\x20\x81\xdb\x28\x9d\x95\x54\x91\xe3\x28\xb6\x75\x92\x3a\x4f\x82\x64\x89\x2c\x1e\x21\x37\x18\x01\xaa\x57\xc2\xac\xa4\xb8\x3d\xbd\xd5\xe6\x46\xaa\xc5\xe4\x56\xba\xe5\x04\x57\xd7\x9e\x42\x77\xdf\xd3\x5f\xc1\x3f\x12\x66\x87\x58\xd0\xb3\x3c\x0f\x55\x64\xb5\x15\xf3\xba\xc0\x4a\xaa\x24\x1e\x46\x5e\xc9\xb7\xc2\x58\x28\x04\xbe\x91\x2a\x3f\x61\xb5\xcc\xbf\xa2\x9d\x2b\x96\xae\x62\xbc\x8a\x1d\xdd\xc7\x34\xf4\x0b\x0b\x5d\xf9\x79\xae\x81\x9e\xc4\xc0\xb1\x1d\xc1\x21\xe4\x79\x29\xd5\xc3\xd0\x02\xb4\x24\x82\x54\x39\x65\x9f\xfa\x7b\xf4\x14\xa4\xa4\x36\x47\xc3\xb9\x44\xcc\x66\x53\x75\xc2\x63\x46\x99\xf4\x50\xa4\x55\xac\x58\xb1\xbd\xea\x93\xae\x72\xa0\x24\xbc\xdf\xb3\xcd\xe5\xda\xfe\xb3\x98\xe0\x97\x4c\xaa\xbc\xdd\xe7\x7d\x29\xc9\x87\xc6\x43\x2b\x25\x69\x0b\x3f\x3e\x37\x80\xc0\xee\xa2\x0d\xa2\xd8\x00\x2e\xd8\x05\x13\xa0\x2f\x6c\x03\x2e\x18\x05\x26\xf0\xb3\xbc\xf1\x11\x6f\x26\xdb\x87\xf4\x03\xc6\x2f\x22\xa4\xff\x28\xa7\x27\x35\x8a\x1f\x3d\x7e\xab\xb4\xa4\xd3\xb4\x42\x75\x68\x08\xb4\xd0\x6a\xc5\xd7\x23\xba\x4e\xab\xb8\xe1\xa5\x70\xc2\xb4\xa4\x72\x99\x56\x0a\xbb\x37\x13\x65\xbe\xaa\x84\xba\x76\x3c\xbb\x49\x42\x51\xee\x63\xae\xde\xd8\xc7\x5c\x0f\x21\xe6\x1a\xb3\x3a\x22\x52\x0c\xe4\xf1\xe6\x51\xf5\x2a\xb0\xe9\x85\x32\xaf\x96\xb7\x00\x55\xe9\xbf\x85\xbd\xcf\xb4\x9a\xcb\xc5\x4b\x5e\xa5\xbe\xd5\x46\x39\x89\x00\xa0\x76\x42\xf1\x79\x16\x18\xa4\x2a\x5d\xd5\x05\xb5\xcd\xac\xb4\x61\x6f\x3f\x6d\x98\x93\xa6\x4a\x43\xf4\x3f\x16\xf2\xbf\xb5\xa3\xa5\xce\x05\x9b\x49\xb2\x29\x8d\xb6\xce\x0a\x87\xbc\xd4\xc8\x27\xef\x83\xd9\x0c\x5b\xe5\x12\x05\x43\xfc\xe2\xa3\x8e\xf0\xe9\x9d\xd8\x86\x9a\x5a\xd5\x99\xe3\xa1\xcf\x7b\x43\x7e\xfd\xe8\xd1\xa3\x47\x44\x1e\x49\x3f\x1e\xfd\xe7\x7f\xfe\x27\xd3\x86\x71\x96\x8b\x4c\x96\x9b\xe2\xa9\x52\x21\x93\xf0\x1f\x8f\x1f\x4f\xd9\xdf\xce\x5e\xbe\x00\x9e\x94\xca\x59\x36\xd3\x8e\x02\x77\x60\xcd\xb7\x7b\xb1\xbd\x89\xda\x13\xf6\xff\x5c\xbf\xba\x24\x0a\x0d\xa1\xbb\xdd\x90\x99\xf0\x10\xd2\x1c\xc7\x69\x0f\xdf\xf5\xe8\xf7\xbf\xfb\x1d\x55\x01\x3f\x93\x06\x18\xd6\xa4\x40\x02\xb6\x48\x16\xc3\xc9\x6b\xc9\x8d\x40\xc2\x5c\x68\xf9\x1d\x63\x63\x24\x34\x73\xa4\x16\xbc\x38\xde\x78\x19\xa5\x5c\x2c\x5d\xe0\x60\xf5\xda\xaf\x90\x99\x83\x79\x53\x37\x1e\xdc\x08\x0d\x17\x3e\xb0\x28\xe1\xbc\x13\x39\x21\x60\xab\x4e\x58\x21\x6f\x04\x9b\xdb\xaf\x8d\xae\x2b\x2a\x21\x2b\x8b\x39\x4f\x61\xeb\x22\x92\x3c\x85\x89\xfb\x5f\x21\x8a\xf4\xc7\xc8\x6f\xc9\x67\x5b\xa3\x9c\x80\xbb\xe8\xa9\xfb\x8b\x5e\xe2\xe2\x84\xca\xc4\xcb\xb0\xad\xdb\x04\x35\x5c\xc5\x65\x43\xbc\x04\xa5\x85\xe0\xa2\x52\x0f\xe9\x3c\x1c\x80\xf0\xa2\x96\xb7\x1e\x04\x51\x62\xe8\xf0\xee\xcd\xee\x7f\xe3\x25\x05\x86\xde\xd6\xb3\xa3\xde\x7d\x1b\x72\x6b\xa1\x61\x0a\xe0\x17\x93\x9a\xd3\x45\x2e\x67\x1f\x81\x86\xbe\x8d\x4d\xaf\x13\x72\xa1\xcc\x9c\x75\xf6\xdb\x8b\x2b\xa4\xf5\x8b\x70\x23\xd6\x54\x4b\xff\x13\x2b\xda\xfc\x16\x39\x76\x76\x4b\x8b\x3c\x99\xb5\xea\xcc\x14\x7e\x93\x1a\x78\x6a\x87\xb3\x05\xef\x13\xc8\x2b\x78\xe8\x24\x48\x4d\xe5\xc4\xaf\x0c\x6d\x44\x02\x6d\x7a\xf8\x05\x72\x2e\x07\x56\xb0\x39\xee\x27\xe9\x47\xd4\x0a\x57\x57\xb8\x5d\xc0\xda\xe2\xd7\x54\x58\x8b\x8c\xf7\x54\xbb\xcc\xcd\x8d\xc8\x83\x19\xe1\xc5\x94\x5d\xf9\x2d\x83\x16\x5d\x54\xed\x2c\x42\x13\xc0\x15\x02\x6c\x4b\xbe\x86\xe5\x0c\x89\x98\x04\x33\x72\x38\x9d\x1e\x22\x38\x43\x1b\x66\x1d\x37\x49\xf6\xd3\x4b\xfb\xdc\xfb\xcb\xbe\xe4\x95\xc5\x4e\x65\x52\x2d\x12\x7a\x3c\x85\xcc\x19\xac\x6d\x70\xa5\x78\x38\xab\xff\xb6\xbd\x56\x13\xfc\xc8\x87\xd6\x67\xf5\x4d\xe8\xa0\x9b\xd8\x8f\x33\x18\x88\x7b\xef\x6b\x99\x52\xd1\xce\xde\x1f\x32\x27\xad\x4d\x13\xdf\x74\x03\xe7\xb4\xd5\xee\x07\xdd\x10\x87\x78\xff\x24\xad\x4f\x66\x1b\x6b\x77\xa3\xe6\x24\x91\x9b\x11\x37\xc4\xce\x49\x12\x47\x8f\xbb\x71\xbc\x27\xfa\x4e\xfb\x78\xed\xcd\xd1\x66\x0c\x9e\x24\xb2\x1b\xbf\x37\x91\x78\x92\xc4\xed\x28\x3e\x25\xfc\xc2\x81\xb1\xfc\xc5\x1c\x6c\x7b\xeb\x93\x26\xc9\xec\xa4\x67\x3b\x79\xb1\x24\x91\xd1\xb9\xf5\xb7\x72\xda\x09\xc4\x13\x4f\xfc\x56\x10\x8f\x51\x6d\xda\xa9\x1f\x35\x94\xc7\xf1\xbe\x80\x3e\x49\x68\x6c\xf9\xd6\x0b\xeb\xd3\x3e\xbd\x49\x09\xa4\x06\xf7\x38\xd2\x43\x7c\x1c\xa9\x81\x3e\x0e\x7a\xa9\x03\x8e\x2d\x5b\x1e\xfd\xeb\x34\xfb\x02\x8e\xf4\xbc\x21\x70\x04\xb0\x09\x39\x2c\xc7\xe1\x1a\x47\x63\xca\x5e\x06\xbf\x3f\xf1\x68\x70\xc5\xf8\xcc\xea\xa2\x76\x98\xda\x03\xc1\x49\x12\x3b\xc1\x48\x0b\xf7\x4e\x6b\xbc\x8a\x03\x22\x8a\xe6\xbb\x93\x03\x14\x1c\x10\x86\xa3\x7f\x4f\x8f\x58\x82\xa8\x34\xe7\x8b\xfe\xe2\xfb\xde\xd7\xde\xf6\xcd\x76\xbc\x47\xb8\x7b\x7d\xe9\xfd\x28\xaf\xbc\x63\xbe\xf0\x26\x9e\x01\x9d\xe4\x2c\xf7\xab\x56\x03\xb9\xe2\xed\x52\x84\x3a\x2b\xaa\xa2\x68\x1f\x25\xb5\x61\xde\x7c\x40\x8a\x29\x74\x19\x27\x87\xd9\x73\xa9\x88\x79\xaf\x14\x64\x4d\x66\x65\xea\x13\xed\xf5\x05\x3b\x7a\xda\x50\xe8\xd3\xcb\xa5\x2f\x94\x13\x66\xce\x33\x71\xdc\x45\xd5\x8a\x6a\x29\x4a\x61\x48\x3e\x6e\x24\x8a\x89\xac\xee\x4b\xae\xf2\x22\xb4\x70\x10\x86\x98\x1d\x12\x77\x4e\x18\xc5\x0b\xf8\xf0\xdc\xc8\x95\x30\x96\x1d\xfd\x45\x38\xce\xe6\x82\xbb\xda\x08\x42\x17\xcd\xfb\xa3\xae\x83\x0f\xf8\xd4\x8f\xd0\xf0\xa3\x63\x50\x37\x80\xa0\x98\xe9\x1e\xdc\x14\xa1\x1d\xc1\x3c\xb4\x5b\x1a\xfb\x2c\xfa\x03\x43\x87\xdf\x37\x10\x81\xa9\x57\x1a\xe0\xbd\x82\xf3\xbe\xd6\x35\xd5\x4d\x44\xf4\x3d\x76\xc3\x12\x2c\xd3\xc6\x78\xbf\x1d\x5e\x0f\xc8\xb5\xa8\x46\x2c\xa4\x75\xd0\x4d\x2c\xf8\x28\xa1\x55\xcf\xbd\x50\x58\x3d\x58\xd2\xb4\xf1\x69\xc8\xe6\x21\xf1\xaf\x57\x32\x8f\x0f\x2c\x50\x65\x95\x94\x26\x91\x96\x55\xdc\x86\xb4\x10\xd4\x93\x59\xab\x33\x99\x80\xa1\xe8\xdc\x0b\x7c\xb2\x80\x30\x37\x17\x4e\x98\x52\x92\x3a\x66\xb3\xe0\x6a\xc6\xa2\xb4\x6e\x77\x00\xcd\x78\x55\x15\xeb\x7b\x39\x7c\x4a\xe7\xe2\xaa\x9e\x15\xd2\x2e\xaf\x47\x04\x9c\x5e\xee\x10\x4b\xdf\x5d\xbe\x5d\x32\x98\x54\xd8\xb9\x05\x5d\x65\x56\x28\x2b\x13\x42\x3e\xef\x22\xfb\x50\x56\x6a\x05\x2d\x52\xb9\xb5\x71\xa6\x4f\xaf\x87\xb3\x9d\xe2\x88\x9a\x59\x03\xe1\x7f\x21\x9c\x68\x94\x76\x67\x7d\xdf\x26\xbd\xca\xaa\x1c\x64\x7d\xab\xaa\xae\x34\x96\xf1\xa2\x20\xfb\xd3\x6f\x30\x95\x2a\x8a\xdc\x6f\x5e\x74\x69\xf1\x99\x92\x95\xe4\xe8\x72\x16\x75\x85\xf4\x6a\x24\xc2\x90\xa1\x9e\x14\xfd\x81\x04\xb5\xd4\x1e\xa9\x8d\xc3\x41\x7e\xf7\xd3\xd8\x41\x44\x31\xad\xa2\xe8\x13\xc6\x8b\x22\xed\xe4\x36\xf7\x00\xfb\x0f\xa3\xda\x4b\x51\x1c\x7b\x8c\x73\x6f\xec\x31\xce\x0f\x01\xe3\x3c\x62\xe5\xcc\x75\xc8\x9c\xa3\x11\xe1\xf9\x84\xd8\xe1\x95\x35\x20\xdf\xda\xa0\x9a\x8f\x2e\x69\xda\x33\xee\x16\x19\x5b\xbf\x30\xe7\x93\xc7\xc7\xac\x81\x98\x9f\x39\x67\xe4\xac\x76\xd4\xeb\xbd\xa3\x29\x5e\x2b\x92\x8a\xd0\x70\x1a\x50\x93\x60\x18\x27\xe1\x55\x24\xeb\x68\x22\xb2\x67\xc6\x5d\x47\xa1\x76\x4c\x77\xf8\x2d\xea\xf6\xc6\x28\xc8\x07\x40\x41\xd4\xa1\x65\xb9\xce\xea\x52\x28\x97\x42\x77\xe0\x8f\x5f\x5b\x64\x88\x2f\x4f\xf7\x64\x08\x78\x9e\x4b\xb4\xf1\x57\xc9\x26\x21\x41\x73\xe4\xfa\x56\xdd\x72\x93\x9f\x5d\x11\xd8\xb9\xfb\x61\x76\x2b\x29\x0d\x87\x1f\xa7\xc4\xbc\x24\x3e\xd3\xb5\x6b\x1a\x7b\xfb\x23\x47\x49\xf1\xf4\x81\xfc\x7b\x58\xfe\xc8\xb0\x7c\xa7\xbd\x55\xed\xa0\xf0\xb7\xf1\xf4\xd4\x54\x7a\x53\x61\xbc\x2f\x22\xd8\x17\x11\xec\x8b\x08\xf6\x45\x04\x09\x77\x73\x5f\x44\xf0\xc1\xf1\x60\x8a\x08\xbc\x1c\xcc\x62\x15\xd8\x9a\x9b\x9a\x0e\xea\x3a\x13\x01\xc6\x33\xa7\x92\xb1\x3d\x1c\x8c\x6d\xc7\xd9\xc2\x28\x21\x81\x60\xae\xd7\x22\xb9\x9f\x93\x23\x4b\x44\x43\xda\xc2\x38\x92\x0b\xde\x9b\x7e\xc6\x49\x95\x1f\x0f\x02\xff\x7b\xcf\x18\x5e\x58\x3f\x72\xc2\x1a\xc7\x7b\x08\x71\x93\x30\x25\xd7\xa2\x10\x99\xc3\x82\x17\x51\xe4\xe9\x69\x29\x68\x9d\xff\x84\x41\x0b\x0c\xae\x94\xc6\xc8\xd1\xa6\xc1\xcc\x0a\x3e\x13\x85\x3d\x09\x6f\x69\x2a\x87\x7f\xb1\x15\x27\x35\x12\x6f\x87\xb7\xcf\x4d\x60\x3a\x02\xca\x2c\xe9\x88\xb3\x11\x8e\x39\x83\xa3\x0e\x3b\x79\x45\x3f\xef\x6c\xa4\x33\xcf\x7a\xe9\xba\x34\x39\x9b\x49\x1a\x94\x99\x28\xb2\x79\x5c\xb6\xd9\x52\x94\x3c\xf9\xe4\xfb\xf1\x3c\x2e\xbe\xb7\xa3\xb7\x46\x3a\x97\x08\x55\x66\xa1\x82\x48\x98\xd2\x32\x3d\x6f\x58\xe2\xd2\x70\xc0\x0c\x03\xc8\x83\xd5\x63\xf2\x13\x69\x23\x66\x0c\x20\x3f\x8b\x3a\xf2\x2a\x11\x21\xc9\x36\x8f\xca\x15\x82\x1b\xd3\x57\x0b\xac\xaa\xd7\x91\x10\xc5\x16\x69\x37\x1d\x47\x08\x31\xda\xaa\xb3\xb3\x2b\xea\x0b\x5c\x3b\x56\x78\x37\x1e\xc4\xb6\xfe\x7b\xd7\x67\xa4\x19\xbd\x72\x5f\x9f\xb1\xaf\xcf\xd8\xd7\x67\xec\xeb\x33\x12\xc6\xbe\x3e\x63\xd8\x18\xb5\x3e\x63\xa4\x10\x2d\x3a\x93\x61\x23\xc7\xaa\xf7\x50\x1d\xec\x3d\x39\x37\x13\x07\x92\x68\x86\x44\x7e\xc8\xc0\x2b\x9d\x7c\x75\x9b\x72\x0f\x6d\x12\x8b\xc6\xc3\x34\x97\x82\x1d\x1e\x4e\xa7\x87\x87\xb1\x80\x84\x5e\xdc\xde\x4c\xb2\x76\xf3\xc9\x1f\x98\x50\x99\xce\x51\x71\xa5\xea\x01\x63\x1d\x24\xad\xda\xca\x88\xb1\xf6\xbc\x0c\xfb\x32\x56\x45\x0a\xae\x65\xfa\xf5\x4f\xf4\x32\x63\x8f\xfb\xe7\xa3\x27\x59\x9a\xf4\x48\xd2\x32\x35\x3d\xf8\xc3\x86\x66\x11\x92\x9f\xa6\x18\x20\xc7\x12\x65\x5b\x56\xc8\x92\xfe\x3c\x87\xc3\x9b\x0b\xef\xc6\x08\xeb\x2c\x3b\x42\x81\xd3\xac\xaa\x13\xb3\x37\x28\xa7\x14\xa5\x36\xeb\x93\xe6\x07\xbc\xe0\xd1\x66\x1b\xa4\x1f\x33\x4e\xa6\x5c\xc5\x91\xd5\xc6\x08\xe5\x8a\xf5\x2f\x31\x33\x14\x0f\xcb\x03\x48\x0c\x35\x77\x80\xde\xf9\xae\x1d\x1b\xfc\xef\x51\x74\x72\x28\x0d\xa8\xbf\x66\xed\x13\x9e\x2b\xdb\x11\x98\xf7\x4f\x1a\xb0\x69\xb2\x44\x1f\x23\x08\xb5\x62\x2b\x6e\x6c\xca\x49\x65\x63\xe6\x72\x72\xb9\x92\x56\x27\x2a\xb8\xf7\x01\xe4\x46\xc9\xe5\xe8\xda\x55\xb5\x0b\x7e\xe3\x58\x89\x44\x71\x57\x69\x2b\xf2\x56\x2b\xa7\x69\x4e\xd6\xe2\x4f\xe0\x79\xfb\xe0\x31\xb5\xff\x79\x1c\x15\x77\x4e\x18\xf5\x84\xfd\xd7\xd1\xbb\xdf\xfe\x38\x39\xfe\xea\xe8\xe8\xfb\x47\x93\x3f\xfe\xf0\xdb\xa3\x77\x53\xf8\x97\xdf\x1c\x7f\x75\xfc\x63\xfc\xc3\x6f\x8f\x8f\x8f\x8e\xbe\xff\xe6\xe5\xd7\x6f\xae\xce\x7f\x90\xc7\x3f\x7e\xaf\xea\xf2\x06\xff\xf4\xe3\xd1\xf7\xe2\xfc\x87\x9f\x29\xe4\xf8\xf8\xab\x5f\x27\x4e\x9c\xab\xf5\xab\x24\xc3\xce\x40\x03\x8e\x15\x6e\x74\xa5\x8d\x70\x5d\x18\xbb\x9b\xb4\x98\xdd\x89\x54\x6e\xa2\xcd\x04\x05\x3f\x61\xce\x24\xe6\x7d\xe2\x71\x1c\x57\xcf\x8e\x13\xde\x74\xe7\xd7\xa6\x56\xef\x51\x91\x01\x72\xff\x99\x4c\x6e\x43\x72\x1e\xe4\xa4\xf2\xe3\x3a\x51\x56\xda\x70\xb3\x66\x79\x40\xa8\xac\x47\x69\x64\xda\xe9\x64\x3a\x18\x43\x1e\xca\x37\x63\x1f\x99\x5f\xc1\x9a\xe5\xd2\x7c\xe2\xbe\x22\x89\xed\x49\x45\x2e\xeb\x72\x0c\x50\xdf\x77\x7e\x3b\xa0\x90\x4d\xcf\x63\x69\x2b\x15\xd8\x04\x93\x8a\xe0\xc9\x19\xcf\x6e\x30\x9f\xdc\xec\x3d\x1d\x34\x24\xba\xdd\xe7\x0e\x0e\x42\xbd\x58\x29\x38\xb9\x74\x24\x40\x10\xa1\xc2\x53\xe7\xc2\x1f\xa9\xf8\x13\xf8\x1d\xc9\x08\x44\x15\x0a\x69\x02\xef\xc1\x51\x10\x7f\x4c\x05\x39\x19\xf6\x12\x02\x85\x7b\x3c\xf1\x6c\x84\x86\x79\xf2\x5f\xe2\x85\x8f\xaa\xc6\x38\xbc\x6f\x34\xa4\xc4\x43\xb7\x64\xea\x43\x59\xa1\x33\x5e\x34\x65\xdd\x5d\x97\x19\xce\x2f\x51\x6a\xa3\x43\x63\xad\xae\x3f\xc5\xfe\xeb\x31\xa8\x24\x4a\x95\x96\xf1\xc2\x62\x2d\xa3\xcc\xf8\xac\x10\x98\x68\x87\x93\x91\x74\x6f\x71\x82\x25\xbf\x93\x65\x5d\xb2\xda\xfa\xb5\x20\x3f\x53\xe3\x7c\xa2\x46\x68\x96\xe2\xd6\x6b\x06\x2a\xd4\x0d\x2f\x6b\x29\x15\x4c\x70\x8c\x07\x1b\x2f\xef\x3a\x9e\xc7\xce\x53\x66\x42\x73\xfd\x98\xb5\xb6\x35\xe4\xc0\xc2\x3a\x24\xe5\x37\xf4\x1c\x2a\xda\x9a\xa8\xd3\x32\x20\x36\xac\x34\xb9\x14\x6f\x43\x9f\x2a\x59\x8c\xa1\x50\xc1\x90\x2c\xc3\xf1\xf6\x72\x6b\x15\xf8\x27\x46\xe2\x45\xd9\xad\xe6\x6a\x2b\xcc\x64\x51\xcb\x7c\x2c\x05\xf7\x99\xc5\x19\x09\xd1\xc5\x18\x31\xc5\x08\x91\xc4\xc8\xf1\x43\xc3\xed\x91\xe8\x05\x1f\x9c\x47\x41\xa9\x6e\x70\x78\x6d\xdc\x41\x18\xc2\x23\x27\x02\xc5\x92\x06\x83\x15\x0a\x98\x8f\xce\x8a\x6a\x99\xc2\x16\x82\x7a\x01\xe7\x1a\x1c\xec\x6c\x9d\x15\xc8\x1f\x2d\xa9\x9d\x4b\xba\x95\x38\x81\x8f\x06\xb8\x7e\x27\xfe\xff\x23\x12\x28\xb7\xef\x35\x6c\x26\xe6\x58\x03\x8c\xbf\x02\x8f\x03\xa4\xcc\x05\xbe\xab\x17\xc2\x01\x81\xb2\x50\x8d\x48\x28\x7d\x2e\xf5\x8a\xa6\xc6\xde\x29\xf6\xad\x0d\x05\x44\x72\xfe\x84\xf1\xe3\x5e\xfb\x16\xca\x79\x82\xdc\xb9\x12\x22\x47\xaa\xe7\xa2\xfd\x7a\x53\xd3\xd0\x8a\xb3\xe3\x78\x6c\xac\xb7\x36\x4a\x1b\x78\xc7\x47\x6d\x0a\x4f\xba\x04\xa1\x46\xf8\x03\x0a\x8d\xa7\x8d\x2e\x99\x55\xbc\xb2\x4b\xed\xe0\x3d\x8c\x57\x3c\x93\x8e\xe2\xaf\xbc\xf3\x47\xca\xf0\xec\xc6\x0b\x86\x22\x05\x58\x88\x13\x96\x1d\x13\x9f\xb1\x37\xae\x91\xb4\x1d\x47\xc0\x2d\x8d\xae\x17\x94\x87\x26\xde\xc8\xcd\x0a\x6e\x03\x7b\x78\x7e\x1c\x88\xd0\xa8\x51\x56\x98\x63\x48\xef\x5b\x96\xaf\x15\x2f\x65\x16\x8f\x13\x50\x7e\x58\xa9\x89\xb0\xe9\xf0\xb5\x38\xfd\x2b\x61\xac\xb4\x4e\x28\x87\x78\xf1\xa7\x05\x97\x94\x5e\x8d\x47\x56\x08\xd6\x68\x52\x94\x75\x8d\x19\x13\x44\x88\x90\x5c\xad\x77\x1b\x6c\x10\x5a\xc5\xd7\x29\x25\x32\x62\xbd\x67\x44\x18\x75\x8a\xfd\x30\x30\x46\xed\x40\x90\xb8\x73\x0d\x8f\xa7\x51\x29\x8c\xb5\xc4\xda\x00\xfd\x41\xc8\xe3\xae\x84\xca\x75\xa7\x6c\xf7\xec\xea\x82\xa2\x65\xfc\xe6\x44\x0d\x00\xba\xbb\xc2\xd9\xc2\xff\x50\x68\x45\xf3\x17\x80\xab\x01\x9d\xc4\x68\x5d\xbc\x7b\xab\x98\x54\xb9\x5c\xc9\xbc\x26\x3d\x2a\x78\x57\x38\x2e\xea\xd3\xeb\x0b\x9c\xa2\x5c\x2c\xdd\xe4\x56\x10\x61\x38\x18\x13\x36\xae\x44\xb3\x14\x72\x9e\x40\x37\xd2\xaa\x18\xef\x68\xbb\x00\x3d\x40\x28\x1f\xad\x50\xf5\x96\xaf\xd9\x84\xf9\x2b\x06\xb4\x37\xdd\x8a\x67\x3a\x1e\x3e\x4c\x33\x5e\xcf\xee\x45\xf3\xcb\x4c\x90\x78\x06\xe6\x29\xe3\x0a\x72\x2e\x80\x66\xf3\x37\x0b\xac\x4d\x0a\x15\x5b\xdc\x15\xaf\x5c\xab\xe6\x36\xb5\x7f\x4d\x59\x52\xd0\xd0\xdc\xdf\x7d\x59\x8a\xe9\xf0\x47\x8b\x7b\xcc\x0a\xee\x19\x1d\x1e\x00\xa3\x03\x68\xf1\x37\xa2\xac\x0a\xee\xc6\x28\xbb\x3e\xf8\xae\x03\x2e\xa4\x97\x58\x85\x02\x2b\xef\x97\x70\x95\x4f\x78\xe1\x4d\xc6\xd5\xdb\xa7\x74\x89\x8d\xb7\xd1\xdd\x4e\x88\x21\x2a\x4d\x4d\xf2\x48\x15\x32\x11\x60\x84\x77\xba\x0d\xf4\xc4\x99\x28\x67\x22\x07\xaf\x39\xac\x28\xbc\xa5\xde\xd2\x5f\xdb\x83\xc5\xbd\x7a\xfb\xf4\x84\xc9\xa9\x98\xc6\x3f\xa5\x34\x86\x99\x89\x26\x0c\x71\x7a\x81\xa4\xa2\x00\xfd\xa4\x83\x34\xc1\x3c\xc2\xc6\x74\x81\x73\xe9\xf3\xfc\xc7\x9f\xbc\x56\xf7\x32\xff\x3c\xf9\x53\x70\x98\xe0\x4f\xff\x20\xca\xbc\x85\x0e\xc7\xff\xe8\xcb\x4a\x6b\x5f\x04\x5f\x0c\x01\x88\xff\xe6\x7f\x5c\xe9\xdc\x6b\xb6\x29\x1e\x28\x4b\x9d\x28\x54\x74\x32\xa1\x9c\x59\x4f\xd9\x95\x06\x66\x10\x99\xa7\x10\x8d\xc0\x91\x34\xe2\xbf\x03\x1c\x17\x23\xcf\x06\x72\x95\x71\x27\x54\x02\xd1\x40\x6c\x03\xa5\xb4\xc3\xa9\x82\x16\xe6\xfe\x0c\x10\x25\x1e\x01\x74\x03\x3b\x85\x9e\x30\xa7\x35\xf8\x84\xc7\x44\xff\xc0\x8f\x33\xc5\xc4\x9d\xb4\xd0\x8e\x1a\xcf\x26\x1c\x7a\xee\x52\x18\x38\x63\xca\xc5\x7f\xb8\xbf\xe9\x4d\xa3\x78\xba\x8a\x82\x9d\xfa\x8d\xd2\xee\x37\x8d\x52\x8e\x26\x8d\x2e\xd4\x69\xc6\x57\x1a\x5a\xc4\x42\x60\xab\x58\xad\x00\x3b\x49\xde\xf2\x70\x87\x66\x6b\x56\x4a\xeb\xf8\x8d\x98\xb2\x6b\xc7\x4d\x42\x5b\xfc\x4e\x42\xc4\x2d\x85\x62\xb3\x42\x67\x37\x22\x67\xb5\x72\x92\xaa\x45\xbc\xcc\xe6\x4b\x61\xdb\xd3\xd2\x2d\x2c\x74\x17\xab\xb3\x25\xe3\xac\x32\x62\x12\x13\x45\x28\x9b\xfc\x9c\xb1\xe1\xae\xb7\xa7\x88\x8a\x92\x89\x2a\x78\xc9\xc1\x87\xa9\xab\x1c\xa6\x99\x80\x6b\xe5\x0a\x8d\xd9\x36\x8d\x23\xfd\x5c\x6a\x95\xb5\xe9\x25\xb8\x9e\x76\xca\x2e\x21\x3f\x44\x76\x07\x91\x46\x02\x1f\x89\x43\x1b\x34\x25\x32\x61\x2d\x37\x6b\xea\x6a\xce\x6a\xc7\xa4\x83\x2e\x5d\xb8\x45\xf3\xba\xc0\x34\x5e\xc9\x55\x9d\x30\x59\x23\x32\xad\xac\x33\x75\x06\x8a\x89\xb3\x99\xd1\x37\x42\xa5\x51\xd9\x42\x5a\xb0\xcf\xdf\xd8\xf8\xd8\x09\xfc\x12\x4a\xb3\x6c\xc9\xd5\x42\xd8\xc6\xc3\x29\x79\x0e\x3a\xe0\x9b\x26\xc1\x4e\x57\x50\xf1\xc4\xf2\xb9\xf3\x41\xac\x83\xa3\x3b\xa3\xbf\xbe\x35\x90\xfb\x77\x8a\x45\x3c\xce\x49\x83\xf3\xa6\xbb\x25\x4a\x16\x84\xb0\x8d\x8d\x01\x78\x4d\x83\xba\x4e\x20\xf3\x48\x7b\xb3\x4a\x86\xb6\x96\xc2\xf1\x9c\x3b\x3e\x12\x53\xe4\x4b\xbe\x6e\xda\x53\x60\x09\x7c\x02\x2a\xca\x87\xf7\x9d\x82\x7c\xb4\xea\x09\xbe\x2b\x0b\x6f\x08\xba\x92\xdd\x3e\x91\xe0\x75\x2c\x93\xca\xff\xe0\x4c\x7b\x45\x21\x9d\xd7\x93\xa1\xe4\x08\xa9\x23\x53\x16\xc0\x08\xc6\x8b\x42\xdf\x8a\x1c\x16\x23\x5c\xef\x04\x89\xe8\x6a\x8a\x9c\xe5\x35\xe4\xe8\x5b\x07\x96\x5e\x7c\x3b\x02\x5e\xdc\x5f\x80\x91\x4e\xe0\x9b\xb6\x3a\x39\x4b\xf1\xcc\x59\x48\x86\xc2\x09\xd9\x95\xb1\x4d\xa9\x56\xf6\x93\x14\xca\x49\x23\xba\x0d\x56\xf1\x60\x26\x88\xad\x15\x1a\x82\x8d\xc3\x4d\x4c\x32\xc6\xb1\x10\xce\xb6\x84\x6d\x18\x53\x79\x67\x30\xe4\x3a\x52\xd7\x01\x92\x6e\x78\x55\x18\x47\x90\x43\x82\xc4\x9d\x5b\x95\x58\x62\x01\xc8\x1b\x8c\x9f\x7c\xa4\x7a\xaf\x37\x65\xac\x72\x06\x9e\x79\xd7\xeb\xa5\xce\x53\xab\x22\xfa\xc8\xac\xb3\x56\x6c\x92\xd4\xa6\xda\xc2\x06\x62\x77\xeb\xed\x6b\xa2\x48\xfc\x66\xa8\x04\xb5\xe9\x0d\x6d\xe3\x08\x2e\xed\x92\xaf\x7a\xa0\xd4\x44\xa9\x43\x00\x7e\x6d\x0a\x7c\x12\xa1\x30\xf8\xa9\x13\xf8\xd4\xc9\xe3\x34\x68\x72\x2a\x9b\x55\x1c\x49\xac\x56\xfd\xc9\x24\xe3\xd7\xbd\xcb\x73\x3d\x02\xc0\x7c\x03\x97\xd8\xf8\xf6\xa9\x87\x1f\x79\xe2\x1a\xb6\x07\xec\x36\x94\x28\x54\x48\xef\x95\x3c\x61\xbf\xe9\xe6\x5c\x12\x65\x86\x0c\x6d\xf3\xc8\x9f\x5a\x34\xc6\xe0\xe9\x38\x88\x9b\x86\x03\x3e\xbd\xf9\x03\x9c\xfe\xfe\x8f\x25\xfe\xca\x84\xfd\x45\x38\x7e\x3c\xea\x6a\x78\x63\x7b\xb4\xfb\xf5\x37\x51\x72\x6f\x96\x2c\xab\xad\xd3\x94\x27\xe3\xee\x88\x15\x0c\xa7\x81\x93\x3f\xd1\x4b\xf0\x43\x96\x15\x76\xa2\xb3\x70\xc1\x22\x91\x6e\x3a\xed\x11\x82\x9c\x8e\xd9\x85\x62\xda\xe4\xd0\xb6\x21\x51\x62\x6d\xc5\x47\x39\xbc\xf0\xbe\x89\xbd\x57\x78\xe5\x4d\xb5\x91\xdc\xa5\x9a\x98\x80\xd2\x61\x0b\xee\x44\x62\x6b\xb0\x38\x84\xe2\xb3\x42\xe4\xec\xa8\xbf\x08\xcf\x1a\xbd\x98\x28\x5f\x1b\x76\xa6\xd6\x28\xbc\x15\x9a\x7a\x0d\x42\x33\x89\xe6\x09\x4a\x18\x96\x5c\xe0\xc8\x55\xdb\x85\xcb\x3b\x1d\x46\x17\x45\x72\xa1\x95\x57\xe0\x01\xae\xd3\xe7\x4b\x4a\x94\x0b\xd7\x0a\xef\xed\x49\x02\x92\xae\x37\xd5\xf8\x42\xa8\xc4\xed\x38\x1e\xd1\x8c\x7b\xbb\xd5\x62\x73\x1c\x11\x41\xd9\x1d\x91\xf6\xac\xc1\x68\xf9\x95\x48\xf5\xdc\x60\x1d\xa7\x4d\x8b\x92\xf1\xf7\x28\xbe\x41\x34\x85\xd9\xa9\xc5\x95\x1d\x10\x21\x24\x03\x52\x19\x2b\x7a\xa0\xca\x08\x62\x9f\x73\x59\xd4\x89\x45\xe9\x2d\x39\x8e\x11\x81\x46\x9f\xdc\x51\x2c\x0e\x7f\x53\x57\xd0\x3f\xe4\x02\xcf\xd6\xbc\xf6\x6a\x31\x75\x4d\x6f\x05\xab\x0a\x0e\xad\x85\xe2\x95\x25\xc2\xd3\xba\xa3\x7b\x0a\x10\xf4\x42\xcf\xf0\xc6\xe1\xbf\x79\x26\x96\x7c\x25\xb5\x19\x83\xf7\x92\xf5\x34\x69\xc9\xd7\x21\x91\x9c\x44\x1f\x30\x1a\x81\xc0\x38\x14\x02\xde\xd3\xbb\x91\x89\x4b\x3f\x49\x79\x8c\xc4\x31\x16\x0b\x01\x10\x54\x02\xcf\x52\x7a\x11\x6b\x2f\x7a\x39\xbb\xba\x00\xb1\xc9\x52\x59\x6c\xa1\xb8\xf0\xe2\x46\xa1\x20\x68\x48\xb4\xf1\x3e\xcd\x44\xba\xaf\xce\xba\x0d\x9f\x72\x30\x02\xe3\xae\xc0\x88\xd4\x65\x38\xfa\xf6\xef\x9b\xd4\x33\x8d\x23\x52\xf6\xc5\x56\x8d\xe9\x8a\xcf\x8f\xb3\xab\x0b\xdc\xfd\x29\x7b\xae\x0d\xe3\x2a\x35\x76\x65\x0d\x8f\x97\x5b\x4a\x93\x4f\x2a\x6e\x48\x38\xf2\xcd\x11\xdc\xf5\x71\x77\x3e\xb5\x65\x5a\x7f\x7a\x23\x55\xeb\x7b\x1d\x38\xb2\xc6\x18\xe9\x08\x06\x6d\x11\x8b\x91\x47\x60\x7c\x89\x03\xf4\x44\xe7\x96\x3f\xa4\xfd\x48\x6b\xcf\x16\x47\xbf\x2f\x64\xaa\x8d\xc2\xd1\x69\x80\xfb\x6f\xb2\x1f\x0d\xf7\xc9\x98\xc9\xc0\xd7\x51\x68\x72\x9e\xa6\x21\xdd\xef\x14\xc2\x8e\x94\xfc\xf9\xa5\xe7\xc1\x9b\xef\x7c\x20\x1e\xed\x78\x5e\x20\xd6\x16\x8f\xac\x41\x0e\x5f\xa4\x33\xb2\x75\xc5\xce\xc2\x01\x0b\xe5\xe5\x23\xc8\x6d\x8a\xfe\xa1\x6d\x6b\x9d\x9c\x5a\x63\xbd\xcb\x10\x1e\xdb\xd3\x0d\xf7\x56\x11\xf3\x87\xce\x70\x0f\x2c\x7f\x5a\x72\xc5\x17\x62\x12\x3e\x71\xd2\x4c\x70\xd2\x54\x83\x9f\xa6\xd2\xcd\x8c\x78\xa8\xd9\xc8\x6d\xea\xba\xe3\x33\xab\xca\xde\x58\x94\x31\x18\xa0\xd8\xe8\x2c\x50\x6c\x6c\x26\x28\xf6\xb1\xd9\xa0\x58\xc3\x9a\x38\xb6\xc2\x7b\x1d\xe4\x8e\xaf\xf2\x46\xb1\xd3\xec\xa3\xab\xbc\xf1\x82\x15\x48\xcf\xc7\xf5\x84\xe6\xd4\xa5\x74\x74\x24\x73\x77\x20\x6c\xbd\x51\x7e\x63\x44\xd3\xd2\xf5\x78\xea\x46\x33\x7c\x80\xde\x47\xf4\xb9\xb8\xab\x0a\x99\x49\x47\x46\xa1\x76\x47\x9b\x4a\xc0\x40\xf8\x56\xda\x31\x0e\x82\xd3\x50\x86\x19\x1f\xee\xc0\xfc\x4c\x02\x7f\xc7\x08\xe2\x81\xae\x65\x44\x77\x90\xfd\x4c\x97\x70\x6f\x4e\x77\x8f\xbd\x39\x65\xff\xf6\xe6\x14\xe9\x0a\x53\x99\x4e\xfb\xb9\x63\x04\xfb\xb2\x7f\xd6\x82\x4c\x47\x15\x87\x5e\x89\x4e\x09\xba\xf6\x5a\xdf\xca\x3c\x79\x97\xbc\x09\x99\x49\x95\x27\x34\xb1\xc4\xf1\x00\x63\xc1\x92\xbb\x6c\x79\x7e\x57\x19\x81\x2d\x5d\x46\x76\x92\x36\xc5\x8f\x93\x63\x6a\x3a\x36\xe2\xd9\x19\xc3\x44\x86\x83\x1d\x7d\x1a\x40\xa2\x8c\xe1\xd7\xbc\x59\x8a\x9e\xcc\x31\x74\x99\x11\xec\xec\xf2\xd9\x78\x49\xe2\x74\x7c\x1e\x1b\x0b\xa3\xc7\xde\xa3\x1e\x46\x10\xbb\x7b\x93\x47\x11\x0c\x47\x32\x4a\x1f\x45\x22\xf8\x81\x11\xc7\x3a\x8a\xc4\xd8\xbd\x87\xb3\x1b\x41\x2e\x9a\xea\x0f\x2c\xb2\x60\x5e\x15\xf1\x51\x3f\x1c\xab\xfb\x52\x8a\x78\xfb\xe3\x46\x40\x91\x54\x52\x37\xfe\x8d\x69\x8e\xe9\xb1\x8d\xf5\x5a\x8d\x63\xe2\x3f\x77\x14\x39\x23\x6e\xec\x78\x06\x0b\xc7\x8d\x20\x52\x56\x6c\x8f\x9e\xba\x19\x67\xe9\x70\x84\xc7\x90\xf1\xf4\x17\x0b\x47\x39\xf2\x26\x8e\x26\xb4\x51\x8c\xc0\x11\x3a\x02\xe5\x7c\x1c\x4e\x8f\x71\xd9\xd8\xb8\xcf\x67\x38\xe2\xe1\xfe\x28\xc7\x68\x54\x95\xc8\x7a\x2f\x39\xa3\x89\x04\x43\x70\x68\x43\xc3\x1d\xad\xec\x52\x8e\xf1\x88\x8d\xc3\x69\xb0\x88\x09\x14\xbb\xdb\x23\x68\x6f\xf6\x96\x17\x72\x8c\x04\x03\x8e\xb8\x55\x23\x2e\xac\x11\xec\x42\x9d\xb0\x4b\xed\x2e\xd4\x38\x96\xd6\x8f\x73\xa8\xa5\x1e\x01\x0a\xd6\x8e\x67\x5a\xd8\x4b\xed\x40\xf2\x83\xbd\xa8\xb8\xed\x1f\xe5\x9a\xa2\xe8\x31\x15\x3e\x57\x23\x79\xd3\x71\x00\xc5\xfa\x68\x6b\xc9\x3a\xd7\xe8\x62\xbc\x9b\x09\xac\x38\x63\xab\x3c\x69\x11\xb3\x3f\xf6\x3d\x82\x57\xeb\x71\x37\x1e\xc9\x5d\xca\xd4\xf6\x6a\xdd\x31\x13\x4c\x69\x35\x01\x5e\xe2\xb1\xae\x66\x03\x82\xff\x18\x7b\x85\xea\x69\xbc\x73\x6f\x7a\xda\xe9\xdf\x70\xfb\x47\xde\x7a\x28\x30\x1b\x57\x37\x01\x5e\xad\x2a\xf8\x18\x70\x9c\x38\x42\x71\x39\xf7\x5a\x8f\x3b\xb1\x90\x34\x76\x83\x5d\xa3\x14\x66\x21\x58\xc5\x5d\xb6\x1c\xd7\xd8\x8d\xb9\xaa\xa3\x65\x51\x70\x8c\x68\x8d\x21\x95\xf7\x02\x88\x19\x3e\x46\x92\xf0\x45\x2a\xe5\x43\x1c\x90\x8c\x29\x79\xe5\x4d\xe7\xff\xba\x11\xeb\x13\xb8\xed\xff\x7b\x94\x17\x10\x69\xec\x94\x9d\x31\x2b\xd5\x22\xb1\x87\x28\x8e\xce\xfc\x02\x8c\x76\x04\xa1\x9d\xe5\xf4\xeb\x30\xce\x92\x8a\x7f\xd6\x72\xc5\x0b\x01\xa4\x46\xa3\x3c\xc8\x30\x81\xef\x86\xd0\xf4\x60\x23\x4d\x3c\x86\xba\xbf\x5d\x6a\x2b\x20\x5e\x1e\xa3\xac\x96\xe1\x32\x1c\xdc\x88\xf5\xc1\xc9\xd8\x46\xd4\x0b\xbe\x50\x07\x27\xb1\x8c\x66\xac\xd7\xd3\xa0\xf0\xc7\x4c\x24\x02\xe1\xd0\x01\x48\x3f\x48\x6f\xff\x8a\xa3\x9b\x1f\x4f\x6e\x69\x89\x63\xd4\xfc\xf8\x03\x7f\x98\x1d\x49\xc7\x07\x28\xe4\xd3\x82\x5b\x9b\xde\xa6\xb2\x0f\x95\xb9\x44\x40\x70\xe2\xc7\x42\xf3\x95\xce\x2c\x9b\xb4\x69\xa2\xdc\x40\xcd\x96\x01\x35\xcb\x83\xc1\x9f\x02\x0b\xfc\x38\x04\x0c\xc9\x67\x03\xe7\xf4\x52\xe7\x63\x9e\x8a\x56\x68\xe2\x42\xc7\x1e\x11\xb7\x9d\xc6\x64\x89\x22\x9b\x6e\x0b\x6d\x73\xa7\x59\xaa\x8b\xd7\x39\x63\x6f\xa1\x15\x51\xf2\x2c\x9f\xcb\x42\xd8\xb5\x75\xa2\xf4\x33\x95\x65\x55\xa4\x97\xa0\x02\x05\x9e\xd2\x8e\x49\x95\x15\x75\x0e\x84\x40\x89\x22\xe1\xa3\x01\x85\x34\xc6\xf3\xf9\x48\x87\x79\x64\x15\xf7\xb6\x11\x9a\xb8\x58\xe1\xd5\x20\xe0\x0d\xda\x8a\x87\xd4\xc3\xa7\x77\xd2\x51\xa5\x6a\xce\xd0\x56\x03\x58\x9d\xb2\x54\x6a\xab\xa4\x1d\x9e\x13\x58\xc0\x7a\x3b\xf8\xfc\x69\xb7\x5e\x82\xb3\xe7\x72\x46\x72\x45\x9e\x2e\xb9\x52\xa2\xe8\xb4\xf9\x0c\x98\x3e\xee\x1c\xcf\x96\xa4\x0b\x0a\xe9\x74\x6f\x47\x0a\xe1\x0e\x2d\x5b\x6a\xeb\x58\xc9\xb3\xa5\x54\x82\x98\x10\x06\x3e\xd6\xd8\xc0\xb7\x25\xfd\x1c\xbe\x7d\xf7\x48\x5e\x3f\xb7\x6f\xfc\x8f\x93\x4e\x5c\xdf\x3f\xe9\x28\x52\xff\x3d\xc4\x33\xec\x34\x03\xbc\xed\xb4\xed\xe8\xc8\xe6\x8d\x64\xaa\x50\x6f\xcf\x1a\x12\x80\xe8\xab\xc0\x09\xc0\x08\x84\xae\x0c\x71\x5e\x53\x76\x7e\x37\x65\x07\xe2\xce\xfd\xee\xe0\x84\x1d\xdc\xcd\xad\xff\x87\x72\x73\x7b\x40\xe6\xd3\x2d\x23\x7a\xd5\x3b\x52\xc2\x18\x3c\x63\x33\x11\x7e\x86\x28\x56\xce\x59\xad\x1a\x30\xeb\x94\xbd\x79\xf5\xec\xd5\x13\xb6\xd4\xb7\x2c\xa7\x86\xa4\xb7\x82\x55\x06\x98\x01\x98\x30\x46\x63\xa7\x3c\xe0\x07\x48\xdd\x37\x60\xbb\xcb\x74\x59\x19\x5d\x4a\x8b\x4a\x52\xc4\x4b\x7b\x2f\x7d\x34\x8b\x5a\x8d\x71\x57\x5e\x85\x56\xee\xa0\x31\x1d\x37\x0b\x41\x0d\x8d\x8a\x5a\x31\x55\x97\x33\x91\xd4\x57\x34\x05\x89\x89\x5d\x4a\x40\xc6\x97\x5f\x10\x24\x8c\xd8\x3e\xa3\xb3\xae\xb1\x53\x05\x5d\x0d\xed\xe8\x6f\xc1\x5e\x87\xb9\x12\xa5\x02\xd1\x3e\x10\x73\xcc\xb5\x09\x14\xcf\x89\x22\xad\x70\xc8\x7c\xaa\x82\xfb\xf4\xd2\x6b\x4f\x4b\xa4\x90\x48\xed\xc5\x81\x47\xf9\xbb\xef\x2e\x89\x41\xf9\xc7\xba\x25\xb7\xda\x14\xf9\xad\xcc\xb1\xac\xd6\xb2\x23\x3f\xc5\xe3\x94\x35\xa2\xe7\xab\x93\xb2\xd3\x89\xea\xeb\xf6\x56\xe6\xe3\x6f\x4d\x52\xfd\x2a\x6c\x0d\x83\xbd\x91\xb9\x50\xce\xdb\x25\x63\xd9\x11\x4c\x95\x4a\x58\x75\x2e\xb1\x83\x87\x97\x01\xad\xef\x74\x39\x93\x2a\x85\x0a\x4d\xcf\x3b\x87\x1b\x72\x8c\x5e\xf3\xa6\x91\x81\x59\xe1\x4e\x80\x43\x1d\xf8\xd8\xb5\x5b\x32\x2b\xcb\xba\x70\x5c\x09\x5d\xdb\x62\x9d\x74\x89\x3f\xbf\x03\x3a\x2f\xc4\x1d\xea\xb0\xd4\x28\xa4\x11\x94\xda\x42\x74\x21\x94\x30\x6d\xa7\xbf\xcd\x70\x84\x20\xb3\x65\xfc\xc9\x4f\x63\x30\xd3\xb6\x9f\x10\x77\x24\x26\x72\x64\xfc\xaa\x8a\x7a\x21\x09\x44\xd2\x49\xd1\x07\x1d\x75\x39\x09\x1d\xcf\x3e\x71\xc0\x83\x3f\x3a\x82\x0e\x7c\xd6\xb4\x95\x8b\x74\x0d\x09\xaa\x65\xd9\x74\xc2\x0c\x1d\xf2\x13\xdb\xa0\xa7\xb4\xf9\x4a\xb4\x31\xa3\x45\x94\x1b\x01\x25\xfd\xcd\x6c\x1f\x50\xb2\x8d\xf6\xe3\xed\x02\xb0\x5c\x54\x42\x91\x69\xf2\xb5\xea\x6a\x5b\xdc\xbc\x7b\x39\x75\x1a\x0e\xcd\xc8\xbe\xcd\xf9\x9d\x33\x54\x96\xc3\x4c\x97\xa5\x77\x13\xc2\xc4\x7c\xe0\xcd\x55\x9a\x49\x4f\x78\x43\x1b\xf3\xdd\x2c\x71\xa7\xf6\xf1\xde\x2f\x27\xde\xb3\x22\x33\xc2\xbd\x16\xc4\xb2\xd0\xf7\x6d\xe6\x75\x14\x4b\x4d\x72\xd9\xed\x6e\x4c\x38\xd5\xb4\x77\xe8\x80\x01\xf0\xeb\x6f\x85\xb2\xd2\xc9\x55\xaf\x4f\x2b\xfd\xf0\x55\xdc\xda\x26\x85\x0c\x7e\x5c\x50\xa6\xe4\x4a\x1b\xc0\xaa\x85\xce\x4c\x00\x83\xf3\x1a\x48\xe9\xb0\x0e\x54\x75\x8f\x5c\xd5\xdd\x6e\xdd\x91\xbf\x95\x7c\x9e\x3b\xdb\xd2\x76\x1d\x48\x60\x00\x85\x66\xc7\x5a\xc5\x1d\x3f\x61\xbc\x28\xc2\xbf\x53\xb5\x03\x37\x02\x76\xa8\x93\xe6\xef\xef\xd1\x3d\x69\xf5\xf4\x8a\xa0\x34\x1a\xb4\x9d\x00\x85\x44\xf0\x4d\xb8\xb8\x6e\x3a\x94\xc2\x47\xaf\x84\x59\x49\x71\x7b\x7a\xab\xcd\x8d\x54\x8b\xc9\xad\x74\xcb\x09\xae\xae\x3d\x85\xbc\xcf\xe9\xaf\xe0\x1f\x09\xb3\xc3\x74\xf9\x59\x9e\x07\x3a\xc4\xd0\xf3\x0c\xfb\xa7\xa4\xbc\xdb\xf1\x4a\xbe\x15\xc6\x07\x86\x27\xc0\x15\x78\xc2\x6a\x99\x7f\x45\x07\x2e\x24\xc5\xe1\x3a\xbb\xa1\x84\x48\x1b\x41\x38\x48\xe9\xbd\x07\x12\xbe\x26\x8a\x09\x11\x78\x13\x32\xf7\x5f\xf3\x08\x82\xbb\xef\x7f\x53\xd4\x96\xc1\x15\x0e\xd4\xd9\x09\x93\x0d\x3c\xe6\xcc\xfa\x13\x19\x09\x53\x99\xa9\x95\xa2\xb8\x4c\xf7\xf8\x3a\x98\x73\xc7\xad\x70\xf4\x77\xfe\x2d\x82\xc4\x26\xda\x45\xc9\x54\xab\xe1\xb4\x01\x4a\xeb\xa6\x81\x1a\x9b\xfc\x39\x50\x26\x92\xad\x70\x3b\x2b\x88\xbe\xe3\x66\x22\xb1\x1e\x51\x28\xf4\x3b\x43\x02\x05\x9c\x6f\xee\xaf\x43\x46\xee\x30\x9a\xe8\x7b\xff\x1f\xf6\xde\xb5\xb9\x91\xdc\x48\x17\xfe\xbe\xbf\x02\x21\xbf\x11\xea\x1e\x8b\xec\x9e\xf5\x78\xc6\x6f\xc7\xc6\x3a\x34\x92\x66\x56\x67\xfa\xa2\x95\xd4\xed\x38\x61\xfb\xec\x42\x55\x20\x89\xa3\x2a\xa0\x06\x40\x51\xcd\x5d\xef\x7f\x3f\x81\x04\x50\x37\x16\x8b\x45\x00\x12\x25\x9b\xf8\xd2\x33\x92\x98\xc4\x35\xaf\x4f\x66\xda\xf5\x7d\xfe\x7c\x79\x1e\xe1\x3c\x35\x99\xce\x79\x06\x69\x2b\x54\xa2\x92\xd1\x5f\xcb\xa6\x27\xd8\x1f\xe0\x83\xab\x13\x0c\xb9\x6b\x01\x1b\x3e\x4f\x48\x0d\x15\x39\xa7\xf2\x3e\x90\xa3\x1e\xff\x7c\x76\xd1\x26\x18\xea\xde\xfc\xf9\xec\x02\x59\x3a\x8f\x84\xb3\x78\x5c\xa0\x45\x18\xce\x70\x17\x6c\xa1\x03\x14\xce\x13\x52\xc3\x0c\x53\x2a\xef\x77\x97\xd0\x7b\x73\xb7\x16\xa9\x17\xb4\xea\xef\x0b\x5f\x62\xd9\x95\x55\x27\xe0\xba\xaf\x78\x89\x1e\xb0\x77\x19\x8b\x1a\xb1\x72\x4b\x8b\x77\xe8\x82\xc9\x52\x90\xd0\xfc\xf2\x59\xc7\xf7\xa9\x2d\x2e\xe7\x6e\xf4\x15\x45\x7d\x4e\x4a\xe7\x6e\xf4\x8d\xb3\x99\x56\xe4\xf2\xdd\x8b\xc4\xbe\xec\x68\x60\x6c\xe5\x05\xbe\xb2\xaf\x01\xc1\x59\x07\xd3\xf8\xae\xb5\x0b\xc1\x59\x07\xd3\x04\xe8\x49\xfb\x84\xe0\x14\x58\x28\xf0\x65\xc6\x60\x2a\xb7\x5a\x92\x38\x82\xfe\x28\xdd\x4d\x2c\x25\x38\x66\x71\x39\x73\x65\x1c\x4f\x6c\x27\x46\x70\x73\xfa\xfb\xc5\x1c\xb7\xd2\xec\xc0\xce\x58\xab\xcd\xe1\x0c\xe0\x27\x5e\x19\x69\x6f\x52\xb2\x7c\x23\x53\xfc\xad\x6f\x0a\x92\xde\x3e\xdb\x74\xcf\xc8\xfa\xea\x84\xbc\x9b\xd8\x1c\x7d\x7b\x34\x45\x37\x34\xa7\x19\x16\xd9\xea\xa4\x79\x62\x15\x75\x5f\x5e\xcd\x45\xb5\x64\x48\x43\x7a\x7b\x84\x5e\x71\xa1\x57\xe1\xeb\x67\xc4\x0c\x65\x04\x2f\x89\x6b\xb7\xa5\x05\xf0\xca\xb8\xf1\x5e\xfb\x1e\x55\x6c\x6e\xf7\x52\xf1\x66\x46\x0d\x8a\xc1\x3c\x3e\x1b\x63\x85\x05\xfb\xbd\xae\xce\x6b\x0d\x9c\x32\xad\x96\x4f\xd1\x67\xa3\xeb\xfa\xbe\x74\x63\x40\x99\xe7\xa3\x4f\xab\xa2\xfb\xc1\xdf\xb3\xfa\x4c\x2e\xcf\xb3\x88\x3c\xb9\x30\x4e\x1d\xe3\xf1\xe7\x1e\x9d\xc8\x50\x23\xc6\xe3\x49\xb3\x15\x19\xaa\x42\x63\x55\x90\xeb\xef\x81\x83\xf8\xc5\xac\xe6\x54\x5d\x93\xc2\xc3\x5a\xec\x18\xe2\x86\x4c\xa8\x6f\x73\x4e\x15\xb4\x67\x93\x54\x71\xb1\x42\x58\x21\x6c\x84\x51\x52\x66\x58\x20\x41\x0c\x52\xc8\xe7\xb8\xce\x2f\xae\xae\x2f\xce\x4e\x6f\x2f\xce\xdf\x21\x37\x5b\xda\xf4\x3e\xf9\x10\xbd\xe5\x35\x7c\xa9\x59\x0f\x1a\x3d\x50\xb5\x08\xda\x81\x13\xab\x94\x60\x86\x2e\xb4\x90\x3b\xa7\x02\x7a\xa8\xfb\x78\x35\x18\xba\x64\x54\x9d\x55\x93\x33\x65\x00\x33\xce\xbc\x8b\xe1\xe9\x19\x5a\x8c\xd6\x9c\xaa\x13\xe3\x8e\x30\x13\xd6\xef\xd6\xcd\xd8\x83\x72\xdd\x27\x9e\xa7\xc7\xc7\xb2\xde\x52\x8f\x88\xd2\xde\xfc\x0a\xf5\x15\x7e\x6a\xef\x34\x15\x50\x72\x2d\x06\x43\xbf\x05\x70\x67\x4d\x32\x20\x9e\x66\x91\x46\x8c\x57\xf1\x4c\xc4\x05\x92\x0a\x0b\x6f\xf8\xb2\x7e\x5f\xc7\xd3\xe9\xf1\x14\xca\xcf\x1c\x4f\x8f\x9d\x43\x20\x0b\x68\x6e\xd6\x50\x81\xab\x65\xbb\xb6\x91\x01\x24\xdb\x5c\x6d\x8a\xd0\x27\x57\x2f\xdd\x77\xa2\x74\xd6\x2c\xbf\xde\xe9\xc1\x19\x16\xca\xef\x99\x71\x98\x15\x28\xcb\xbb\xe6\x66\xaa\x85\xfd\x86\x25\xf1\xa5\xea\x6f\x9e\x05\xab\x4b\x6e\x4b\x22\xbc\xaf\xeb\x7a\x7f\x3f\x5f\xbf\xdf\xcf\x72\x8c\xe4\x8a\xb0\x98\x33\x9e\xe7\x54\xa1\x05\x96\x0b\x0b\xd4\xf4\x86\x3f\x54\x0d\x05\x43\xa4\x7d\x58\x98\x22\x2b\xa5\x22\x62\xe6\xc1\x82\x3b\x5a\x91\x23\x14\x1c\x96\xa8\x08\xd9\xd6\x1b\xac\xf6\x5c\x7a\xb6\x49\x97\x0b\x2c\x88\xd4\xfa\x95\x11\xb4\x19\x9d\x11\x45\xf3\xd0\xde\x08\x4e\x0d\x26\xd6\x0d\xe2\x5a\xe5\x5b\x95\xf7\x4d\xb5\xb7\x6f\xae\x2f\x4e\xcf\x3f\x5c\x4c\xf3\xf4\x05\x09\x76\xc2\xd2\x82\x53\x9f\x53\x9c\xa0\x02\xab\xc5\x13\xab\x03\xd5\x74\x63\xd8\x77\x17\x8e\x18\x04\xad\xbd\x71\xd8\xfa\xde\xba\x79\x19\x47\x01\xa8\xa3\x29\x51\x98\x7a\x57\x6a\xaa\xdf\x87\xe2\x05\xcf\xf8\x7c\x15\xa1\xe2\x86\xc7\x55\xfe\x8d\xe9\x5c\x3d\xc1\x13\xfd\xaa\xf6\xe3\x0b\x56\x8b\x18\xa7\x7d\x85\xd5\xc2\x21\xf9\xab\xdd\xf5\xdc\xc8\xca\xab\xa8\x16\xbd\x21\x86\x17\xb5\xc1\xcf\xdc\x65\x52\xbf\x04\xe7\x7d\xf7\x75\x98\xdd\x11\x23\x6c\x48\x6a\xb4\x36\xbd\xf0\x09\x14\x6a\x2a\x88\xc8\xa9\x29\xa9\xe5\xeb\x38\x59\xf7\xc0\xbc\xec\xf7\xea\xe7\x7c\xd1\xf2\xfb\xca\xeb\xc1\xb6\xef\xd1\xbf\x59\x3a\xa1\x6a\x46\x21\xc8\x84\x7c\xa5\x12\x7c\x6d\x33\x9a\x11\x6d\xa6\x85\x18\x80\x4d\x3d\xc5\x01\x1e\x1c\xa0\xc2\xd0\xf5\x82\x7d\x77\x80\x0f\xb5\x8f\xc0\xa1\x66\x7c\x1c\x2f\x84\x11\x81\xb3\x6c\x85\x4a\x4d\x5a\x2b\xb1\x36\x4c\x88\xe7\x9e\x1b\xca\x85\xc5\x44\x16\x82\x2e\x69\x46\xe6\x7a\xca\x0b\xca\xe6\xd2\x57\x69\xc3\x82\xb8\x96\x90\x7a\xf1\x92\x90\xb5\xfd\xf5\x79\x91\x1f\xf4\xe7\xab\x5d\x94\xc6\xe4\xfd\xf8\xe9\x16\x31\x62\xa6\xec\xf5\xce\x03\x9d\xa3\x7a\x51\x5e\x3a\x13\x42\x93\xc9\x04\x62\xc8\xaf\xfe\x2f\x67\x44\xa6\xd9\x6b\xf4\x27\x62\xd7\xc2\x91\x20\x9a\xf7\x7b\xe1\x8b\x1f\x16\x1c\x22\x51\xa5\xb4\x7b\x5e\x1b\xb6\xc0\x2a\xbd\x5e\x1d\x4b\x1d\xdd\x37\x9a\x36\xe3\xca\x2a\xf9\xad\x6f\xf0\xab\x9f\x8f\x25\xaa\xb3\x37\x5e\x92\x07\x6d\x0f\xca\x72\x54\xcd\xc9\x61\x00\x03\x9d\x67\x0d\xfe\xe9\xb2\x0a\x60\x9e\xfe\xea\x37\x46\x72\x95\x67\x94\xdd\x9f\x20\xaa\x5c\x26\x8e\xe6\x28\x01\x26\xbb\x26\xe7\x78\xb1\x20\x38\x6b\x68\x7a\x4f\x1e\x57\x73\x5c\x63\x2f\xba\xa1\x8a\x04\xec\xba\x5d\x15\x26\xdf\xd5\x09\xf6\xa0\xa8\x57\x4b\xd9\x3a\x3a\x8a\xa7\x68\xbd\x88\x73\xa1\x32\x91\x34\x54\xc1\xba\xbc\x39\xbb\xb9\x6c\x05\xb7\x7c\x7c\x97\x86\xca\x01\x5e\xba\x49\x41\x87\xa3\x7a\x91\x7e\x21\xfa\xeb\xee\xf7\x61\x82\xb2\xd2\xe7\x53\xa6\xe8\xc6\x15\x17\x0a\xef\x6e\x2e\x86\x89\xc8\x64\x81\x8b\xd3\x52\x2d\xce\xa9\x4c\xf8\x92\x44\x71\x83\x3f\x2c\x08\xe8\xc8\x16\xcc\x89\xa8\x7e\x24\xbe\x56\xa5\x9b\x17\x3a\xfb\xb7\xd3\x2b\x84\x4b\x7d\x8f\x15\x4d\xfc\x53\x11\x43\xd3\x41\xdd\x8e\xdd\x98\x12\xd4\xcf\x6c\xbf\xec\xac\x9e\xcd\x6e\x1d\xa0\xd1\x5e\xe3\x00\x8d\x7e\xfe\xd0\x68\x90\x6d\x9e\x53\x39\xc0\xa1\x77\x1a\x94\x51\x45\xb1\xe2\x22\x12\xaa\xf1\xac\x94\x8a\xe7\x86\xd1\x02\x92\x86\x06\x14\xe8\xff\x08\x70\x88\xcb\x59\x7b\x96\xad\xfc\xf1\x10\x48\x04\x5c\xb3\x4b\xa6\x88\x98\xe1\x84\x74\xaa\x67\xf9\xa2\x0d\x18\x79\xb0\xab\xa7\x15\xe5\x7f\x09\xaa\x3e\x57\x80\xf6\xf2\xaf\xef\xfe\xa5\x01\xb8\xfe\xd7\x40\xa4\x85\x71\xe5\xa6\x2e\xfc\x8c\x12\xce\x18\x49\xd4\x3e\x02\xc8\x7a\xd0\x5f\x63\x48\x7b\x0b\xc2\x31\xbb\xff\xef\x25\xce\x42\x6e\xc8\xc7\x7d\xe1\x26\xda\xb7\x32\xc2\xb6\xb8\xb7\xe8\x6e\x63\x40\x85\x6c\x90\xbd\xa5\x24\xd0\x65\xcd\xd0\x55\x02\x33\xa9\xaf\x68\x8c\xe8\xc6\xb1\x4d\x50\x38\x46\xaf\x54\x52\x78\x62\xd5\x9f\x45\x8d\x56\xb3\x39\xf6\x46\xbe\xf7\xb0\x5d\xcc\x30\xb5\x59\x43\xf6\x61\xaf\x58\x79\xe0\x5c\x31\x02\xea\xad\xed\xf4\x34\xe7\xcc\x78\x4f\xa5\x82\xae\x29\x76\x76\xd0\x59\xc7\xd4\x7b\xf4\x52\xc3\xf5\xb8\xbc\x42\x5c\x20\x5a\xfc\x07\x4e\x53\xf1\xce\x58\x1a\xd6\xff\xc8\xbd\x51\x7b\x54\xda\x80\x08\x54\x24\x71\xa5\xb7\x5e\xa9\x55\x41\x13\x9c\x79\x57\x00\xba\x3d\xbb\x82\x59\x49\xf4\x87\xef\xdf\x82\x43\xfd\x77\xff\xfc\xfd\xdb\xa0\xa7\xf6\xf2\x6a\x45\xa2\xb8\xb1\xe9\x7f\x3c\x34\xff\x73\xaa\xfc\x04\x06\xb9\xa9\xf9\x04\xfa\x4c\x88\x91\x6f\x14\x35\x78\x16\x95\xce\x19\xcf\xd8\x3f\xd4\xea\x69\x8d\x43\xad\x9e\x7d\xd7\xea\x41\xd5\x95\x37\x32\xf5\x71\x24\x75\x48\xc9\xc9\xab\x75\x21\x6d\xc4\xad\xaf\x54\xdd\x20\xa4\xfd\x83\x84\x2f\x44\x48\x7b\xdd\x0f\x3f\x9e\xd1\xe6\x15\x46\xfe\x1c\x1f\xcb\x46\x76\x83\xc7\x3a\xa0\xf2\xea\xf9\xc7\x9b\xff\x78\x7f\xfa\xe3\xc5\x7b\xd8\x13\x5b\xed\x45\x3f\x7e\x2f\xe9\xd8\x13\xa8\x89\xcc\x7e\x7c\xa3\x32\x7e\x87\x15\x8e\xc1\xfe\xf8\xd3\x4d\x3b\x70\x87\x3e\xfe\x74\xe3\xb1\xb3\xfd\xc0\xeb\x0a\x46\xed\x65\x4a\xb4\x80\xd7\xa1\x1e\x46\x36\xf3\x3e\x9b\x97\x02\xf0\x98\x40\xfd\xb0\x27\x2f\x90\x1d\x15\x19\xe2\x02\xbe\xe4\x6b\x0c\x07\xbd\xbe\xdd\x66\x4f\x22\x02\x28\x1f\xfd\xd6\xa1\x67\x65\xea\x3c\x06\x0c\x57\x9f\x8b\x39\x61\x1b\x8b\xb0\x50\xda\x10\xdf\xee\x8b\x01\xe0\x3e\xe1\xfd\x09\x31\xd7\x44\x9c\xaa\xf7\xc7\x37\x40\xc9\x81\xe5\xb5\x68\x08\x29\x7d\x2f\xb4\x2e\xa8\xf5\x39\x22\xa5\x0b\x40\x36\x5e\xb9\x27\xd9\x7d\xc8\x16\x14\xf6\xca\x8b\x4e\x53\xc1\xb3\x0c\xd3\x3c\x54\x1b\xe8\x76\x2a\x04\xa2\xe6\x3f\x6f\x00\x90\xe3\xc5\x8a\x1a\xfd\xfd\x5a\x55\x96\xf1\x5a\x67\x44\xf8\x3e\xaf\x98\x96\xc9\xa5\xc4\x36\x58\x22\x0b\x9c\xc4\x4a\xd5\xf2\xec\x24\x5b\xff\xc8\xfc\x04\x1a\x35\xbe\x24\x15\x04\x26\xbc\x87\x02\x70\xd5\xf7\xc6\x60\x3e\x67\x8e\x98\xe5\x3f\x01\x9e\x14\xcd\x6d\xe2\xdd\x58\xb4\xe9\xd6\x22\x1c\x32\xd1\x82\xbb\xe6\x30\xd0\x1d\xd4\x76\xf5\x78\x5a\xac\xe9\x23\x3e\x06\xf4\xac\x34\xa3\x3f\x3d\x49\xa1\x7e\xa7\x8b\xf8\x2a\x5d\xfb\x71\xf9\x16\x0b\xae\x38\x8b\x5a\xce\xf4\xaa\x87\x64\xa8\x3c\x32\x34\xcf\x4c\xf9\xe5\x8c\x88\x86\x58\xf5\x20\x0d\x75\x93\xaa\x8a\xd3\x98\xa5\x55\x8a\x18\x67\x0e\x82\x1a\x5a\x7a\xfa\xe5\x08\x90\x22\xbd\x3c\x7f\x62\xd9\x71\x68\x25\xf4\x3c\x5b\x09\x3d\x0d\x08\x6d\x1f\xe2\x44\x5f\xf2\x08\xf7\xed\xf2\xdc\x7a\x3e\x5c\x1d\x6b\x5f\xdf\xb4\x61\x68\x28\x16\x47\x43\x96\xab\x3d\xb9\x75\xc3\x85\x7a\xe0\x22\x4e\x7b\xbf\xab\x16\xb1\xe0\x2c\x50\x4b\x6d\xad\xc3\x40\x83\xdf\x7b\x10\x6e\x48\x88\x17\xca\xef\xcd\x7e\xbc\x60\x9e\x7f\x03\x89\x45\x41\xd7\x03\xd9\x20\x43\x17\x73\xec\x80\xcd\xbe\xfe\x89\x1e\xf1\xd1\x11\x04\x61\x8e\xd2\xc8\x48\xe6\x8e\xf8\x98\x36\x04\x80\xbf\x19\xb2\x2e\x36\x9e\x83\x00\x88\x68\x4f\xac\x39\x1d\x3d\xf7\xaa\xbf\x25\x19\xb8\x6f\xbd\x1d\xac\xbd\x96\x8e\xb3\x59\xfc\xed\xdf\x96\xa5\xb3\x17\x47\xa7\xe3\x5a\x11\xce\xef\x8b\x25\x65\xc3\x94\xfe\x77\xbd\x52\x02\xb4\x85\xd2\x16\x37\x4f\x2e\x88\x05\xd7\x82\xc4\x47\x22\xb4\x15\x1c\x45\x72\x09\x60\x1d\x9c\x65\xfa\xe4\xb9\x87\x68\x43\x55\x62\xa0\x74\x0d\xba\x4e\x50\xc2\xd9\x8c\xce\x73\x5c\xc8\x13\xcf\x74\xbe\x94\x3f\xb0\x07\x2c\x52\x74\x7a\xb5\x3b\x8a\x68\x6f\xe2\xd6\x6e\xc4\x13\x4b\x5b\x0b\x78\xf8\xc0\xd3\x18\x22\x57\x93\x41\x77\x54\x49\x53\x55\xc2\xdb\xca\x92\x44\x35\xa3\x3e\x5a\x99\xaa\xf0\xee\x5a\x60\xfa\x0b\x47\xbb\xde\x86\x05\xc7\x10\x4f\xfc\xc1\xa8\x4b\x9c\x95\x04\xdd\x11\xf5\x40\x08\x43\x6f\xdf\xbe\x35\x60\x8f\xb7\x3f\xfc\xf0\x83\x7f\x48\x04\xa3\x94\x24\x34\xc7\x59\x97\xbc\x27\x49\x3d\xa3\xdf\x7f\xfb\xed\x14\xfd\xef\xd3\x0f\xef\x11\x4e\xc0\xbf\x67\x1a\x8e\x87\xac\x5d\x93\x6d\x4d\x54\x9e\xa0\xff\x75\xf3\xe9\xa3\x7b\x06\xbe\xc7\xd4\xa6\x09\x4c\x26\x77\x17\xcb\x3b\x00\x58\x17\x96\xb0\x70\x93\xaa\xba\x80\xef\xea\x05\x81\xea\x15\x78\x36\x03\x86\x6a\x54\x2f\x2a\x9d\x10\x0d\xeb\xdb\x48\xe7\x0b\xb8\x9e\x94\x01\x43\xcc\x68\xa2\x60\xde\x41\x10\x27\xd7\x8a\x16\x4c\x53\x33\xef\xc0\x3c\x3c\x38\x98\x13\x94\xd1\x7b\x82\x66\xf2\x67\xc1\xcb\xc2\x97\x6b\x23\xab\x6a\x0b\x22\xcb\x4c\x41\xe1\x91\x3b\x62\x27\xae\xbf\xc5\xf7\xcd\x6b\x6e\xe4\xdd\x98\x6a\xff\x08\x7c\x2b\x16\x22\x30\xe7\x8c\x6a\x9b\x60\x56\xd5\x27\x33\x9a\x80\xbe\x10\x01\x5b\xb3\x27\xe4\x78\xdb\x1f\x50\xad\xc4\xb7\xd0\x90\x19\xb6\x59\x6a\xa5\x22\x21\x9c\x71\x36\x0f\x79\x76\xee\xe1\xd5\xee\x3d\x97\x5c\xbb\x2a\xbc\xd9\x63\x30\x12\x39\x06\x16\x19\x59\x3d\xed\x03\x2e\xfc\x49\x74\x81\xa7\xc1\x8d\x74\xcd\xc0\x77\xbc\x54\x2e\x29\xce\xcc\x11\x5a\xc0\x05\x11\x55\xdc\x5d\x8c\x00\x32\x11\x8e\x0e\x45\x3a\x3e\x14\xfa\x04\xdd\x68\x9b\x05\x2d\x03\xde\x37\x03\xb3\x1e\x04\x27\x0b\x74\x4f\x56\x13\xa3\x08\x15\xd8\xab\xca\x7a\x7b\x58\xd1\x7f\x8e\x15\x36\x58\xf0\x60\x8a\x16\xb7\x52\x81\x21\xc2\x29\x9e\x55\x17\x37\x2c\x4b\xb4\x1e\x35\x57\x73\x35\xe7\x83\x49\x3a\x87\xa9\xb4\x7e\x2c\xf4\xb0\xe0\xde\x4e\x8e\x7a\xb0\x3a\xbc\xaf\x8f\x3e\x40\x9d\xa8\x47\xc2\x99\x22\x4c\x39\xb2\x70\x9b\x42\x32\x00\xcc\xb8\xec\xd6\x25\x0f\xa6\xa8\x65\x34\x49\xf5\xb2\xe5\x73\x3e\xf9\xba\x6a\xb5\x56\xa0\xbd\x0d\xf5\xf6\x28\x59\x77\xf5\xe1\x57\x89\x2b\x23\xd1\xc1\x01\x3c\x45\x97\xbe\xbd\x44\xeb\x81\xe1\x4e\x46\x48\x60\xaf\xc7\xc3\x82\x26\x50\x7d\x56\x4f\xd7\xce\x35\x16\x97\xab\x18\x49\x38\x2f\x6e\xd4\x06\x91\x44\x95\x45\x9c\x23\x82\xaa\x0e\xfa\xec\x89\x94\x88\x06\x64\x71\xd4\x23\xc7\xe2\x9e\xa4\xd6\xda\xc1\xd9\x14\x5d\xe9\x4b\x1a\x4e\xd6\x7a\x0c\x04\xc9\x30\x34\xfe\x8f\x71\xe9\xb5\xce\xd9\x6c\x14\x11\xe3\x75\x1e\x4f\xa7\xc7\xa6\x6e\x5e\x60\xdb\x89\x7a\xd4\x0d\x28\x02\x49\x85\x5a\x0d\xf5\x88\xa2\xbc\x74\xfd\x57\xb8\x08\xbf\x27\x50\x75\x10\x7c\xb3\xc0\x2a\xbc\x9d\x60\x6d\x8a\x70\x9e\xd6\x73\x11\xa6\xc9\x9a\x61\xa1\x64\xe1\x5c\x21\x8e\x4a\x6b\x86\xbf\xff\xb4\x3b\x26\x7a\xef\x23\x50\x09\x70\x10\xd5\x23\x96\xbe\x6e\xc6\x3d\xf1\x0c\x4e\x75\x47\xbb\xf4\x46\x04\xc6\x63\x86\xb9\xf4\x4e\xed\x08\xbf\x61\x28\x3c\xa8\xd7\x1d\xb9\xb7\xbb\xbb\x3b\xda\xf0\xd4\x4f\x56\xe4\xc4\xa1\x8d\x6a\xb7\x27\xf8\xd3\x23\x11\x85\x4a\xca\x2d\xff\x7a\x24\xc2\xe0\x7f\xa1\x12\x6c\x81\x38\xc7\x8e\x62\xb9\xe9\xbb\xa3\xe5\x57\x8f\x44\x33\x86\xf3\xbf\x3b\x9a\xc1\x80\xe7\xbc\xf4\x76\x88\x21\x12\xd5\x66\xa0\x22\xd6\x7e\xea\x3b\xd4\x0c\x5c\xc4\xdc\x54\x1b\xfe\x88\x44\xd2\x05\x51\x1e\x65\xa6\x55\x50\x25\x12\x55\x08\xcd\x68\x7b\x98\xf1\x70\x2d\xc0\x8c\xc8\x96\xb5\x19\xae\xdd\x59\x1d\xf5\x8c\x44\xd8\x1a\xeb\xc0\xa7\x63\xf1\xbe\x56\x24\x28\x12\xcd\x46\x3c\x29\xda\xca\xb5\xa1\xd1\x8c\x2f\xc5\x92\x53\x75\x94\x2a\x1a\x45\xd2\x88\x5a\x45\x22\xda\x8a\x7d\xc5\xe2\x7c\x2c\x6d\xc4\xc2\x22\x11\x6d\x46\xd4\xa2\xeb\x27\x92\x28\x8f\x82\xfb\x7d\x23\x3c\xe4\xd6\x1d\xa1\x21\xb8\xee\xf0\x4f\x90\xee\x8e\x47\xd2\xc0\x2b\x0f\x45\x14\xeb\xc5\x0c\xeb\xe3\xd6\xcf\x27\x9e\x1e\x9a\xe3\xc2\xb9\x79\xa3\x11\x9d\xa2\x0f\xc6\xa7\x12\x4b\xb4\x81\xf2\x89\xef\x24\xcf\x4a\x15\x6b\xed\xb6\x65\x40\xd4\x89\xc6\x74\x21\x99\x01\x3e\x07\x92\x91\x3c\x86\x43\xd2\x0c\xd3\xc4\x34\xee\xc2\xc1\xc5\x55\xf5\xda\x8c\x46\x14\x3c\x38\x31\x7c\x5e\x66\x44\x33\x61\xc3\xca\x40\x99\xd1\x5b\x0c\x2a\x8a\x87\xb8\x5d\x12\x2a\x82\x1b\xfb\x59\x95\x94\x32\xa3\xbf\xb0\x54\x30\x59\x5b\x98\xaa\x59\x5e\x2a\x98\x66\x8c\xf2\x54\x66\x44\xbb\xbf\x3c\x92\x93\xa4\x75\x87\x6f\xc0\x5a\x08\x97\x22\xae\xde\x7c\x2b\x76\x12\x1e\x20\x16\x48\x2b\x49\x10\xd8\xb2\x61\x84\x08\x8e\xeb\x19\x65\xc1\x4e\xa1\x50\xb8\xb5\x9d\x8b\x45\xdc\x9e\x5e\x5d\x3e\x63\x34\x48\x63\x96\x41\x14\x53\xac\xf0\x01\x0f\xb2\x69\xf4\xc0\xc4\x23\xc4\xf4\x70\x05\x5f\x3b\xaf\x4f\xf1\x8b\x3f\x84\xbe\x39\x22\xe8\xb4\xcf\x3b\xac\xb5\xb6\x65\x3f\xc5\xd1\xe2\x1b\xa9\xd7\xb1\x5e\xab\x19\x8a\x5b\xbc\x77\x4c\x9b\xc3\xea\xc7\xa6\x98\x02\xd4\x8d\x8b\x40\x34\x0e\x80\xe8\xd9\x06\xd1\x9e\x61\xf8\x0b\x76\xdc\xbb\xee\x6c\x77\x74\x4b\x63\xc5\xda\x3a\x33\x6e\x48\xa6\xb5\x4f\x14\x0b\x68\x66\x06\x77\x45\x2f\xa3\xcd\x13\xca\x6c\x61\xc6\xb8\x82\x17\x2c\xa3\xf9\xc6\xf0\x1d\xc9\xe4\x09\x0a\xa8\x10\xd5\x1d\x98\xa5\x75\x71\x95\x58\x34\x45\x23\xf1\x32\xaa\x1b\x2b\xd2\x93\x46\x51\x9f\x35\x82\xa7\x0d\x37\x32\xa0\xdb\x5e\x7b\xc4\x7d\xe3\xa8\x55\x64\x37\x16\xc5\x6e\x7a\x9f\xa1\x1e\x8d\x78\xf5\x30\x65\xb2\x20\x79\x0c\x8c\x86\x1b\x9a\xe8\x4f\x51\x8f\xcb\x0c\x2a\xd1\x83\xa0\x4a\x45\x8b\x03\x22\x0b\x3c\x23\x22\x8f\x15\x05\x40\xb0\xaf\x27\x2e\x64\x13\x93\xac\xe2\xe8\x68\xf9\xad\x77\x11\x8c\x1e\x82\x71\x51\x0a\xc8\x49\x3b\xbf\xa6\xd9\x9b\x46\x3b\x77\x22\xee\x8d\xaa\xbc\xc4\xf1\xa4\x1d\x72\x90\x85\x2c\x5e\x20\x08\x35\xaa\x75\x45\x83\x71\xd6\xe3\xf4\xea\x12\x2d\x0d\x77\x79\xb6\x97\xeb\x00\x81\x79\x6c\x08\x4c\x2c\x25\x2a\x3f\x40\x60\x0e\x10\x98\x03\x04\xe6\x00\x81\x89\x43\xf4\x00\x81\x39\x40\x60\x0e\x10\x98\x03\x04\x26\x68\x3c\x12\x04\x26\xba\x03\x0e\x7a\x10\x50\x89\x22\xf2\xcf\xc7\x00\xd7\xb0\x28\xdd\x98\x9a\x03\xde\xb8\xa9\xad\x65\x2b\xa7\x44\x45\x64\x9b\xc4\xba\x58\x4f\xdd\x62\x6b\xfc\x7b\x02\x75\x47\x7c\x28\xcc\xf1\xf1\x74\x7a\x6c\xb2\xaa\x62\x43\xdb\x4b\x35\x9b\xfc\x21\x12\x4d\xc2\x12\x9e\x92\x74\x1a\x11\x4c\x36\xa3\x42\x2a\x08\x4b\xc5\x80\x88\x98\x61\x18\xbb\x79\x47\x31\xb1\x4a\xb9\xbd\x9b\xf1\x81\x45\xe6\xfc\x63\xb2\xf7\x68\x96\xbc\xab\xa1\xf5\xd3\x23\x06\x46\x6c\x20\x23\xd6\x83\xaf\xe6\x1c\xf7\x4a\xd9\x67\xef\xdb\xe7\x62\x7d\x40\x5c\xa4\xaa\x51\x16\x4d\x5b\xca\x29\xb4\x66\x4a\xc1\xc0\x21\x32\xda\xbe\xbe\x32\xa4\xa7\x49\x51\xc6\x53\xed\x80\x62\x4e\x72\x2e\xbc\x3b\x6a\x77\x87\x5b\xb6\x9e\x68\x44\x75\xb1\x22\x6b\x66\xfb\x3a\x62\x74\x28\x29\x85\x20\xcc\xbf\xdc\x65\x77\xfc\xc3\x45\x9b\xdc\x23\x7a\xa6\xc1\xa6\x8a\x73\xf8\x37\xaa\xe8\x1b\x9d\xe6\x15\xee\x4b\x22\xba\x9a\x01\x0c\x5a\x9d\x56\x44\xc2\x33\x2e\xac\xab\x20\x5a\x34\x18\x35\xc0\x7f\x91\x67\x4a\xd8\x32\x22\xc5\x25\x16\x9e\xcd\x2c\xfa\xc6\x23\x44\x85\x52\xba\xa4\x92\x47\x13\x73\xbd\x58\x4a\xff\x9a\xe5\x7d\x43\x8b\x67\x5e\xaa\xa2\x8c\x19\xc2\x31\x56\x6d\x3c\x1d\x02\xd9\x89\x92\xaf\x05\x8f\x17\x6c\x40\xcd\x3a\xa7\x31\xdf\xd2\x23\x85\x44\xbf\xf5\x2d\xdf\xbf\x3e\x0a\xac\x14\x11\xec\x1d\xfa\x3f\xaf\xfe\xf2\xdb\xbf\x4d\x5e\xff\xf1\xd5\xab\x3f\xbf\x9d\xfc\xff\x7f\xfd\xed\xab\xbf\x4c\xe1\x3f\xbe\x79\xfd\xc7\xd7\x7f\x73\xff\xf3\xdb\xd7\xaf\x5f\xbd\xfa\xf3\x2f\x1f\x7e\xbe\xbd\xba\xf8\x2b\x7d\xfd\xb7\x3f\xb3\x32\xbf\x37\xff\xf7\xb7\x57\x7f\x26\x17\x7f\x1d\x49\xe4\xf5\xeb\x3f\xfe\x7f\xd1\x96\x80\xd9\xea\x53\x24\x95\x1a\x81\x24\x8c\xef\xdc\x69\xd2\x8d\xca\x66\x10\xfa\x3a\xa9\x21\xf7\x13\xca\xd4\x84\x8b\x89\xf9\x8a\x77\x48\x89\x32\x9e\x4f\xc5\x3c\x8f\xc7\x92\xbc\xb1\xdd\x4a\xa8\x31\xe7\xc7\x08\x73\x3f\x33\xe1\x63\x6a\x33\x3f\x63\x64\xb7\x99\xe0\xa1\xc8\x5f\xdf\x38\x14\xf9\x7b\xae\x45\xfe\x6e\xcc\xad\x75\x71\xb3\xaa\x4e\x5b\x84\xc5\x9b\x3a\x6f\x75\x85\xbe\x60\x92\xcd\x0a\x7f\x71\xe0\x9c\xed\x0a\x7f\xae\x42\x5f\x2c\xb2\xa6\xc2\x5f\xbb\x42\x5f\x30\x6d\x4d\x38\x7a\x8d\xba\x56\xc5\x59\x7d\x72\x51\xa6\xd9\xad\xd0\x17\x7e\x01\xa0\x5d\x7b\x63\xf5\xc1\x14\xe1\xde\x77\x2a\xf4\x05\x13\xbd\x9c\xbd\xb4\x0a\x7d\x86\x0b\xc4\x89\xf0\x1f\xca\xf3\x1d\xca\xf3\x05\x8d\xe7\x9d\xc7\x74\x28\xcf\xb7\xf3\x78\xb6\x99\x45\x87\xf2\x7c\xdb\xc6\xa1\x3c\x5f\xf8\x38\x60\x93\xeb\x71\x28\xcf\x77\xc0\x26\x1f\xb0\xc9\x07\x6c\x72\x1c\x92\x07\x6c\xf2\x01\x9b\x7c\xc0\x26\x1f\xb0\xc9\xe1\xe3\x85\x60\x93\x0f\xe5\xf9\xa2\x10\x3d\x94\xe7\x3b\x94\xe7\x8b\x42\xf4\x50\x9e\x6f\xd7\x71\x28\xcf\x17\x34\x0e\xe5\xf9\x76\x1a\x8f\x5e\x9e\xcf\x04\x4e\xc2\xe3\xba\x55\x6d\xbe\xbf\xcb\xd2\x7c\x52\x3f\xbb\x84\x9c\x26\x09\x2f\x99\xba\xe5\xf7\x24\xa8\x9e\xca\xa3\x03\x39\xd6\x66\x1b\x44\xf9\xd9\x95\xea\x8b\xe1\x42\x0f\x76\x7b\xc7\x72\x78\xe3\x32\xa5\x84\x85\xc3\xb6\x5a\x97\xea\xd4\x12\x8d\x85\x04\xd0\xa6\x0a\x4b\x49\x5a\xcd\x36\x16\x12\x44\xe9\xdb\x39\x45\xa7\x48\x90\x84\x16\x34\x86\x12\xc6\x67\x08\x1b\xba\x86\x17\xd1\x94\x30\x15\x83\x6f\x52\x25\x49\x36\x33\x4a\x18\x66\x8e\x2e\x8d\x60\xc1\xd5\x40\x03\x1b\xcf\x7e\x94\x6d\x8e\xd3\x61\x10\xd4\x81\x07\x2a\x09\x92\x0b\x5e\x66\x29\x12\x24\x4a\x5c\xac\x71\x1b\x6e\x63\xee\x80\x03\xf8\x22\x0b\xe7\x89\x78\x6c\x76\x73\x71\x41\x35\xcb\x25\x22\x4e\xe0\x38\x82\xfa\x41\xbe\x16\x54\x80\x48\xb9\x21\x09\x67\x69\x5c\xe8\xda\x45\x97\x7a\x2c\x2e\x63\x73\x8f\x48\x8a\xd2\x52\xc4\x29\x83\xc9\x67\x68\x89\x33\x9a\x52\xb5\x8a\x95\x1b\x6c\xc5\x2b\xc2\x46\xbe\xda\x4b\x1b\x4c\xf6\x54\xd6\x4f\x00\xe1\xa2\x10\x1c\x27\x8b\x08\x8a\x7c\x7d\x17\x4e\x8c\x1f\xa2\xbc\x23\x59\x04\x95\xcf\x75\x40\xcf\xca\x39\x65\x71\x70\x32\xb0\x66\x45\x97\x24\x5b\x21\xc1\x15\x8e\xe0\x8a\x68\xe8\x43\xee\xc0\xc2\x69\xd6\x5c\x2a\xd6\x66\x82\x6b\xdd\xd8\xf8\x4a\xac\x62\x04\x80\x15\xb7\x5b\x58\xdf\xaa\xf0\x67\xda\x10\x26\xfa\xcd\xf2\x2c\x8d\xc0\x45\xd5\x02\x33\xf4\x87\xb7\xa8\x20\x22\x21\x2c\x4a\x26\x8a\xb6\x45\x14\xcd\x21\x79\x3f\xa3\xcb\x28\x49\xf1\x8f\xb8\xf8\x7f\xfe\x0e\x2d\x78\x29\xe4\xf4\x3c\x56\x32\x8a\xe2\xe8\x5b\xa0\x09\x6e\x76\xad\x06\xc5\x80\x58\x62\x85\x32\x82\xa5\x42\xdf\xbe\x45\x39\x65\xa5\x22\x32\x8e\xc8\x8b\xe3\x09\x6f\xf8\xc0\xbf\xff\x2e\x88\x56\x0c\xef\xf7\x5a\x85\xc0\x18\xb0\x3f\x28\x59\xab\x69\x45\x4b\xfc\xb7\x5a\x51\x0e\xa2\xac\xe0\x34\x8e\x02\x5e\x45\xa1\xa2\x98\x8d\x76\xa6\xf5\xeb\x63\x8a\xef\x51\xd7\xfa\xb5\xe4\x77\x2b\xe5\x61\xb0\xb5\xae\xc4\xbf\x1b\x2a\xcd\xfa\xdf\x3e\x98\x37\x47\xc6\x1c\x20\x37\xe6\xc3\x82\x4b\x65\x62\x8b\x72\x81\x85\x97\x12\x81\x51\xc1\xd3\x63\x89\x32\x3a\x23\x9a\x95\xee\x4c\x22\xc8\xd6\xf7\xb7\xf0\x27\x48\x90\x39\x95\x4a\xec\x6e\xef\x4d\xac\x4e\xb3\xf3\x07\xc3\x5c\x01\x73\xc1\xcb\xc2\x8f\xdb\xb4\x2e\x14\x44\x67\x5d\xc4\xc9\x73\x25\x66\xe0\x24\x21\x12\x0c\x26\x2b\x90\x0c\x6a\xdb\xcc\xd4\x8b\x66\xa0\x65\x23\x08\x4e\x3f\xb1\xcc\x13\x13\xd8\xda\xa5\x6b\x4b\x0a\x2d\x88\x20\x21\x6a\xeb\x8c\x8b\xc4\x28\x57\xee\x09\x5a\x8d\xd8\x1b\x0c\x7b\x67\x5f\x31\x49\x8d\x8f\x41\xaf\x7a\x02\xd5\x33\x1a\x38\x36\x5f\xbe\x77\xde\x30\x83\x67\x38\x93\x9e\xe8\xb5\x50\x7f\xaa\x7b\x9c\x51\x4e\xd2\x90\x6a\x70\x50\xdf\xfb\x8e\x24\x65\xf3\x4c\xab\x89\x28\x2f\x33\x45\x8b\xac\x3a\x55\x4f\x92\xd5\xe4\xac\xf1\x11\x9e\x48\x81\x65\x8d\xb9\xc6\x12\x58\xfc\xbb\x82\x0b\x15\x92\xea\xf5\xaa\x5a\x2d\x61\x4a\x50\x22\x4d\x15\x77\x52\x60\x81\xfd\x73\xa8\xe0\xf2\x26\x3c\xcf\xb1\x7c\x6d\xb3\x3e\x30\x14\xf0\x97\x01\xf6\xb7\x36\x0d\x04\xce\xaa\x0b\xd4\xac\xad\xb0\x0f\x96\xa4\x08\xc3\xcc\x33\x9d\xb3\x0d\x89\x00\x42\x88\x3f\xb8\xa6\x1a\x9e\x1b\x34\xa7\x4b\xc2\xba\xbc\x28\x28\x54\xfe\x23\x4e\xee\x09\x4b\xd1\x67\xe9\x38\x52\xba\x62\x38\xa7\x09\xce\xbc\x6b\xb8\x14\x82\x2f\xa9\x66\x64\x24\xed\xcc\xd5\x3b\xbd\xca\x80\x3d\x29\xe0\x73\xd0\xdd\xca\xe8\xc8\xe0\x95\xd8\xc7\xbd\x28\xa5\x6f\xe5\xa4\xd6\xad\xf8\x2c\x89\x78\x1c\x59\x2e\x0d\x38\x5a\xd0\x65\x42\xc2\x3c\x22\x7a\xa9\xfb\xd8\x62\xb3\x1f\x11\x36\xf9\x8b\x7d\x24\x35\x67\xf5\xdc\x09\x50\xb5\xab\xa4\x56\x09\x60\x9a\x4c\x8b\xef\x95\x2b\x1c\xe8\x49\xb8\xf3\x9c\xef\x56\x80\x8c\x08\x11\xdd\x5e\xeb\x14\x77\x1e\x9a\x78\xa7\x7a\xc0\x8f\xe7\x2d\x53\x07\x5d\xe3\x94\xfb\x70\xee\x1f\x33\x9e\xdc\xa3\x73\x02\x2e\xbd\x7e\xab\xc7\x83\xaa\xb1\x93\xac\xd5\xd3\x30\x7b\x0c\xc4\xc3\x40\x34\x3c\xc8\x3a\x50\x07\xf9\x8a\xf3\x22\x23\x72\x7a\xff\x07\x80\x75\x58\x96\xf7\x46\xdc\xa5\x6f\xae\x2f\x4e\xcf\x3f\x5c\x4c\xf3\x74\x77\xf4\xc2\xde\x6c\x2c\x9a\xe3\xf9\xee\x1c\x69\x82\x72\xce\xa8\xe2\x62\xf7\x73\x0f\x33\xb1\x66\xf2\x56\xef\x54\x38\xc7\x38\xfe\x89\x66\x44\xae\xa4\x22\x39\x6c\xbe\xe7\xb3\xb6\x1e\x12\x67\x30\x68\xee\xb1\xe2\x25\x7a\xc0\xde\xbc\x58\x8b\x0a\xfd\x16\xa6\xe8\x96\x16\xef\xd0\x05\x93\xa5\xb0\x94\xfd\x15\x80\x59\x7b\xb1\x20\x63\x5d\xcd\x35\x5f\x1b\x67\x55\x3f\x55\x7d\xa2\x58\x69\xad\xc7\x7c\x89\xaf\x69\x73\x61\x1f\xd7\x3b\x74\x44\xbe\xaa\xef\x8e\x4e\xd0\xd1\xd7\x99\xd4\xff\x30\x35\x93\xde\xad\x49\x2e\xf3\x22\xa3\x09\x55\xd9\x4a\x3f\x7f\x22\x04\x49\x6d\x31\x58\xf3\x35\x9e\x64\x69\xab\xf0\x43\x93\xbf\x8c\x82\x80\x49\xc5\x05\x9e\x13\xc7\x41\x7e\x23\xee\x7c\x8f\xc2\x20\xbc\x16\xfc\x01\xa5\x1c\x3d\x40\xfa\xf8\x92\x30\x65\xb2\x95\x7d\x4d\x29\x1b\xbf\x6e\xdc\x9c\x99\xe0\xb9\xb6\x06\x0a\xc1\x73\x2a\x43\x64\x2c\x41\x39\x4e\x16\x94\x11\x3f\x98\x57\xa0\xd6\x01\x2c\x2f\x06\x0b\xb9\x5d\x10\x24\xb4\xf0\xf3\xe4\xa2\x66\x80\x1e\xd0\x77\x79\x46\x89\x9a\xdf\x2c\xf8\xc3\x44\xf1\x49\x29\xc9\x84\x7a\x56\xca\x09\xdc\xcf\x7b\xb2\x82\x12\x48\x11\x76\xf4\x17\x43\xca\x85\x91\x03\x80\x3d\x8a\x03\x86\x0d\xa8\x69\x03\xf3\xfa\xc7\x73\xad\x89\x4f\x9d\xf2\xec\xfb\x2a\x24\x7a\x43\x54\xf2\x26\x21\xc5\xe2\x8d\x5d\x78\xa0\x66\x81\x76\xd5\x2e\x9e\xc1\x91\x3b\xe9\x1f\xe3\xcc\x4f\x51\xc2\xb3\x8c\x24\xfa\x7f\xfd\x43\x86\x67\xa4\x58\x54\xd3\x7a\x0e\xcf\xc9\xbf\x6a\x40\x50\xad\x80\xc0\x83\x2d\x38\xf7\x84\xba\x6e\x62\x8d\x9a\x62\x80\xad\x83\x9a\x9e\x6b\x71\xd7\x2f\x66\x5f\xca\xb3\x89\xe8\xfd\x3e\x7e\x04\xf7\x77\x45\x52\x12\x05\xda\x9c\xa7\xe3\x05\x59\x7b\xfc\x83\xd6\x63\xe5\x34\x96\xc7\x1a\x3d\x83\xa3\xf7\xf7\x97\x9b\xa2\x6c\xde\x05\xc9\xbb\x05\xc8\x2d\x31\x88\xe7\xf8\xd7\x9f\x72\xb8\xb7\x52\x2d\x08\x53\x34\x01\x74\x91\x9d\xaa\xff\x75\xaa\x85\xed\xe5\xcc\xf8\x09\x53\x92\x22\xbe\x24\x42\xd0\xd4\x1b\x08\x55\x49\xdb\x66\x28\x8b\x66\x41\xa9\x1b\x7b\xbd\x4b\x01\xe8\xe9\x70\xc8\x72\x58\x5e\x4e\x6f\x46\x4e\x20\x26\xaf\x9d\x8b\xf3\xdc\x72\x69\xfa\xb3\x68\x5c\x16\x4c\x00\xe1\x46\xfe\x4c\x94\xfc\x97\xe7\xe1\xf5\x6e\x28\x00\x9a\x62\x2c\x05\x00\xa7\x39\x65\xff\x60\xfa\xb6\x4c\x70\x46\x2e\x3f\x05\xba\x6d\x6f\x0c\x95\x50\x90\x8a\x23\x53\xe8\x2b\x2b\x15\x61\xaa\xaa\xaa\xa8\x14\x4e\x16\x5e\xee\x24\x40\xb6\xd9\x78\x39\x67\xe8\x97\xea\xad\x23\xc6\x53\x1f\x64\xda\xde\xbc\xa9\x73\xac\xc8\x83\x87\xda\x3f\xa9\xd5\x03\x9f\xcf\x82\x7f\xe6\xa5\x7a\x62\x3b\x8e\x58\x7f\xd4\x85\x75\x9b\x56\x45\x78\x1a\xbe\xab\x00\x63\xaa\x76\x94\xf6\xbb\x3c\x3d\x49\x5b\x47\x29\xba\xf8\x3a\x8d\xeb\xec\x6c\x70\x4b\xa0\xf7\xe4\x21\x26\x3d\xec\x3b\x88\x11\x54\x77\x1b\x8e\xd3\x54\x10\xe9\x2b\xc2\xad\xa2\xeb\xd8\xd7\xe9\xd5\x25\xfa\xd9\xcc\x71\x2f\xfb\x53\x08\xae\x8c\xc7\xe3\x9c\xe7\x98\x7a\xe6\x20\xae\x6d\x54\xa3\x71\x9a\x5b\xaa\xe7\x7e\x5d\x55\x13\x44\x66\x86\xa0\xd7\xdb\xae\x42\x33\x3a\x2f\xfd\xdb\x6b\x58\xbf\xf7\x5e\xf6\x3d\xa2\x01\xbe\x66\xd4\xfa\x22\x77\xf4\x9c\xde\x3c\x08\xaa\xc8\xeb\x69\x1b\xd4\xe6\x8d\xda\xc9\xb2\x01\xab\xde\x3f\x1e\xd0\xb2\xea\x5f\xbc\x11\x5d\xdb\xd0\x75\xbc\xdf\xdf\xd9\xdc\xa8\xbb\xae\x5f\x8a\x63\x34\xde\xc8\x0a\xa3\x15\x19\x5b\x43\x12\x26\x29\x94\x48\x69\xa4\x18\x7b\x07\xc3\x66\xa6\xee\x5d\x55\xbe\xd7\x98\xe7\x27\xe8\x3d\xf7\x05\xda\x20\x27\x0d\x39\xb3\x97\x0f\xd3\x2c\xe4\x82\x1c\x2c\xe3\xd6\x38\x58\xc6\xcf\xc1\x32\x96\x32\xbb\x60\xf8\x2e\xf3\xcd\x56\x6f\x2b\xbd\x19\x9e\x6b\xb6\x41\x80\xe2\x9b\x94\x4a\xfd\xaf\xe7\xd2\x6e\x6e\xde\x03\x4a\xb3\x64\xce\x83\x07\x18\x3f\xab\xe0\xf8\xa2\xf1\x6c\xba\x6d\x80\x70\x0b\xe6\xf6\x46\x53\xf8\xe0\x5d\xff\xb4\xdd\xa7\x81\xa5\x7a\x7b\x88\x74\x65\x33\x02\xc2\xd7\x76\x66\xc0\xea\x71\x55\x67\x1c\xb2\xa8\x7d\xe1\x14\x04\xdd\x2e\x68\x72\x7f\xd5\x80\x55\x72\xa1\x7f\xc6\x1a\x3f\x8a\x60\x14\x44\xa1\x18\xfa\x94\xcc\xf6\x5d\xc5\x09\x36\xdd\x36\x14\xfb\x1b\x43\xd9\x57\xeb\xe5\x3c\x43\x58\x4a\x9e\x50\x5c\x81\xf7\x21\x10\x5d\xa9\xc3\xbe\x8f\x09\x94\xe8\xfd\x6c\x36\x58\x9a\x8f\x60\x61\xc8\xa0\xbd\xb6\x26\x3f\x96\x0d\x8b\x42\x2b\x99\xf6\x24\xf7\xb2\x55\xe6\x21\xfb\x37\x3d\xdc\xb8\x5d\x38\x10\xfa\xdb\x86\xa0\x56\xbd\x12\x82\x4c\x3c\xe7\x73\x59\x60\xe3\x5a\x6d\x5f\x7b\x6f\xe6\x48\x65\xc5\x0f\xa1\x21\xd4\x93\x1f\xa4\x6f\x7b\xa6\xbe\x08\x5b\xa8\xbb\xd4\x5a\x04\x36\x81\x0f\x8a\x6c\x14\xbc\x28\x33\x93\xcd\xed\x95\x46\x6a\x4b\xe1\x87\xa2\xcd\xcc\xcc\x9e\x18\xa8\x1a\xa6\x9c\x37\xea\xe0\xc6\x88\x50\x54\xe5\xcf\xeb\xc2\xa0\x9e\x97\xbe\x94\x06\x50\xd8\x29\x54\x8e\x38\x0b\x04\x8d\x83\x03\x13\xdd\xad\xdc\xd2\x1b\xce\x4d\x6f\x4b\x0d\x6a\x4a\xb7\xca\x6a\x57\xb5\xc0\x3d\x49\xbe\xfd\xe1\x87\x1f\x5a\xb5\xbf\xa3\x54\xed\xee\x54\xe9\x8e\x51\x5f\x7b\xad\x9e\x76\x8c\x4a\xd8\xdd\xca\xd7\x8d\x9a\xd5\xde\x7e\x6c\x7b\x1d\xdb\xc8\x89\xb7\xdf\x7f\xf7\x9d\xb7\xfe\x47\x05\x49\x14\x87\xc4\x30\xdb\x96\x23\x10\x5f\x87\x05\x01\xff\x81\x29\x79\xec\x9c\xe3\x26\x77\x47\x51\x36\xf7\x9d\x69\xab\x8c\x74\xb3\x00\x74\x88\x54\x6a\x15\x7c\x6e\x96\x6a\x0e\x84\x54\x9b\xd2\xcc\xed\xa2\xca\x01\x0f\xa9\x2e\xa2\xdc\x2a\x7f\x1c\x52\xfa\x3c\xb0\xdc\x71\x78\x51\x87\xd0\x72\xc6\x01\x60\xb8\xa1\x2e\x7d\xd0\x65\xcf\x1f\x88\xd2\xe8\xcd\x17\xad\xb7\xde\x5a\x47\xbd\x66\x47\x3c\x7f\xab\xb2\xdd\x4d\xad\x91\xad\xe0\xfb\xf0\xe5\x7a\xf7\x3b\x8b\xd7\xf5\xdf\xcf\x66\xcf\xbb\x76\xcf\x3a\x7f\x2f\x67\xbb\x24\x3f\x0a\xef\xd5\xb6\xd6\x99\xb0\xde\xd1\xd0\x94\x60\xd3\x95\x6e\xbd\xab\x5c\xc8\xd9\x77\x7a\xc9\x35\x7b\xc1\xf9\x5a\x0c\x55\x71\xbb\x88\x1d\xe0\xd6\xfb\xbe\xb5\xfa\xb6\x85\x9c\xd5\x7a\xb7\x36\xdb\x6d\xcd\xdb\xcb\xdd\xea\xd1\xb6\xd6\x63\x2d\xc0\xd1\xdf\xd3\x59\x0d\xaa\x39\x07\xdc\xa7\xaa\x9f\x5a\x68\x3f\xb4\xbd\xe2\x99\xd7\x3a\x9e\xb5\xfa\x95\xf9\xfb\x82\x79\xb7\x4b\x59\x60\x8f\xb1\x08\x05\x51\x43\x8b\xa1\x86\x74\x11\x0b\x2a\xa2\x1a\xa3\x80\x6a\x60\x9f\xb0\x35\xcf\x4b\x84\x66\x76\x11\x7a\x82\x45\xa9\x03\x19\xda\xff\xeb\x31\xba\x7e\xb5\x7b\x7d\x59\xe3\x37\x6c\xb7\xdb\x86\x73\xa4\xde\x5c\xdd\x8e\x5c\x46\xab\x08\x22\xd9\xb5\x9a\xc3\x3b\x68\x45\xb7\x9d\xcd\xd8\x60\x41\x87\x2d\x9e\x6b\xc1\x12\xb5\x2f\x55\xd3\x06\xaf\xac\xe9\x20\x8a\xeb\x96\x78\x78\xf7\xa8\x66\xcf\xa8\x58\x4d\x94\x1b\xba\x4e\xac\x1e\x4f\xad\xce\x4e\x0d\x63\x3a\xf0\xc6\xaf\x19\xe2\x11\x1a\xf3\xc4\x35\xc7\xcd\xd8\x64\x94\x07\x11\x6d\xf7\x37\xb2\xa6\x79\xd8\xd2\x2b\xb3\x3e\x4e\x3f\xa2\x58\xb5\x17\xe3\xf4\x1e\x0a\xad\xb9\xb8\x26\xcb\xa3\x94\x48\x34\x2a\x71\xbb\xa0\x61\x8e\x7d\xed\x0b\x33\x54\xa5\x68\x54\x5d\x62\x42\xaf\x46\xa3\x7b\x4f\xdd\x77\x27\x88\x62\xd7\xac\x88\xd6\x27\xa7\xd5\x1d\xa7\x61\x6a\x04\x6f\x69\xa4\x6e\x36\x81\xca\x57\x58\xe7\x8f\xbe\x7e\x1f\xcd\x7e\x1d\xbe\x50\x0f\xe3\x12\xaa\xbb\x74\xd4\x56\x68\x48\x9b\x8d\x38\xb8\xbc\x48\x81\xd3\x26\x6a\x2a\x2c\x17\xcd\xdd\x78\x53\x09\x06\x80\x4e\x05\x4e\xe0\xe9\x97\x51\xb3\x10\x9f\x22\xf2\x86\x02\xc3\xa2\x66\x1a\xdc\xc3\x46\x6b\xdf\x65\x43\xe7\xd3\x4d\x58\xb5\x3e\xdc\x20\xd4\xc9\x20\xf1\xf4\xa0\x3f\x9f\x0c\x92\x43\x62\xc5\xb6\xf1\x12\x13\x2b\x9e\xa6\x8a\xcc\x3e\x60\x2f\x07\x54\xfc\x01\x15\xbf\x8e\x8a\x77\x77\xd2\x1b\x14\x5f\x23\xe2\x8d\xbc\x05\x43\x9c\xdf\x69\x45\x34\xac\x78\x50\x2d\x39\x4e\xaf\x2e\x51\x22\x08\x34\x82\xc1\x99\x9c\x22\x74\xe9\x5b\x40\xa4\x6d\xd7\x57\xe8\x57\xe3\x43\x08\x8c\x18\x61\xa5\x48\x5e\xa8\xb0\xe7\x7d\x00\xc5\xb7\xc6\x01\x14\xff\x1c\x40\xf1\x51\x11\x93\x5f\x2a\x62\x61\x01\xe5\x45\x99\x63\x36\xd1\x12\x04\xdf\x65\x9d\xac\x38\xc7\x3a\x3c\x49\x3b\xf4\x9d\xab\x38\x0a\xf7\x04\xc0\x30\x9c\x79\x97\xd2\x2d\x19\xfd\xb5\x24\x75\x24\xaa\x32\x54\xf6\x0c\x82\x85\x39\x44\x3d\x57\x63\x7e\x45\x91\x2c\x09\x2f\x48\xa7\xfc\xa2\xd9\x40\x5f\xcb\xda\xdd\x0c\x10\x22\x88\xf1\xfa\x18\x7c\x75\x83\x46\xa9\x70\x3d\x4d\x63\x8c\x5e\xf1\xf4\xd8\x77\xe1\xb5\x05\xdb\xf6\xf3\x82\xa3\xd7\x37\xfa\x9c\x65\xfc\xc1\x20\x2e\x9a\x66\x93\x7e\x33\x7a\x8f\x03\x24\x35\xe8\xc6\x39\x15\x82\x0b\x0b\x2a\xa6\x2c\xf8\x01\x42\x1a\x2a\x9d\x2f\x14\x11\xc6\xe1\x69\xf2\xce\xa6\xe8\xc6\xdb\x4b\xd0\x60\x3b\x8a\x23\xcc\x4c\x69\x5e\xfd\xdf\xae\x64\x4d\xc0\x3d\x75\x7a\xc4\x1d\x59\xe0\x25\xe5\xa5\x80\x99\xfa\xdb\x62\x47\x96\xe0\x91\x36\x1c\x56\xbc\xac\x80\x78\x65\x40\x45\xc6\xea\x5e\xc9\xb5\x63\xf2\x95\x55\x1f\x6b\x92\xe0\xe0\x4f\xb9\xc3\x8a\x4c\xc8\x57\xea\xdd\xc5\xa8\x3b\xbd\xea\x21\x58\xa0\xed\x93\x73\xcc\xa5\x2c\xb4\x51\xf2\xc5\xb3\x92\x75\x9b\x4f\x36\x69\x85\xba\x57\x96\x37\x40\xac\xcf\xb9\xe2\x5c\x25\x3e\x4e\x51\xe6\x3a\xa5\x99\xc6\x05\xae\x90\xe7\xd3\x3a\x58\x42\x4a\x74\x98\xfd\xb8\xf2\x41\x3b\x1c\xfc\x3a\xdb\xc6\xc1\xaf\x53\x8d\x67\xe0\xd7\xa9\xd2\xec\x32\x9a\xac\x2e\xcf\x63\x78\x07\x6c\xde\xa3\x21\x89\x7e\xc4\xd2\x1b\x4c\xf7\x01\x33\x3c\x87\x20\x14\x7a\x75\x73\xf5\xe3\x87\xd7\xfa\x79\x41\x60\xee\xf2\xdc\x57\x95\xe9\xc9\xdc\xbb\x69\xee\xc1\xc7\x7d\x94\xdc\x47\xdd\x93\x88\x64\x2d\x3d\xc9\x59\xec\xa5\x49\x01\xaa\xac\x90\x2b\xef\x50\xf2\x7a\xd3\x3e\x93\xe8\xe6\x7a\x06\xfb\xaa\xcb\x1d\xb1\xba\xcc\xd3\xfb\xc7\xda\x9e\x06\x22\x6a\xf3\x1e\x8c\x01\x67\x6e\x05\x60\x76\xee\x95\xc0\x8a\xcc\x57\xe7\xa4\xc8\xf8\x4a\x5f\x8a\xab\x06\x34\xcb\xfc\xe9\x1d\xd9\x6a\x9e\x8b\x3b\x9c\x20\x51\x66\xd0\x44\x23\x5d\xeb\xb5\xcb\x08\x49\x6b\x09\x41\x99\x54\x18\x1a\xa7\x9a\xef\x1e\xa0\x3c\x52\x71\x18\xa3\x22\x4c\xcc\xfc\x06\xff\xa2\xdd\x82\xff\xe3\x70\xa9\xcd\xb1\x0a\x02\x7c\xed\xb6\x7b\x3d\x1e\x76\x3b\x12\x60\xdb\x7e\x12\xc0\x35\xae\xcb\x4c\x8b\xe7\x2c\x95\xcd\xd2\x22\x56\x63\xb7\x27\x3d\xe6\xa5\x60\x54\x18\x2e\xa4\x57\x76\x82\xee\x4a\xad\xf0\x13\xd9\xc2\x1e\x34\xbe\x60\x0c\xc5\x3b\x5e\x2a\xf4\xb0\x30\xf8\x7a\x4d\x16\xe1\xa2\xc8\x28\x81\xd0\x02\x17\x16\x82\xbe\x8b\x8d\xde\x43\x68\x3b\x6b\xdb\x49\x4f\x1d\xaf\x97\x4e\xd0\x92\x88\xbb\xed\x5b\xbb\x9b\xca\x89\x0b\x0a\x78\xa7\x91\xfa\x69\xeb\x42\x9c\x5e\x5d\x9a\xcf\xba\xfc\x8b\xa6\xdb\xcc\xfd\x72\x24\xab\x83\xfb\x63\xcf\xdd\x35\x04\x37\xd9\xc0\xc6\x45\x5f\xf7\x66\x3b\xbd\xba\x1c\x49\x73\x6e\x26\x07\x6d\xcd\x6a\x37\xbd\xb6\xd6\xb1\xa9\x53\x55\xf7\x1c\xc7\x73\xfd\xbd\x63\xcd\x0a\xce\xaa\x65\x12\x56\xe6\x04\x1a\xa6\xd5\x13\x46\x94\xc1\xb7\x9c\x5e\x5d\xee\xd4\x36\xb1\xf2\xfd\x67\x19\x7f\x18\xab\x00\xee\x0a\xb5\xdf\x09\x5a\xbf\xa3\x44\x66\x9c\x5d\xdb\x4d\xf8\x7c\xfd\xde\xe7\x4a\x7d\x6c\x53\xb0\xed\x99\x88\xd2\xdb\x5d\x60\xa1\xe8\x68\xe4\x68\x29\x32\x07\x14\x34\xf5\x44\x6d\x32\xf5\x02\x2f\x49\xdd\x18\x6b\x8a\xd0\x37\x63\xe5\xba\xbe\x47\xf6\x68\x0c\xbf\x82\xf6\x8c\xa6\xb1\x1d\x9a\x95\x59\x76\x82\x66\x94\x61\x2d\x92\xc8\xd8\x23\x6f\x02\xac\x6e\x28\x4b\x88\xde\xc3\x89\xbb\x49\x08\xf6\xc0\xba\x6b\x46\x52\xac\xd8\x1b\x24\x31\x01\x22\x9a\x64\x29\x34\xad\x86\xe9\x6a\x46\x96\x80\x93\x7b\x7c\xba\xe9\x59\x56\x4a\x45\xc4\x35\xd7\xa2\xb9\x91\x6d\x06\xed\x3d\x70\xf3\xd7\x3f\x52\x96\xee\x90\xca\x79\x0d\xc2\x3e\xc1\x0c\x11\x0a\x41\x0f\x3d\xbd\x95\x66\xd7\xfa\xed\xd4\x0f\xea\x95\x2c\x47\xe7\xde\x61\x89\x8e\x0a\x9e\xca\x23\xcd\xf2\x8f\x4c\x38\x51\x1e\xbd\xd6\xff\xd7\xdd\xdb\x91\x14\x21\xd5\xca\xcc\x01\xa8\xbf\xc1\x05\x3d\x7a\x7d\x82\xe0\x12\x00\x80\x8f\xab\xc5\xcb\x7b\xad\x6e\x27\xc0\xef\xe6\xf1\x56\xaf\x9b\x9f\x87\x97\xca\x2a\x04\x9c\x96\xb5\xa3\xfb\x67\x66\x54\xc2\x03\x37\x91\x11\xd7\xb7\x68\x4d\xf0\x22\x74\x3a\xd6\x53\x4f\xf2\x42\x41\x9c\x1e\xe5\x04\x3b\xc0\x30\x59\x12\xb1\x52\x0b\xdb\x2c\xe4\xc5\x32\xd9\xea\x55\x04\x1c\x99\x65\xac\x6e\xe3\x2b\x92\xa3\x85\x35\x95\x3d\xc7\xe3\xa8\x9f\x66\xd9\xee\xae\x48\x0c\x1f\x72\x22\xff\xc5\x9d\x0a\xe8\x66\x1e\x27\xf2\x45\x7f\xae\x7d\x1a\xe6\x47\x46\x74\x69\x76\x38\x76\xc2\x1c\x9d\xbe\x7f\x6f\x91\x2a\x66\x1f\x7f\xa1\x2c\x35\xb6\xd4\xa9\x52\x82\xde\x95\x8a\x5c\x13\xbd\x24\x50\x7f\xc6\x9e\x8c\xd5\xca\x5c\x11\x19\x7b\xf4\x53\x04\x13\xf5\x3e\xeb\x7b\x3d\xb7\x97\x74\xce\xeb\x66\xdd\x38\x73\x6c\x23\x69\x67\xb9\xf6\x93\x19\xf8\xb0\x35\x7d\x3f\xf0\xb4\x8f\x09\x74\x2a\x98\xd5\x7f\x6a\x95\xe0\x55\xc3\xdb\x6a\x29\x59\x13\x6e\x55\xf4\x70\x80\xa1\xcd\xdf\xb8\xd1\x9b\xe6\x50\xfb\xdb\x40\x5a\x34\x7e\x73\xbb\x2a\x4c\x34\x16\x61\x34\xcb\x70\xff\x51\x54\x17\x0d\x78\xb8\x51\xc0\xcf\x6e\xbe\xb8\x05\x49\x44\xfb\xb4\xa4\x2d\xf6\xd8\x90\x05\x36\x19\xec\x79\x37\xd9\xd4\x06\x70\x9b\x09\x56\x11\xdd\x74\x83\xb6\xc3\xbb\xd4\x40\x60\x60\xd3\xee\xdf\xda\x3e\x7e\xb8\x71\x03\xc0\xfd\xce\x67\xee\x26\x6c\xbc\xd1\x90\x79\x32\xe3\x02\xf6\xbb\x79\x6d\x06\x57\xd0\x7b\x7d\xef\xc9\xea\x81\x8b\xb4\x67\x6f\xbc\xee\xda\xc0\x37\x65\xf8\x8e\x64\xdb\x9e\xc8\x07\x5c\xe8\x0d\xa8\x33\x84\x0d\xc7\xb4\x99\x60\xc6\x2e\x35\xa5\x35\x5c\xde\x22\x17\x73\xcc\xe8\x7f\xf5\x9d\x3c\x14\x25\xd0\xaf\x9a\x0b\xfa\x5f\x04\xbd\x32\x98\x03\xe3\xcd\xca\x48\xa2\x5e\xdb\x7b\xd8\xc3\xf9\x06\xaf\x29\x4e\x53\x6a\x34\xab\xab\xc1\xbb\x35\xb4\x19\x94\xdd\xc7\xdd\xf3\x8d\x4f\x6a\xdb\xfd\x1f\x82\x86\x6d\xe5\xc7\xa5\xd8\x98\x5f\x31\xf0\xd9\x1c\x53\x23\xc5\xfa\x3a\x90\xed\x63\x0f\x48\x8e\xa9\xcf\x42\xcc\xf0\xdc\xc1\x1c\xab\x52\x50\xd5\x23\x72\x86\x3e\x44\xd9\x2f\xe5\x1d\xb1\x18\xb2\x9d\x3e\xca\x20\x09\xeb\xf4\xea\x32\xd6\xa6\xb7\x5e\x2e\xf8\x97\xec\xb4\xb4\xaa\x83\x4a\x86\xf3\x3b\x3a\x2f\x79\x29\xb3\x55\xc3\x71\x8f\x30\xa8\x1b\x53\x84\x2e\xfb\xcd\xe8\x94\x13\xc9\x8e\x15\xc2\x8c\xb3\x55\x6e\x3f\xce\x92\xac\x4c\x49\xeb\x5b\x00\xed\xb1\xe4\x34\x45\xb8\x54\x3c\xc7\x8a\x26\x28\xe1\xe6\x77\xdb\xa9\x97\x92\x20\xbc\x81\x5e\x52\x4a\xc5\x73\x94\x63\x21\x17\x38\xcb\xfa\xcf\x3d\x48\x92\x6d\xf2\x44\x4d\x60\x6f\x7a\x7f\xb1\x34\xb3\xf4\xb8\xdd\xf0\x65\xde\xb7\x5b\x4f\xc8\xfb\xc3\xcb\x4d\xf7\x74\xeb\xe7\x6d\x61\xeb\x9e\x66\x36\x83\x1b\x3f\xbc\x17\x9b\x5f\xea\x96\x95\x6c\xe4\x73\x03\x9f\x13\xa4\xc8\x70\xaf\x69\x38\x50\x67\x52\x4b\x74\x50\xeb\x39\x23\x15\x85\x29\xba\x31\xfe\xb2\x1c\xab\x64\xb1\x21\x74\xf3\x9f\x39\x51\x38\xc5\x0a\x4f\xb5\x3a\xfc\x9f\xd6\xd5\x64\x3d\xa3\x3c\x4b\x35\xe9\x4d\x82\xae\x77\xfe\x46\x48\xf2\x9e\x13\x68\xcd\xff\xbd\x96\xeb\xd5\x1f\x83\x5a\x02\x09\x9f\x4d\x27\xec\x8e\x02\x76\xf8\x10\x61\x13\x2e\xbe\x6a\xed\x73\x20\xb8\xd6\x9a\x63\xf7\x23\x6d\x1b\x2f\x6b\xaf\xc0\xbe\xdc\x9c\x0c\x24\x04\x98\xb4\xd6\xfa\xef\xc0\x2f\x78\xfa\xf1\x7c\x93\x0f\x63\x9b\xd5\x34\x68\x25\xb5\xfd\xfc\x03\xd3\x75\x1e\x5a\xfb\x9b\xc1\x0e\xec\x95\x7b\xdf\xe5\xef\x43\x71\x21\x53\xc3\x08\x7c\x47\x44\x60\x47\xc4\x1e\xa8\x74\x09\xb3\x1b\x89\xd6\xba\xda\xa6\x8d\x1b\x11\x8f\xd9\x16\x85\x19\xaa\x93\x32\xa9\x26\xbe\xe1\x0f\xc6\x04\x64\xb6\xd4\x32\x69\x1d\x87\x29\xc8\x64\x2a\x54\xc1\xb9\x40\x3e\xb1\xf3\x9a\x55\x47\x61\x5d\x33\x83\x36\xea\x70\x38\x6b\x94\x69\xec\x16\x3f\x7a\xfa\xd5\x31\x37\x0b\xa5\xea\x35\x1c\x4b\x9b\xb6\xcd\x99\x5c\xd0\x62\x1b\x48\xa9\x8a\x0b\xd8\xd3\x47\x5f\x70\x46\xd3\x8a\xbc\x79\x1f\x97\xec\x04\x7d\xe4\x4a\xff\x73\xf1\x95\xca\x2d\x1e\x0a\x7d\x97\xce\x39\x91\x1f\xb9\x82\xbf\x0e\xde\x1c\x33\xb5\xd1\x5b\x63\x6d\x0e\xe3\x4a\x85\x97\xdb\xb0\x4c\xdc\x32\x2f\xb7\xa7\x41\x54\x5b\x4c\x25\xba\x64\x88\x0b\xb7\x07\x55\x91\x34\x69\xc9\xbb\x4c\x60\xc6\xd9\x04\x9c\xa6\xc3\x1e\x99\x4b\xcb\xda\x1b\xf4\xcd\xb6\xea\xef\x68\xee\x5c\xf3\xab\x86\xb7\xbc\x35\x0d\x33\x05\x53\x84\xc2\xfc\x86\x4a\x27\x92\x52\x94\x96\xb0\x11\xd8\x79\x4e\x68\x32\x48\x3a\x27\x62\x0e\xa1\x95\x64\xd0\x39\x3f\xce\xbb\x34\xc2\xa7\xb4\xe5\x46\x80\x40\x78\xbf\xc1\x22\x45\xbd\xe2\xc3\xfc\xb5\x61\xb1\xb9\x31\x53\xff\x5b\x73\x4c\xd8\xd7\xff\x81\x5a\x82\x72\x8a\x4e\x91\xa4\x6c\xbe\xb1\x15\x40\xf3\x13\x36\xdc\xd4\x24\xae\xe9\x52\x89\x34\x03\x5c\xe2\x4c\x73\x74\x40\x34\x6f\x49\xf7\xe7\xb3\x35\x01\x77\x62\xab\xfb\x69\x6e\x54\xc5\x9c\x8e\xee\xc9\xea\xe8\xa4\x75\x69\x36\x50\xd4\x7f\x7c\xc9\x8e\x4e\xaa\xda\x19\xad\x7b\x5a\x89\x0e\x08\x62\x1d\xc1\xef\x8e\xa6\x6b\x32\x71\x03\xed\x51\x92\x72\x40\x40\x8c\xb5\xbe\xd1\xf0\x2d\xd8\xa8\x99\xb6\x4e\xfe\x93\xdd\x27\x67\x22\xc0\xe9\x3f\x08\x5c\x14\x44\x20\x2c\x78\x09\xce\x84\x7c\x49\xc4\xd4\xfd\x09\x00\x1b\xfa\x3c\x8c\xce\x2f\x96\x70\x21\x48\xa2\x9c\x79\xa1\x5f\x91\xe2\xb6\xc4\x0f\x4b\xa1\x8e\xce\x4e\x7a\xda\x03\xb9\x5b\x70\x7e\x0f\xf5\x03\x60\x67\x1e\xc5\xbe\xfb\x93\xf9\x96\xf3\xfa\x67\x4e\x45\x97\x28\x25\x0a\xd3\x0c\x90\x1d\x9f\xde\x7f\xb0\xd8\x0f\x27\xc6\x7b\x8f\xc6\xce\xb9\xef\x8e\x04\xd9\x55\x38\xb5\x48\xa7\x6b\xb2\xa4\xe4\xc1\x9e\x49\xdf\xd7\x4c\xd0\x9c\x30\x00\x0b\x6c\x00\x05\x4d\x90\xa4\x29\xb9\x80\xc2\x36\xfd\x04\x3c\x1d\x8e\x1b\xe6\x38\x7c\x87\x87\x58\xe2\x16\x76\xb8\x55\x38\xba\x98\x82\xb8\xe2\x62\x63\xe1\xf5\x31\x35\x6a\xc6\xd4\x9f\xb1\xf9\x0f\xef\xd0\x77\xdf\xfd\x6e\xc3\x9f\xe4\xf8\x2b\xcd\xcb\xfc\x1d\xfa\xfe\xf7\xbf\xff\xdd\xef\x37\xfd\x11\x65\xe6\x8f\xbe\xdd\xb4\x26\xfb\xc2\xcf\xae\xcf\xf7\xb8\xb7\x69\x85\xc2\x1b\x0a\x52\x6c\x25\x33\xc3\x34\x2b\x85\x05\xa0\x7a\x53\x69\xde\x78\x6f\x22\x20\x6a\x86\x27\xd2\x71\xe9\x56\x7f\x0f\x3e\xef\x2a\x7b\x0c\x04\x8b\x73\x79\x1b\xcb\xd6\xa0\xd0\x7c\x67\x66\x78\xc6\xcd\x46\xb3\xb5\x67\x72\x6b\xd6\x94\x31\x0c\xe1\x67\xbf\x96\x44\xac\x20\x87\xa8\x52\x6f\x37\xde\x83\x06\x3e\xea\xb6\x2e\x35\xe5\xd6\x65\xa5\xbb\x29\x14\xda\x16\xd4\x9b\x4d\xa9\x4a\x4c\xa2\x53\x66\x63\xe8\x9d\xb9\x02\x2d\x02\xd1\xf3\xca\x93\x8d\x4e\x37\x52\x64\x65\x96\x6d\x22\xc1\xf8\x66\x5f\x78\x73\xf7\x07\x0d\xb7\x31\xb6\xd5\x38\xe3\xdd\x0c\x6f\x13\x7e\x50\x33\x6c\x99\xf7\x3b\x1b\xf2\xcd\xcd\x88\xa0\xa6\x7a\x9a\xf6\x83\x34\xbb\xf8\xbd\x1d\x0c\xfc\xad\x74\x49\x55\xed\x79\xd8\xcc\x6f\x6e\xd3\x08\xf0\xe5\x38\xe0\xe5\xf6\x02\xa9\x5b\xcd\x7f\x33\xc6\xa3\x32\x47\x95\x35\xf5\x70\x08\x6c\xa5\x89\x3c\x50\xae\xa3\xf0\x11\x63\x5c\x04\x3d\xcb\x1a\xeb\x28\x18\xb1\x30\xa8\xdd\xbb\x93\xbb\x60\x04\x51\x6b\xf9\xee\xe2\x34\xb0\xb3\x19\xbf\x75\xdb\x1d\x08\x66\xec\xec\x46\x18\xb1\xbe\x1e\x63\x7f\xd0\x99\x30\x82\xe4\xba\xbb\x61\xd0\xa5\x30\x82\xe2\x26\xa7\xc3\x66\xc7\xc2\x98\x77\x30\xc2\xf5\x30\xd6\xbd\x60\xc6\x2e\x10\x96\xd1\xf0\x95\x51\xf7\x68\xab\xdb\xc1\x0c\x4f\xe7\xc3\xe0\x2c\x9d\x63\x62\x67\x17\xc4\x16\x9f\x65\xc3\x3d\x31\xd6\x11\x31\x48\xb1\xc7\x49\x31\xd2\x1d\x31\xec\x85\x1b\x74\x55\xec\x22\xf5\xb7\x8a\xb3\x5d\x1c\x14\x4d\xc2\x03\x77\x47\x10\xca\x96\xdc\x34\x87\xdc\x41\xf5\xbe\x5e\xfb\x58\x47\x03\x7f\x00\xb9\x64\x55\xf0\x41\xe5\xdb\x08\xff\xca\x74\x45\xda\x7a\x47\xa5\xdc\xe6\xe8\x1f\x5a\xd3\x50\x12\x4d\xb0\x61\xd6\xde\x87\x32\x23\x7f\xa2\x6a\xf1\xc9\xb5\xb9\xb5\x2f\x49\x95\x45\x06\x4b\x6f\xfc\x62\xb8\x78\xdd\x75\xad\xe7\x5f\x2a\xc3\x94\x12\x9e\xe7\x84\xa5\x06\x8d\x92\xe3\x7b\x82\x64\x29\x88\x85\x0c\x66\x99\xb1\x72\xf4\x17\x0d\x90\x25\x5f\x0b\xcc\x8c\x5a\xab\x6f\xe2\x52\x4b\xc3\xcd\x37\x71\xd4\x3d\x1c\xa7\xe3\x8c\xcc\x38\x19\xce\x34\xa9\x52\x2b\x3a\xb9\x22\x5b\xb8\xe6\x1d\xc9\x38\xf8\xbe\xa6\xe8\xf8\x9b\x63\x0b\x03\xb6\x84\x40\x14\xd9\x9f\x5a\x7d\xe3\x64\x44\x45\x99\x8c\xb0\x79\x5d\x26\x56\x66\x34\x21\x95\xd4\xe1\x8c\x4c\xd1\xb5\x55\x34\xc7\xe8\xad\xdb\x05\xc4\x28\xe1\x30\x52\xc1\xa8\x0b\x03\xed\x78\x16\xee\x53\xcd\xd3\x58\xba\x9f\x85\x9f\x87\x23\xf5\x8f\x77\x22\x55\x53\xec\x5d\x0e\xa4\xcd\x62\x6a\x29\x56\x9d\x46\xc5\x42\xb7\x4c\x12\x18\x6c\x82\x85\x16\x73\xe0\x4f\x9d\xa0\xb3\xeb\x8b\xd3\xdb\x8b\x13\xf4\xf9\xea\x1c\xfe\x3d\xbf\x78\x7f\xa1\xff\x3d\xfb\xf4\xf1\xe3\xc5\xd9\xed\x76\x1d\xed\x1b\xd3\xf0\x36\xcb\xcc\x79\x68\xb9\xcc\x5b\x9c\x0f\x32\xa5\x66\xa5\xd2\x0c\x6c\xec\x44\x5b\xeb\xd3\x3c\x0f\x3e\x9b\x92\x74\xd3\x8d\xb1\x77\x62\x1b\xd9\x17\x78\x63\x46\x66\x03\xb4\x2e\xcc\xd1\xb6\x34\x80\x1a\xe5\xbd\x65\x92\x4d\xf8\xff\x5f\x18\xfa\x89\x0b\x44\xbe\xe2\xbc\xc8\xc8\x3b\x74\x5c\xf0\x54\x1e\xdb\x04\x0c\xfd\xdf\x53\xf3\xa3\x37\x19\x9f\x6f\x2b\x3e\xe6\xb2\x36\x08\xca\xf8\x1c\xc9\xf2\xae\xca\xda\x01\xa5\x01\x68\x7d\xe3\x68\xb7\x32\x07\xb6\x19\x6e\x2e\x65\xa7\x41\xb3\x9a\x58\x8b\x62\xf3\x0f\xb6\xdf\x1b\x37\xa7\x37\x32\xc1\x19\x69\xd1\xd1\x3f\xe8\x7e\xdd\x37\x6f\xbe\x19\xb7\x05\xad\xb5\x39\x5d\x94\x8a\x0e\xbd\xbf\x30\x7d\xef\x1f\x68\x96\x26\x58\x6c\xcb\xe8\xef\x3e\x0d\x90\xfc\x06\x01\x0e\x29\x1d\xa6\x0f\x12\x03\x8d\x62\xec\x0e\xd8\x52\x3d\x7c\x49\x44\x86\x0b\x83\xe3\x26\x38\xb1\x35\xff\x61\x82\xe7\xa4\x20\x90\x1b\x66\x5a\x75\x6c\xbb\x59\x84\x25\x19\x97\xf0\xe7\xa0\x74\x9c\xb4\x96\x6c\xdb\xfd\xd9\x7e\x55\x23\x53\x79\xaa\x47\x3c\x5c\x9f\x63\x1f\xaf\x18\x60\xc2\x3b\xbc\x60\x03\x2b\x6e\xbb\xb5\x1b\xe5\xcd\xaa\x14\x0d\xf0\x71\x8c\x72\x31\x00\x0f\x3d\xb2\x99\x7c\x47\x27\xe8\xa8\xaa\xc6\x94\x5a\x23\xe8\xe8\x9b\xa3\xfa\x0f\x46\xbe\x5f\x6c\x93\x24\x13\xf3\xb1\x09\xcc\xb1\x99\x29\x0b\x97\x0d\x0c\xb8\xad\x7e\xc0\x6a\x51\x75\x55\x38\xad\x77\x58\x1f\x32\xcc\xbf\xfd\x35\xdb\xee\x43\x73\x89\x6b\x33\xae\xd3\x28\x3b\xb3\xdd\xb6\x72\x0b\x97\xab\x66\xab\xb7\xad\x41\x5c\x41\x29\x08\x93\xd2\x69\x8f\x4c\x34\x52\x72\xb6\xcd\xf9\xa6\xf5\x08\x1c\x34\xaf\x55\xda\x8e\x0a\x54\x60\xa1\x6d\x63\xf7\x97\xdb\x88\x36\x5a\xbd\x1f\x7d\xb3\xa5\x28\xce\xd6\x0b\xdd\x88\x60\x7a\xc7\x7b\x14\x16\x73\xa2\x86\x42\x83\x98\xad\x3e\x6d\xac\x5d\x3b\x19\x15\x39\x9c\x8c\x79\x9c\x5f\x27\x75\x5d\xd0\x09\x65\x6a\xc2\xc5\xc4\x7c\xe0\x1d\x52\x62\x43\x5b\x20\x45\x73\xc2\x4b\x75\x43\x12\xce\xfa\xd2\x1c\xec\x5f\x45\x89\x6e\x8e\xce\x03\xb1\xc1\xf4\x53\xa7\x62\xb9\x64\x90\x66\x44\xac\xb6\xb5\x07\x82\xe5\x66\xb4\x2a\x36\x7d\x7a\xff\xc1\xf7\xa8\x11\x64\xd0\x6f\x3e\xc9\x2f\x56\x3a\xb1\x79\x35\x73\xbb\x92\x8d\x1f\xf9\x50\xaa\xdd\x3e\x70\x56\x05\x6e\x87\xfe\xd2\x6e\xc9\x50\x7d\x99\x0d\xab\x95\x0a\xab\xb2\x73\x0f\x5a\x67\x63\xb9\xea\x8d\xc9\x30\xb3\xd6\xd5\x0d\x7c\xaa\xe9\xfc\x6e\xd6\xdb\x00\x05\xbd\x33\x0d\xd3\x08\x03\x3e\x05\xc0\xde\x82\xa7\x53\x64\xc9\xe4\x78\x85\x94\xc0\xd4\x38\x07\x70\xa2\x4a\x48\x54\xc7\xca\x82\x80\x6d\xad\xac\x7f\x5a\x5f\x4e\x8f\xd1\xbf\xd9\xd0\x4f\x88\x50\xf2\x3d\x96\xea\x73\x91\xe2\xde\x04\xa7\x0e\x90\x57\x2a\x78\x2e\xc6\x6c\x79\x60\x24\xd5\x4c\xdd\x6e\x84\xa1\x86\x1e\x34\xc7\x2c\x0d\xbd\x35\x72\x83\x17\xcc\x3d\x1f\xfd\xd1\x89\xfe\x9a\xbe\xd9\x5e\x73\xbd\x0b\xa7\x3d\xac\xa6\x8d\x99\xde\x36\x4b\x2d\xc9\x04\xd0\x42\x8c\x7c\x5d\xf7\x92\x84\xcd\x94\xb3\x74\x13\xd0\xa6\xbd\xa3\x56\x97\xaf\x3f\x70\x82\x30\x5a\x50\xa9\xb8\xb0\x61\x00\xe8\x24\x2f\x30\x93\xb4\x3f\x0b\x34\x1c\xb8\x73\x56\x7d\xb9\xb6\x10\x08\xae\x3a\xde\xda\xdb\x09\x0d\x61\x05\x49\xb8\x48\xab\x29\xf5\x73\xb7\x7a\x9a\x56\x6d\xec\x7f\x2b\x3d\x1f\x0e\x4c\xcf\xc9\xb0\x54\xb7\xd5\xb7\xeb\xc3\x1f\xc5\x65\xdb\x17\xda\x2e\xb7\x5e\x85\xab\x99\xc0\x99\xfb\xe5\x66\x8f\x1b\x47\x98\x19\xf5\xd9\x9f\xb7\x6e\xbb\x56\xf5\x5a\xcd\x7b\xf5\x58\xe7\x43\xf5\x36\x1b\x4b\x7e\xec\x19\xe7\x44\x4a\x3c\x1f\x37\xd5\x53\x53\xdc\x19\x55\xc5\x9d\xed\x87\x11\x65\x29\x4d\x40\x52\x54\x68\xb2\x3e\xae\x5a\x8f\x87\xc5\x6a\xf3\x15\xd4\xb2\xd4\xe5\x47\x57\x8f\xcf\xfb\xe8\x8a\x05\x96\xe3\x96\x57\xbd\x35\xe7\xbe\x18\xfb\x40\x46\xcd\x43\x10\x2c\x37\xe7\xd2\x74\xf6\xf9\x4e\x50\x32\x43\x67\x38\x27\xd9\x19\x96\x4f\xb1\xd1\xc0\x39\xa6\x88\x4c\xe7\x53\x74\x7c\xdd\x88\xae\x7c\xe4\xea\xc3\xe6\x8e\x39\x83\x29\xa3\xdb\xdf\x7d\xd8\x8b\xef\xc7\xb5\x6f\x7c\xeb\x41\x62\x63\xdb\xcb\x0e\x7a\xd3\x41\x33\xdb\xf8\x82\xc3\xde\xae\xbe\x3a\x7d\xc2\x20\xf0\xd5\x0e\x25\x8d\xf5\xbf\xd4\xf6\x1b\x2d\x05\x18\x64\x89\xdf\x5b\x1d\x4c\xf8\xea\x7f\x9f\x81\x2f\x33\x64\x1b\x77\x7e\x93\x83\xcb\xab\x3e\x7e\xd3\xa3\x44\xaf\xad\xf4\xb6\xa5\x01\x83\x07\xaa\x09\x68\x82\x4a\xe0\x7a\x8e\x67\x37\x5f\xe2\xa8\x3d\x4f\x9d\x91\x69\x0f\xae\xf7\x77\x6c\x23\xa8\x78\x93\x4c\x0e\xc9\xf0\x4c\xc1\x9f\xa7\xcf\xf5\x69\x02\xaa\xe7\xee\xfb\xac\x41\x63\x4d\x57\x7b\xda\x33\xdb\x10\xd7\xfe\xcd\xa0\xc3\xbc\xbe\x0f\xaf\x14\x47\x85\x20\x4b\x00\xbb\x31\xc0\xb2\x6b\xe5\x5d\xea\x07\xf1\x7a\xb3\x66\x36\x26\x16\xba\x1d\x5e\xb6\xf9\xfc\xdd\xef\x37\xdc\x02\xf7\xeb\x2d\x0a\xe4\xd0\xe1\x9a\x31\x2e\x5e\x3b\x98\xca\x6b\xc6\x48\x2f\xe7\x50\x5a\xef\x4e\x84\xb6\xa8\x7f\x3b\xd1\xea\x33\xce\xbb\xa3\x53\xec\x54\x7f\xe0\x1a\x18\xaf\x89\x9f\x24\x9a\xaf\x26\x58\x82\xaf\x10\x7e\x6c\x18\xcd\x36\x1f\x77\xd3\x56\xbf\xee\x72\x3a\xc8\xa8\x6a\xdf\xf9\x18\xcb\x2d\x4b\x1a\xe7\x0c\xb6\xa4\x59\x8f\xa4\xb5\xc7\x3c\xf1\x2d\x97\xe8\xb1\x4a\x30\x98\x31\x7c\xeb\x7c\xef\xdb\x36\x96\x10\x7a\xd3\xb6\xd7\xe6\x18\xb8\x5d\xd1\x13\xf7\x25\x11\x4b\x92\x36\xfc\xb0\xb6\x64\x76\xf3\x27\x0d\x77\xb9\xa3\x6b\xb7\x1e\xfd\xf7\xff\xfc\xd3\xff\x0b\x00\x00\xff\xff\x4e\x30\x00\x9d\x43\xdd\x0a\x00") +var _operatorsCoreosCom_clusterserviceversionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\x24\xb7\x91\x2f\xfa\xbf\x3f\x45\xc6\xd8\x7b\x48\xae\xd8\xcd\x19\xbf\xee\xee\x1c\xdf\xa3\xe0\xce\x50\x32\xaf\x66\x38\x8c\x21\x25\x1d\x87\xac\xd5\xa2\xab\xd0\xdd\x58\x56\x01\x65\x00\xd5\x9c\xf6\xd1\xf9\xee\x37\x90\x40\xbd\xba\x9b\x64\x17\x00\x9a\x1c\x19\xe9\x08\x6b\xf8\xca\xc6\x33\x33\x91\xf9\xcb\x4c\x52\xb1\xef\xa8\x54\x4c\xf0\xd7\x40\x2a\x46\x3f\x69\xca\xcd\x57\x6a\x7a\xf3\x6f\x6a\xca\xc4\xc9\xea\xd5\xaf\x6e\x18\xcf\x5f\xc3\x9b\x5a\x69\x51\x7e\xa4\x4a\xd4\x32\xa3\x6f\xe9\x9c\x71\xa6\x99\xe0\xbf\x2a\xa9\x26\x39\xd1\xe4\xf5\xaf\x00\x08\xe7\x42\x13\xf3\x6d\x65\xbe\x04\xc8\x04\xd7\x52\x14\x05\x95\x93\x05\xe5\xd3\x9b\x7a\x46\x67\x35\x2b\x72\x2a\x91\x79\xf3\xd1\xab\x97\xd3\xdf\x4f\x5f\xfd\x0a\x20\x93\x14\xff\xfc\x9a\x95\x54\x69\x52\x56\xaf\x81\xd7\x45\xf1\x2b\x00\x4e\x4a\xfa\x1a\xb2\xa2\x56\x9a\x4a\x45\xe5\x8a\x65\xd4\xfd\xbd\x9a\x8a\x8a\x4a\xa2\x85\x54\xd3\x4c\x48\x2a\xcc\x7f\xca\x5f\xa9\x8a\x66\x66\x14\x0b\x29\xea\xea\x35\xec\xfc\x1d\xcb\xb7\x19\x2c\xd1\x74\x21\x24\x6b\xbe\x9e\x80\x28\x4a\xfc\x97\x5b\x02\xfb\xe1\x57\xf6\xc3\xdd\xba\xe1\xcf\x0b\xa6\xf4\x37\x77\xff\xce\x3b\xa6\x34\xfe\x5e\x55\xd4\x92\x14\x77\x4d\x03\x7f\x45\x2d\x85\xd4\x17\xdd\xa0\x26\x90\xa9\x55\xf7\x2f\xf7\x4b\x8c\x2f\xea\x82\xc8\x3b\x38\xfd\x0a\x40\x65\xa2\xa2\xaf\x01\x19\x55\x24\xa3\xf9\xaf\x00\x9a\xcf\x31\x8c\x27\x40\xf2\x1c\x37\x90\x14\x97\x92\x71\x4d\xe5\x1b\x51\xd4\x25\x6f\x3f\x36\xa7\x2a\x93\xac\xd2\xb8\x41\xd7\x4b\x8a\x2b\x05\x62\x0e\x7a\x49\xe1\xcd\xd5\x77\xf8\x6b\x00\xff\xad\x04\xbf\x24\x7a\xf9\x1a\xa6\x66\xc1\xa7\x39\x53\x55\x41\xd6\xe6\x83\xdd\x6f\xd8\x9d\x7b\x6b\xbf\xef\xbe\xa7\xd7\x66\x74\x4a\x4b\xc6\x17\x77\x7d\x9e\x1b\xee\xc3\x1f\xb9\xea\xed\x44\xf3\x71\xdf\x0d\xbe\xb7\xcf\xc7\x35\xd3\x23\xe6\x93\x40\x2f\x89\x06\xbd\x64\x0a\x04\xa7\x20\x69\x55\x90\x8c\xaa\x3b\x06\xb0\xf1\x63\x3b\x82\x8f\xc3\x6f\xee\x18\x42\x9f\x8d\x26\xba\x56\xd3\x6a\x49\xd4\x70\xd9\x2e\x7b\xdf\xd9\x62\x61\x7f\x65\xf5\x8a\x14\xd5\x92\xbc\xb2\x27\x23\x5b\xd2\x92\xbc\x76\x7f\x21\x2a\xca\x4f\x2f\xcf\xbf\xfb\xdd\xd5\xe0\xdb\x30\x9c\xfd\xce\x33\x0b\x4c\x99\xa5\xc0\x5b\x0f\xcd\xb5\xc7\xbd\x58\x57\x14\xfe\x6b\xe7\xdf\x5c\x55\x34\xfb\xaf\x69\xfb\x21\x76\xbc\x62\xf6\xdf\x34\xd3\xed\x37\x25\xfd\x5b\xcd\x24\xcd\xbb\xb1\x4c\xa0\x11\x21\xbd\x6f\x99\x75\x6d\xbf\xac\xa4\xb9\xbc\xba\xbd\x98\x96\x7a\xb2\xab\xf7\xdd\x8d\xb9\x1d\x98\xe9\xbb\x19\xe5\x46\x68\x51\x85\xa7\xc9\x9d\x19\x9a\xbb\x15\xb3\xa7\x8c\x29\xb3\xd5\x92\x2a\xca\xad\x18\x1b\x30\x06\x3c\x1e\xdc\xcd\x68\x0a\x66\xf2\x54\x2a\x73\x65\xeb\x22\x37\xb2\x6e\x45\xa5\x06\x49\x33\xb1\xe0\xec\xef\x2d\x6f\x05\x5a\xe0\x87\x16\x44\x53\xa5\x37\x78\xe2\xdd\xe3\xa4\x80\x15\x29\x6a\x7a\x0c\x84\xe7\x50\x92\x35\x48\x6a\x3e\x05\x6a\xde\xe3\x87\xbf\xa2\xa6\xf0\x5e\x48\x0a\x8c\xcf\xc5\x6b\x58\x6a\x5d\xa9\xd7\x27\x27\x0b\xa6\x1b\x99\x9d\x89\xb2\xac\x39\xd3\xeb\x13\x14\xbf\x6c\x56\x1b\xb1\x77\x92\xd3\x15\x2d\x4e\x14\x5b\x4c\x88\xcc\x96\x4c\xd3\x4c\xd7\x92\x9e\x90\x8a\x4d\x70\xe8\x1c\xe5\xf6\xb4\xcc\x7f\x2d\xdd\x76\xab\x83\xc1\x58\xb7\xce\x9f\x25\x14\x8e\xf7\xec\x80\x11\x8c\xf6\x34\xd9\x3f\xb5\xb3\xe8\x16\xda\x7c\xcb\xac\xce\xc7\xb3\xab\x6b\x68\x3e\x1a\x37\x63\x73\xf5\x71\xdd\xbb\x3f\x54\xdd\x16\x98\x05\x63\x7c\x4e\xa5\xdd\xc4\xb9\x14\x25\xf2\xa4\x3c\xaf\x04\xe3\x1a\xbf\xc8\x0a\x46\xf9\xe6\xf2\xab\x7a\x56\x32\xad\xf0\x5c\x52\xa5\xcd\x5e\x4d\xe1\x0d\x2a\x32\x98\x51\xa8\xab\x9c\x68\x9a\x4f\xe1\x9c\xc3\x1b\x52\xd2\xe2\x0d\x51\xf4\xd1\x37\xc0\xac\xb4\x9a\x98\x85\xdd\x6f\x0b\xfa\x3a\x78\xf3\x97\x37\xee\x1f\x40\xa3\x17\xef\xd8\xaf\x3b\x6f\x36\xe4\x34\x2b\x88\xb4\xea\x1d\x34\x2d\x0a\xf8\xf0\xee\x3d\x2c\xc5\xad\x39\xdf\x8c\x2b\x4d\x50\x53\xf7\xc9\xdc\x16\xa7\x77\xad\x48\xcd\x08\x87\x92\x70\xb2\xa0\x40\xaa\x4a\xc1\x5c\x48\x20\xb0\x60\x2b\xca\x9b\x3b\x39\xdd\x67\x12\xbb\x04\x09\x58\xc1\xbe\xa5\x80\x9a\x9f\xec\x1a\xe2\x6e\xd1\x62\x87\xbe\x61\xcb\xdc\xb9\x62\xa7\xdd\x6f\xe2\x39\xe7\x50\x73\xa5\x65\x8d\xdb\x9b\xc3\x0d\x5d\xbb\x23\x5f\x92\x0a\x94\x16\xe6\x9b\xb7\x4c\x2f\xb7\xb8\x02\x90\xfe\x05\x20\x1a\xcf\xf5\x8c\x82\xa2\x1a\x66\x6b\x30\xe6\x19\x8a\x0a\x2d\x44\x81\x52\x05\xb9\xa1\xc8\x90\x54\x4b\x46\x57\x74\x17\x53\x39\x63\x5a\x12\xb9\x6e\xcf\xc9\x74\xeb\xb7\xee\x5c\x66\x64\xd0\x33\x15\xee\x5a\x2e\xb8\xfb\x74\x82\x15\xd6\xce\x46\xc9\x5b\xd3\xf1\xc1\x75\xbd\x3c\x77\xa7\xb0\x33\x37\x95\x3b\x85\x54\x01\x29\x8a\xc6\x36\x68\xed\x56\xfc\x9c\x1d\x23\xb3\x47\x2e\x07\x21\xdb\x73\x63\x16\xb4\x7f\x3c\x67\xd4\x08\x22\x49\xb8\xf9\xc1\xce\x4b\x30\x72\xd5\xee\x3e\x5a\x86\xc4\x2d\xdf\x3c\xbb\x43\xae\x44\xca\xd6\x5c\x1a\x12\xd3\xb4\xdc\xc9\xf3\xde\x15\x6c\xbf\x6d\x06\xb6\x62\x39\x35\x4b\xa9\x09\xb3\x07\xc9\xdc\x64\x32\x13\xf5\xf6\x34\x1a\x32\x2b\xdb\xfc\x69\x0e\x2b\x46\x80\x2c\x16\x92\x2e\x76\xe9\xc9\xbd\xd6\xc7\xd2\xee\x6b\xdc\xd1\xc4\xda\xef\x77\xfe\xd4\x08\xc9\x3b\x7f\xc8\x37\x85\x40\xff\x87\x43\xb3\x71\x93\xee\xdf\x3d\x4b\x24\x33\x73\x6f\x96\x56\xc8\x7b\x7e\xf5\xe1\x5d\xb5\x74\xef\xde\x5a\x1a\xee\xf0\xc6\x10\xdc\x4f\x67\xe6\x7e\x74\x02\x7b\xa7\x58\xd8\x9e\x49\x27\xa2\x67\x14\x2a\x2a\xe7\x42\x96\xe6\xd2\x70\x20\x90\x59\x4b\xb0\x15\x4f\x28\x4c\x79\x76\x3f\xe3\x3d\xf6\xdf\xd2\x43\xa7\xc0\xd2\x04\x2a\xb2\x53\x6c\x76\xb4\xcf\xb6\x59\xea\x2f\xe3\x03\xbf\x7a\xaf\x64\xdb\xe2\xdb\xe9\x9f\xa8\x7c\xcd\xd4\xa3\x32\x44\x9d\xf4\x30\xc7\xc1\x71\xfb\x48\x6e\xdf\x53\xa5\x8c\xfa\x46\x8b\x4e\x92\x5b\xa0\x3c\x13\x46\x24\xfc\x7f\x57\x1f\x2e\x2c\xd3\x6d\x41\xb9\x4d\xe7\x1a\x58\x59\x15\xb4\x34\x86\x1c\xbc\x27\x52\x2d\x49\x41\x25\xea\xb2\x6f\x79\x39\xf8\x3a\x23\x77\xdd\xd2\x3e\x19\x6b\x4d\xd1\xdc\x48\xb3\x9c\x16\x64\x6d\x07\x94\xd3\x4c\xe4\x46\xb2\x0b\x09\x95\x31\xa5\xcb\xaa\xd6\x14\x08\xfe\x74\x0f\xae\x38\x3b\xc6\x17\x0f\xcf\x69\xc4\xd2\x83\xb1\x7b\x4a\xa2\x5f\xc3\x6c\xad\x1f\xba\x9b\x9f\x26\xf9\x7e\x12\xa6\x3f\x8c\x87\xe4\x8c\xa5\x3d\xa4\x4d\x9f\xe9\x03\x73\x33\xc6\x2e\x61\x9c\xca\x4b\x21\xf5\xc3\xa2\xd0\x3c\x7c\x16\x54\xde\xf3\x7b\xcd\x22\x31\xae\x7f\xf7\xdb\x3b\x7f\x2f\xa7\x55\x21\xd6\xe6\x1c\x3d\x74\xe7\xf6\x9a\xc5\x9e\x72\x61\x3f\x5e\xfb\xc9\x82\xbd\x78\x59\x37\x56\x28\x97\xed\xc7\x9a\x07\x13\x1e\x63\x3e\xed\x23\xf3\x09\x94\xe6\xe5\x79\xe3\xd1\xf8\x48\xe7\x54\x52\x9e\x39\x79\xf6\x4d\x3d\xa3\x92\x53\x4d\x55\x3b\xbe\x07\x6e\x07\xba\x43\x50\xee\x18\x7b\x72\x53\x4d\xfe\x63\xb5\xe3\x3d\xb6\x50\xf3\x2b\xf7\x58\x44\xcd\xaf\xdc\x6f\x17\x59\xda\x5f\xcd\x3e\x74\xe0\x2c\x8d\x90\x9d\x0f\x1d\xbe\xd1\x0c\x57\xbb\x9c\x48\xde\x3c\xcd\xeb\xfa\x49\x2d\xc2\xab\xc1\x00\x06\xf6\xe0\x9c\xd1\x22\x07\x66\xcc\xb9\x81\x7f\x6d\x37\xcd\x0a\x91\xdd\x38\x8f\xe8\xc7\xb7\xa0\x84\x35\x0f\xcd\x4b\xc1\x98\x88\x99\xe0\xaa\x2e\x29\xb0\xfb\xcf\x6e\x32\x01\xe3\xf1\x4d\x26\xe0\x03\x94\x4c\xc0\xde\x30\x9e\xc2\x04\xb4\x71\x8c\xa7\x95\x7f\x1b\x43\xb8\x53\x02\xe2\xef\x25\x19\x98\x64\x60\x92\x81\x0f\x73\x4d\x32\x10\xf6\x9d\xdb\x1e\xf6\xe4\x03\x7c\xee\x17\x03\xc9\x3d\xdc\xa3\xe4\x1e\xde\xa4\xe4\x1e\xbe\x87\x92\x5e\x4c\x7a\x31\xe9\xc5\xe4\x1e\xf6\x9f\x45\x72\x0f\x27\xf7\x70\x72\x0f\x27\xf7\xb0\x27\xcf\xe4\x1e\xde\x35\xc9\x64\x02\xc6\xe0\x9b\x4c\xc0\x07\x28\x99\x80\xbd\x61\x24\xf7\x70\x72\x0f\x27\x19\x98\x64\x60\x92\x81\x0f\xfd\xee\x73\x72\x0f\xdb\x07\x44\xf3\x7e\xd8\x1f\x4b\xfd\xe2\xae\xfc\xbd\xdd\x80\xea\x37\x1f\xdf\xaa\x06\x34\xbd\x63\xa0\x61\x30\x6a\xf8\xeb\xae\x83\x7a\xde\x7e\x32\xa0\x27\x19\x53\x3c\x8c\x2c\x36\xdf\xfd\x70\xcb\x69\x8e\x69\x76\xc7\xc0\xb4\xf9\x05\x73\x2d\x58\xc6\x74\xb1\x6e\x87\x32\x7d\xb1\xc5\xf6\xb9\x03\xb4\xdf\x7c\x7c\xbb\xb7\xeb\xdd\x2c\xc4\x9d\x87\xc6\x6c\xd8\x1d\x3f\x8c\xe2\x65\x4f\x7e\xf4\xe4\x47\xef\x51\x32\x20\x92\x01\x91\x0c\x88\xa7\x31\x20\x9e\xab\x07\x3a\xf9\x8e\x93\xef\x38\xf9\x8e\x07\x94\x7c\xc7\xbb\x29\xf9\x4d\x06\x94\xcc\x9e\x64\xf6\x3c\xf4\x9b\xff\xf4\x66\x4f\xf2\x1d\xdf\x3d\xd1\x24\x03\x63\xf0\x4d\x32\xf0\x01\x4a\x32\xb0\x37\x8c\xcf\xcf\x77\x0c\xff\x40\x68\x71\x72\x6c\x26\xc7\x66\x72\x6c\xb6\x94\xb4\x5b\xd2\x6e\x0f\xfd\xe6\x3f\xbd\x76\x4b\x8e\xcd\xe4\xd8\x4c\x8e\xcd\xe4\xd8\x4c\x8e\xcd\x64\xf6\x44\xe3\x9b\xcc\x9e\x07\x28\x99\x3d\xbd\x61\x24\xc7\x66\x72\x6c\x26\x19\x98\x64\x60\x92\x81\x0f\xfd\xee\x73\x72\x6c\xde\x7b\x1f\xef\xfb\xbb\xfb\xee\xdb\x3d\x7f\xc7\xb2\xbb\x3f\x68\xf7\xea\xdd\xb9\x5a\x0f\x88\xb9\xfb\x84\xdb\x04\x66\x44\xd1\x3f\xfe\x7e\x50\x39\xbf\xff\xe3\x92\xe6\x8c\x98\x0f\xd8\xf1\xd3\x87\x84\x5d\xc7\xfa\xae\x3d\x79\x70\x5f\xdb\x8f\xf7\xe0\xe0\x4a\x75\x3f\x00\x6a\x36\x1b\x97\x9f\xdb\x5f\xbd\xd2\x92\x68\xba\x58\xf7\xca\xc3\x23\x72\xb8\xd3\x46\xfc\x9e\x06\x1e\x43\x6a\x9d\x94\xb7\x4b\x2a\x29\xb2\x71\x03\x32\xa3\xb5\x1f\xc3\x14\xbe\x07\xd8\x9c\xd1\x7c\x64\x61\xe8\xbb\x37\x75\xd2\xf2\xdf\xfa\xd1\xfd\x1b\xb6\x5d\xd3\x7d\xe7\x82\x35\x8b\xf4\xd6\x7a\xe1\xdf\xb6\xa9\xd1\x9b\xab\x56\x11\x69\xe4\xa1\xf3\xd6\xdf\xb1\x7f\xa8\xe2\x7b\x3c\x36\x76\x62\xb7\xd8\x7b\x50\xaf\xdf\xaf\xcf\x27\xbd\x7c\xee\xdd\xe3\x7a\x58\x8d\xbb\x9e\x29\x97\x54\x96\x4c\xa9\xdd\xe0\xf9\xe1\x70\xef\x17\x89\x0f\x8a\xc2\x3b\xf6\xa0\x99\x47\x6f\x20\xad\xe1\x75\x6f\x4c\xc4\x90\x9c\x91\x0c\x64\x5d\x18\x13\x8d\xe7\xe0\x8a\xab\x03\xc9\x32\x51\x73\x0d\x9c\xd2\xdc\xfa\x57\x76\x9d\xde\x07\xc5\xec\x83\x76\xd7\x3e\x56\xd7\xc4\x8e\xef\xde\xdf\x70\xe3\x3e\xb5\xc3\xde\x2a\xda\x3f\xa4\x7d\x2d\x34\xfc\xd8\x87\x74\xd3\xfe\xca\x6e\x4f\x55\x37\xd8\xe5\x4b\x51\xb0\x6c\xfd\xb1\x2e\x28\x2c\x45\x91\x2b\x6c\x16\x61\xf4\x76\x1b\x26\x69\x4d\xec\x3d\x74\x28\x81\x0a\xf9\xe1\xcc\x8e\x61\x56\x6b\xc8\x05\x55\xc0\x85\x6e\xca\x2a\xf4\x3f\x60\x1f\x8e\x18\x78\xbb\x5d\xda\xc6\x24\x86\x2d\x90\xaa\x2a\x18\xc5\xd0\x9c\x90\x70\xbb\x64\xd9\xd2\x76\x47\xaa\xc8\x83\x1e\x3d\x43\x3b\x18\xed\x6b\xf9\xec\x61\xe6\xc3\xde\xa6\x3e\x34\x1e\xb9\xd9\xc3\x4b\xbb\xbf\xcd\x0f\xb6\xc6\xd1\xd7\x52\xd4\xd5\x5e\xbf\xbc\xed\x3f\xb5\x7f\x6b\x34\x87\xde\x68\xa7\xd4\xfc\x70\x2f\xb6\xe0\xc2\x6c\x76\xdf\x2d\xb3\xd6\x31\x3c\xc5\x44\x9a\xb2\x2e\x34\xab\x0a\x64\xbc\x27\xcf\x85\x1d\x1c\x91\xb4\xd3\x6b\xc7\x40\xf8\xba\x89\xed\xb9\x06\x29\x34\x07\xb2\x30\x9f\xfb\xf0\x76\x59\x12\xbc\x9d\x26\xe5\x75\x49\x8d\x04\xca\xbb\x01\xe3\xc3\x92\xaf\xcd\x48\xef\x2d\xe5\xb4\x49\xb7\xac\x28\x8c\xdd\x4e\x8a\x42\xdc\xee\x52\xc1\xbb\x68\x8c\x81\x0b\x63\x8c\x5c\x18\x6b\xc4\x03\x70\xc1\x1b\x87\xfa\xb7\x1f\xdf\xf9\x1c\xa9\x8b\x21\x07\xd7\x63\x87\x6a\xb3\xdc\x15\x91\x9a\x91\xcd\x76\x2c\x77\x51\x2d\x0b\x65\x4f\x15\x31\x0f\x21\xd9\xb4\x34\x5a\x92\x15\xaa\x14\xaa\x6c\x5f\x1c\xf8\xd7\x7d\xa4\x15\x60\xcf\x91\x76\x6b\xac\xbc\x12\xbc\x58\x03\xb1\xa7\x75\x5e\x17\xc5\x31\xcc\x19\x27\x46\x25\xd1\x7d\xb7\xdc\xe5\x82\x99\xd7\x2c\x5c\x31\x9e\x51\xb3\x86\x93\xd6\x58\xc3\x35\x30\x9f\xcb\xc5\xbe\x67\xb3\x15\x6f\xf9\xb1\x6b\x1c\x64\x7d\x1d\xca\x0d\xd7\x08\xb2\x8c\xcc\x0a\x6a\x1e\x5d\x7b\xf2\x74\x46\xe6\x47\x51\x60\x40\xc4\x85\x4a\x72\xdb\x93\x88\xf4\x7f\xfc\x1f\x8c\xef\xf7\x3c\xb4\xf4\x11\x95\x7d\x46\x38\x50\xa6\x97\xe6\x7d\x5b\x55\xc5\xda\x88\x6b\x73\x77\xba\x0b\x75\xa8\xea\xec\x7e\x4f\x47\x47\x44\xc1\x8b\x4a\xe4\xea\x85\x11\xf9\x2f\x14\xcd\x24\xd5\xea\xc5\x91\xf9\x6a\x73\x6d\xf7\xe4\x68\x76\xc7\x8d\x01\xb9\x9f\x90\x8a\xbd\x38\x3a\x06\x3c\x04\xd8\x54\x49\xe8\xe5\xe7\x77\x5b\x9b\x95\xe8\x75\xe6\x7b\x88\x86\xde\x8f\xfe\xdf\xbb\x2e\x41\xa2\xb2\x4d\x75\x8c\xae\x7d\xf0\x29\xdf\x50\xc1\x14\x5e\x70\x3c\xba\x4d\x9b\xba\x6d\xc5\x0b\x70\xba\x8f\x19\x60\x88\x96\x95\x5e\xa3\xdc\x28\x29\xe1\x8e\x27\x5d\x51\xb9\xd6\x4b\xc6\x17\x38\xd8\xcf\x55\xc8\xee\x15\x30\xed\x68\xe7\x96\x39\xc1\xda\x2c\x7c\xcb\x72\x6f\x65\xcd\xd4\x8e\xed\x69\xb8\x9f\x16\x45\xef\xf1\xb5\xef\xb5\xc5\x3f\x6a\x54\xfe\x67\xb7\x2b\x68\x9b\x79\xec\xc8\x77\xe6\xef\x86\xbb\x61\xbf\x65\x55\x97\x11\x87\xfb\x0e\x58\xc0\xe9\xbb\x77\xb6\xed\x9c\x5b\xc7\x6f\x18\xcf\xed\x5b\xea\x54\xdb\x9e\x6d\xf4\x23\x35\x53\x42\xf3\x67\xdf\x9d\x69\x8a\x9c\xe5\x56\x5b\xb9\xad\x9f\x02\x0e\xd4\x7b\xaf\xb1\x13\xdc\xe7\xb4\xcf\xdb\xcf\xba\xfd\x9e\x63\xf7\xb2\xee\xbd\xfc\x9f\xf6\xc1\x8e\xdd\xf0\x06\xf6\xb7\x91\xc6\xc7\x0f\x07\x88\xcd\xe9\x2a\xc8\x8c\x16\xb6\xf1\x9d\xf9\xcb\x6e\x52\x70\xfa\xee\x7d\xdb\x4b\x52\x52\x72\xaf\x4a\x88\xfa\x4c\x7f\x00\xe0\x30\x79\x68\x62\xfb\xbe\xa2\x70\xea\x63\x82\x2b\x70\x45\xb5\xbd\xef\x25\xa9\xcc\x75\xb7\x1c\x6c\xa4\x60\x18\x07\x78\xf0\x04\xbf\xc3\x75\x7f\xe8\x12\x8d\x78\x8f\xee\xdb\x15\x6f\xd7\x07\xec\x71\x85\xf6\xc1\x6c\xec\x7f\x1f\xef\xf4\x0f\x76\x34\x58\xf8\x8d\xc3\xee\xde\xac\xee\x65\x98\x59\x37\x86\x98\x3f\x3c\x5b\x3c\xe1\xca\x16\x8a\xa0\x4b\xb2\x62\x42\x36\xaf\xc1\xee\x23\x22\x6e\xca\xbe\x2e\x82\x09\x28\x5a\xd0\x4c\x3f\x68\xd6\x4f\x40\xd3\xb2\x2a\xee\xbf\x8d\x30\xd2\x95\x50\x32\xfe\x91\x92\x7c\x7d\x45\x33\xc1\xf3\xbd\xc4\xef\x60\x77\xde\x33\xce\xca\xba\x04\x5e\x97\x33\x8a\x0b\xaa\x2c\x27\x14\x2b\xe8\xba\xd9\x4b\xa2\x13\xe0\xf4\xb6\x58\x3b\x71\x93\x43\x25\xf2\x46\x02\xcd\x28\x48\x33\x44\xec\x54\x29\x6a\x6d\x1e\xe9\x7b\xf1\x14\x73\x60\x5a\x75\xd5\x3e\x21\x93\x44\x19\x43\xf2\x18\x07\xc7\xb4\x51\xbe\x33\x8a\x71\x60\x96\x53\xb9\xb3\xc0\xc8\x8e\xa1\xae\x08\x2b\xcc\x53\x6c\x0a\x6f\xe9\x9c\xd4\x05\xb6\x6a\x85\x97\x70\x68\x06\xdd\x78\x03\x7c\x99\x9a\xa7\x8a\x12\x82\x9b\xff\xda\xfa\x22\x38\xf9\xa3\x7d\xdc\x5e\x78\x38\x1f\xae\x56\xda\xd0\x7e\x55\x4b\x1b\xaa\x48\xad\xf6\x71\x78\x6d\x1c\x90\x73\x9e\x9b\x5b\xda\x7f\x21\xf4\x14\x0d\x53\x8e\xef\x3e\x26\x85\x9d\xdf\x4c\x88\x82\xee\x11\x4b\xad\xa4\x58\x48\xaa\xd4\x5b\x4a\xf2\x82\x71\xea\x7b\xc2\xaf\x97\x14\x4a\xf2\x09\x4f\xb9\x66\x25\x35\xe6\x54\xff\x8c\x93\xde\x7c\xf6\xb3\x8b\x04\x94\xe4\x86\xb6\x03\x84\x19\x9d\x63\x13\x5f\x5c\x8e\xee\xdc\xd8\xd3\xb9\x17\xcb\x39\x61\x05\xcd\xa7\x38\xd6\xde\xea\x76\x3d\xef\xed\xb1\x34\x5f\x33\x5e\xef\xc7\x53\x0b\x33\x42\x74\xb8\x58\xf6\x7d\xab\x07\xed\x07\x62\x18\x5a\xcd\xb3\x17\x47\x73\x7f\x81\xc0\xe5\xc6\xc6\x9c\x7d\xca\x6c\x88\x40\x52\xa2\x04\x6f\x6e\xd0\x5e\x2c\x55\x2d\xe7\x24\x6b\x6c\xdc\xc1\xe4\x5d\x23\x73\xb8\x10\xda\xb5\xb0\x6d\x16\x7c\xcf\xc1\x16\x05\xb8\xd6\xcb\x54\x69\x56\xa2\x58\xca\x6b\xd9\x34\x89\xc6\xb3\x30\x7a\xf3\xbb\x03\x3f\x10\x1e\x7f\x7c\xf9\x72\x2f\xab\xfa\x71\xaf\xb8\xa4\xe8\x65\x1a\x7f\x47\x2e\x5a\xe9\xdf\xa8\xd8\x4a\xe4\xca\x9c\x47\xe6\x5e\x49\xd8\xfb\x7a\xaf\x21\xe3\xc9\xcb\x99\xd2\x8c\x2f\x6a\xa6\x96\x30\xa3\xfa\x96\x52\x0e\xf4\x93\xad\xb3\x04\x7f\xa7\x52\xe0\x01\x34\xdb\x73\x4f\xe8\x73\x17\xf5\x17\xfd\xd5\x73\x58\xf1\x15\x53\x4c\xf0\x3f\x33\xa5\x85\x5c\xbf\x63\x25\xbb\xb7\x20\x75\x43\x5b\x12\xaa\xd3\xbf\xa2\xc8\xb1\xe3\x3f\xcb\xc8\x15\xb5\x13\x95\xd4\x28\xc0\x7d\xd7\x1e\x5d\x2c\x60\xe4\xc6\x8c\x64\x37\x3b\x36\x71\x63\x83\xf6\xe2\xbb\xef\x26\xb6\x1b\xb4\xef\x68\x5f\xbd\x7c\xfa\x5d\x6c\x0c\xb8\xd1\x3b\x87\x2f\x81\xf6\xcf\x51\x9d\xd8\x8b\x73\xf6\xc9\xae\x6f\x7f\x27\xf7\x13\x5b\x4b\xa1\x28\x32\xb1\x01\x14\x64\xdd\x84\x5f\x99\x6a\xcd\x13\x23\xc1\x04\xdf\xd3\x75\x44\xe6\xf3\x21\x97\x4e\xe8\xe1\xdb\xa7\xac\x95\x86\x92\xe8\x6c\xf9\x60\xb0\xb8\x21\x63\x2a\x35\xe6\xec\x81\x72\x4f\xd1\xfd\x77\x72\xcf\x30\xdd\xd8\xb0\x1a\xd8\x59\x9c\x7d\xaa\x8c\x9e\xb8\x3f\x1e\x3f\xa4\xc1\xb6\x6e\x32\x19\x3a\x8a\x70\xae\x7b\xb2\xed\xce\x56\xf3\x9e\x40\xf5\x6b\x35\x7d\xff\x3b\x66\xb7\xf7\xe6\x79\x7a\xf1\x76\x5f\x79\x39\xde\x8d\x33\xd2\x91\xb3\x19\x9c\xb4\xcb\xb3\x73\xda\x7b\x73\x84\x26\x00\xe5\x78\x0c\xa3\x94\xf8\x66\x57\xc7\x40\xe0\x86\xae\x8f\x47\x30\x45\x9b\xa7\x57\x60\x10\xd9\x4a\x5a\x38\xeb\x96\x62\x7f\x7d\xf2\x40\x12\xc7\x90\xec\x58\xf6\xdd\x8a\xd1\xa7\xdf\xd2\xfe\xc1\xea\x86\x26\x66\x2a\x23\x7e\xbb\x59\x92\xbd\xff\x64\xec\xb5\xb4\x74\x43\xd7\x63\x7e\x7d\xe3\x68\x99\xdd\x71\xde\x03\x7b\xc6\xcc\x37\xcc\x1e\x8e\x62\x69\x3d\x09\xed\xd1\x1a\x83\x30\x18\x30\x19\xe7\xa7\x6e\xa8\x59\xe8\x80\x65\x68\x8f\x6f\x0f\x68\x85\x57\xe1\x60\x5f\x3f\x70\x43\x78\xf4\x8d\x7c\x5b\xb2\x0a\x0d\x87\x26\xe4\xeb\x4e\x35\x7c\x47\x0a\x36\xe6\x36\xf4\x67\x68\xf5\xd7\x39\x3f\x36\x06\xbc\xf9\x0f\xaa\x44\x35\xf2\x7e\x19\x7a\x2b\xa8\xba\x10\x1a\xff\xfe\x1f\xb2\x49\x76\xfa\x01\x5b\x64\x19\xb8\xd8\x1c\x4a\x5e\x74\xac\x8c\x1d\x47\x37\x96\x69\x53\xd3\xb4\xdd\x7c\xa6\xe0\x9c\x83\x90\x6e\x75\x3d\xae\x80\x1b\xa4\x1d\x1e\x5a\x00\x33\x1b\x06\xc7\x28\xde\xb8\x85\x86\x5d\xe3\x73\x1b\x2e\xe4\x60\x07\xa3\x0d\xd5\x0e\x13\xad\xdb\x91\x2c\x2d\x1f\xf4\xcc\x54\x05\xbe\x3e\xdd\xb3\x90\x34\xb0\x36\xf6\x50\x76\xd6\x26\x95\x54\x2e\x10\x4f\x90\xed\x19\x91\x6e\xa7\x37\x5a\x3b\x5b\x1a\xa9\xa3\xfb\x1f\x36\xe2\x1c\xa2\x21\x64\xdd\xdd\xfe\x86\x94\xfd\xfb\x81\xf3\xfd\xff\x18\xcd\x8d\xbb\xfa\x7f\xf7\x57\x39\x84\x49\x35\x85\x53\x50\x8c\x2f\x0a\xda\xe7\xd1\x78\x0f\x7a\x1f\xb7\x37\x5b\x33\x22\xa6\xc0\xa8\xd8\x15\x29\x28\x47\xa7\x22\xe1\x40\x6d\x34\xc0\x8c\x76\xd3\x1c\xdc\xff\x08\x5b\x6b\xde\xe8\xa9\x16\x0e\xf2\xe2\x86\xae\x5f\x1c\x6f\x5e\x96\xbd\x39\xbe\x38\xe7\x2f\x8e\xd1\x92\xd9\xba\x18\xad\x81\x84\x88\x93\x17\xf8\xb3\x17\xfb\x9f\xc6\x5d\x16\xa9\x8f\xa5\x39\xca\xb8\xf1\x8b\x7c\x0c\x3f\x70\xcf\xf3\xdc\x20\x56\xbd\x9e\xe7\x03\xbf\x94\xc3\x6d\x6b\x01\xb5\xa2\xf6\x7d\x8e\x72\x64\xaf\x71\xd3\xe6\x65\x88\x6f\x3c\x74\xa9\x71\x7a\x8b\x6f\xb9\x67\xf0\x7c\x92\xa2\x28\x18\x5f\x7c\x5b\xe5\x44\xef\x91\x96\x63\x69\xb0\x5a\x07\x1f\x2d\x0b\xa8\x91\x87\x39\x95\x73\xb6\x80\x8a\x48\x52\x8e\x30\x94\x2f\x5d\xd5\x6e\x3c\xcb\x6c\xde\x8f\x22\xb9\xf5\xbf\x5e\x57\x14\xfe\x5f\xf8\xd8\x1f\xf1\xfe\xfc\x27\x93\x09\x5c\x7f\x78\xfb\xe1\x35\xd8\xbf\xb4\xef\x62\x2d\x60\x2e\xd0\x7d\x22\x6a\x69\x86\xbe\xa2\x7c\x6f\xf7\x28\x58\xbf\x83\xd9\xca\x0f\xf3\x63\xb8\x5d\x12\x4d\x57\x54\xc2\xad\x39\x3e\x19\xcb\x69\x1b\xb1\x98\x1e\x3c\xde\x8d\xf2\xb1\xcc\x4b\xf2\xe9\xaa\x96\x8b\xbd\x37\x1c\xb6\x36\xbd\xef\x64\xef\x5c\x59\xe6\x88\x8f\xd3\x86\xbd\xaa\x2f\x2a\x5b\xd2\xbc\x2e\x68\x0e\x64\x26\x56\xb4\x1f\x00\x1c\xc5\x73\x38\x1c\x34\x6a\x6b\xda\x7c\x88\xb1\xcf\x66\x4a\x14\xf5\xde\xa8\xa9\x01\xd3\x43\xfa\xe9\x35\xfc\x01\x41\x6e\x04\x2a\x2a\x33\xca\x35\x59\xd0\x9e\x23\x75\x14\x57\x14\x09\xc8\xf3\xd5\xcb\x7f\x39\x72\x9e\x3b\x33\x52\xe7\xc7\x7e\x69\x6e\xc2\x7b\xf2\xe9\x5b\xde\x86\x9b\xc6\x19\x0d\x0a\x5e\x4e\xe1\xd4\x4d\xb8\x99\x04\x7e\x46\x91\xd5\x05\x7a\xc8\xe7\x52\x94\xe3\x06\xdd\x4d\x7b\xb6\x06\x29\x6a\x84\x22\x42\x5d\x0d\x3c\xe4\xa3\x58\xfe\xf6\x0f\xff\x32\x85\xb3\x4f\xa4\xac\x0a\xfa\x1a\x6e\x97\xd4\x01\x60\x98\xc2\x17\x8a\x16\xf0\xbb\x97\xff\x32\xce\x90\x44\x68\x05\xbd\xed\xf9\xe3\xba\x73\x46\xcc\x21\xab\x2b\x60\xa5\x4d\x34\xa2\x7b\x83\x7f\x2c\xb9\x01\xd2\x46\x7a\x36\xa2\x4f\x69\x22\xb5\x3a\x06\x44\x30\x8e\x7e\xa8\x62\x8c\x42\x68\x52\x6c\xf8\x86\xd1\xe7\x4a\x6f\xed\x61\xc9\xc7\x2d\xac\x39\x47\x14\xc3\x35\xf0\xea\x77\x2f\xff\x65\xdb\xe1\xff\xe1\xa1\x3a\x4a\x9b\x64\x46\x84\x23\x41\x80\xef\x8c\x52\x0e\x37\xac\x28\x68\x7e\xbc\xb1\xdc\xa3\xb8\x6e\x6d\xcd\xbc\x96\x7a\x49\xe5\x31\x50\xae\x9a\x10\xce\xd8\xf5\xdc\x58\x4b\x1c\xb5\xac\x39\x47\xcb\x1f\xa3\xd2\x18\x13\x1a\xf7\xec\xeb\xe2\x49\x6e\xd3\x8d\x99\xab\xa1\x14\x4a\x6f\x2e\xf1\x68\x51\xb0\xb7\x9a\x00\x74\x6e\xad\x3f\xcc\xc7\x08\xf0\xc9\x68\xa7\xfa\xe6\x5f\x8e\x7e\xd0\x7e\x9a\xdc\xb4\x15\x5e\x26\x8c\xeb\x89\x90\x13\xcb\xe4\x35\x68\xb9\x67\x5c\x13\xac\xc2\xea\xc9\xc0\x67\xa5\xb6\xea\x6e\x5c\xdb\xa7\x63\xdc\xdb\xf0\x2e\x4d\xb5\xa1\x7d\xc6\xdd\xd7\x3b\x35\xd5\xa6\xf6\x19\xc5\xf6\x61\x9d\xd2\xfb\xd0\x51\x9c\xfb\x3a\x25\x17\xb7\x7c\xb7\x56\x1c\xc5\xf2\xbd\x33\x77\x9c\x3e\xec\x87\x14\x07\x9a\xc7\x47\x09\x6c\x69\x29\xfb\xd2\x1b\xc4\xf4\x02\x44\xa1\x59\x01\xc3\xf9\xff\xd9\x16\xde\xe3\x2c\x81\x4e\xd5\x3d\xa0\xbe\xc6\x9d\x83\x0f\x98\x4b\xd1\x68\x27\xf3\x82\x44\xf4\xcb\x71\xe4\x15\x68\xd5\x81\xb5\xd6\x31\xb2\x35\x8a\xa7\x61\x66\xa7\xba\xc3\x32\xe8\xb4\xcc\x78\x29\xb0\x4b\x6b\xdb\xb5\xf0\xb2\xd8\x8c\x5e\x2a\x0a\xd4\x4b\xea\x4e\x65\x53\x50\xb2\x77\x0e\x95\xa5\x1d\xc7\x27\x29\x9b\x5d\x74\x5f\xd2\xf9\x26\x0d\x9d\x06\xe6\x75\x8a\x4b\xdc\x45\x5a\xdf\xd8\x83\xfc\xe2\x23\xb5\x28\xb9\xed\x26\x53\x77\x91\x90\xf0\x62\xf0\xd0\x7d\xd1\x8a\x2d\x73\x06\xbc\xde\xc0\xa3\x96\xb5\x09\xf5\x8e\x77\x9e\xb8\x3f\xec\xd5\x81\xc1\xcc\x2b\x73\x25\xf0\xc2\xdc\xb2\x62\xbf\x60\xea\x8c\x36\xe0\xc2\x67\xe0\x27\x29\xa9\x26\xf7\x95\x34\xd8\xa4\xa1\xd9\x71\xa5\x09\xcf\x89\xcc\xdd\xf8\x0e\x0e\x54\xcb\x70\x0a\xef\xc5\x88\x48\x30\xe3\x73\xf1\x1a\x96\x5a\x57\xea\xf5\xc9\xc9\x82\xe9\xe9\xcd\xbf\xa9\x29\x13\x27\x99\x28\xcb\x9a\x33\xbd\x3e\x41\x10\x19\x9b\xd5\x5a\x48\x75\x92\xd3\x15\x2d\x4e\x14\x5b\x4c\x88\xcc\x96\x4c\xd3\x4c\xd7\x92\x9e\x90\x8a\x4d\x3a\x6f\x87\x9a\x96\xf9\xaf\x9b\x01\x3d\xa2\xab\x62\x70\x43\x31\x96\x25\x57\x74\x52\xf3\x1b\x2e\x6e\xf9\x04\x3d\xa6\x6a\xc4\x5d\xdd\x07\x99\xdc\xd0\xc6\x7e\x6c\x80\x91\x77\x82\x8d\xf7\xbf\xac\xf3\xe6\x88\xdb\xcd\x7c\xc4\x4d\x32\x53\x9e\x10\x9e\x4f\x2c\x58\xee\x11\xf7\x6a\x6c\x0c\x7a\xd2\xc1\x76\xf7\xb5\x4c\x7c\x3c\x57\x24\xd3\x6c\x45\x3d\x20\xa2\x0d\x0d\x0e\xc2\x87\x26\x8d\x2e\xaf\xa5\x3d\x0b\x1d\x56\x74\xf4\xdb\xbd\x12\x39\x94\x64\x8d\xb6\x3b\x8e\x12\x84\x35\xb3\xb8\xc8\xa9\x8b\xbd\x3e\x58\x0d\x79\x83\xad\x80\x2b\x63\x94\x5d\xb3\x92\x36\xa8\x53\x8c\x66\xaf\x95\xa6\xa5\xc5\x06\xd9\xcf\x1a\xe9\xc1\xd0\x72\x6d\x61\xad\xf2\x06\x98\x6e\xf0\xa2\x84\xe7\xf8\x98\x07\xa2\x94\xc8\x8c\xb5\x38\xee\x0d\xdb\x9d\x80\xc6\xeb\xd6\xc4\xee\x08\x54\x42\x31\x5c\x14\x67\x11\x8c\x31\x33\x7d\x4d\x89\x1e\x28\xec\x8f\xbf\xdf\xff\x88\xcd\xb1\xc1\xe5\x28\xe4\xc2\x10\x41\x3d\xef\xe7\xc1\xbb\xa3\x71\xa0\x1a\x07\xe7\x58\x33\x33\x13\x5c\x69\x49\xd8\xfe\x79\x5f\xe0\x0b\x3c\xf1\xc5\x79\x00\x9e\xf1\x53\x8f\x85\x83\xed\xec\x91\xc6\x6c\xc0\x6b\xd3\x6c\xc6\x48\x96\xd0\x5b\x6c\x57\xea\xa4\xc9\x9a\x32\x62\xda\x2b\x8c\x3a\x7a\x2d\x21\x60\x3d\xed\xdf\xd2\x39\x95\x92\xe6\x6f\xf1\x1d\x70\xd5\xce\xe8\x7c\xc1\x45\xfb\xed\xb3\x4f\x34\xab\xf7\xab\x27\xb7\x4d\x5b\x71\xaf\xc6\x09\x2f\xf7\xb7\xd3\x76\x0f\xdb\x88\x97\x86\x99\xb3\xfe\x04\x6e\xe9\xd8\xe0\xbd\x25\x34\x1d\x15\xd1\x4c\xcd\x6d\x5d\x9a\xe6\x60\x00\xed\xe2\xb4\x5e\x9c\xdb\xab\xda\x82\x25\xd1\x10\xb1\xa5\x07\x1e\xa8\x34\x78\x17\x19\x35\x90\x2d\x85\x50\x46\xf2\xe1\x39\xc6\xf1\xaf\x98\x40\xec\x99\x17\x4f\x2c\x86\x21\xa1\x34\x3a\xa0\x29\x8a\xd1\x4d\x7d\xec\x91\xb6\x74\xdd\x68\x27\x1c\x1e\x53\xd6\x8d\xd9\x9e\x3b\x2f\x9e\x0e\xb1\x65\x86\x8b\xc1\x4e\xf3\xc5\x02\xed\x78\xa5\x41\xd5\xe3\x62\x0d\x0d\x89\x39\xdc\x52\xb6\x58\x6a\x75\x0c\x6c\x4a\xa7\x78\x9b\x29\xc9\x96\x38\x7c\xff\x13\x55\x52\xaa\x07\xdd\x8b\x3d\x65\x74\x43\x83\x78\xfa\x61\x5b\x03\xc1\x15\x40\x19\x0b\x85\x19\xf0\xdc\x92\x02\xfe\xb2\x11\x30\x2c\xdd\xc1\x1b\x80\xea\x6c\x7a\x74\x0c\x6d\x99\x42\xbf\x8b\x54\x97\xe6\x0a\x31\x4d\x8d\x2d\x85\x7e\x0b\x29\xea\x85\x3d\x01\x74\xdf\x5c\xcb\x5d\x84\x7b\xd3\x96\xd8\x40\x54\x67\x8e\xfe\xc1\x17\xf6\x50\xec\xff\xae\xee\x93\xb6\x05\x8c\xcc\xb0\xd9\xbc\x33\xd4\x10\xfc\xe1\x2d\xa5\x28\x64\x42\x4a\xaa\x2a\x61\x3d\x98\x9b\x50\x92\xff\xe9\xcd\xd7\x0c\xee\x50\x1d\x75\x97\x6a\xc9\x16\xcb\x90\x3b\x45\x9c\x31\x39\xbc\xf3\x3e\x82\xc4\x17\xd3\x64\xc9\x0b\xd9\x64\x69\x88\x44\xe6\xae\x1e\x45\x98\xfc\x1a\x98\x0e\x9a\xca\xb2\x39\x11\x46\x4c\x78\x72\xb4\xa6\x83\x43\x7f\x34\xed\xc7\x9d\x44\xf3\x64\xf9\x12\x0e\x51\x10\x32\x7d\xa0\x50\xc9\x4c\x44\x75\x34\x85\x53\xe0\xb5\xf7\x30\xdb\x85\xbb\x6b\x09\x3c\xf9\x72\xd1\xae\x80\x1b\xb4\x59\x4c\x25\xba\x71\xfb\xdd\x0a\x7f\xb3\xcc\xd2\x78\x9c\x75\x9f\x26\x6e\xbd\xe8\xd8\x10\x6a\xc7\x20\xe0\x04\x84\x18\x96\x0d\x87\x66\xf4\xbe\x1c\xb6\x52\x01\x50\x80\xee\x99\x1d\x7d\x1f\x99\x33\x77\xdc\x7b\x85\xb6\x42\x2f\x80\xe7\x50\x2e\xdb\x95\xf7\x3b\x77\x10\xe3\xec\x41\x94\x3d\x84\x80\x0c\x98\xdd\xb4\x99\xdc\x61\x73\x60\x82\x58\xc2\xf0\x5c\x0c\x8c\xa4\x40\xc6\xb3\x35\xf2\x1e\x95\x90\x74\x37\x85\xe9\xb1\x8e\x02\x34\x5a\x47\x3b\xae\x56\x20\xc7\xdd\xb9\x49\xc1\x4c\xb7\x53\x77\x82\x59\x6e\xa7\xfe\x04\xb3\xbc\xa1\xeb\xe3\xcd\x84\xa0\x60\xa6\xbb\x12\x8a\x82\x99\x9a\x41\x8e\x4d\x33\xba\x63\x78\x31\x84\x94\xa5\x30\x55\xd9\xd1\xb8\x44\xa5\xbb\x78\x44\xda\xc0\x38\xf2\xd7\xd2\xe8\x54\xa7\xdd\xb4\xe9\x90\x89\xc0\x12\xc2\xb2\xa7\x76\xd3\xae\x9c\xaa\x38\x8c\x47\xe6\x65\xdd\xc1\xc5\x2f\x84\xbc\x9b\xfc\x72\xb8\x76\xd3\x46\x99\xb8\x91\x05\xbd\xee\x27\x97\x14\x36\x48\xf3\x8a\xb4\x27\x5b\xa9\x62\x51\xf8\x62\xba\x59\x97\x40\x16\x67\x11\x06\x49\x68\x51\x58\xda\xbc\xa6\xe3\x80\xbc\xb4\xbb\xe8\x6b\x6d\x75\xd2\xbb\x28\xfc\xa2\x1e\x7a\x9f\x9c\xb8\xdd\xb4\xf1\x48\x8f\xb4\xcb\x21\x39\x76\xbb\x69\x98\x79\x17\x85\xe5\x30\x7b\x2f\x0e\xcb\x26\x03\x30\xda\x20\xb7\x92\xed\xa2\x70\x0d\xc9\x2d\xdc\x4d\x1b\x19\x87\x51\x78\x46\xcb\x5a\xdc\x4d\x9b\x29\x5b\x51\x98\x0e\xf3\x21\x9f\xf3\xd2\x7e\xad\xcd\xb2\xbe\xd3\xcf\xfd\xac\xda\x5a\xd5\x2e\xcf\x30\x0a\x47\xe7\xee\x3e\x1e\x51\x50\xed\x21\x6a\x0a\x81\x60\x45\x97\x4a\xd2\xb1\xc1\xf9\xbb\x88\x60\xd2\xb2\x47\x54\xfe\x6e\x42\xc0\x6e\x93\x74\x1b\x85\xe3\x46\xe2\x6e\x24\x73\xa9\x4d\xfe\xb5\xe9\xbc\x51\xb8\x7a\xa4\x04\xef\xa6\x58\xce\x08\x4b\x51\x5c\x12\xfd\x81\x05\x2b\x5e\x74\x5b\x7d\x65\x31\x5f\xff\x94\x1e\x2b\x8b\x77\x4b\x1e\xab\x7b\x29\x79\xac\x92\xc7\xca\x8f\x92\xc7\xea\x01\x4a\x1e\xab\xe4\xb1\xda\x83\x92\xc7\xaa\x47\xc9\x63\x95\x3c\x56\x7e\x94\x3c\x56\xcf\xdd\x0b\x90\x3c\x56\xc9\x63\x95\x3c\x56\xc9\x63\x95\x3c\x56\x9e\xf4\x4b\xf6\x58\x59\xbc\x58\x24\xa0\xdc\xf7\xc8\xcc\x37\xcb\x6a\x63\x60\x4c\x2f\xad\x2f\xad\x49\x15\x1f\x00\xdd\x02\x38\x73\x91\xd3\x2b\xf7\x60\xba\x46\x40\x9e\xad\xba\x17\xc0\x52\x12\xbe\xa0\xf0\x6a\xf2\xea\xe5\x5e\x45\xc0\x77\x93\x6f\x36\xd8\x90\xc6\x15\x0c\xdf\xa4\xbb\x30\xf9\x8f\x94\x99\xe3\xb4\x5d\x9b\xf3\x12\xec\x8f\xbc\x23\xe9\x65\x64\x0f\xcc\x21\x95\x54\x03\xd1\x03\xe8\x30\x2b\x69\x9b\x00\xe7\xc5\xb3\xdf\xd4\xa1\xab\x0f\x26\xb8\xc5\xee\x7b\xb1\x34\xc7\x7a\xfa\x8f\x5b\xd1\x8c\x12\xe5\x99\xa0\x82\xbd\x6e\x9a\x55\x15\x25\xb5\xe5\xfc\x43\x14\x4a\x25\x72\xa0\xcd\xa9\x84\x43\x3a\x5d\x4c\x21\xaf\xa9\xad\x80\xe9\xc5\xd1\xd6\xa5\x38\x3a\xee\xa7\xa5\x96\xe6\xa1\x23\xcd\x7f\x3c\x37\x48\x37\xf9\xa9\x74\x45\xb9\xae\x49\x51\xac\x81\xae\x58\xa6\xbd\x37\xdd\x4c\x1c\x8b\xd2\x30\x6d\x13\x0b\xfd\xd3\x1c\xbc\x9d\x93\x21\x0e\xc9\xc9\x96\x34\xf6\x39\xa5\xa1\xde\xc3\xad\x31\xf8\xea\xc3\x0d\x9f\x92\x5d\x97\xa9\x0b\xde\x78\x8b\x74\x31\xdf\x08\xdb\x68\x33\xc6\x69\x90\x53\x12\x59\xa0\x58\xfc\xf0\xd1\x2f\x39\x06\xa2\x58\x46\x81\xd6\xd0\x66\x68\xa6\x2e\x0a\x73\x45\xf1\x41\x16\x68\x22\x0c\x97\x3b\x30\x53\x04\x06\xd9\x22\xdb\x5d\x13\x02\xd8\xda\x04\xbf\xb2\x57\xe5\x16\xb9\x5f\x8b\x4a\x14\x62\xb1\xee\x9f\xeb\x80\x4f\x31\x3b\xdd\x6b\x2d\x68\x4c\xf6\x7a\xa6\x46\x16\x40\xda\x35\x70\xb8\xd8\xb8\x7c\x29\x77\x61\x8b\x3e\xd7\x48\x70\xca\x5d\xd8\x83\x52\x24\x38\x45\x82\xfd\x28\x45\x82\x1f\xa0\x14\x09\x4e\x91\xe0\x3d\x28\x45\x82\x7b\x94\x22\xc1\x29\x12\xec\x47\x29\x12\xfc\xdc\xa3\x6b\x29\x12\x9c\x22\xc1\x29\x12\x9c\x22\xc1\x29\x12\xec\x49\xbf\xe4\x48\x30\xa4\xdc\x85\x94\xbb\xb0\x17\x25\x8f\x55\xf2\x58\xf9\x51\xf2\x58\x3d\x40\xc9\x63\x95\x3c\x56\x7b\x50\xf2\x58\xf5\x28\x79\xac\x92\xc7\xca\x8f\x92\xc7\xea\xb9\x7b\x01\x92\xc7\x2a\x79\xac\x92\xc7\x2a\x79\xac\x92\xc7\xca\x93\x7e\x79\x1e\xab\x4a\xe4\x91\x1b\x72\x54\x22\x8f\xd8\x8f\xc3\xa2\x8f\x33\x31\x29\x44\xd6\xf4\xe3\x1e\xcd\xd5\x0c\xc9\x66\x25\x80\x22\xa5\x2d\x92\x7e\x0c\x7f\x17\x9c\xda\xa2\xf6\x40\xc6\xf3\x44\xa8\xb5\xd0\x4b\x2a\x0d\xfb\x43\x75\x34\xba\x3c\x75\xea\x17\x32\x7e\xd8\xa9\x5f\x48\xea\x17\x92\xfa\x85\xa4\x7e\x21\x9f\x5d\xbf\x90\x25\x51\xe3\xdb\xf1\x36\x84\x06\x6b\xdb\x60\x22\x4e\xf6\x5e\x4f\xf1\x5f\x53\x59\xfe\xcf\xad\xee\x21\x9e\xc7\x7f\xd0\x71\xe4\x17\xd7\x3d\xc4\x88\x36\x27\x32\xcc\xf9\x09\xe8\xf5\x61\xcf\x86\xdd\xd3\xdc\xe5\x7a\xd2\xfc\x72\xb8\x2b\x9e\xcc\x6d\xdc\x0d\x17\x9f\xe4\x39\xcd\xa1\xa2\x72\x62\x25\xb2\xf0\x66\xc9\xf3\x1d\x3b\xd9\x9c\x18\xbf\xc3\xf2\xe4\x9d\x39\x22\xac\xf6\x53\xb7\xe7\x18\x4e\x21\x52\xee\x4f\x3f\xd9\xca\x37\x29\xd3\x52\x6b\x50\x6d\x36\xeb\x08\xe0\xd9\x1a\x00\xcf\xb0\x59\x47\x78\x4c\x6e\x02\xda\x25\x1b\x7d\x13\x10\x95\x8b\x13\x46\xc3\x20\x55\x93\x4e\x14\x17\xc3\x80\xe1\xaf\xbf\xd5\x54\x86\xbe\xa4\xc5\x8a\xca\x2e\x14\xd2\x18\x47\x2a\xd4\x59\xc8\x5c\xdb\xfe\x8c\x28\xfb\xd2\x88\x01\x63\x88\x10\xf6\x8d\x17\x1f\x8d\x9b\x55\x05\x9b\x7b\xbc\xc9\x3e\x86\xc3\x44\x01\x69\xd0\x2f\xf6\x04\x45\x60\xba\x13\x02\x13\xc3\x59\x14\x31\x2b\xb1\xa1\x2e\x2b\x31\x1c\x26\x11\xd1\x95\x15\xcd\x91\xb5\x4b\x48\x44\xf1\x8f\x3d\x0a\xc8\x06\x36\x81\x36\x91\xe2\x13\x44\xb7\x60\x9b\x88\x0e\xfa\x63\x1b\x8b\x8e\x13\x44\x89\x0d\xda\x81\x1d\xc0\x9d\x28\x4c\x6f\xe8\x3a\x22\x78\x07\xe2\x02\x78\x20\x22\x88\x07\x22\x01\x79\x20\x26\x98\x07\x22\x03\x7a\x20\x1e\xa8\x07\x36\xc5\x4d\x9c\xa5\xb3\xe4\xbc\x55\xf1\xe4\x17\xb8\xa3\x8c\x77\x24\xd6\xdd\x80\xbe\x60\x8c\x89\x17\x82\x68\x98\x21\x88\x0d\xa1\x80\xc8\xd8\x21\xd8\x3c\x46\x51\x45\x22\xd8\x30\x5b\x4c\x40\x12\x3c\x26\x28\x09\x86\xc0\xa4\x68\x3c\x1b\x18\x08\x82\x93\xa2\x71\x8d\x0b\x72\x82\xc7\x01\x3a\x41\x0b\x76\x32\x7a\x2c\x1a\xcb\xf8\xb8\xa9\x47\xb8\xa8\xf1\xf0\x4e\xb0\x79\x4d\x2d\xeb\x98\x02\x9f\xf0\x88\x78\x12\xb0\x2e\xc2\x88\x6b\x09\x03\x34\x55\xbc\xdb\x1e\x1b\xa2\x02\x76\x35\xcf\x79\x87\xaa\x8a\x3a\xd8\xc8\x1b\x1f\x19\xf5\x02\x8f\x82\xd2\x82\x47\x82\x13\x41\x1f\xad\x15\xef\xdc\x3f\x06\xea\x0b\x3e\xa7\xed\x8f\xbc\xf5\x1d\xf4\x27\xe6\xae\x37\xf0\x9f\x68\x3c\x2d\x8c\xa8\x0f\x01\x8a\xc6\x1a\xa1\x44\xf1\x60\x40\x10\x1d\x0a\x04\x71\xe1\x40\x10\x57\x1b\xa3\x2b\xef\x1d\x96\x1f\x7a\x0c\x27\xa1\xe5\x1c\xcb\x3f\x58\x92\xca\xa8\xce\xff\x73\x43\xd7\xc7\x78\xdb\xff\x6f\x8c\x47\x2c\x61\x52\x4d\xe1\x34\x1e\x1e\xb1\x37\xbe\xf0\x8a\xa9\x0d\xf5\x96\xd3\xac\x43\x9c\x25\xa5\x7f\xab\xd9\x8a\x14\x94\x6b\xff\xf0\x61\x9f\x08\x6f\xe2\xf6\x66\x9f\x36\xdd\xc4\x31\xc4\xfd\xed\x52\x28\xcc\xfb\xb2\x91\xd0\x38\xcb\xf0\xe2\x86\xae\x5f\x1c\xc7\x56\xa2\x86\xf1\x39\x7f\x61\x53\x0e\xe2\x1c\x82\x01\x1e\x37\xa2\x23\x51\xf0\x62\x0d\x2f\x90\xfb\x8b\xb0\x72\x89\x1d\x0d\x90\x2d\x44\xc6\x60\x19\xd5\x3f\x1e\xc9\xcd\x47\xf2\x9c\x19\x81\x47\x8a\xcb\xa8\xde\xb0\x48\x32\x9e\x93\x92\xaa\x8a\x64\xa1\x83\x1a\x88\xf6\x8e\x69\xe0\x44\x1b\x28\x9d\x72\x38\x98\x68\x8c\x5b\x17\xdd\x55\x5c\x27\x98\x16\x70\xd8\x80\x75\xc8\xc2\xdc\x3e\x7d\xf4\x3f\x03\x79\x0e\x6a\x71\xda\x18\x58\x49\x49\xf0\xbd\x7e\x81\x31\xce\x4a\xe4\x07\xaa\x5b\x57\x3f\xe0\x53\x43\xcf\x2a\x61\x3b\xd2\x05\xe9\x45\xe4\x23\xde\x90\x6b\xb7\xf6\xa1\xf7\x63\x29\xea\x22\x37\xef\x86\x16\x26\x1d\xca\xf2\xb0\x81\x6d\x1c\x99\x33\xc7\x85\x8e\xc9\x9a\x6b\x36\xe9\xf8\x7b\x43\xcd\x3a\x72\xa5\xc3\xd5\xa0\xc0\x7d\x20\xcf\xa1\x5c\x88\x62\xa0\x75\x90\xe0\x4e\x82\x85\x5a\x3b\xb7\x4b\x2a\xfb\xfb\x1e\x9e\xdb\x91\xd3\x39\xe3\x34\x07\xa2\x40\xd6\x9c\x9b\xd5\x14\xa1\x59\x72\x0e\xad\x6c\xcd\x32\x34\x20\xc2\x9d\xc3\xad\xf0\xb6\x70\x20\x0c\x8e\x44\xc0\xcd\x58\xea\xa0\x96\x04\x8d\x54\xc2\x43\x39\xe2\x02\x08\xee\x54\x18\xe1\xeb\x38\x2b\x60\xc3\x37\x34\xb7\xe7\x3f\x78\xf3\xdd\x8e\x4f\xe1\x0c\xd5\x4c\xbc\x05\x65\x0a\xa5\x08\x29\x0a\x71\x1b\x6a\x9d\x3d\xb7\x3e\x1d\xb7\x9f\x45\x9f\x8e\x0d\xa0\x60\x6a\xd3\xd1\x51\x6a\xd3\xb1\x4d\xa9\x4d\xc7\x67\xdd\xa6\xc3\x7b\x8f\xac\x4a\xbd\xa3\x5f\x87\x17\x47\xdb\xe3\xe3\xbe\x7e\x1d\x7e\x0b\x6a\x0f\xe2\x46\xbf\x0e\xf8\x7e\x49\x51\xae\x79\xba\x12\xcc\x95\x29\xeb\x42\xb3\xaa\xe8\xb2\x4b\xec\x32\x14\xde\x41\x0e\xd7\x71\x42\x6d\xe0\x95\xcd\x4a\x10\xcf\x44\xe4\x0d\x69\x8e\xe3\xc6\x24\x64\x85\xe6\x80\x9f\x59\x89\x29\x50\xa4\x28\x5c\x3b\x8b\x26\xa7\xdd\xe6\xc7\xb1\xcf\x39\x6d\xe3\x2d\x1a\xb5\x2a\x14\x98\x80\x46\xd6\xa1\xb1\xde\x0b\x23\x16\x8c\x35\xdb\xe8\x6a\x4f\x8e\xdb\x2e\x08\x8b\xc9\x58\x05\xa4\x6a\x60\x6a\x1c\x5b\x51\xde\xbd\x33\x0e\xd5\xd1\x51\x48\x9d\xa1\xc6\x4b\x10\xf3\xad\xf9\x08\x6f\xcc\x5d\x6f\xcb\x63\xfb\x46\xf2\xe4\x38\x78\x59\xed\x78\x1b\x79\xb2\x15\x7c\xf7\x9b\x28\xc0\x22\xdb\x78\x0b\xfd\xa9\x67\xbb\xff\x2f\x4f\x96\x3b\x5e\x41\xcd\x3b\xc6\xd7\xee\xb6\xaf\x1f\x3c\x4a\x4d\x6a\xa4\xc5\xed\x7b\xe7\xc6\xd9\x58\x64\xc0\x6e\x3c\x79\x16\x52\xe8\x2b\x2b\x1c\x60\x19\x29\xcd\xe3\x51\x52\x3c\x1e\x21\xbd\x23\x62\x6a\xc7\x3f\x47\x93\x9c\xc8\xa9\x1c\xdb\x69\x1c\xb1\x10\xf4\x83\x14\x8e\xd8\x09\x18\x91\x92\x2f\x9e\x95\x7f\xfc\x51\x12\x2e\x52\x45\xd3\x54\xd1\xd4\x8f\x52\x45\xd3\x07\xe8\x31\x2a\x9a\xc6\x4a\x7c\xe8\x27\x3d\x44\x63\xda\x24\x3c\xc4\xcd\xb1\x72\x71\xde\x7f\xaa\xc2\xa6\x51\x91\x9f\x5d\x52\x42\x93\x4c\x10\x89\x6d\x97\x90\x10\x07\x6c\x04\xa9\x4a\x2a\x26\x0e\x44\x07\xfc\x7f\x0e\x85\x4d\x23\x82\x7d\x7b\x00\xff\x58\x89\x2d\x76\xed\xa2\x1e\xcb\x47\xaa\x19\x19\x1d\x8c\xff\xa8\x35\x38\x53\x89\xd3\xcf\xa5\xc4\x69\xaa\x49\x19\x4d\x10\xff\x92\x6a\x52\x0e\x29\x1a\xf8\xfc\x91\x80\xe7\x8f\x03\x3a\xdf\x00\x9c\x47\xe4\xec\x0a\x61\xc6\x85\x8a\x6f\xc2\xc4\x81\x84\x62\x86\x1e\x11\x22\xbe\x01\x0f\xef\xc0\xdd\x11\x00\x39\xfd\xea\xe2\x08\xec\x0e\x75\x3a\xb9\xb2\x5b\x11\xc5\x79\xeb\xf6\x18\x00\xba\x03\x99\x6e\xfa\xda\x22\x80\xb9\xa3\xf9\xda\x22\xb8\x26\x1e\x03\xc0\x1d\x41\x3e\xc6\x00\x6e\xdf\x01\xda\xee\x60\xd7\x21\x70\xa6\x0d\xc0\xf6\x76\xbc\x33\x80\x79\xf7\x88\x8f\x0b\xb7\x7e\x04\xa8\x75\x64\x98\x75\x0c\x95\x1f\xac\xe8\x23\x1c\xdf\x28\xb0\xea\x9d\x90\x6a\x17\xa8\x0e\x98\xde\x20\xc4\xdd\x0b\x56\x87\x84\xb2\x36\xc3\xdc\x9b\x01\xeb\x50\xe0\x60\x6c\x20\xf4\x2e\x10\x74\x87\x8d\x0a\xb9\x62\x1d\x00\x7a\x0b\xc2\x1c\x12\xd8\xdb\x15\xa2\x0f\x83\x2f\xc7\x0e\xd3\xc3\x76\xa8\x3e\x0e\xca\xf6\xae\x60\x7d\xc8\x79\x1d\xc2\x95\x07\x80\xe3\x00\xb6\x0e\xaa\xfc\x38\x60\xe3\x58\x40\xe3\xa0\x82\xfa\x5c\xb3\xc7\x28\xaa\xdf\x97\x15\xa3\x27\x76\x47\x65\x7d\xb2\x12\x2c\x87\xaa\xd6\xda\x47\x8c\xb7\xb8\xa0\xfb\xaa\xeb\x8f\xe6\x4a\x54\xaa\xae\x7f\x0f\x7d\xc6\xd5\xf5\x83\x4e\x30\x0c\xeb\x8b\x6f\x83\x74\xbd\x38\x0e\xca\xf2\x6f\x97\xd8\xf7\x9f\x78\x53\x96\x7f\x47\x89\xfd\xd0\xa9\x4f\xb7\x4a\xec\x7b\x71\xdc\x28\xe5\xbc\x51\x62\xdf\x73\xe6\xc3\xb2\xfc\x5b\x25\xf6\xfd\xf6\xa8\x5f\x96\x7f\xbb\xc4\xbe\xf7\x48\xfb\x32\x71\x67\x89\x7d\x6f\x3c\x18\x55\xfa\xf8\xce\xbc\x02\x2f\xae\x83\xbb\xb3\xab\xce\xbe\x17\xd7\xb6\x36\xff\x9d\x75\xf6\xbd\x17\xb7\x41\x4f\x6f\xd7\xd9\xf7\x9b\xff\xb0\x36\xff\xb0\xce\xbe\xf7\x20\x07\xb5\xf9\x87\x75\xf6\xbd\x79\x0e\x51\xde\x9b\x75\xf6\x83\x86\xda\xd4\xe6\xdf\xac\xb3\xef\xb7\xa2\xa9\x36\xff\x6e\x4a\xb5\xf9\x9f\x01\x2a\x36\xd5\xe6\xef\x28\xd5\xe6\x4f\xb5\xf9\xb7\x28\xd5\xe6\x4f\xb5\xf9\x47\x50\xaa\xcd\xdf\xa7\x54\x9b\x7f\x34\xa5\xda\xfc\xa9\x36\x7f\xaa\xcd\xef\x4d\xa9\x36\xff\x38\x4a\xb5\xf9\x53\x6d\xfe\x08\x94\x6a\xf3\xf7\x29\xd5\xe6\x4f\xb5\xf9\x53\x6d\xfe\x08\x94\x6a\xf3\xa7\xda\xfc\xa9\x36\x7f\xaa\xcd\x1f\x4c\xa9\x36\x7f\xaa\xcd\x1f\x44\xa9\x36\x7f\xaa\xcd\x9f\x6a\xf3\xa7\xda\xfc\xa9\x36\xbf\x27\xa5\xda\xfc\x01\x94\x6a\xf3\xa7\xda\xfc\x61\x83\x49\xb5\xf9\x47\x52\xaa\xcd\x9f\x6a\xf3\xa7\xda\xfc\xa9\x36\x7f\xaa\xcd\xbf\x9b\x52\x6d\xfe\x54\x9b\x7f\x0c\xed\xac\xcd\x1f\x9c\xa8\x32\x78\x3c\x45\xcc\x54\x69\x8a\xfa\x6f\x17\xe8\xf7\xe2\x39\x28\xea\xbf\xbb\x40\xbf\x17\xdf\xa6\xa8\xff\x46\x81\xfe\xe7\xbb\xac\x58\xd9\x7f\xbb\x4a\xbf\x17\xc7\x7e\x65\xff\x5d\x55\xfa\xbd\x98\xf6\x2b\xfb\xef\xa8\xd2\xef\xc5\xb3\xab\xec\x7f\x6f\x95\x7e\x2f\xde\x58\xd9\xff\xbe\x2a\xfd\x7e\xe7\x15\x6d\xaa\xbb\xab\xf4\x7b\x31\x2d\x6c\x25\xa6\xbb\xaa\xf4\xfb\x4d\x9f\x64\xcb\x54\xa5\xff\x41\x4a\x55\xfa\x53\x95\xfe\x54\xa5\x3f\x55\xe9\x7f\x90\x9e\x3c\x1f\x29\x55\xe9\xbf\x8f\x52\x95\xfe\x3d\x29\x55\xe9\x4f\x55\xfa\x47\x53\xaa\xd2\x9f\xaa\xf4\xa7\x2a\xfd\x77\xf0\x48\x55\xfa\x47\x51\xaa\xd2\x9f\xaa\xf4\x07\xb3\x4d\x55\xfa\x53\x95\xfe\x10\x4a\x55\xfa\x53\x95\xfe\x54\xa5\x3f\x55\xe9\x4f\x55\xfa\xfd\x28\x55\xe9\x1f\x4b\xa9\x4a\x7f\xaa\xd2\x6f\x29\x55\xe9\x4f\x55\xfa\x47\x0f\x2e\x55\xe9\xf7\xa5\x54\xa5\x3f\x55\xe9\x4f\x55\xfa\x1d\xa5\x2a\xfd\xa9\x4a\x7f\xaa\xd2\xff\xc4\x55\xfa\x49\xad\x45\x29\x6a\xae\xaf\xa8\x5c\xb1\x8c\x9e\x66\x99\xf9\xea\x5a\xdc\xd0\x51\x00\xd2\x61\x54\xee\x1e\xa6\xa3\xa6\xc7\x78\xce\x32\x8c\x21\xdd\x2e\x29\x16\xc0\x27\xa0\x2c\x4f\x20\x96\x29\xe8\xd1\x5c\x3b\x44\x10\xce\x9e\x68\x96\x91\xa2\x58\x03\x0e\x79\xdc\x0e\xd8\x35\x9f\x09\x51\xd0\x11\xcf\x07\x67\xce\x52\x39\x4a\x9b\x0d\x96\xf8\x9d\x8b\x45\x77\xac\x60\x46\x0b\xc1\x17\x63\x55\x9b\x83\xa6\x56\x22\x9f\xc2\x9b\x8e\x59\x46\x38\x0a\xfe\x5a\x4a\xca\xf5\x48\xd8\xe3\xac\x29\xe7\x8b\x01\xd5\x52\xac\x68\x8e\xa1\x6d\x44\x2a\x5a\x97\xcc\xc8\x58\x68\x41\x89\x99\x2f\xa7\xdd\x84\x8d\x70\x27\x70\x89\xe3\xb6\x83\x9d\x8d\x93\x1c\x16\x31\xea\xb1\xdd\x63\xad\x18\x0f\xbb\x65\x23\xc8\xed\x5e\xd4\x68\x3e\x66\x18\x6e\xe8\xd6\x61\xa4\xbc\x40\x61\xbb\x16\x35\xdc\x12\xfb\xec\x95\x35\x47\xc1\x8e\xcb\x69\x8e\xc1\xb8\xe3\xe3\xfb\x5c\xf1\x8b\x9b\x4e\x50\x0f\x8f\xfa\x13\xff\x58\x26\x91\x0b\x0f\x73\x73\xb0\x75\x07\xa7\x72\x51\xdb\xd7\xa5\xbb\x68\x94\x6b\xb9\x46\x50\xb4\x8f\xa4\x37\x6f\xd6\x5c\x64\x37\xe6\xf8\x97\x64\x41\x0f\x0e\x14\xbc\x79\xff\xd6\xe8\x90\x5a\x79\xa9\x38\xe6\x0a\xd2\x3b\x2d\x54\x49\xb1\x62\xb9\xb9\xaf\xdf\x11\xc9\xc8\xcc\xab\x84\x00\x16\xdd\xa6\xdc\xbc\x9e\x7e\x73\xf8\xdd\xe9\xc7\x9f\x2e\x4e\xdf\x9f\x1d\x61\xb4\x88\x7e\xaa\x08\xcf\xbd\x46\x5a\xab\x2e\xd5\xc4\x9d\x7d\x33\x7d\xca\x57\x4c\x0a\x6e\x16\xd9\x67\x45\xcf\xe7\x40\x60\xe5\xe6\xda\x88\xbd\x19\x45\xd8\x56\xb1\xf2\xc3\x25\x6b\xf4\x2c\xb8\x35\x68\x8c\x50\xc6\xab\x5a\xfb\x3f\x3e\x30\x1d\x61\x46\xa1\xe6\xd9\x92\xf0\x85\x93\xa8\xfd\xf5\xf5\x60\xaa\xd6\x5c\x93\x4f\x66\xd6\xe8\x26\x57\x19\xa9\x68\x6e\xcd\x3c\x02\xb9\xa8\xfd\xb6\xff\x37\xbf\x39\x06\x46\x5f\xc3\x6f\x7a\x83\x9b\xc2\x99\xe3\xde\x1d\x0e\xdf\x55\xe0\x74\x45\x25\x0e\xd8\x1d\xa6\x63\x90\x74\x41\x64\x5e\x50\xe5\xc3\x54\xcc\x5b\xf3\xc2\xfa\xad\xdc\x61\xa0\x4d\xbc\xc3\x83\x27\x17\xba\xa7\x97\x5a\x5d\x03\xef\x05\xc2\xde\xe7\xc2\xe7\xf5\xb8\xd4\xba\x52\xaf\x4f\x4e\x6e\xea\x19\x95\x9c\x6a\xaa\xa6\x4c\x9c\xe4\x22\x53\x27\x9a\xa8\x1b\x75\xc2\xb8\x91\xc3\x93\x9c\x68\x32\xe9\x29\x8b\x13\xfb\xc4\x98\x64\xa2\x2c\x09\xcf\x27\xc4\x09\xa5\x49\x7b\x91\x4e\x7e\xed\x4c\xdb\x09\x69\x7f\x8b\xf1\x09\x99\xa8\x25\x2d\x8a\x83\xd1\x63\x0d\x79\xee\x7b\x3f\xf3\x03\x9e\xf7\x6e\xce\xa1\xd2\xfe\xac\x15\xee\x76\xee\x53\xb8\x10\x3e\x5e\x3c\x9b\x23\xe3\xae\x22\x2a\x66\xdc\x87\x69\x4f\xfe\xfb\x88\xfa\x46\x63\x9c\x5d\x5c\x7f\xfc\xcb\xe5\x87\xf3\x8b\xeb\x46\x71\x34\x6a\xc0\x87\xeb\x5d\x8a\x23\xec\xa6\xdf\xa5\x38\x3a\x35\xe0\xc1\xf4\x4e\xc5\x31\x54\x03\x3e\x9c\xb7\x15\xc7\x50\x0d\xf8\xac\xec\xb6\xe2\xd8\xa1\x06\x3c\xad\x88\xfe\xfa\xee\x54\x03\x5e\xd2\xb9\xa7\x38\x76\xab\x01\x0f\xae\xdb\x8a\x63\xa8\x06\xbc\xee\xd7\xb6\xe2\xe8\xa9\x01\x4f\x95\xbf\xad\x38\xfa\x6a\xc0\x83\xe9\x6e\xc5\x91\xd4\xc0\x3e\x1f\xea\xa5\x06\x28\x5f\x05\xaa\x80\xe6\x5d\xde\x13\x2e\xed\xb9\xf0\x11\x83\x5a\x20\x16\xcc\x89\x82\x76\xa3\xe2\x1c\xaa\xcf\x63\x3f\x07\xeb\x7b\xc6\x57\xdf\x11\x39\x00\xf3\xf9\xf9\x4a\x77\x6d\x10\x38\xa6\xc0\xfc\x78\x92\xce\x83\xe2\x9f\x78\xe8\x1d\xfa\x0b\x41\x22\x7b\xbc\xab\x2d\x85\x22\x85\xcd\xc7\xfa\x06\x52\x06\x07\xe3\x82\x94\x8d\x9f\xbb\xbf\xb7\xde\xde\xd4\xe6\x4c\x4c\xe1\x7d\xe3\xb2\x82\x37\x3f\x9d\xbf\x3d\xbb\xb8\x3e\xff\xea\xfc\xec\xa3\xaf\x9f\x36\x38\x06\x85\x1e\xfd\x28\x4b\x76\x10\xc7\x52\xb3\x74\xbf\xbd\xe6\xef\xd4\x5e\xe2\xad\x5c\x31\x51\x77\x91\x92\x98\xfb\xab\xb6\x64\xab\x37\x4b\x9b\x44\xb1\x6e\x3d\xd4\x51\x87\x39\xdd\xe9\xa9\xf0\xe6\x1b\xd5\x50\xb5\x74\x8f\xb9\xea\xcd\x33\xaa\xb7\xc3\xd2\xdd\x3e\x0f\xff\x8d\x8f\x6d\xf2\x5a\xba\xd7\xf0\x0d\xd9\xf9\x3b\xcc\x5f\x6f\x96\xf7\x78\x4f\xbc\x79\x36\xc6\xf3\x5b\x3a\x27\x75\x61\xfd\xa7\x2f\x5e\x4c\xc7\xdb\xa0\x96\xe2\x88\xdd\xaf\xa4\xf0\xee\x5c\x37\x10\xbd\x57\x98\x12\x8a\xbd\x5c\x43\x02\xb3\xbb\x8c\x98\x03\x97\x1c\xe6\x7f\xee\x7a\x6e\x2b\xe7\x1a\xb0\x51\xe4\x00\xc0\xab\xe1\x17\x84\xc2\x8d\x00\x8b\x8a\x91\xd4\x94\x09\x3e\x67\x8b\xf7\xa4\xfa\x86\xae\x3f\xd2\x79\x08\x18\x65\x78\x1e\x30\x46\xed\x32\x53\x82\x40\x5a\x62\x6e\xcd\x50\x3b\xcc\x10\x2c\x5a\x24\x24\x5a\x8c\x04\xb9\xd0\xe4\xb8\x58\xf9\x6c\x11\x72\xd9\xb6\xba\xb4\xc6\x48\x3b\xc3\x57\xa2\x39\x41\x71\x12\x23\x23\xa4\xc8\x84\xd8\xf5\x0d\x0d\x8d\x55\x67\xe0\x87\xaf\x55\x67\xec\x68\xeb\x56\x09\x66\xf9\xa0\x5b\x26\x13\x3c\xa3\x95\x56\x27\x62\x65\x6c\x43\x7a\x7b\x72\x2b\xe4\x0d\xe3\x8b\x89\xb1\x3b\x26\xf6\x8e\xa9\x13\xc4\x18\x9d\xfc\x1a\xff\x13\x3c\xa8\xeb\x0f\x6f\x3f\xbc\x86\xd3\x3c\x07\x81\xca\xb9\x56\x74\x5e\x87\x67\x4a\xdb\x96\xbd\x53\x20\x15\xfb\x8e\x4a\xc5\x44\x84\xfc\x9a\x1b\xc6\xf3\x63\xa8\x59\xfe\xa5\xaf\x7a\x6f\x28\xda\xf9\x15\x95\xc5\xce\x46\x3d\xc3\x57\x88\x43\x0b\xbf\xee\x7d\x7b\xab\x15\xf5\xc1\x5c\x85\xc4\xa2\x54\x37\x74\xdd\xa0\x34\x82\x59\xba\x07\x5b\x94\x4d\x1d\x0b\xb2\xd9\x24\x3c\xb8\x31\x75\xf6\x41\xab\xb4\x83\xe6\x67\x01\xfd\xce\x73\x51\x89\xfc\x35\xa8\xba\xaa\x84\x0c\x2c\xfe\x50\x52\x4d\x72\xa2\xc9\xd4\x48\x93\xe3\xe1\x97\x88\x63\x0c\xbb\xb6\xff\xd5\x32\x44\x68\xa0\xfa\xe1\xe0\xe0\x4f\xdf\x9c\xfd\xe5\x7f\x1d\x1c\xfc\xf8\x5f\xb1\x38\xa3\x19\x6a\x93\x6b\xe3\xb1\x57\x15\xcd\xa6\x5c\xe4\xf4\x02\xd7\x05\xbf\x54\x03\x98\x1a\xfe\x20\xec\x33\x34\xd1\xb5\x9a\x2e\x85\xd2\xe7\x97\xc7\xcd\x97\x95\xc8\xcf\x2f\xa3\x30\x46\x4e\xca\xfb\x2d\x04\xcf\xcd\xb8\xc3\x2b\x70\x49\x82\xea\x2b\xc7\x32\xf1\x3a\xbd\x16\x55\xf4\x3b\x9e\xe1\x42\xda\x61\x5a\xb3\x25\x2d\x49\x94\x3e\x0c\x5f\x35\x8b\x0f\x4c\xc1\xad\x64\x5a\x7b\x96\x23\xec\x13\xe3\xae\x22\x9f\x98\x1f\x1b\x2d\x80\x4f\xf8\x18\x66\xee\x8b\xd5\xab\xe0\xc4\x9f\x68\x46\x42\x7b\x6e\xa3\x1e\x15\xdc\x8b\x48\x86\xae\x55\x2e\xed\xf3\x20\xca\xbe\xf6\x01\xf5\x70\x7a\x79\x1e\xcc\x74\x65\xef\xc6\xb3\xd8\xd6\xa6\x5a\xd7\x57\xcf\xd4\x5a\x68\xc6\xd7\x08\x82\xd6\x6b\x1d\x76\x04\x31\xaf\xae\xad\x54\x06\x05\x2b\x59\xe0\x7d\x25\x3c\x47\xed\x40\x95\x56\x70\x68\x19\x4e\xb3\xaa\x0e\x53\x80\x8e\x4f\x49\x4b\x21\xd7\xc7\xcd\x97\xb4\x5a\xd2\x92\x4a\x52\x4c\x94\x16\x92\x2c\x02\xd5\x77\x33\x6c\x1c\x6e\xf7\x95\xfd\xd0\x68\x8b\xb2\x3d\xea\x90\x64\x1a\x5b\x8b\xa3\x85\x6b\x37\x36\x24\xcd\x7f\x39\x56\x42\x73\x3c\x9f\x81\x91\xd0\xde\xba\x8b\xe8\x6e\x8e\x37\xc1\x61\xa8\x86\xd0\x05\xd3\xae\x3d\xcc\x23\x14\x82\x58\x89\xa2\x2e\xa9\x3a\x6e\x9f\xc7\xe1\xee\x04\x21\x81\xf2\x15\xac\x88\x54\xcf\xe6\xf1\x9f\xb3\x15\x53\xe1\xf5\x8c\x76\xbc\xfd\x63\x34\xae\xc6\x9c\xed\x5a\x57\xb5\x76\xe5\xe4\x63\x19\x95\xf4\x53\x25\x14\xc6\x9b\x22\x54\xac\xb4\x94\xf7\xa3\x37\xaf\xc2\xfa\xf5\x60\x01\x0a\x4d\x25\x7f\x0d\xff\x79\xf8\xd7\x2f\x7e\x9e\x1c\x7d\x79\x78\xf8\xc3\xcb\xc9\xbf\xff\xf8\xc5\xe1\x5f\xa7\xf8\x8f\x7f\x3d\xfa\xf2\xe8\xe7\xe6\x8b\x2f\x8e\x8e\x0e\x0f\x7f\xf8\xe6\xfd\xd7\xd7\x97\x67\x3f\xb2\xa3\x9f\x7f\xe0\x75\x79\x63\xbf\xfa\xf9\xf0\x07\x7a\xf6\xe3\x9e\x4c\x8e\x8e\xbe\xfc\x4d\xe0\xc0\x09\x5f\x7f\x08\x32\x25\xc0\x96\x5d\x8d\xd2\x83\x60\xc8\x2d\x4a\x39\xa4\x4f\x93\xce\xe9\x39\x61\x5c\x4f\x84\x9c\x58\xc6\xaf\x41\xcb\x3a\xec\x91\xd2\x1c\xc7\xb8\x72\xf6\x63\xa4\xba\x7d\x3d\x93\xac\x35\xb3\x9f\x85\x20\x53\x34\x93\x54\x3f\xef\x38\x95\x1d\x63\xf3\xaa\xc0\x64\xf3\xe0\xa8\x03\x3a\xb7\x7e\x29\x36\x4f\x0a\x7b\xdd\x47\x6d\x82\x2f\x9e\xa2\x78\xaf\xdc\xb9\x14\xe5\x14\x7a\xc0\xaf\x55\x94\x76\xfe\x6e\x9c\x37\x34\xb8\x16\x55\x0a\xd3\xf9\x50\x0a\xd3\x85\x51\x0a\xd3\x8d\xa3\x7e\x98\xee\x0a\xef\x7e\x8a\xd1\xed\x22\xca\x57\x7e\xc0\xaa\x9d\xc8\xfb\xc6\x87\xa5\x05\x54\xa2\xaa\x0b\xa2\xbd\x32\x44\x76\xe1\xf7\xb7\x61\xf8\x1e\x9c\x9d\xf2\xeb\xd0\xac\x5d\x8e\x97\xaf\x7b\xa3\xdc\x8d\x50\x86\xd3\xa2\x00\xc6\x7d\x95\x17\x0e\xb2\xc9\x37\x92\xd4\xba\x93\x80\x60\x55\x51\xec\x87\xe4\xc1\xf3\x76\x49\x37\x96\x10\x98\x02\xa5\x89\xd4\x8c\x7b\x35\x83\xfa\xde\x70\x44\x73\xb4\x49\xbb\x61\xbc\xeb\x87\x14\xf0\x90\x6d\x4b\x98\xf5\x1a\xe6\x75\x35\x6b\x0a\xa2\x7c\xe6\xef\x5e\x0a\xb8\xaa\x9a\xdc\x20\xb6\x39\xa3\x39\xe5\x19\x9d\xc2\x77\xbe\xb5\x5f\x9b\x93\x34\x5b\x9b\xbd\x39\xe3\xab\x36\x13\xab\xb6\xc9\x3f\x3e\x87\xca\xac\xe8\xee\x71\xfe\xf3\xa6\x9e\x18\x31\xe5\xa0\x9b\x5d\x06\x8a\x97\xe4\x44\xbb\xb5\xf5\xe4\xb7\x05\x9f\x5b\x34\x87\x57\xae\x50\xd8\xcb\x25\xf4\xb5\xd0\x62\x23\x03\x1e\x9c\x5b\xcf\x84\x76\x41\x42\x6a\x6b\xdb\x67\x01\x9a\xf5\x9e\x3c\x9e\x09\xfc\x34\xd4\x5c\xdf\x69\xaa\x07\x47\x91\x87\x66\xfa\xf3\x33\xb3\x1f\xc1\xc4\xde\x61\x5e\x5b\xf3\x38\x88\x6b\xa8\x69\x1d\xc5\xac\x8e\x61\x52\xef\x32\xa7\x03\x92\x6b\x3b\x1a\x20\xde\xa2\x98\xc0\xe1\xe6\x6f\x38\x3c\xad\x92\x74\xce\x3e\x45\x91\x99\xa7\xbc\xdd\x40\x60\x39\xe5\x9a\xcd\x59\xc0\x9a\x1b\x23\x5a\xd2\x8a\x72\x04\x11\x60\x1f\x47\x63\x17\x78\xe6\x47\xc2\xe6\x0e\x3e\xbb\xe4\x3a\xeb\xa2\x89\xa9\xc0\xae\x62\x39\xa7\x92\xf6\x4a\xda\x2b\x69\xaf\x87\xe8\xd9\x6b\x2f\x27\x0f\x9a\x27\xfb\xd3\xaa\x1f\xac\x08\x13\x5a\xf4\xe6\x6d\xaf\x1e\x19\xde\x71\x6f\x77\xed\xfe\x77\xaf\x2b\x7b\x78\x82\x9f\xeb\x73\xc5\xb0\xf0\x6e\x5b\x4e\xbd\xd5\x9a\x5a\xd8\x52\x9c\x1e\x1c\x97\x6c\x61\x6e\x68\x41\x57\xb4\x70\xcf\x21\x28\x09\x27\x0b\x5b\x17\xde\xeb\x05\xe3\x22\xe8\x20\x24\xf6\x95\x94\x2c\x1f\x38\x4f\x7c\x27\xcf\x38\x18\xb1\x55\x08\x92\x23\x3b\x29\x8a\x82\x4a\x05\x05\xbb\xa1\xf0\x96\x56\x85\x58\xfb\x36\x20\x24\x3c\x87\x2b\x4d\xb4\x11\x53\x57\x54\xfb\xe0\x94\x03\x44\x01\xae\xc8\x65\x5d\x14\x97\xa2\x60\x99\x47\xdc\x6a\x78\xb8\xcf\xf1\x54\x57\x75\x51\x40\x85\x0c\xa7\xf0\x81\xfb\x9c\x6d\x31\x87\xd3\xe2\x96\xac\xd5\x31\x5c\xd0\x15\x95\xc7\x70\x3e\xbf\x10\xfa\xd2\x3a\x11\x7c\x0c\x9e\x7e\x66\xac\x65\x0d\x6c\x0e\xaf\xb1\xe7\x9e\x06\x4d\x7c\x84\x28\xeb\x35\x92\x3f\x36\x67\xae\x3f\x48\xab\x80\x6e\x99\xf2\xca\x2d\xbd\xb7\x18\x9a\xdf\xa5\xff\x35\x72\x32\xaa\xd7\x7e\xfd\x0f\x3d\x68\x05\x9b\xd3\x6c\x9d\x15\xa1\xf2\xf3\x34\xc3\x0c\x87\xae\x6d\x5c\x27\x31\x7c\x1c\x8c\xb6\x8b\xbd\x2b\x71\x8b\xae\x3b\xc6\xc1\xb6\x70\x57\x9e\x1d\xba\x3b\x71\xd3\xce\xd9\x3a\x80\xd5\x93\xfa\x02\x3d\xed\xd9\x30\x4b\xb6\x12\x4a\x5f\x69\x22\x75\x84\x16\xef\x07\x97\x0d\x33\xc0\xd6\xbe\x45\xe1\x6d\x08\xb0\xb2\xa4\x39\x23\x9a\x16\x6b\x20\x73\x8d\x85\x92\x43\x0b\x5a\x98\x31\x49\x6a\x6f\xaa\xeb\x28\xb5\x24\x3c\x2f\xa8\x84\x39\x61\x85\x37\x3a\x6c\xcb\xfd\xaf\xa9\x2c\x19\x0f\x28\xa4\x6e\x61\xb5\x18\x45\xa0\x39\x16\x86\x96\x39\x16\x89\x13\xe0\x0f\x63\x76\x0c\x3b\xb1\x8f\xd6\x77\xd0\xe5\x84\x0e\xb3\xd0\x2d\xc0\xac\x10\xd9\x8d\x82\x9a\x6b\xe6\x6b\xd5\xe3\xd6\x08\x71\x03\x99\x28\xab\x02\x85\x67\x58\xa1\x49\xb8\xbf\xd8\xe4\x2e\x89\xdc\xfe\x73\xd2\x0a\x89\x89\x19\x93\x3a\xf9\x75\xf7\x23\xfc\x86\xdf\x1b\x21\xf8\x0d\x1b\xfe\x82\xa5\x9f\x68\x16\xa9\xe9\xc3\x07\x4e\xf1\xd4\x0a\x3e\xb2\xb4\xf6\x90\x04\x6f\x13\x01\xe6\xc2\x18\xad\xe6\xd4\xc7\xe8\x23\xd1\x1a\x01\x53\x38\xfb\x44\xb3\x28\x9d\x55\xcc\x28\x09\x2a\x3b\xac\x85\x4c\x6e\x02\x4a\x54\x3c\xa3\x26\xe6\xde\xa5\x43\xfb\x34\x38\x1c\x6f\x2c\xc7\xf0\x06\x73\x56\xd0\x58\x66\x05\xe3\x9e\xea\xbf\x4f\xae\x30\x29\x30\xae\xcc\x43\x64\x20\xc9\x62\xf4\xa2\x72\xae\x14\xc8\x99\xc4\x0e\x1e\xa1\x20\x0c\x57\x60\xa5\x5d\x85\xf0\x35\x95\x42\x68\x38\x3c\x38\x39\x38\xda\x42\x03\x04\x77\x94\x9d\xb3\x82\x5a\x03\xce\x96\x3b\x72\xa3\x0e\xe4\x6a\x6c\x7a\x56\x56\xc5\x1a\x77\xef\x20\x3f\x06\x16\x0a\x44\x71\x35\x5f\x65\xcd\x9b\x93\x10\xda\x87\x1c\x0b\x4c\x1e\x83\x12\xa0\x25\x69\x1a\x57\xc5\xe0\x69\x06\xa8\x65\xed\x8c\xec\xc3\x83\x9f\x0f\x42\xcf\x29\xd5\xd9\x11\xdc\x0a\x7e\xa0\xf1\xb8\x4e\xe1\x3a\xf4\x56\xd5\x8a\x36\x25\x7e\x8f\xb1\x36\x3f\xa7\xe1\x80\x1c\x01\xf4\x53\x55\xb0\x8c\xe9\x62\x8d\xc6\x25\x88\x3a\x74\xdf\xb1\x86\x3d\xd1\x4d\x35\xe2\xb3\x4f\xc1\x27\xc9\x66\x34\x1b\x25\xf6\x12\x4d\x41\x6b\x70\x06\x32\x25\x0a\x0a\xb6\xa2\x27\x4b\x4a\x0a\xbd\x5c\x43\xf8\x1d\xe2\x82\x4f\xfe\x4e\xa5\xc0\x7a\xc9\xdc\xf1\x8d\xd1\xe8\x2d\xbc\x3b\x5e\x94\xf6\x97\x11\x7c\xaf\xc6\x5e\xfc\x9a\x7a\xbe\x8b\x60\x53\x07\xfe\xf9\xfa\xfa\xf2\x6b\xaa\xa3\x19\x1e\x66\x74\x4d\xea\x1d\x46\xb5\xa8\x9c\x0b\x59\x3e\xb1\x05\x12\x0e\x12\x9f\x40\x25\xe4\x53\x9b\x40\x4b\xa1\x02\xf6\x1d\xb6\xf6\x5e\x28\xed\x5b\x8f\xb4\x4f\x5a\x18\xdd\xcc\x69\x66\x76\x3c\x5a\x1a\x7a\xd7\x30\x07\xce\x2f\xa7\xf0\x17\x51\x9b\x55\x9c\x91\x59\x90\x25\x6f\xa8\xe9\xc8\xa2\xa8\x86\x17\x66\x11\x5e\x84\x04\x5a\x2d\x99\x73\xff\x67\x4a\x72\x2a\x15\x6a\x42\x4a\xa2\xf4\xa7\x0c\x86\xee\xf6\xc6\x15\xd3\x72\xae\x95\x16\x25\x2c\x2d\xe3\xf0\x8d\xee\x95\x5e\x76\xb2\x23\x14\xb9\x6f\xe4\x9a\x8d\x2f\x28\x90\xb4\x8a\xa1\xed\xdc\x6c\x7f\x41\xda\x68\x4b\x13\xd8\x93\x12\xc8\xb5\xe1\x3b\xa3\x0a\x08\x64\x78\x54\x82\x59\xda\xc5\x37\x67\xc5\x95\x4b\x0c\xe6\xc8\xb8\x3d\x24\x46\xa8\x04\xe7\x17\x44\xeb\x26\x1b\x27\xa1\x09\x42\x4a\x4d\x0f\x99\x20\x34\x37\x90\x4b\xac\xfc\x28\x88\x94\x49\x03\x3b\x00\x24\x11\x58\xb6\xa7\xd4\x06\x3b\x23\x2c\x3f\xc4\xcc\xe1\x80\xd0\xa2\xd6\x7d\x7a\xfc\xe5\x8b\x71\xf0\x20\xde\xfa\x55\xc1\xe5\x67\xb6\x8b\xcf\x68\x01\x24\xcb\xfc\x9a\x29\xf5\x49\x58\xd5\x89\xe2\x4c\x51\xb9\xf2\x4b\x98\xe8\x28\xd6\x92\x09\xdf\xf0\x4d\x43\x3b\x2a\xcf\x4b\xe0\x75\x39\x0b\x56\x52\x6d\x1d\x38\xa9\x63\x6f\x43\xaf\x79\xc4\x45\x8c\xa1\x36\x10\x96\xc6\x40\x22\x7c\x11\x7a\x2f\x5e\x99\x39\xff\xf1\x0f\x7f\xf8\xdd\x1f\xa6\x76\x59\xcd\x67\x04\xf2\x9c\x51\x20\x1c\xce\x4f\x2f\x4e\x7f\xba\xfa\xee\x0d\xd6\xe4\x0e\x3b\x85\x11\x92\xf9\x63\xa6\xf2\x47\x4c\xe4\x7f\xc4\x34\x7e\x2c\x58\x16\x28\xe1\x87\xb8\x2c\x64\x18\xee\xd1\xae\x95\x2d\xc3\xed\x5e\x8a\x36\x6c\x18\xc1\x93\x6d\xde\xc4\x83\xea\xe5\x11\x1e\x0e\x4f\x2e\x3d\x75\x56\x5d\x89\xec\x26\x9a\x97\xe7\xe0\xfa\xcd\xa5\x65\x18\xc5\xd1\x43\x78\x13\x60\x62\x7c\x25\x8a\x95\xd9\x4c\x02\xd7\x6f\x2e\x03\x95\xc5\xd4\xf0\xc0\x08\xab\xf5\x7b\xaf\x83\x32\x39\xdb\xd2\x4c\x0e\xda\xc9\xca\xaa\x08\x89\x28\x03\x76\x20\x90\x94\x14\x4c\x69\x96\xe1\x58\xdb\x18\x6c\x90\x57\x47\xdc\xf8\xe3\x39\x93\x7f\xac\xa3\xc8\xfe\xb1\x83\x0f\x91\xb2\x9e\x5b\x47\x5b\xcf\x55\x16\xec\x34\x39\x1e\x14\xfd\x09\xaf\x50\xe9\x1c\x6d\x61\x29\xe7\xcf\xd4\x72\x44\x33\xcc\xaf\xc1\x68\x9f\x78\xaf\xf7\x91\xb3\x1c\x43\x23\x28\x68\x77\x6e\x5b\x8e\x81\x6c\xdd\x84\x87\x96\x63\xa8\x5f\xc2\xd8\x9d\x5b\x96\x63\x24\xdb\x36\x59\x8e\xfb\xd1\x23\x58\x8e\x95\xa4\x57\x5a\x54\x51\x70\x76\x96\x55\x54\x94\xdd\x8c\xce\x85\xa4\x71\x60\x76\x1d\x00\x0e\xf2\x1a\x85\x31\xe1\x01\x95\x55\x9b\x30\x97\xe8\xc3\xd5\xbc\x53\xf6\x01\x4d\x96\x6c\xd9\x44\x55\x39\x55\xea\x04\xa1\x71\x75\x65\x9d\x94\x9e\x4c\xe7\x84\x15\xb5\xa4\xc7\x66\xa7\x69\x89\x7b\x75\x1c\x5a\xe4\xd1\x6c\x06\xe5\x96\x15\xd5\x99\x85\x51\x38\xd4\xa2\xff\xfe\x18\x9b\xcf\x1e\x1c\xdb\x27\x37\xbc\x59\x58\x26\x89\x5a\x52\x6c\x11\x4a\x3f\x31\xad\xec\x40\x25\x25\xca\xbb\x46\x34\x42\x5d\xdc\x41\x42\x13\x58\x41\x45\x94\xa2\xb9\xbf\x36\xe8\x41\x3e\xed\x00\x2f\x45\x7e\x70\xa0\xfa\x1f\xe3\xc9\x79\x21\x49\x46\xa1\xa2\x92\x89\x1c\xb0\xea\x7a\x2e\x6e\x39\xcc\xe8\x82\x71\xdf\x17\x80\xbb\x91\x66\xd0\xcd\x85\x37\x26\x2c\x0d\x00\x52\x35\x7d\x98\xa7\xf0\x71\xd0\x27\xd6\x5f\x6b\x89\x5a\x67\xa2\xd3\xd6\x6e\x75\x8f\x03\x38\x76\x48\x52\xac\xd6\x80\xd7\xbc\x26\x45\xb1\xee\xc4\x8a\x27\x67\x57\x98\x44\x3f\xd6\xc6\x7f\x66\x98\x5a\x73\x59\x43\x39\xf6\x2f\x68\x7f\x29\xfc\x65\x93\xa4\x24\x5b\x86\x25\x53\x24\xe8\xee\x03\x94\xa0\xbb\x09\xba\x7b\x27\x25\xe8\x6e\x82\xee\x26\xe8\x6e\x82\xee\x26\xe8\x6e\x82\xee\x8e\xa4\x04\xdd\x7d\x88\x12\x74\xf7\x4e\x7a\x96\xa1\x89\x04\xdd\x4d\xd0\xdd\xbd\x29\x41\x77\x13\x74\x77\x1c\xdf\x04\xdd\xf5\xa2\x04\xdd\xbd\x97\x12\x74\x37\x84\x12\x74\xd7\x97\x12\x74\x77\x34\x25\xe8\x6e\x82\xee\x06\x50\x02\x60\x78\x50\x82\xee\x46\x78\x38\x3c\xb9\xf4\x4c\xd0\xdd\x04\xdd\xdd\x93\x92\x7f\xac\xa3\x04\xdd\x0d\xa0\x04\xdd\x7d\x90\x12\x74\x37\x41\x77\x03\x78\x3d\x3f\xcb\xb1\x81\x88\x5e\x4a\x31\x0b\x2e\x2d\x7d\x89\xe0\x28\x96\x59\x8f\x9a\xb9\x27\x21\xc0\xcb\x66\x68\x53\x78\x33\xc4\xcc\x61\x7f\x2b\x57\x3e\xd2\x83\xaf\xc3\x84\xda\x31\x62\x69\xcc\xe9\x8e\x6a\xb7\x1e\x8c\x47\x42\xba\x9a\x82\xce\xea\xa4\x12\xf6\xff\x3a\x40\x57\x0f\xc9\x65\xbd\x93\xbe\xb5\x72\x9f\xa4\xea\xaa\x3f\x7c\xeb\x4e\xe8\x16\x08\xaf\x32\xce\xd0\x3d\xf4\x37\x61\x5b\x43\xf0\x95\x27\xef\x21\x64\x6b\x08\xbc\xf2\xb5\xfc\xbd\xe1\x5a\xcf\x00\xb8\x17\x0c\xd1\xba\x03\x9e\x15\xa8\xbd\x36\xa0\x59\x0d\xb8\x2a\x80\xe3\x4e\x58\x56\xe0\x28\xb7\x20\x59\x0d\xa8\x2a\xc2\xcc\x11\x7b\xda\x07\x54\x05\x46\xf9\x7b\x50\xac\x3e\x98\x2a\x80\x6b\x0f\x86\xb5\x0d\xa4\x0a\xd9\x29\xbd\x0b\x44\xe5\x30\x40\x21\x8f\xcb\x01\x80\x6a\x07\x04\x2a\x80\x37\x82\xa7\x22\xc3\x9f\x76\x42\x9f\xc2\xec\xd7\x1d\xb0\xa7\x06\xb8\x14\xb2\xb0\x1d\xe4\xa9\x0f\x5a\x0a\x39\x02\x2d\xdc\x69\x13\xb0\x14\xe4\x02\xc9\x63\x83\x95\x62\x84\x86\x83\xc3\xc2\x81\x96\xaa\x4b\x13\xba\x5e\x4a\xaa\x96\xa2\xf0\x54\x05\x03\x35\xf0\x9e\x71\x56\xd6\xa5\x91\x39\xca\xc8\x6d\xb6\x0a\xcc\x61\x52\x2d\x5a\xd5\x1a\x81\x18\x53\xf6\xd6\x78\x28\x51\x24\xcd\x91\xbb\x39\x62\x58\xd0\x7d\x49\x56\xfe\xa6\xbe\xaa\xb3\x8c\xd2\x9c\xe6\x03\xbf\x26\xfc\x6e\xda\xac\x85\x27\x5f\xdb\x20\x95\x29\x78\x15\x62\x61\x84\xbc\x88\xe6\x42\x96\x44\x23\x8f\xdf\xfd\xd6\x83\x43\x10\xf6\xed\x51\x70\x6f\xd1\x31\x6f\xc1\x66\x5c\x98\x2f\x2f\xc0\x8f\x17\x6e\x3f\x86\xf9\xef\x76\x63\xdb\xc2\x74\xdc\x2e\x5c\x5b\x18\xc7\x47\xc0\xb4\xed\xc4\xb3\xf5\x91\x5f\x61\x96\x6e\x18\x96\x2d\x12\xe2\x35\x18\xc3\xf6\x38\xf8\xb5\xdd\xd8\x35\x94\x2e\x21\xc6\xc5\x10\xb7\x16\x8e\x3c\x7b\x16\xa6\xc5\x63\xa0\xcd\xb6\x91\x66\x6e\xb1\xc2\xbc\xd8\x2d\xca\x2c\x1e\x4a\x2c\x12\x42\x2c\x06\x3a\x2c\x18\x19\x16\x8e\x0a\x8b\x85\x08\x8b\x81\x06\xdb\xea\x02\x1a\xe1\x04\x41\xd3\xb8\x31\x0a\xbe\x3a\x96\xf7\x38\x0a\xfa\xeb\x71\x97\x2b\x06\xea\x2b\xc2\x7a\x85\xa1\xbd\x1e\x07\xe9\x15\x13\xe5\x15\x63\x89\x82\x62\x74\x8f\x83\xec\xda\x89\xea\x02\xef\xfc\x77\xd8\x74\x77\x4d\xfb\x91\xb5\x00\xa6\x1b\x68\xae\x7e\x54\x2d\x80\x6b\x8b\xe4\x8a\x1b\x51\x0b\x8c\xa6\xc5\x8a\xa4\x45\x8a\xa2\x3d\x12\xf6\x2a\x14\x77\xb5\x1b\x73\x65\x6c\x90\x80\x03\xb1\x85\xb7\xea\x10\x53\x01\x5c\xfb\x3e\x89\x30\xb4\x54\xe0\x86\x32\xce\x34\x23\xc5\x5b\x5a\x90\xf5\x15\xcd\x04\xcf\x3d\xad\x89\x8d\x5e\xd5\x0e\x2d\x30\x07\x65\x99\x7a\xce\xcf\x7a\x82\x86\xb5\x2e\x96\x44\x81\x7f\xec\x12\xba\xc2\x29\x4d\x78\xd4\x19\xa6\x40\x30\xf8\x68\xd6\xc3\x33\x7c\x09\xcf\x2e\x84\x09\xcf\xc2\xe5\x64\x4b\x7e\xc4\x3b\x5e\x7f\x16\xb7\x20\xe6\x9a\x72\x38\x64\xbc\x39\x61\x47\xbe\xde\xa7\xd6\xd9\xd4\xf9\x33\x5b\xa7\xa1\x3f\xcf\x57\x2f\x9b\x81\xb5\x2e\xc7\x20\xc3\xec\x73\x76\x39\xa2\x33\x56\xa9\xe7\xe9\xd1\x76\x83\x7b\x2c\x97\xb6\x63\x3f\xaf\x0b\x2b\xcc\x7c\xfd\x37\xe8\x0c\x77\x0e\xf2\xa1\x4f\xdb\xf3\x58\x00\xbc\x77\x66\xce\x2b\x9c\x79\x2b\x0d\x09\xcf\xc1\x95\x3b\xf3\xe6\xdc\x3f\xf0\x9f\xf5\xd1\x0d\x44\x11\x3f\x16\x82\xf8\x4e\xf4\xb0\xc5\x00\x7b\x72\xdd\x42\x0e\x77\xf8\x5f\x5f\x8e\x43\xd4\x70\x1f\xfb\x1b\x30\xc6\xae\x2b\xb3\x3f\xee\x37\xc5\x08\xfc\xfe\xf6\x4e\x7c\x2f\x86\x0b\x02\x4c\xe2\x0d\x6c\x6f\xac\x34\xf8\x61\x0a\x7c\x28\x46\xfc\xd9\xbc\xf6\x1b\x34\x6e\xa8\x6f\x2c\xbd\xf6\xd3\x6b\xff\x01\x7a\x84\xd7\xbe\x66\x25\x15\xb5\x7e\xb6\x0f\xce\xdb\x25\xcb\x96\x7d\x5b\x90\x95\xde\xaa\x5a\xd4\x7a\xc3\x5e\x73\x43\x8c\x08\x45\x48\xaf\xce\x0d\xf2\x8b\x69\xec\x70\xa8\x86\x57\xbf\x6d\x11\xb2\x40\x14\x10\x78\x7b\x71\xf5\xd3\xbb\xd3\xff\x38\x7b\x37\x85\x33\x92\x2d\x83\x58\x33\x0e\x04\x35\x1b\x8a\xb0\x25\x59\x51\x20\x50\x73\xf6\xb7\x9a\xfa\xea\x85\xc3\x76\x7c\x47\x51\x30\xdd\x01\x12\xc8\xe8\x24\x0f\xd9\x30\xd8\xc4\x77\x4c\x69\xb3\x89\xc8\xcb\xd5\x19\x13\x5e\xfe\xc0\xb9\x14\xe5\xa6\x6a\x3b\x33\xcc\xac\xe9\xed\x69\xcd\x2d\xa9\xa4\xb0\x60\x2b\x87\x7c\xb6\x18\x50\x20\x79\x40\x55\x39\x23\x05\xcc\xc5\x31\x8f\x03\x32\x43\x40\xe1\x92\x02\xa7\xda\x5c\xfa\xd6\x95\xe9\x87\xae\xec\x15\xff\x86\x5a\x51\x75\x0c\xb3\x1a\xc1\xa1\x95\x64\x25\x91\xcc\x0b\x82\xd1\x1b\x30\x29\xa6\x70\x21\x9a\xe7\xd1\x1a\x97\xd6\xc7\xdf\x64\xac\x19\x5c\xda\xb7\x1f\xce\xae\xe0\xe2\xc3\x35\x54\x12\xeb\x04\xfb\x22\x2b\x91\x23\x1e\x81\x19\x35\xa3\xb2\xc7\x28\x9f\xc2\x29\x5f\xfb\xee\xbd\x55\x32\x4c\x81\x79\x0f\x51\x6e\xd8\xba\xf0\x54\xee\xed\x7c\x7a\xf1\x72\x8a\xff\x7b\x61\xce\x90\x34\xa6\x5c\x0b\xd7\x0d\x11\x34\x4d\xd2\x88\x35\x0f\xd9\xac\xa0\xdd\x7d\x70\x27\xcb\xc7\x5a\x8a\x26\x5f\xfc\x50\x19\xde\x68\x8c\x0d\x88\xbd\x5b\xd7\x4b\x73\x46\x24\xad\x24\x55\x94\x7b\xbe\x59\x48\x7b\x51\xf1\xc4\xa1\x80\x37\x12\xa6\x08\x4c\x6c\x0b\x7c\xed\x86\xbc\x75\x27\xdd\xc8\x2f\xfd\x2e\x4a\xe8\x83\x77\xf0\xf9\xbe\x66\xf9\xce\xe7\xd7\x3c\x2c\x63\xb7\xd5\x47\xcd\xc5\xaf\x44\x7e\xa0\xe0\xdc\x1f\xf7\xe4\x6e\xfd\x14\xae\x97\x4c\x75\x2f\x1b\x63\x2b\x32\xff\x72\x4f\x78\x16\x6d\x60\xf9\x18\x5e\xc2\x9f\xe0\x13\xfc\x09\x1f\x5f\x7f\xf4\x7d\x23\xc5\x78\xe0\x84\xba\xf6\xac\x1f\xe4\xfc\x32\xca\x89\xf8\x7e\x49\x34\xf2\x83\xf3\xcb\x10\x70\xe3\x8c\xf1\x1c\x8f\x02\xfd\xa4\xa9\xe4\xa4\x68\x9e\xe6\x61\x2b\x1d\xf0\x04\x34\x93\x7a\xf6\x17\xc7\x56\xb0\x38\x9f\x7b\x73\x6c\xad\xf4\x63\xd0\x83\xab\xe3\xcd\x11\xaf\xdc\xce\xab\xe3\xcd\xd2\x5e\x39\x38\x9f\xa3\xaf\xed\xc2\x69\x0a\xa6\x7a\xa3\xf7\x5f\xd2\x76\xd6\x25\xd1\xd9\x72\xa8\xd6\xfc\x5d\x21\xef\xcd\x95\xe8\x4a\xef\x43\x2e\xd0\xb7\x1c\x54\x34\xd8\x0c\xf5\xf3\x16\x3c\x21\x90\xbb\xc1\x7d\x3a\x9f\x6f\x9e\x5c\xef\x55\xbd\xcb\x0d\x16\x54\x91\xd8\x3d\x46\x7b\x8d\x35\x2a\x91\xdb\x97\xaf\x37\x4f\xb3\x78\x79\xcf\x3e\x1a\x3c\x80\xfd\x35\x67\xff\xe1\xec\x2a\x3a\x85\x26\x0f\x5a\xd1\x6d\x34\x43\x46\xb8\x4d\xba\x9e\x53\x29\x43\x8e\xbe\x80\xd9\x1a\x91\x6b\x2c\xa3\x81\x97\x20\x40\x27\x54\x52\x68\x91\x09\xef\xa2\x1e\x43\x70\x9f\x63\x86\xcb\x1d\x12\xbe\xea\x22\x9a\xdf\xbe\xbd\x3c\x86\xeb\x37\x97\xc7\x20\x24\x5c\xbd\x09\xc1\xd7\xf4\x3d\x77\x2f\xae\xdf\x5c\xbe\x78\xb2\x45\x87\xe6\x5d\xf8\xda\xab\x4c\xd0\xc0\x8d\x6b\x9e\x9c\x93\x92\x54\x93\x1b\xba\xf6\xb0\xaa\x43\x6d\xfa\x49\x7b\x82\x22\x4c\xc3\x2e\x6c\x49\xaa\x91\xbc\x24\x25\x39\x7b\xa6\x95\x1b\xdc\x0d\xef\xc6\xb8\x59\xc2\xc1\x83\x27\xca\x9f\x52\xac\x68\x6e\x1f\xef\xcd\x67\x50\x9e\x57\x82\xf9\xbd\x58\x53\x25\x88\x87\x29\x55\x82\xd8\x8f\x52\x25\x88\x21\xa5\x4a\x10\x01\x3c\x53\x25\x88\x54\x09\xc2\x52\xaa\x04\x91\x2a\x41\x78\x52\xaa\x04\xf1\xf0\xe0\x52\x25\x88\xcf\x16\xdb\x9a\x2a\x41\x3c\x4c\x09\xe5\x99\x2a\x41\xa4\x4a\x10\x5b\x94\x2a\x41\x3c\xb5\x69\x91\x2a\x41\xa4\x4a\x10\x0d\xa5\x4a\x10\x23\x28\x55\x82\x18\x47\xa9\x12\xc4\x83\xf4\xcc\x72\x43\x52\x25\x88\x94\x1b\xb2\x2f\x9f\xe7\x97\x1b\x02\xa9\x12\x84\x1f\xa5\x4a\x10\xe3\x29\x55\x82\x18\x47\xa9\x12\xc4\x78\x9e\xa9\x12\x44\x47\xa9\x12\x44\xaa\x04\xf1\x99\x1e\xdd\x54\x09\x22\x55\x82\xd8\x4d\x29\x46\x90\x2a\x41\x8c\xa3\x54\x09\xc2\x9f\x69\x7a\xed\xfb\xf3\x79\x7e\xaf\xfd\x54\x09\x22\x55\x82\x78\x90\x42\x4c\x37\x49\x95\xa8\x65\xe6\xa3\x22\x87\xe7\xea\x8d\x28\xab\x5a\x53\xf8\xd8\x30\x6c\xf5\xbe\xc7\x9c\x66\x6b\x9b\x70\xd5\x93\x8e\x4f\x01\x9b\xce\x04\x9f\xb3\x45\x2d\x31\xf9\xfe\xa4\x24\x9c\x2c\xe8\x24\xb3\x13\x9d\xb4\x2b\x37\x69\x47\x79\xf2\x59\x41\xa7\x0b\x56\x32\x9f\x0a\x12\xb0\xb5\xf7\xef\x90\x53\x17\x1f\x0d\x80\xb7\x94\xe4\x13\x3e\x88\x48\x29\x6a\xae\x6d\x9e\x00\xae\xb7\x27\xcf\x76\x97\x6c\x9c\xdb\x3c\x09\xbb\x43\x10\x00\x11\x78\x06\x47\x07\x62\x18\xe7\x5d\x2d\x8d\xcb\x60\x6b\xb9\x22\x5a\x53\xc9\x5f\xc3\x7f\x1e\xfe\xf5\x8b\x9f\x27\x47\x5f\x1e\x1e\xfe\xf0\x72\xf2\xef\x3f\x7e\x71\xf8\xd7\x29\xfe\xe3\x5f\x8f\xbe\x3c\xfa\xb9\xf9\xe2\x8b\xa3\xa3\xc3\xc3\x1f\xbe\x79\xff\xf5\xf5\xe5\xd9\x8f\xec\xe8\xe7\x1f\x78\x5d\xde\xd8\xaf\x7e\x3e\xfc\x81\x9e\xfd\xb8\x27\x93\xa3\xa3\x2f\x7f\xe3\xfd\x38\x0c\x30\x3f\xe2\x18\x1f\x51\x4c\x8f\x47\x30\x3c\x1c\xba\x24\x8a\x78\xf8\xe8\x78\xc5\x11\x10\xce\x63\x12\x5f\x40\x34\xfa\x0a\x33\x88\x9b\x31\xfb\x3b\x21\x45\xc9\xb4\xa6\x39\xba\x8c\x7a\xe5\x45\x7c\x71\xe0\x4c\x0f\x9a\x71\x3b\x91\x8b\x09\x46\xde\x10\x68\xa6\xfa\xb8\xea\x5e\xa6\xac\xd0\x4b\x2a\x6f\x99\x77\x3c\xc8\x3c\x90\x78\xe7\xcd\x40\x21\x38\xc9\xe9\x9c\x71\x6f\x07\x09\x1a\x71\xa3\xed\xb7\x24\x86\x93\x18\x1e\xc3\xe5\x39\x89\x61\x45\xb3\x5a\x32\xbd\x7e\x23\xb8\xa6\x9f\x3c\x1c\x22\x43\x29\x7c\xe5\xd8\x81\xc0\xef\xf8\xe6\x39\x55\x22\x6f\xb2\xda\x64\xcd\x31\x75\x3d\xd0\xa4\xda\xe7\x1e\x57\xa2\x60\xd9\xfa\xa4\x59\x12\xbc\xb0\xf4\x93\x3e\x79\xb4\x37\x80\x26\xea\xa6\x13\x1f\x74\x62\x5e\x7e\x9d\x94\xd8\x1a\xc7\x67\x65\xf8\xa3\x25\x7c\x29\xd9\x8a\x15\x74\x41\xcf\x54\x46\x0a\x94\x8f\x31\x74\xfd\xe9\x1d\xbc\xfd\xe3\x43\x5a\x8a\x42\xc1\xed\x92\x1a\x9d\x04\xc4\xcc\x1d\x5d\x6f\x19\xf1\x65\xba\x20\x8c\x43\x69\x8e\x41\xd5\x0c\xd4\xdc\x06\xa3\xb1\xbc\x15\x7e\x45\x24\xe5\xba\x19\x9c\x2b\x30\x34\x13\xa2\x70\x29\x76\xde\x98\xeb\x76\x05\x5c\x2e\x31\x17\x3f\x71\x7a\xfb\x93\x19\xb9\xef\x58\xe7\x05\x59\xb4\x35\xcb\x14\xd5\x0d\xd8\x2b\x24\x23\x1b\xec\xa9\xb4\x93\x8f\x7c\x08\x30\xa7\xaa\xa6\x40\x8a\x5b\xb2\xc6\xa3\x10\x67\xbc\x4c\xbd\x86\x57\x47\x28\xc6\x88\x82\x76\xbc\x39\xfc\xd6\x37\x44\xbe\x24\x0a\xde\x9c\x5e\xfe\x74\xf5\x97\xab\x9f\x4e\xdf\xbe\x3f\xbf\x08\x31\x27\xcc\xe9\xa1\x5e\x87\x3c\x23\x15\x99\xb1\x82\xf9\x5b\x11\x5b\xb8\xcb\x3e\xcb\x00\xa3\x30\xcf\x4f\x72\x29\x2a\xbb\x87\xb2\xe6\x58\xd6\xaf\xab\x7f\xe3\xeb\x49\xee\x7b\x0d\x7b\x15\x02\xcd\xe1\xf6\x75\x46\xce\x07\x53\x86\x85\x24\xdc\x58\xf3\xe8\x99\x0a\x88\x76\x3b\x68\x8e\xac\xb9\x66\xe5\xe7\x9b\x7c\x4d\xf2\x58\x89\xd7\xa7\x79\x4e\xf3\x18\xc7\xeb\x39\x26\x1e\xbc\x69\xa6\x15\x92\x71\x03\x5d\xd5\x44\xb8\xfc\x70\x75\xfe\xbf\xe3\xac\x16\xb8\x15\x0b\x09\x60\x45\xa8\xd9\x22\x45\x15\xe9\x24\x7d\x74\xd5\x3b\xd2\x59\xba\x8f\x7e\xa1\x67\xa9\xb5\xe4\x62\x60\xa6\x3e\xd6\xbc\x27\xab\xbd\x0b\x18\x74\x63\x82\x52\xe4\x74\x0a\x97\xd6\x40\xa2\x2a\x0a\xcf\x5e\xd9\x38\x22\x29\x18\xc6\x5c\x33\x52\x78\x9b\x9a\xf4\x6f\x35\x5b\x91\x82\xda\x04\x3f\x2c\xe1\xd0\xaf\x1f\x18\x41\x37\xcf\x49\xa1\x82\x94\x9e\xbf\x4d\x64\x8c\xd3\xf7\xa2\xe6\x31\xf0\x49\x2d\x2f\xc8\x29\x17\x3a\xc8\x9f\x69\xe6\x85\x05\x1f\xa5\xc8\xc0\xfa\x34\x83\xa0\xd8\x0d\x36\xaf\x67\x54\xa1\x01\xe7\x5f\x34\x19\xac\x09\xee\xf6\xf1\xb2\x9d\xbb\x8d\xfd\xd6\x2a\x68\xfa\x5b\x26\x51\x28\x94\xc5\xcc\x5f\x52\x92\x63\x25\x9f\x8a\xe8\xa5\xc5\xe9\x95\x44\xdd\x78\xfb\x1e\x91\x8d\x7b\xd3\x39\x2f\xb1\x2d\xc0\xd3\x2e\xc6\xb5\xbf\xf0\x9b\x53\xa2\x6b\x49\xed\xab\xcc\x26\x03\x52\x4e\x66\x85\x2f\xb2\x3a\x50\x90\x9a\xb5\xfb\xc0\x8b\xf5\x47\x21\xf4\x57\x6d\xb5\x95\x08\x97\xe6\x7b\xf7\x82\x1f\x06\x76\x03\x1e\x5a\x08\x91\xcb\x27\xb8\xd1\x28\xac\xc2\x8b\xc3\xb8\x33\x6e\x8e\xfb\x13\x8a\x2a\x59\xf3\x53\xf5\xb5\x14\xb5\xa7\x65\xb4\xf5\x78\xfb\xfa\xfc\x2d\x4a\xf4\x9a\x07\x3c\x5e\x28\xd7\x72\x8d\x95\xd0\x62\xb4\x7d\x80\xbe\xbf\xe0\x5b\xa3\x12\x37\xee\xbf\xaf\xa0\x9a\x43\xcd\x15\xd5\x53\x78\x4f\xd6\x40\x0a\x25\x1a\x27\x87\xb7\xca\xbd\x44\x44\x7e\xdf\x15\x3b\x05\xac\x2c\xea\xfd\xb8\x64\x1c\x66\x42\x2f\x61\x83\x6d\x40\x29\xd1\xed\x31\x62\x85\xa8\x20\x20\x7d\xd7\x99\x83\xf1\xcd\xa1\xfa\x4a\x7c\x72\x43\x15\x54\x92\x66\x34\xa7\x3c\x0b\xba\x5f\x91\x10\x33\x7f\xfc\xbd\xef\x0d\xbd\x10\xdc\x08\xc9\x08\x77\xf4\x9c\xe7\x2c\x23\xda\x7a\x21\x75\x14\x07\x03\x62\xf5\x9c\x67\x8b\x60\xf1\x20\x23\x22\x3d\xd9\xd6\x8a\x4a\x8c\x8a\x6a\x59\x53\x7b\xb0\xbe\xa9\x67\xb4\xa0\xda\xb7\xd8\x22\x34\x15\xa0\x89\xb6\x95\xcd\x58\x49\x16\x14\x88\x6e\xc4\x80\xbf\x8f\x89\x72\x65\xd4\x29\xae\x24\xd3\x90\x0b\xda\x96\xe4\xf2\x75\x76\x28\xf8\xf6\xfc\x2d\xbc\x84\x43\xb3\x86\x47\x68\x4f\xcc\x09\x2b\xfc\x6b\x73\x60\xd6\xc0\x86\xfd\xc3\xe6\xcd\x70\x7d\xb5\xd7\xb9\x93\x7d\x20\xa4\x55\x5f\xc7\xc0\x05\xa8\x3a\x5b\x36\x6b\xed\xef\x83\x6d\xdc\xc5\x2e\x03\x08\x71\x34\x4e\xc0\x7a\x72\x6c\xc5\xf2\x5d\x02\xd6\x77\x6d\x2d\xd3\x5d\x02\xd6\x3b\x3e\x99\xdf\x25\x60\x83\x10\x89\xcf\x5c\xc0\x06\x1a\x30\xdf\x2a\x2a\x23\xd9\x2f\xdf\x3e\x73\xfb\xa5\xff\xc4\x35\xb2\xb2\xdb\x59\x7f\x03\xc1\x0a\xc4\x92\x6a\x92\x13\x4d\x9c\x5d\x13\x5a\x43\x74\xdb\x26\x4a\x97\xef\x79\x5e\xbe\xa7\xb4\x6e\x14\x7d\xc7\x78\xfd\xc9\x26\xac\xc4\x0a\x20\x5d\x9d\x21\x53\xc8\xc2\x96\x18\x8f\x2e\xa9\xaa\x82\x61\x45\xc9\x8d\x1c\x8a\x20\xc5\xd9\x6f\x14\x10\x2e\x1c\x9a\xe7\x0c\x2a\x4e\x52\x14\xc2\x18\x78\xe6\xcd\x4a\x78\x2e\x7c\x91\xec\x1b\x8b\x88\xce\x0e\x3a\x68\x93\x37\xc5\x4b\xee\x7b\xd7\x92\x68\xf8\x0c\x44\xc3\x93\x06\xfe\x0a\xba\xa2\xde\x7d\x0d\x36\xbb\x0f\x1a\x5e\xc0\x54\x73\xac\x03\xa2\x07\x38\x2c\x28\xc8\x8c\x16\xd6\xf2\xb7\x22\x22\x42\x3e\x5c\xb0\x70\x89\x12\x26\x93\xa2\x88\x55\xef\xe3\xa3\x28\x30\x19\x86\x44\x58\x76\x33\xac\x5f\xf0\xaa\x23\x8b\x38\xab\x7e\xbd\xae\xa2\xad\x3a\x86\x0c\x7e\xb9\xab\x5e\x7b\x3f\x1c\x60\x73\xd5\xcd\x1b\x24\xd6\xaa\xa3\x61\xff\xcb\x5c\x75\x45\xb3\x4c\x94\xd5\xa5\x14\x73\xe6\x2b\x67\xb6\x0c\x3e\xc7\xb4\x81\x9b\xfa\x1b\x7c\xb5\xa2\xbb\x12\xc2\x02\x0c\x91\xc1\xc0\x30\x78\x5a\x49\xb1\x62\xb9\xf7\x7b\x8d\x68\x6b\xd7\x34\x09\xd4\xff\x23\xd8\x7c\x44\x85\xb6\x61\x89\x06\x2e\xa5\x58\x51\x29\x9b\x4e\x02\x66\x94\x8e\xdd\x67\x5a\x3a\xd8\x1b\x6f\x10\xc1\x08\x12\x19\x29\xb0\xf1\x5f\xc8\x8d\x81\xcd\x5b\xb3\xc9\x36\x40\xb4\xb0\xd6\xa3\x8c\x80\x59\xc3\x0d\xc2\xf2\x2f\xa0\x69\xa8\x8d\xbc\x1c\x2e\x80\x8b\x9c\x3a\x34\x78\x00\x5b\x57\xfe\xd4\xc6\xa9\x9b\xd1\x86\xa7\xc1\x1b\x6b\xbb\xc1\x6f\xe7\x6e\xc4\x01\x1c\x71\xae\x5a\xb8\xfe\x08\xef\x83\x1b\x20\xda\xcd\xa7\x3c\x67\x7c\x81\x11\xe6\x63\x90\xb4\x20\x01\x05\x7a\xa0\xd3\x29\x37\xd6\x3d\x7f\x80\x12\xd3\x2d\x41\x00\xd7\x46\x64\x36\x9b\x83\xaf\x59\x26\x78\x48\x49\x01\x5c\x41\x0c\xde\x36\x2f\xce\x79\x28\x86\x88\x29\x78\xf1\xae\xb9\x44\xde\x9d\xc8\x9e\x9b\xe9\xf8\x02\xed\xbd\xf6\x46\x07\xac\x8f\x45\x6c\xdc\x30\x9e\xbb\xfc\xff\xfe\xa6\x86\xf0\x6d\xfa\x5f\x5b\xbf\xcc\x14\xbe\xc3\xe6\x9e\x61\xea\xca\x10\x91\xf4\x35\xfc\x95\x43\xbb\xa9\x30\xe9\x04\x5a\xd0\xcd\x43\x51\xb8\x25\xd0\x42\xc5\x43\xd7\xee\xc9\x0a\xb4\x8f\xd6\x09\x14\x56\x23\x0d\xac\xba\xdb\x05\x96\x09\x5b\x02\x84\x3a\x34\x57\xba\x1d\x7a\x98\x89\x9c\x4f\xe1\x5b\x8e\x32\xc7\xac\xef\x04\xb8\x88\xb0\x5d\xdd\xb2\x36\x27\xec\xc5\x53\xdd\xed\x5b\xc6\x73\x71\xab\xe2\xfa\x46\xbf\xb7\x4c\x1b\xc7\x93\x6f\xc5\x27\x45\xb5\x66\x7c\xa1\xfa\xfe\x51\x52\x14\x11\xf0\xf5\xbb\x1c\xa4\x61\xb7\xbb\xed\x8f\xbf\xed\xc0\x0b\x8c\x50\xda\x43\x68\xf1\x19\x8d\xc3\xd1\xd7\xdd\xba\x8d\xcf\xd8\xe5\x70\x0c\x80\xbf\x25\x87\xe3\x43\xb4\x28\x15\x79\x23\xcd\x24\x34\x23\xc5\x55\xe5\xdb\xee\x0f\x36\x2f\xde\xd7\xef\xaf\x4e\x87\x8c\xc3\x2c\x8f\xdb\x25\x95\xf6\x6d\x65\x38\x03\xc9\x4b\xa6\x94\x7f\xc0\xdd\xd0\x2d\x9d\x2d\x85\xb8\x81\xc3\x26\x51\x71\xc1\xf4\xb2\x9e\x4d\x33\x51\xf6\x72\x16\x27\x8a\x2d\xd4\x89\x13\x4c\x13\xb3\x5e\xbe\xe9\x4b\x38\x13\x5e\x30\xee\xe0\x8d\x18\x66\xe0\x5a\x81\xf0\xef\x1c\x0e\xdd\x92\x64\xed\x6a\xe3\x89\x0f\x51\xb6\xd8\xe3\xd8\xe6\xe2\xec\xd8\xc8\x8b\xb0\x52\x5f\x58\x1c\xfe\x49\xad\xc7\xed\x43\x7f\x11\xd4\x7b\xe0\x81\x83\x1f\xb8\x5e\xb6\x67\xa2\xad\x4b\xe7\x42\xeb\xe6\x33\x02\x38\x6e\x9c\x14\xe7\x05\x7a\x5a\x0f\x7c\x83\x69\x88\xb8\x13\x88\x6d\x70\x2c\xc3\x9e\xe5\x8d\x05\xd1\xa1\x24\x7a\x78\x87\x00\xd6\x9b\x48\x89\x16\xf3\x10\xc0\x73\x33\x59\x2f\x0a\x62\x02\x1e\x11\x35\x01\x7b\x23\x27\x02\x3e\x60\x68\xb0\x44\xb2\x02\xe0\xee\x28\x69\xa0\x40\x7f\x34\xc3\x05\xa2\x19\x2f\x10\x76\xf1\x5d\x65\xdf\x28\xdd\xaf\xaf\x7a\xbc\x82\x5e\xf2\x0d\x3e\xd4\xec\xa8\xad\xef\xde\x56\x4d\x2e\xd6\x4d\x8d\x7a\xf6\x77\xbf\xb3\x6e\x8e\x60\x67\xe3\x73\x61\xcb\xc0\xf4\x8a\xbe\x7b\xf0\x74\xed\x6f\x73\x30\x0f\xd6\xa2\x71\xe2\x97\x55\x61\x2c\x97\xc1\xe8\x3d\x47\x8c\x1c\x7b\x0d\xb6\x8f\xdb\xe5\x09\xe9\x03\xee\xca\xe6\x1f\xc3\x7f\xd7\x4a\x03\x69\xb3\xef\x9b\xda\xcf\xb8\x93\x1e\xcc\x9b\xb2\xd4\x98\x4a\x92\x11\xde\xb6\x7e\xd2\xa2\x89\x41\x78\x70\xcd\xd9\x7c\x4e\x9b\xfa\x03\x33\x0a\x15\x91\xa4\xa4\x1a\x33\xc3\x7c\xe1\xc4\x33\xba\x60\x36\x3d\x5b\xcc\x81\x98\x05\x3d\x38\x50\x5d\x41\x61\x1f\xf9\x81\x49\xdf\x4c\x43\xc9\x16\x4b\x8d\x97\x1c\x08\x14\x82\x2f\xb0\x6c\xa4\x1f\x9a\xb6\x10\x24\x07\x94\xf5\x42\xc2\x2d\x91\x25\x10\xc8\x48\xb6\x44\x98\xb2\x17\x78\x31\xaf\x25\x76\xee\xd6\x94\xe4\xeb\x89\xd2\x44\x9b\xb7\x2e\xb5\x25\x84\xec\xce\x79\x70\xcd\xb6\xca\x17\x3e\xb3\x52\x94\xa9\x87\xbb\xa3\xd4\xc3\x7d\x5f\x4a\x3d\xdc\xf7\xa6\xd4\xc3\x3d\xf5\x70\x4f\x3d\xdc\x53\x0f\xf7\xd4\xc3\x7d\x83\x52\x0f\xf7\xd4\xc3\xfd\x1e\x4a\x3d\xdc\x1f\x66\xf8\xd4\x40\xac\x5f\x46\x7f\x96\xd4\xc3\x3d\xf5\x70\x1f\x50\xea\xe1\xfe\xd4\xa6\x45\xea\xe1\x9e\x7a\xb8\x37\x94\x7a\xb8\x8f\xa0\xd4\xc3\x7d\x1c\xa5\x1e\xee\x0f\xd2\x33\xeb\xea\x96\x7a\xb8\xa7\xae\x6e\xfb\xf2\x79\x7e\x5d\xdd\x20\xf5\x70\xf7\xa3\xd4\xc3\x7d\x3c\xa5\x1e\xee\xe3\x28\xf5\x70\x1f\xcf\x33\xf5\x70\xef\x28\xf5\x70\x4f\x3d\xdc\x3f\xd3\xa3\x9b\x7a\xb8\xa7\x1e\xee\xbb\x29\xc5\x08\x52\x0f\xf7\x71\x94\x7a\xb8\xfb\x33\x4d\xaf\x7d\x7f\x3e\xcf\xef\xb5\x9f\x7a\xb8\xa7\x1e\xee\x0f\x52\x88\xe9\xa6\x74\xce\x3c\x9a\xf7\x3d\x4e\x75\x7e\x87\x96\xed\x55\x3c\x9c\xd5\xf3\x39\x95\x68\x76\xe3\x48\xbd\x1c\x37\xbb\xf3\xdf\xa7\x4d\x06\x80\x0f\x4f\x6b\xf8\x29\xaa\x8f\xb1\x91\x80\xb2\x39\xc9\x38\x44\x3f\xc0\xe3\x70\x88\xae\xf0\x23\xb6\xac\x93\x54\xf9\xbd\xaf\x19\x87\xb3\x0f\x5f\x4d\x23\x34\x26\x08\xa9\xe9\x8b\x6b\xf2\x81\x67\xa1\x79\x30\xdd\x21\x0b\xab\xaf\xd9\xd4\xd6\x74\x67\x2d\x2b\x84\xb2\xd8\x5a\xbb\x79\xd9\x92\x70\x4e\x7d\x72\x3f\xac\x40\x64\x1a\xdd\x6e\x33\x4a\x39\x88\x8a\x72\x9b\x6a\x4a\x40\x31\xbe\xf0\xaa\x63\x40\xb4\x26\xd9\x72\x6a\xe6\xcf\x9b\x03\xe6\x7a\x1a\xb6\xa3\xf6\xb9\x6a\x5a\x52\x52\xda\x83\x26\x69\x49\x98\x1d\x2e\x90\x4c\x0a\xa5\xa0\xac\x0b\xcd\xaa\x80\x01\x83\xa2\x98\xc1\xac\x6c\x3a\x7d\x73\x08\xc0\xeb\xba\x29\x6a\xc1\x9e\x58\x41\xbe\x5d\x03\xb7\xbc\x5e\x26\x58\x77\xd5\xf0\x01\x7f\x8c\xed\xac\xcb\x4a\xaf\x6d\xae\x91\xe7\x05\x9e\x33\xa9\x34\x64\x05\xc3\x17\x1c\xae\x03\x45\x4d\x86\x63\xf6\x41\x00\x13\x9e\x1b\xce\xdc\xed\x91\x72\x9b\xc4\x73\x34\x40\x2b\x2f\x83\x1f\x33\x5e\x9a\x94\x2a\xda\x0c\x37\x67\xca\x3d\x28\x94\xd7\x40\x9b\x9e\x3e\xf6\x72\x35\x7b\x84\xd7\x2b\xf7\x6c\x4e\xd1\xcc\xd9\x31\xe9\x0d\x39\xe0\xfe\x63\x1b\x1e\xe7\x15\x6f\x55\x80\x6d\xa0\xd3\x08\x48\xaf\xf9\x6f\xe7\xb9\x36\x2d\x19\x50\x41\x78\xb0\xec\xa9\x14\xbc\xa6\x9c\xae\x8c\xf6\xa2\x19\x65\x2b\x63\x84\x7b\xb0\xdc\xa9\x0f\xfe\xa1\xea\x40\x53\x59\x32\x8e\xf9\x50\xef\xa9\x52\x64\x41\x2f\xbd\xa2\xdf\x77\xbd\xad\x31\x00\xde\x1c\x46\xef\x6b\x5c\xd8\x6a\x5d\xad\x71\xdb\xa5\x20\x1c\x78\x65\x5e\x76\x93\x86\xd2\xce\xba\x2d\x39\x72\x2b\x99\xd6\xd4\xcb\xb0\x51\xb6\xe7\x17\x02\x87\x36\xeb\x41\xfa\x0d\xb4\x97\x5e\x01\xef\x9b\x81\xda\x01\x9a\x8f\x33\x46\x2a\xf7\xab\x74\x68\x51\x4e\x33\xc9\xe8\x1c\xe6\x0c\xb3\x18\x10\x6f\x7f\x6c\x7b\x4c\x10\x9f\xd1\x12\x0e\x44\x29\x2a\x71\x5d\x1d\xde\xba\x59\xdf\x29\x7c\xef\x9d\xc2\xa9\x65\xcd\x33\xd2\x75\x6c\xb5\xf5\x99\xd8\x1c\x16\x88\xec\xf7\x91\x3a\xd8\x21\xfa\xf7\x2f\xff\xfd\x8f\x30\x5b\x9b\x87\x06\x62\x59\xb4\xd0\xa4\x68\x06\xec\xc1\xb4\xa0\x7c\x61\x4e\xbb\x55\xd9\xc3\x6a\x3d\x01\x19\xac\x05\x2b\x99\xb6\x69\xa5\xaf\x7e\x7b\x33\x1b\xbc\xc9\x3c\x38\x9e\xe4\x74\x75\xd2\xbb\x01\x93\x42\x2c\xa6\xf0\xa6\xc9\x69\xf4\xe0\xd8\x64\x41\xfa\x26\x2a\x7a\x3d\xf3\x77\x08\x2e\xec\x2b\x1f\x28\xba\x9a\xf6\x3d\xb0\x14\xb7\xb6\xa7\x5f\xf7\x39\x1e\x4b\xd3\x48\x97\x2e\xef\xb0\x12\x55\x5d\xd8\xa4\xd1\xaf\xfc\x2a\x69\xa1\xa4\xaa\x15\xdd\x2c\xeb\x72\x87\x2c\xf7\x13\x0e\xcd\x30\x37\x1e\x42\x56\x48\x04\x2c\x84\x70\x35\x11\x5c\x74\xa9\xed\xbf\x53\x4b\xaf\xcc\xc7\xaf\x48\x51\xcc\x48\x76\x73\x2d\xde\x89\x85\xfa\xc0\xcf\xa4\x14\x72\xb0\x42\x3e\xf7\x98\x18\xab\x71\x59\xf3\x1b\x6c\x1d\xdd\x4e\xbe\x10\x0b\x10\xb5\xae\x6a\xaf\xd7\xdf\x7c\xf3\x38\xb5\x6b\xe2\x59\x51\xad\x35\x91\x9d\x51\xda\x1b\x29\xfd\xc4\xfc\x42\x1f\xb7\xcc\x08\x30\x0e\xd4\xac\xa3\x95\x8a\xdd\xac\xfd\x1e\x0b\x3d\xf1\xf5\xdb\x97\xbf\xff\x37\x2b\x70\x41\x48\xf8\xb7\x97\x98\x94\xe9\x65\xde\xa2\x29\x80\xf6\x17\x53\xa0\x4a\x52\x14\x54\x86\x0a\x46\x73\x1d\x7b\x82\xb0\x15\x6b\xff\x50\xa9\xa6\x43\x05\xd8\x23\x3a\x7f\xae\xaf\xff\x82\x9e\x1f\xa6\x15\x2d\xe6\x5e\x56\x79\xa1\x44\xd7\x75\xf3\x00\x8d\xe9\x03\x67\x8b\x98\xd7\xa4\x8f\x08\x78\x5a\x77\xca\x4a\x14\x75\x49\xdf\xd2\x15\xcb\x7c\xc2\x5a\x83\xad\x1b\xf0\xf2\xcf\x7c\x2e\x98\xc2\xb6\x48\xb3\x42\x64\x37\x90\x3b\x76\x1d\xac\xdd\xc7\x0a\x59\x87\x56\x37\x0f\x49\x42\xf0\x4e\x3e\xb8\x73\x75\xbb\xd4\x01\x2f\x07\x2f\x81\x92\x54\x55\x5b\x4f\x43\x92\xdb\xc1\x62\x7b\xf1\x34\x92\x17\x4b\x98\x06\x95\x90\x0f\x0c\x0e\x87\x84\x86\x27\x6e\xf6\x9e\x36\x87\x77\x5e\x42\x68\x54\xb9\x1b\xb5\x6f\xe0\x6b\x70\xcc\x3a\x76\xa1\xb5\x0b\x2a\xe4\x61\x93\xd6\x23\x75\x39\xeb\x15\x1d\xb2\xe3\x6c\x9f\xbd\xe6\x40\x07\x14\xec\xd2\xc2\x37\xe8\x18\x1c\xe9\x0b\xc9\x02\x19\xec\x1c\x6f\x63\xaa\x25\xd1\x5e\xce\x0a\x4b\xfd\xfa\x79\x04\x2a\x2a\x15\x53\xc6\x46\xff\x0e\x05\xd0\x9b\x82\x30\xdf\xc0\x59\x1b\x3c\xa9\x84\xef\x56\x05\x2c\xb7\x15\xa0\xd8\x22\x3b\x54\xd3\x5d\x8a\xdc\xb1\x43\xc5\x84\x6e\x13\xaf\x88\xca\x96\x9b\x25\xb4\x24\x45\x34\xf3\xef\x29\x55\xdd\x77\xdd\x4e\x85\x6b\x3a\xc3\xa5\x55\x75\x96\xb3\x53\x56\x9e\x1c\x3f\x5f\x05\x87\x6b\xf1\xb9\xe9\xb7\x76\xd0\x51\x84\x24\x2a\x36\x67\xab\x84\x28\xb7\xee\xad\xda\x45\x2a\x96\xd4\x09\x05\x6f\xae\x9d\x9b\xc5\x79\x62\xa7\x0e\x2c\xca\xbd\xfb\x25\xb7\x43\x85\x83\xd7\x07\x4f\xa6\xe4\xec\x26\x4a\x51\x91\x05\xfa\x0e\xa2\xec\xe5\x26\xd3\x00\x84\x97\x75\x6b\x50\x85\x6e\x33\xe4\xeb\x5b\x64\xd0\x52\xe5\x46\x45\xf3\xae\xba\x38\xf6\x0c\x08\x48\xbf\xef\x1d\x39\xe7\x30\xb1\x35\x11\x6f\x03\xf2\xa2\x89\x14\x35\xcf\x5d\x34\xb8\x85\x20\xbc\xdf\x58\xd8\x0b\xff\x0a\x66\xe8\xe6\x69\x3a\xaa\x98\x27\x2e\x26\x4a\x32\x05\x33\xaa\xfd\xfb\x95\x30\x0e\xaf\xa6\xaf\x5e\x7e\xfe\x36\x1b\xae\x49\x24\x9b\xed\xa2\xb5\xd9\xac\x96\x7b\xb2\xd5\x91\x94\xe4\x1f\x78\xe1\xe1\x09\xb2\x34\xcc\x37\x70\x21\x29\xc3\x74\x22\x78\x40\xad\x09\xd6\xf4\x8c\x47\x56\xb7\x92\x69\x77\x83\x6e\x59\x40\xa2\xda\x21\x3a\x6d\x40\xc8\x7e\x75\xdf\xa3\xce\x97\x17\xf0\x24\xf1\xf5\x07\xb9\xbf\x0f\x6c\x9c\x0d\xa0\xea\xd9\xb3\xd3\xbb\x56\xc1\x5a\xa1\xba\x2b\x9e\xea\xbf\xde\x8e\xf3\xb6\x0a\xf6\xe6\xd8\xc7\x1e\xbe\x78\x01\x87\xf6\x13\x0e\x6c\x35\xbb\xa3\x27\xbb\x9e\x6e\x5b\xcf\x3e\x55\xde\xad\x0d\x07\x5b\x7b\xf6\xa9\x22\x3c\xa7\xb9\x7d\xf0\x07\x98\xd6\xd0\xd4\x73\xde\xb5\xc7\xe1\x6a\xf3\x40\x0d\xf7\xd8\x9b\x63\xdf\x3c\xfb\x0f\xba\x24\x2b\x8a\x35\xff\x58\x41\x64\x80\x78\xd2\x02\xae\xec\xce\xc0\xac\xd6\x40\xf9\x8a\x49\xc1\x4b\x1a\x50\x33\x7d\x45\x24\x23\xb3\x82\x82\xa4\x58\x93\x37\xa3\x0a\x7e\x73\xf8\xdd\xe9\x47\x84\x59\xfb\x77\x66\x20\x92\x02\x6d\x76\xbd\x56\x98\x9e\x1b\xe9\x16\xf6\xa6\x3d\xdd\xb8\x40\xfe\x22\x7a\xe3\xe2\x35\xeb\x6c\x6e\x80\xff\x1a\xf0\xbc\xdd\x2f\xb3\x1e\x65\xad\x6b\x52\x60\xd9\xc7\xac\xa8\x15\x5b\x3d\x85\xfe\x75\x65\x38\xdf\x32\x8f\x9b\xbd\x51\xbe\xb4\xbb\x34\x5b\xb5\x3d\x3d\xab\x63\xa3\x79\x19\xaf\xb1\xb9\x03\x5e\x1e\xa8\xb6\x7d\x54\xbf\xeb\x8e\x77\x50\xce\x55\x84\x9e\xd1\x5e\xb7\x3a\xf0\x56\x5a\x9d\xcd\x8e\xdd\x00\x9e\x2e\x3c\x97\x73\xf5\x06\xe7\x33\xe6\x60\x0c\xf3\xfa\x07\xa5\x82\xdf\x5e\x5c\xf5\x4a\x7b\x8f\x9a\x83\x75\x2b\x8a\x7c\x0a\x97\x5d\x6d\xf0\xae\x7a\x3f\xb6\xae\x19\x8d\x36\x31\x32\x99\xca\x45\xd7\x88\x7f\x41\x39\x95\xf8\x00\x33\x43\x6d\xf6\x72\xfc\x3b\x71\x46\x94\xed\xd8\xf8\xf6\xe2\xca\x22\x34\xc6\xec\x98\xa7\xbb\xc7\xd7\x67\x62\xde\x25\xb6\xba\xca\x68\x67\xcb\x60\xaf\x4f\xdb\x20\x9c\x59\x3c\x74\x06\x5b\xb6\xa3\x0f\xeb\xf9\x25\x90\x3c\x97\x08\x5f\x74\x4f\xc0\x5e\x87\x3e\x3f\xf4\x97\xdb\x61\xb3\x33\xfd\x19\x77\x5b\x3e\x9a\x23\x9a\x1a\xdd\x06\xc3\xdb\xba\x2a\x98\x85\x6c\xf5\x3e\x60\x34\xdb\x66\xa6\x92\x96\x62\x35\xfe\xaa\xfb\x3b\x62\x3d\xdd\xb0\xde\x9a\x47\xf8\xb5\xa0\xbb\xe7\xcc\x49\xaa\x44\xe1\x73\xe0\x9a\x46\xc2\xc3\xb3\xe6\x64\x83\x31\x4e\xc7\xaf\x4a\x73\xd6\x9a\x26\xcd\x9d\x68\xd9\x38\x37\xa3\x59\xf7\xce\x19\xe5\x5a\x1a\xe1\x1a\x78\x66\x00\x3e\x9a\x95\xab\x11\xa0\xd3\x0e\x98\xad\x28\x37\x4a\xec\x83\x67\x9f\x3c\x1c\x54\xaf\x67\xb3\xcd\x71\xb0\x8d\xc7\x29\x91\x3e\x29\x2a\xed\xaa\x7a\x2f\xdf\x3f\xfc\x7a\x6c\x86\x80\xde\x5e\x5c\x59\x9d\x6a\x97\xd5\x75\xf2\xf4\xb1\x7d\xfb\x27\xbe\xdd\xb5\x56\x4f\x7a\xde\xe3\x27\xe9\x9f\xe0\xef\x19\x1b\xac\xee\x47\x17\xe7\x08\xa9\x5e\xe0\xfd\x44\x0e\xa8\x34\xe7\xfd\xc9\x8a\x12\x99\x2d\xc7\xaf\xf9\x3d\x22\xd4\xb2\x84\x5c\x60\xd6\xc3\x78\x9d\x28\x24\xba\xac\x27\xa8\xfe\x0b\x21\x6e\xea\x6a\x28\x55\x47\xb3\x6c\x34\xfe\x40\x83\xbb\x61\x56\x44\x2f\xc7\x0f\xf2\x4e\x51\xdc\x13\xad\xa3\x99\xf6\x47\xf4\xcf\xa1\xc3\x73\xae\xc6\xa3\x8f\x87\xaf\x03\xaa\xed\x9b\x00\xd9\x74\x15\x5d\xc6\x8a\xaf\xc1\x93\xff\x4d\x51\x2b\x4d\xe5\x57\x4c\x2a\xfd\xa2\xe9\xe4\x8c\xb7\x73\xdc\x49\x31\xef\xf3\x83\x3e\xb3\xef\x99\x5e\xfe\x59\x28\x7d\x41\xf5\xc1\xf1\xf0\x47\x07\xe3\x5e\x8e\x07\x6e\xc0\x07\x20\x24\x1c\x5c\x08\x4e\x0f\xa6\x1b\x8f\x23\xab\x7e\x47\x71\x65\xf8\xdc\xb0\xca\x65\x97\x0d\xe3\xd6\xd6\x2c\xf5\x48\x29\x53\xd0\x4c\x37\x4c\x7a\xb7\xe5\x5a\xc0\x92\xac\xec\xb3\xce\xa7\x99\xae\xa2\x1a\x08\xb6\x4f\x42\xce\x4b\xbb\xb6\xb7\x42\xde\xd8\x86\x0d\xc8\x7c\x64\xec\xcb\x3e\x09\xd7\xfd\x63\xd5\xeb\xda\xa0\xc5\xdd\x5b\x3a\xfe\x85\x36\xf2\xbe\x50\x4e\x66\x05\xbd\xa2\x72\xc5\x32\xfa\x8e\xf1\x9b\x51\x17\x75\x98\x6b\x74\xb6\xc5\xcb\xb3\x2b\xdb\xad\x43\xce\x32\x6e\x13\xb8\x8d\x49\x42\x66\xa2\xd6\xf8\x76\x43\x10\xa5\x87\xe3\x13\xeb\x3f\xfc\xb7\x3d\x35\x88\x57\xa9\x6c\xf7\xad\x9e\xa3\xae\xf5\x33\x8e\x84\x42\x63\xc8\xab\x71\x1e\xaa\x35\xd7\xe4\x13\xea\x2e\x91\xdd\x50\x09\x85\x59\x8a\x29\xb4\xa9\x58\xde\x62\x04\x81\xb9\x63\x72\x3b\xfc\x22\x27\xb4\x5a\xd2\x92\x4a\x52\xb4\xbe\x33\xff\x43\xf1\xce\xa9\xf1\x96\x67\x2f\x13\x67\xd4\x3a\xd8\xbe\x31\xae\x31\x9d\xc8\xa7\x70\x16\xca\xb1\x24\x6b\x54\x87\x96\x31\xe1\x40\x3f\x31\x85\x00\x9b\x4a\xe4\xbd\x9a\x6e\xa3\x98\xd6\x8a\xca\x49\x5b\x01\xd0\x55\x58\x52\x4d\x2a\x17\xe4\x74\x56\x2f\x16\x8c\x2f\xc6\xe9\x12\xb4\x55\xd0\x22\xea\x3a\x9e\x75\x7e\x26\xec\x00\x97\x49\x4a\xf4\x58\x5b\x0d\xad\xf2\x63\xf4\x00\xb3\x3e\xef\x52\xe4\x96\xf5\x6c\x6d\xbd\x7b\x63\x19\x37\xf5\x72\xcc\x20\xa7\x70\xce\x41\xc8\x9c\x4a\x2c\x0f\x93\xe7\xb8\xd6\xcd\xee\x8d\x62\xdb\x39\x21\x0d\xa7\xe1\x8e\x1d\x7b\xe5\x99\x18\x19\xa0\xba\xd1\xf4\xd2\xc4\x54\x3d\x33\x0f\x99\x5a\x8e\xed\x94\x39\x44\x07\x90\xa2\x5a\x92\x49\x41\x57\xb4\x00\xd7\x55\x69\x74\xec\x77\x29\xb8\x90\x76\x37\x1a\x0f\x11\xbe\x59\xad\xf0\xc6\xc5\x3e\xdb\xbe\xb3\xa3\x3e\x62\x4e\x89\x1e\x99\xf9\xe3\x67\x10\x7a\x18\x83\xc3\x97\x01\xdf\x31\xd7\xf1\xf9\x30\xfd\xac\x64\x5c\x4b\x27\x0d\x48\x8e\x56\x3d\x2d\x2b\x21\x89\x64\xa3\xa3\x60\xdb\xe7\x12\x2d\xc8\xa1\x58\x18\x3b\xd6\x4c\xb3\x15\x33\xef\xd8\x1d\x72\xa4\x5b\x8d\x91\x5c\x7b\x47\x1d\x6d\x1a\x2e\xa0\x39\xef\xc6\x02\x54\xd9\x92\xe6\x75\x31\xfe\xdd\xb9\xa8\x89\x24\x5c\x53\xaa\x8e\x1b\x78\xcf\xda\xa5\x69\x5b\xe1\xd2\x26\x99\x8f\x0d\x09\x19\x31\x87\xdc\xe8\x27\xa6\xb1\x33\xa5\xf9\x0e\xca\x30\x9b\xbc\x8e\xef\x9a\x91\x5c\x85\xdc\xc8\x7a\xef\x0b\x27\xef\xb0\x4e\x46\x6a\x85\xdd\x10\x9c\x2a\xa1\x9f\x32\x6a\xcc\x0e\xad\xda\x45\x1e\x7b\x08\x6c\xf6\x0f\x13\xfc\xb8\x95\xae\xee\xcc\xd2\x15\xcb\x3c\xe2\x2f\xbb\x14\x28\xb2\x74\xfb\x84\x57\x61\x24\xcf\xd9\xda\x05\xd7\x8a\x4e\x71\x6c\x28\x83\xeb\x25\x1d\x7b\xa9\xda\xf2\x5a\x78\x39\x57\x8c\x34\x2c\x77\x8b\xee\x91\xdc\x7b\x82\x7e\xf3\xc4\xfa\x3a\x05\xfb\x33\x06\xc1\x33\x37\x74\xe7\x74\x30\x5a\x61\x2c\x47\x54\x23\x8d\x94\x76\x82\xbf\xcd\xc2\x0e\x15\xfe\xad\xf8\xc7\x6a\x0f\xe3\xce\x91\xb7\x87\xce\x0f\x00\xec\x01\xde\xf5\x77\x03\x12\xb9\x08\x75\xae\x1e\x9c\xca\x45\x5d\x62\x5e\xb0\x73\x15\x75\x1d\xe4\x7d\x5c\x82\xd7\x4b\x0a\xb9\x7d\x56\x60\x1c\xd6\x3c\x60\xde\xbc\x7f\xdb\x60\x13\x3d\x38\x32\x57\xe8\xc3\x55\x6e\x72\xfd\x92\xf3\x29\x7c\xe7\xde\x42\x3e\x11\xed\x9d\x28\x8d\x01\xda\xc2\x83\xeb\x2e\x7c\xc6\xf0\xfd\xe6\x19\xcf\x27\x1d\xbe\xa4\xb3\x81\x9d\x17\xdb\x2b\xfe\x6e\xbb\x10\xb9\x35\x68\x52\x45\x18\xaf\xcc\x0b\xd6\xd7\x97\xdb\x62\x02\x78\xb6\x24\x7c\x61\xa5\x09\x0d\x44\xc1\xb8\xb7\xaa\xeb\x99\x4d\x55\x46\xaa\xc6\xa7\x42\x20\x17\xb5\xdf\xf6\xff\xe6\x37\xc7\xc0\xe8\x6b\xf8\x4d\x6f\x70\x53\x38\x73\xdc\xbb\xc3\xe1\xbb\x0a\xb6\xde\xcb\xac\x3b\x4c\xc7\x20\xe9\x82\xc8\xbc\xf0\x6b\xed\x21\xe6\xad\xcb\xc1\x76\xe1\x77\x87\x01\xcd\x38\x05\xc2\x07\xd4\xc1\x85\xde\x85\x91\xe8\x95\xd9\xf3\x60\x7a\x4f\x61\x3e\x4d\xd4\x8d\x3a\xb1\x0e\x8e\x49\x4e\x34\x99\x90\xca\xfa\x8d\x99\xe0\x27\x36\xa0\x33\x71\xad\x5d\x27\xc4\x09\xa5\x49\x7b\x91\x4e\x7e\x2d\x6b\x6c\x4c\x3e\x21\xed\x6f\x31\x3e\x21\x13\x6c\x04\xea\x5b\x4f\xe2\x1f\x9c\x7a\x13\x10\x2d\xf1\xee\x99\xbc\xe9\x02\x6b\x84\xbb\x9d\xfb\x14\x2e\xbc\xf2\x1d\xda\x06\xff\x6d\x32\xaa\x6b\xc8\xda\xc9\x7f\x1f\x51\xdf\x68\x8c\xb3\x8b\xeb\x8f\x7f\xb9\xfc\x70\x7e\x71\xdd\x28\x8e\x46\x0d\xf8\x70\xbd\x4b\x71\x84\xdd\xf4\xbb\x14\x47\xa7\x06\x42\x50\x4c\x9b\x8a\x63\xa8\x06\x7c\x38\x6f\x2b\x8e\xa1\x1a\xf0\x59\xd9\x6d\xc5\xb1\x43\x0d\x78\x5a\x11\xfd\xf5\xdd\xa9\x06\xbc\xa4\x73\x4f\x71\xec\x56\x03\x1e\x5c\xb7\x15\xc7\x50\x0d\x78\xdd\xaf\x6d\xc5\xd1\x53\x03\x9e\x2a\x7f\x5b\x71\xf4\xd5\x80\x07\xd3\xdd\x8a\x23\xa9\x81\x7d\x3e\xd4\x4b\x0d\x50\xbe\x0a\x54\x01\xad\xc3\x7b\x57\x54\xc1\x67\x32\x83\xd6\x96\xbd\xa2\xd8\x31\x0e\xd5\xe7\xb1\x9f\x43\x8c\x3e\x5f\x7d\x47\x24\x48\x5a\x49\xaa\xf0\x5d\xe5\x99\x13\xb2\x6b\x83\xc0\x31\xf5\x6d\xcd\x4f\x3a\xb8\xf1\x67\x97\x52\xfb\x44\x49\xb1\xd1\x12\xd0\x9a\xa4\x31\xfb\xc6\x8e\x97\x72\x30\x6d\x9b\x9c\x10\x78\xf3\xd3\xf9\xdb\xb3\x8b\xeb\xf3\xaf\xce\xcf\x3e\x3e\x59\xd6\x4b\x50\xfb\xc8\xa1\xb9\x1a\xc7\x52\xb3\x74\xbf\xbd\xe6\xcd\xd6\x56\x50\xa7\x2b\x26\x6a\xe5\x70\x69\x79\xd4\xfd\x55\x5b\xb2\xd5\x9b\x25\x56\x9f\xe5\xeb\x26\x4a\x1d\x77\x98\xd3\x9d\x9e\x0a\x6f\xbe\x51\x0d\x55\x4b\xf7\x98\xab\xde\x3c\xa3\x7a\x3b\x2c\xdd\xed\xf3\xf0\xdf\xf8\xd8\x26\xaf\xa5\x7b\x0d\xdf\x90\x9d\xbf\xc3\xfc\xf5\x66\x79\x8f\xf7\xc4\x9b\x67\x63\x3c\x0f\x53\xa7\xbc\xdb\xaf\xc4\x11\xbb\x5f\x49\x51\x46\x11\xbd\x57\x36\xd0\xe6\xd0\x65\xde\x8b\xb4\xcb\x88\x39\x50\x76\xac\xfe\xe7\xae\xe7\xb6\x72\xae\x81\xa6\x51\x84\x37\x4b\xc3\x0f\x6b\x24\x86\xa9\xcd\xa0\xc6\xdd\x31\xba\x5d\xdb\xf4\x9b\xf7\xa4\xfa\x86\xae\x3f\xd2\x80\x0e\x2d\x5b\xa8\xc3\x82\x66\xc6\x98\x85\x9b\xd1\xe1\xb1\x21\x21\xd8\xfa\x4d\x33\xcc\x90\xd6\x36\xcf\xaa\x57\x7a\xd8\xb2\xc4\x6a\x74\x7e\x43\xbd\x6b\x01\x34\xb4\xd5\xb8\x3b\x74\xc3\xa1\x79\x25\x9a\x13\x14\xb2\xdf\x10\xb3\xc9\x79\xf4\x96\xf0\x07\xce\xc0\x0f\x5f\xab\xce\xd8\xd1\xd6\xad\x12\xcc\x72\xff\xb6\x39\x62\x65\x6c\x43\x7a\x7b\xe2\x72\x51\x27\xc6\xee\x98\xd8\x3b\xa6\x4e\x30\x45\xeb\xe4\xd7\xf8\x9f\xe0\x41\xd9\xc6\x79\xa7\x79\xee\xaa\xab\xd4\x8a\xce\x6b\x9f\xca\xd7\x43\x42\x64\x93\x9a\x02\xa9\xd8\x77\x54\x2a\x26\xbc\xda\x37\x0c\xe9\x86\xf1\xfc\x18\x6a\x96\x7f\xe9\xdf\x5d\xcd\x52\xb4\xf3\x2b\xbc\xd0\x9a\xdb\xb4\x23\xf3\x34\xfc\xba\xf7\xed\xad\x56\xd4\x07\x73\xb5\x05\x65\x8d\x3c\x6a\x10\x17\xc1\x2c\xdd\x83\x2d\xca\xa6\x86\x14\x00\x81\xe6\xe0\xc6\xd4\xd9\x07\xad\xd2\x0e\x9a\x9f\x85\x0a\xb6\x5d\xf4\xf2\xd7\x4d\xcb\xcc\x30\x11\x50\x52\x4d\x72\xa2\xc9\xd4\x48\x93\xe3\xe1\x97\xaa\x22\x99\x57\x33\x8f\x8e\xfe\xab\x65\x58\x90\x19\x2d\xd4\x0f\x07\x07\x7f\xfa\xe6\xec\x2f\xff\xeb\xe0\xe0\xc7\xff\x8a\xc5\x19\xcd\x50\xf4\x5c\x47\x64\x8f\x28\x24\x2e\x72\x7a\x81\xeb\x82\x5f\xba\x07\xfb\x69\x96\x89\x9a\x6b\xfc\x41\xd8\x67\x60\x71\xf6\xe9\x52\x28\x7d\x7e\x79\xdc\x7c\x59\x89\xfc\xfc\x32\x0a\x63\xe4\xa4\x02\x5a\x51\x3e\x33\xe3\x0e\xaf\x80\x67\x39\xbf\x86\x62\x99\x78\x9d\x5e\x8b\x2a\xfa\x1d\xcf\x70\x21\x6d\xe5\x84\xca\x96\xb4\x24\x41\x6f\xc7\x86\xbe\x6a\x16\x1f\x98\x0a\x68\xba\x32\x24\xc6\xb1\xc0\xbe\x02\x31\x8f\xd2\x83\xd5\x92\x16\xf0\x62\xf5\xea\xc5\xb3\x31\x72\xdb\x73\x1b\xf5\xa8\xe0\x5e\x44\x32\x74\xad\x72\x69\x9f\x07\x51\xf6\x75\xd9\x4f\x3e\x38\xbd\x3c\x0f\x66\xba\xb2\x77\xe3\x59\x6c\x6b\x03\x05\xfd\xea\x99\x5a\x0b\x1d\x46\x7b\xa3\x10\x75\xd8\x11\x14\xbc\x58\xb7\xbc\x95\x6d\x15\x11\x76\x5f\x09\xcf\x51\x3b\x50\xa5\x15\x1c\x5a\x86\xd3\xac\xaa\xc3\x14\xa0\xe3\x53\xd2\x52\xc8\xf5\x71\xf3\x65\x0b\x02\x9e\x28\x2d\x24\x59\x04\xaa\xef\x66\xd8\x38\xdc\xee\x2b\xfb\xa1\xd1\x16\x65\x7b\xd4\xfe\x3e\x6d\x70\xb9\xa1\x59\x2d\xcd\xb3\xb6\x58\x77\x6d\xd7\x7f\x39\x56\x82\x27\x72\xbe\x4f\xb1\x8c\x84\xf6\xd6\x5d\x44\x77\x73\xbc\x09\x0e\x43\x35\x84\x2e\x98\x76\xed\x61\xee\x85\x63\x1c\x92\x2b\x15\x7e\xdc\x3e\x8f\xc3\xdd\x09\x42\x02\xe5\x2b\x58\x11\xe9\xd9\x26\xb8\xa3\x68\x7a\x3d\x67\x2b\xa6\x44\xa0\x48\xbd\xab\xea\x54\x14\xbd\xee\xfa\x00\xd9\xfc\xd8\x58\x46\x25\xfd\x54\x61\x3f\xc9\x56\x0f\x84\x7b\x76\xf2\x7e\xf4\xe6\x95\x7f\xe5\x3b\x4b\x15\xd1\x9a\x4a\xfe\x1a\xfe\xf3\xf0\xaf\x5f\xfc\x3c\x39\xfa\xf2\xf0\xf0\x87\x97\x93\x7f\xff\xf1\x8b\xc3\xbf\x4e\xf1\x1f\xff\x7a\xf4\xe5\xd1\xcf\xcd\x17\x5f\x1c\x1d\x1d\x1e\xfe\xf0\xcd\xfb\xaf\xaf\x2f\xcf\x7e\x64\x47\x3f\xff\xc0\xeb\xf2\xc6\x7e\xf5\xf3\xe1\x0f\xf4\xec\xc7\x3d\x99\x1c\x1d\x7d\xf9\x9b\xc0\x81\x07\xb6\x73\xb7\x14\xab\xa9\xfb\x90\x5b\x84\xeb\xf2\x28\x0d\xde\x3b\x6a\x8e\x63\x5c\x39\xfb\x31\x82\x4e\x1a\x8e\xaf\x33\xb3\x9f\x85\x20\x53\x34\x93\x54\x3f\xef\x38\x95\x1d\x63\xaf\x99\x46\x40\xc1\x4d\x68\xca\xc6\x55\x24\xc8\x46\x78\x56\x36\x4f\x0a\x7b\xdd\x47\x8d\x33\xc4\x9e\xa2\x78\xaf\xdc\xb9\x14\x65\xd3\xb0\x00\x81\x5f\x2b\x52\xb0\x50\x2f\x76\x73\x23\xcd\xcc\x9f\xc5\x53\x17\x52\x98\x2e\x85\xe9\xc6\x50\x0a\xd3\x8d\xa3\x7e\x98\xee\x0a\xef\x7e\x8a\xd1\xed\x22\xca\x57\x7e\xc0\xaa\x9d\xc8\xfb\xc6\x87\xd5\xeb\x9d\xeb\x31\xb7\x9d\xf8\xfd\x6d\x18\xbe\x07\x67\xa7\xfc\x3a\x34\x6b\x97\xe3\xe5\xeb\xde\x28\x77\x23\x94\xe1\xb4\x28\x80\x71\x5f\xe5\x85\x83\xec\xaa\xc6\x59\x77\x12\x10\x85\x25\x12\x56\x7e\xa0\xd6\xa6\x88\x43\xbf\x9e\xb4\x02\xac\xbf\x30\xba\x2a\x8e\xa5\xef\x6d\x11\x88\x1b\x5b\x17\x42\x69\xdc\xa4\xb2\x2e\x34\xab\x0a\x0a\x01\x0f\x59\x0b\x66\x2c\x6a\x0a\x44\x29\x91\xd9\x82\x3e\x6d\xcd\xb2\x82\x28\x9f\xf9\xbb\x97\x02\xae\xaa\x26\x37\x88\x6d\xce\x68\x4e\x79\x46\xb1\x2c\xdc\xd8\x82\x70\x96\x9a\x93\x34\x5b\x9b\xbd\x39\xe3\xab\x36\x13\xab\xa9\x1d\xe8\xb7\xfd\x77\x8c\xf3\x9f\x37\xf5\xc4\x88\x29\x07\xdd\xec\x32\x50\xbc\x24\x27\xda\xad\xad\x27\x9f\x60\x92\x8f\x98\x77\x68\x0e\xaf\x5c\xa1\xb0\x97\x4b\xe8\x6b\xa1\xc5\x46\x06\x3c\x38\xb7\x9e\x09\xed\x82\x84\x34\x9c\xb2\xcf\x02\x34\xeb\x3d\x79\x3c\x13\xf8\x69\xa8\xb9\xbe\xd3\x54\x0f\x8e\x22\x0f\xcd\xf4\xe7\x67\x66\x3f\x82\x89\xbd\xc3\xbc\xb6\xe6\x71\x10\xd7\x50\xd3\x3a\x8a\x59\x1d\xc3\xa4\xde\x65\x4e\x07\x24\xd7\x76\x34\x40\xbc\x45\x31\x81\xc3\xcd\xdf\x70\x78\x5a\x25\xe9\x9c\x7d\x8a\x22\x33\x4f\x79\xbb\x81\xc0\x72\xca\x35\x9b\xb3\x90\x2e\xc5\xc2\x0c\xae\xa2\xdc\x96\xb1\x22\xd9\x12\xed\x82\xc0\xbe\x48\x1d\x3c\xfd\xb9\x25\xd7\x59\x17\x4d\x4c\x05\x76\x15\xcb\x39\x95\xb4\x57\xd2\x5e\x49\x7b\x3d\x44\xcf\x5e\x7b\x39\x79\xd0\x3c\xd9\x9f\x56\xfd\x60\x45\x98\xd0\xa2\x37\x6f\x7b\xf5\xc8\xf0\x8e\x7b\xbb\x6b\xf7\xbf\x7b\x5d\xb5\xbf\x13\xfc\x5c\x0f\xec\x40\xc0\x71\xc3\x8f\xbc\xac\x8b\x62\x7c\xad\x79\x4b\xc3\x05\x3c\xc7\x95\xab\xea\xa2\x70\xe5\xc1\xa7\xf0\xc1\xab\x4f\xad\x98\xc3\x69\x71\x4b\xd6\xea\x18\x2e\xe8\x8a\xca\x63\x38\x9f\x5f\x08\x7d\x69\x1f\xaa\x3e\x4a\xb5\x9f\x7d\x69\x59\x03\x9b\xc3\xeb\x82\x68\xaa\x34\x68\xe2\x73\x51\x99\xea\x77\x4f\x13\x72\x30\xc8\xae\x91\x69\x9c\xa6\xf1\x63\x85\xfa\xd6\xc1\xfa\x75\x53\xc7\x72\xf2\x04\x07\xad\x60\x73\x9a\xad\xb3\x22\xf4\x8e\xbe\x6b\xf8\x34\xd5\x9a\x48\x51\x88\x5b\x2f\xb1\x83\x80\x9d\x1d\xa5\x43\x3f\xab\xe6\x2e\x95\x50\xfa\x4a\x13\xa9\x23\x74\x78\x39\xb8\x6c\x98\x99\xc5\xcd\x48\x51\x78\x8b\x73\x56\x96\x34\x67\x44\xd3\x62\x0d\x64\xae\xa9\xec\xd7\x29\xf6\xe5\xa9\x6c\x6d\x70\x57\xde\x16\xfb\x77\x13\x9e\x17\x54\xc2\x9c\xb0\xc2\x1b\xe3\xb3\xe5\xc4\xb5\x9d\xc7\xbd\xfa\x94\x58\xb2\xe0\x48\x57\x8b\x17\x48\x96\x09\x99\x63\xa9\x2f\x01\xfe\x60\x54\xc7\xb0\x13\xac\x68\x43\x95\x84\x93\x05\x0d\x28\xcc\xb0\x89\xbe\x85\x59\x21\xb2\x1b\x05\x35\xd7\xcc\xd7\x36\xb3\xad\xd5\xc5\x0d\x64\xa2\xac\x0a\x14\x4f\x61\xe5\x02\xe1\xfe\x92\x81\xbb\x64\x5e\xfb\xcf\x49\x2b\x7a\x26\x66\x4c\xea\xe4\xd7\xdd\x8f\xf0\x1b\x7e\x96\x5e\xf0\x4b\x24\xfc\x1d\x42\x3f\xd1\xcc\xdf\x3a\x1c\x5c\xfd\x0f\x9c\xe2\xa9\x0d\xea\xe6\x0d\x20\x78\x0b\xe7\x9e\x0b\x23\x98\xcd\xa9\x0f\x6c\xed\x0b\x83\x1e\x01\x53\x38\xfb\x44\xb3\xf6\xeb\x90\x07\x89\x19\xa5\x6d\x6b\x80\x15\x6d\xc9\x4d\x40\xa1\x81\x28\x50\x9b\x38\x20\x17\xef\x02\x90\x7d\xda\xe8\x3c\x8b\x1c\x43\xaa\x26\x58\xb2\x82\xc6\x32\x2b\x18\x1f\xdd\x7e\x66\x9b\x5c\x79\x49\x60\x5c\xd9\x36\x78\x3d\x49\x16\x0a\x13\x30\xcc\xb6\x1a\xed\x06\xf2\x6c\x9a\x30\x35\xab\x10\xbe\xa6\x52\x08\x0d\x87\x07\x27\x07\x47\x5b\x31\xdd\x40\x08\x9a\x79\x5d\x17\x54\xad\x95\xa6\xa5\x2d\x5a\xe3\x46\x1d\xc8\x95\x61\x6b\xee\x0a\xfb\x32\xd3\xec\x20\x3f\x06\x16\x0a\x27\x70\xb6\xa0\xed\x80\x82\x27\x21\x2c\x37\x05\x6c\x95\xd2\x63\x50\x02\xb4\x24\x39\x8b\x82\x11\x47\x9e\x66\x80\x5a\xd6\xae\x9d\xca\xe1\xc1\xcf\x23\xbb\x5b\x6d\x13\xd5\xd9\x11\xdc\x0a\x7e\xa0\xf1\xb8\x4e\xe1\x3a\xf4\x56\xd5\x8a\x36\x85\x5a\x6d\xaf\x28\x4e\xc3\x61\x15\xa2\xdf\x2a\xca\x18\x97\x20\xea\xd0\x7d\xc7\x4a\xe4\x44\x37\x35\x65\xcf\x3e\x05\x9f\x24\x9b\x97\x6a\x94\xd8\x4b\x34\x05\xad\xc1\x19\xc8\x94\x28\x28\xd8\x8a\x9e\x2c\x29\x29\xf4\x72\x0d\xe1\x77\x88\x0b\x3e\xf9\x3b\x95\x02\xab\xde\x72\xc7\x37\x0c\x8b\x17\x12\x96\xee\x93\x77\x88\x7a\x7b\x30\x41\x1e\x34\x63\x2f\x7e\x4d\x3d\xdf\x45\xb0\xa9\x03\xff\x7c\x7d\x7d\xf9\x35\xd5\xd1\x0c\x0f\x33\xba\x26\x81\xaa\xd7\xa2\xe9\x89\x2d\x90\x70\xa8\xef\x04\x2a\x21\x9f\xda\x04\x5a\x0a\x15\xb0\xef\xb0\xb5\xf7\x42\x69\xdf\xaa\x92\x7d\xd2\xc2\xe8\x66\x4e\x33\xb3\xe3\xd1\x92\x89\x5d\x37\x86\x4a\xe4\x70\x7e\x39\x85\xbf\x88\xda\xac\xe2\x8c\xcc\x82\x2c\x79\x43\xb7\x84\xeb\xa6\x6c\xeb\x0b\xb3\x08\x2f\x42\xc2\x65\x96\xcc\xb9\xff\x33\x25\x39\x95\x0a\x35\x21\x25\x9e\x0d\x65\x1b\x8a\x04\xc0\xec\x8d\x2b\xa6\xe5\x5c\x2b\x2d\x4a\x58\x5a\xc6\xe1\x1b\xdd\x2b\xa0\xeb\x64\x47\x28\xfe\xda\xc8\x35\xeb\x43\x53\x20\x69\x15\x43\xdb\xb9\xd9\xfe\x82\xb4\xd1\x96\x26\xb0\x27\x25\x90\x6b\xc3\x77\x86\xfd\x95\x32\x3c\x2a\xc1\x2c\xed\xe2\x9b\xb3\xe2\x8a\xde\x05\x73\x64\xdc\x1e\x12\x23\x54\x82\x51\xe2\x91\x52\x52\x20\x52\x5a\x0a\x84\x14\x0c\x1e\x32\x41\x80\x65\x20\x97\x58\x59\x2e\x10\x29\x1f\x02\x76\xc0\x00\x22\xb0\x6c\x4f\xa9\xad\xe9\x10\x61\xf9\x21\x26\x12\x1f\x42\x4b\x13\xf7\xe9\xf1\x97\x2f\xc6\xc1\x83\x78\xeb\x57\x05\x17\x11\xd9\x2e\x21\xa2\x05\x90\x2c\xf3\x6b\x89\xd3\x27\x61\x55\x27\x8a\x33\xdb\x7f\xf2\x59\xd8\x1e\xc6\x62\x8e\xb8\x64\x16\x4e\x22\x81\xd7\xe5\x2c\x58\x49\xb5\xd5\xbc\xa4\x8e\xbd\x0d\xbd\x16\x00\x17\x31\x86\xda\x00\x11\x1a\x03\x89\xf0\x45\xe8\xbd\x78\x65\xe6\xfc\xc7\x3f\xfc\xe1\x77\x7f\x98\xda\x65\x35\x9f\x11\xc8\x73\x46\x81\x70\x38\x3f\xbd\x38\xfd\xe9\xea\xbb\x37\x58\x59\x39\xec\x14\x46\x48\xc9\x8e\x99\x90\x1d\x31\x1d\xfb\x11\x93\xb1\xb1\xec\x54\xa0\x84\x1f\xa2\x6b\x90\x61\xb8\x47\xbb\x56\xb6\x98\xb2\x7b\x29\xda\xb0\x61\x04\x4f\xb6\x79\x13\x0f\x6a\x50\x47\x78\x38\x3c\xb9\xf4\xd4\x59\x75\x25\xb2\x9b\x68\x5e\x9e\x83\xeb\x37\x97\x96\x61\x14\x47\x0f\xe1\x4d\x80\x89\xf1\x95\x28\x56\x66\x33\x09\x5c\xbf\xb9\x0c\x54\x16\x53\xc3\x03\x23\xac\xd6\xef\xbd\x0e\xca\xc7\x6b\x0b\xec\x38\x80\x1e\x2b\xab\x22\x24\xa2\x0c\x58\x47\x5e\x52\x52\x30\xa5\x59\x86\x63\x6d\x63\xb0\x41\x5e\x1d\x71\xe3\x8f\xca\x4b\xfe\xb1\x8e\x22\xfb\xc7\x0e\x3e\x44\xca\x5d\x6d\x1d\x6d\x3d\x57\x59\xb0\xd3\xe4\x78\x50\xba\x25\xbc\xce\xa0\x73\xb4\x85\x25\x0e\x3f\x53\xcb\x11\xcd\x30\xbf\x36\x91\x7d\xe2\xbd\x0e\x36\xce\x72\x0c\x8d\xa0\xa0\xdd\xb9\x6d\x39\x06\xb2\x75\x13\x1e\x5a\x8e\xa1\x7e\x09\x63\x77\x6e\x59\x8e\x91\x6c\xdb\x64\x39\xee\x47\x8f\x60\x39\x56\x92\x5e\x69\x51\x45\xc1\xd9\x59\x56\x51\x51\x76\x33\x3a\x17\x92\xc6\x81\xd9\x75\x00\x38\xc8\x6b\x14\xc6\x84\x07\xd4\xc7\x6c\xc2\x5c\xa2\x0f\x57\xf3\x4e\xbc\x06\x34\x59\xb2\x65\x13\x55\xe5\x54\xa9\x13\x84\xc6\xd5\x95\x75\x52\x7a\x32\x9d\x13\x56\xd4\x92\x1e\x9b\x9d\xa6\x65\x65\x3b\xd4\x07\x96\xea\x33\x9b\x41\xb9\x65\x45\xb5\x6d\x1a\xdf\xa0\x16\xfd\xf7\xc7\xd8\x7c\xf6\xe0\xd8\x6e\xa7\xe1\x2d\x9f\x32\x49\xd4\x92\x62\xa3\x47\xfa\x89\x69\x65\x07\x2a\x29\x51\xde\x95\x7e\x11\xea\xe2\x0e\x12\x9a\xc0\x0a\x2a\xa2\x14\xcd\xfd\xb5\x41\x0f\xf2\x69\x07\x78\x29\xf2\x83\x03\xd5\xff\x18\x4f\xce\x0b\x49\x32\x0a\x15\x95\x4c\xe4\x80\xb5\xb3\x73\x71\xcb\x61\x46\x17\x8c\xfb\xbe\x00\xdc\x8d\x34\x83\x6e\x2e\xbc\x31\x61\x69\x00\x90\xaa\xe9\xa6\x3b\x85\x8f\x83\x6e\x9f\xfe\x5a\x4b\xd4\x3a\x13\x9d\xb6\x76\xab\x7b\x1c\xc0\xb1\x43\x92\x62\xce\x3d\x5e\xf3\x9a\x14\xc5\xba\x13\x2b\x9e\x9c\x5d\x79\x09\xfd\x58\x1b\xff\x99\x61\x6a\xcd\x65\x0d\xe5\xd8\xbf\xa0\xfd\xa5\xf0\x97\x4d\x92\x92\x6c\x19\x96\xae\x90\xa0\xbb\x0f\x50\x82\xee\x26\xe8\xee\x9d\x94\xa0\xbb\x09\xba\x9b\xa0\xbb\x09\xba\x9b\xa0\xbb\x09\xba\x3b\x92\x12\x74\xf7\x21\x4a\xd0\xdd\x3b\xe9\x59\x86\x26\x12\x74\x37\x41\x77\xf7\xa6\x04\xdd\x4d\xd0\xdd\x71\x7c\x13\x74\xd7\x8b\x12\x74\xf7\x5e\x4a\xd0\xdd\x10\x4a\xd0\x5d\x5f\x4a\xd0\xdd\xd1\x94\xa0\xbb\x09\xba\x1b\x40\x09\x80\xe1\x41\x09\xba\x1b\xe1\xe1\xf0\xe4\xd2\x33\x41\x77\x13\x74\x77\x4f\x4a\xfe\xb1\x8e\x12\x74\x37\x80\x12\x74\xf7\x41\x4a\xd0\xdd\x04\xdd\x0d\xe0\xf5\xfc\x2c\xc7\x06\x22\x7a\x29\xc5\x2c\xb4\xf8\x28\xf2\x50\xd8\x9f\x3a\x95\x1e\x0d\xc0\x30\xdd\x89\x5f\x02\xe1\x55\x2d\x18\xba\xd7\xee\x26\x76\x69\x88\x40\xf2\xe4\x3d\xc4\x2d\x0d\xd1\x47\xbe\xe6\xaf\x37\x66\xe9\x19\xa0\xd7\x82\x71\x4a\x77\x60\x94\x02\x45\xf8\x06\x3e\xa9\x41\x18\x05\x70\xdc\x89\x4d\x0a\x1c\xe5\x16\x2e\xa9\x41\x16\x45\x98\x39\x02\x30\xfb\xa8\xa2\xc0\x50\x77\x0f\x8f\xd4\x47\x14\x05\x70\xed\x61\x91\xb6\xd1\x44\x21\x3b\xa5\x77\x21\x89\x1c\x10\x26\xe4\x85\x35\x40\x11\xed\xc0\x01\x05\xf0\x46\x04\x51\x64\x0c\xd0\x4e\xfc\x4f\x98\x11\xb7\x03\xfb\xd3\xa0\x77\x42\x16\xb6\xc3\xfd\xf4\x91\x3b\x21\x47\xa0\xc5\xfc\x6c\xa2\x76\x82\xfc\x00\x79\x6c\xc4\x4e\x8c\xf8\x68\x70\x6c\x34\xd0\x5c\x73\xb9\x32\xd7\x4b\x49\xd5\x52\x14\x9e\xaa\x60\xa0\x06\xde\x33\xce\xca\xba\x34\x32\x47\x19\xb9\xcd\x56\x81\x89\x3c\xaa\x85\x6c\x62\xfc\xd3\x06\x56\xbd\x35\x1e\x4a\x14\x49\x73\xe4\x6e\x8e\x18\x56\x35\x5f\x92\x95\xbf\xbd\xab\xea\x2c\xa3\x34\xa7\xf9\xc0\xb9\x07\xbf\x9b\x36\x6b\xe1\xc9\xd7\xf6\x7a\x64\x0a\x5e\x85\x58\x18\x21\xcf\x82\xb9\x90\x25\xd1\xc8\xe3\x77\xbf\xf5\xe0\x10\x04\x00\x7b\x14\xf0\x57\x74\xe0\x57\xb0\x19\x17\xe6\xd0\x0a\x70\x66\x85\xdb\x8f\x61\x4e\xac\xdd\x00\xaf\x30\x1d\xb7\x0b\xdc\x15\xc6\xf1\x11\x80\x5d\x3b\x41\x5d\x7d\xf8\x53\x98\xa5\x1b\x06\xe8\x8a\x04\xfb\x0c\x06\x72\x3d\x0e\x88\x6b\x37\x80\x0b\xa5\x4b\x88\x71\x31\x04\x6f\x85\xc3\xaf\x9e\x85\x69\xf1\x18\x90\xab\x6d\xb8\x95\x5b\xac\x30\x57\x6e\x0b\xb5\x8a\x07\x95\x8a\x04\x93\x8a\x01\x91\x0a\x86\x47\x85\x43\xa3\x62\xc1\xa2\x62\x40\xa2\xb6\x1a\x1a\x46\x38\x41\xd0\xf4\xa0\x8b\x02\x32\x8e\xe5\x42\x8d\x02\x81\x7a\xdc\xe5\x8a\x01\x7d\x8a\xb0\x5e\x61\x90\xa7\xc7\x81\x3b\xc5\x84\x3a\xc5\x58\xa2\xa0\x40\xd5\xe3\xc0\x9b\x76\x42\x9b\xc0\x3b\x09\x1c\x36\xdd\x5d\xd3\x7e\x78\x29\x80\xe9\x06\xa4\xa9\x1f\x5a\x0a\xe0\xda\xc2\x99\xe2\x86\x95\x02\x43\x4a\xb1\xc2\x49\x91\x42\x49\x8f\x04\x40\x0a\x05\x1f\xed\x06\x1e\x19\x1b\x24\xe0\x40\x6c\x81\x8e\x3a\xd8\x50\x00\xd7\xbe\x4f\x22\x0c\x32\x14\xb8\xa1\x8c\x33\xcd\x48\xf1\x96\x16\x64\x7d\x45\x33\xc1\x73\x4f\x6b\x62\xa3\xed\xae\x0b\x99\xcf\x41\x59\xa6\x9e\xf3\xb3\x9e\xa0\x61\xc1\x87\x25\x51\xe0\xfa\xbf\x79\x72\x75\xd5\x43\x9a\xf0\xa5\x33\x4c\x31\xf6\x68\xd7\x43\xfb\xc7\xb3\x46\x96\x66\xb8\x15\xf2\xa6\x10\x24\x57\x27\x95\xb0\xff\xd7\x15\x66\xe8\x55\x64\xb0\x23\x0c\x29\xc9\xf0\x94\x2e\x27\x5b\xf7\x22\xde\xf1\xfa\xb3\xb8\x05\x31\xd7\x94\xc3\x21\xe3\xcd\x09\x3b\xf2\xf5\x3e\xb5\xce\xa6\xce\x9f\xd9\x3a\x0d\xfd\x79\xbe\x7a\xd9\x0c\xac\x75\x39\x06\x19\x66\x9f\xb3\xcb\x11\x9d\xb1\x4a\x3d\x4f\x8f\xb6\x1b\xdc\x63\xb9\xb4\x1d\xfb\x79\x5d\x58\x61\xe6\xeb\xbf\x41\x67\xb8\x73\x90\x0f\x7d\xda\x9e\xc7\x02\xda\xae\xfa\xaf\x70\xe6\xad\x34\x24\x3c\x07\x57\xf3\xcb\x9b\x73\xff\xc0\x7f\xd6\x47\x37\x10\x4a\xfb\x58\x30\xda\x3b\x21\xb4\x16\x08\xeb\xc9\x75\x0b\x3e\xdb\x81\x60\x7d\x39\x0e\xa1\xb3\x7d\x00\x6c\xc0\x18\x5b\x0d\x19\x00\x7e\x4d\x31\x02\xbf\xbf\xbd\x13\xe4\x8a\xe1\x82\x00\x93\x78\x03\xe0\x1a\x2b\x17\x7c\x98\x07\x1e\x0a\x94\x7e\x36\xaf\xfd\x06\x92\x1a\xea\x1b\x4b\xaf\xfd\xf4\xda\x7f\x80\x1e\xe1\xb5\xaf\x59\x49\x45\xad\x9f\xed\x83\xf3\x76\xc9\xb2\x65\xdf\x16\x64\xa5\xb7\xaa\x16\xb5\xde\xb0\xd7\xdc\x10\x23\x42\x11\xd2\xab\x73\x83\xfc\x62\x1a\x3b\x1c\xaa\x56\x3c\xb6\x78\x62\x8f\x89\x74\x8e\x8b\x16\x2b\x0b\x44\x01\x81\xb7\x17\x57\x3f\xbd\x3b\xfd\x8f\xb3\x77\x3e\x82\xe6\x7a\xc9\x94\x55\x99\x8d\xf8\xaa\x39\xfb\x5b\x4d\x81\x94\xc2\xd8\x82\x45\xd0\x50\xd5\x31\x3a\x42\x7a\xdf\xf0\x2c\xce\x14\x13\x88\xed\x25\xc6\x8c\x62\xf3\x10\x30\xc3\xe8\x83\xe1\xf1\x0c\x91\xe9\x7e\xb1\x68\xef\x18\xf4\x06\xb0\xd8\x8d\xde\x2c\x0e\x48\x5a\x49\xaa\x28\xf7\xb4\xd4\x08\x70\xaa\x8d\x4c\xb2\x76\x08\xe3\x40\x40\x31\xbe\x28\x02\x73\x5a\x02\x6d\xfc\x10\x0b\x7f\xd2\x8d\xfc\xd2\xcf\xd0\x0f\x35\xf3\x07\x9f\xef\x6b\x8c\xec\x34\x3a\xe7\x61\xc9\x7a\xb6\xe4\x9d\x50\xb4\x89\xc6\x55\x22\x3f\x50\x70\xee\x8f\xf6\x20\x79\x2e\xa9\xc2\xc2\xda\x4c\x75\xf6\x9c\xd1\x90\xcc\xbf\xd2\x0b\x9e\x45\x1b\x4e\x3b\x86\x97\xf0\x27\xf8\x04\x7f\x42\x93\xf3\x8f\xbe\x96\x61\x0c\xb3\x2e\xd4\xa1\x61\x5f\x7f\xe7\x97\x51\x4e\xc4\xf7\x4b\xa2\x91\x1f\x9c\x5f\x86\x40\xba\x66\x8c\xe7\x56\xd1\x7e\xd2\x54\x72\x52\x34\x0f\x92\xb0\x95\x0e\x30\x7c\xcd\xa4\x9e\xfd\xc5\xb1\xc9\xeb\xe7\x73\x6f\x8e\xad\x45\x72\x0c\x7a\x70\x75\xbc\x39\xe2\x95\xdb\x79\x75\xbc\x59\xda\x2b\x07\xe7\x73\xf4\x30\x5c\x38\x4d\xc1\x54\x6f\xf4\xfe\x4b\xda\xce\xba\x24\x3a\x5b\x0e\xd5\x9a\xff\x03\xf0\xbd\xb9\x12\x3d\xe3\x29\x17\x68\x3a\x04\xd5\x0b\x35\x43\xfd\xbc\x05\x4f\x08\xd0\x68\x70\x9f\xce\xe7\x9b\x27\xd7\x7b\x55\xef\x7a\xfc\x07\x15\x23\x75\xa6\x78\xaf\xa6\x7e\x25\xf2\x29\x9c\x91\x6c\xe9\xcd\xd3\x2c\x5e\xde\xb3\x8f\x2a\x91\xdb\xc1\x2f\x89\x77\xe8\xc3\x58\x5e\x6e\xac\x86\xbd\x2b\xe6\x12\x9a\x32\x65\x45\xb7\xd1\x0c\x19\xe1\x66\x6d\x25\x9d\x53\x29\x43\x8e\xbe\x80\xd9\x1a\xf1\x3a\x2c\xa3\x81\x97\x20\x40\x27\x54\x52\x68\x91\x09\xef\x7c\xfe\xcd\x7c\x57\x64\x86\xcb\x1d\xe2\xb4\xef\xe2\x38\xdf\xbe\xbd\x3c\x86\xeb\x37\x97\xc7\x20\x24\x5c\xbd\x09\x41\x15\xf4\xfd\x15\x2f\xae\xdf\x5c\xbe\x78\xb2\x45\x87\xc6\x09\xfc\xda\xa3\x42\x88\xa4\x24\x67\x29\x43\x79\x37\xa5\x0c\xe5\xfd\x28\x65\x28\x0f\x29\x65\x28\x07\xf0\x4c\x19\xca\x29\x43\xd9\x52\xca\x50\x4e\x19\xca\x9e\x94\x32\x94\x1f\x1e\x5c\xca\x50\xfe\x6c\x31\x57\x29\x43\xf9\x61\x4a\xe8\xa3\x94\xa1\x9c\x32\x94\xb7\x28\x65\x28\x3f\xb5\x69\x91\x32\x94\x53\x86\x72\x43\x29\x43\x79\x04\xa5\x0c\xe5\x71\x94\x32\x94\x1f\xa4\x67\x86\x59\x4e\x19\xca\x09\xb3\xbc\x2f\x9f\xe7\x87\x59\x86\x94\xa1\xec\x47\x29\x43\x79\x3c\xa5\x0c\xe5\x71\x94\x32\x94\xc7\xf3\x4c\x19\xca\x1d\xa5\x0c\xe5\x94\xa1\xfc\x99\x1e\xdd\x94\xa1\x9c\x32\x94\x77\x53\x8a\x11\xa4\x0c\xe5\x71\x94\x32\x94\xfd\x99\xa6\xd7\xbe\x3f\x9f\xe7\xf7\xda\x4f\x19\xca\x29\x43\xf9\x41\x0a\x31\xdd\x24\x55\xa2\x96\x99\x8f\x8a\x1c\x9c\xab\x8f\x0d\x9f\xc7\x04\x26\xc3\x59\x8c\x04\x68\x85\xf8\x34\x55\x99\x81\xca\x6e\xd8\x85\xa4\x24\xf7\x89\x58\x9a\x89\x66\x18\x3a\xed\x54\xe8\x67\x85\xa1\x2e\x58\xc9\x7c\xb2\x93\x61\x4b\xb8\xbc\x43\x4e\x5d\xa0\x34\x00\xe7\x52\x92\x4f\xf8\x32\x22\xa5\xa8\xb9\x36\xf2\x2a\x13\x65\xe5\x8f\xa4\xed\xef\x34\x1e\xcc\xbe\x2c\x08\xc0\x0a\x3c\x24\x41\x32\xc1\xe7\x6c\x51\x4b\x62\x96\xe8\xa4\x24\x9c\x2c\xe8\xc4\x4d\x65\xd2\x0e\x6a\xd2\x9e\xce\x93\x27\xb2\xd2\x49\xde\xe0\x4b\x2f\x83\xcd\xe6\x8a\x68\x4d\x25\x7f\x0d\xff\x79\xf8\xd7\x2f\x7e\x9e\x1c\x7d\x79\x78\xf8\xc3\xcb\xc9\xbf\xff\xf8\xc5\xe1\x5f\xa7\xf8\x8f\x7f\x3d\xfa\xf2\xe8\xe7\xe6\x8b\x2f\x8e\x8e\x0e\x0f\x7f\xf8\xe6\xfd\xd7\xd7\x97\x67\x3f\xb2\xa3\x9f\x7f\xe0\x75\x79\x63\xbf\xfa\xf9\xf0\x07\x7a\xf6\xe3\x9e\x4c\x8e\x8e\xbe\xfc\x8d\xf7\x2b\x31\xc0\x0e\x89\x63\x85\x44\xb1\x41\x1e\xc1\x02\x71\x30\x93\x28\xe2\xe1\xa3\xe3\x15\x47\x40\x38\xd7\x49\x7c\x01\xd1\x3c\x58\x31\xd9\xb3\x19\xb3\xbf\x37\x52\x94\x4c\x1b\xed\x60\xd4\x1a\xe9\x41\xf8\x7d\x39\xea\x41\xcb\x54\x27\x72\xd9\x3c\x04\x0b\xcd\x54\x1f\x60\xdd\x4b\x6a\x14\x7a\x49\xe5\x2d\xf3\x0e\x0c\x99\x97\x12\xef\xdc\x1a\x28\x04\x27\x39\x9d\x33\xee\xed\x29\x41\x6b\x6e\xb4\x21\x97\xc4\x70\x12\xc3\x63\xb8\x3c\x27\x31\xac\x68\x56\x4b\xa6\xd7\x6f\x04\xd7\xf4\x93\x87\x67\x64\x18\xef\x1d\x72\x73\x19\x2b\x9e\x76\xef\xad\x93\x6b\x9f\x7d\x1e\x21\x4e\xe6\x52\xb2\x15\x2b\xe8\x82\x9e\xa9\x8c\x14\x28\x2a\x62\xa8\xbd\xd3\x3b\x78\xfb\xc7\x4c\xb4\x14\x85\x82\xdb\x25\x35\xe2\x19\x88\x99\x3b\xba\xa3\x32\xe2\xcb\x74\x41\x18\x87\xd2\xc8\xd4\xaa\x19\xa8\x32\x1a\x85\x03\xf3\xd6\x7d\xe6\x85\xc5\x75\x33\x38\x57\x16\x65\x26\x44\xe1\xd2\xce\xbc\x71\xc8\xed\x0a\x30\xeb\x94\xe3\xe2\x27\x4e\x6f\x7f\x32\x23\xf7\x1d\xeb\xbc\x20\x0b\xb8\x65\x45\x81\xb9\x9a\x54\x6f\x35\xb3\xf6\x5d\x83\x66\xf2\x91\x0f\x01\xe6\x19\xd5\x14\x48\x71\x4b\xd6\x78\x14\xe2\x8c\x97\xa9\xd7\xf0\xea\x08\xf3\xd7\x88\x82\x76\xbc\x39\xfc\xd6\x37\x6c\xbc\x24\x0a\xde\x9c\x5e\xfe\x74\xf5\x97\xab\x9f\x4e\xdf\xbe\x3f\xbf\x08\xd1\xac\xe6\xf4\x50\xaf\x43\x9e\x91\x8a\xcc\x58\xc1\xfc\x15\xea\x16\x16\xb1\xcf\x32\xc0\x3e\xca\xf3\x93\x5c\x8a\xca\xee\xa1\xac\x39\x67\x7c\x11\x24\x46\x2d\xbd\x1d\xf6\xd5\x6f\x8c\x46\x73\xb8\x7d\x1d\x74\xf3\xc1\x94\x61\x21\x09\x37\x86\xed\x6c\x1d\x90\x39\xda\xc1\x55\x64\xcd\x35\x2b\x3f\xdf\x84\x64\x92\xc7\x4a\x46\x3e\xcd\x73\x9a\xc7\x38\x5e\xcf\x11\x8c\xff\xa6\x99\x56\x48\x16\x0a\x74\xb5\xde\xe0\xf2\xc3\xd5\xf9\xff\x8e\xb3\x5a\xe0\x56\x2c\x24\xa8\x13\xa1\xd2\x84\x14\x55\xa4\x93\xf4\x91\x96\x62\x95\xce\xd2\x03\xf4\x0b\x3d\x4b\xad\x25\x17\x03\x47\xf4\xb1\xe6\x3d\x59\xed\x9d\xd4\xdf\x8d\x09\x4a\x91\xd3\x29\x5c\x5a\x03\x89\xaa\x28\x3c\xfb\x95\x42\x25\x05\xc3\x98\x6b\x46\x0a\x6f\x53\x93\xfe\xad\x66\x2b\x52\x50\x9b\xf4\x86\x65\x0d\xfa\x55\xcf\x22\xe8\xe6\x39\x29\x54\x90\xd2\xf3\xb7\x89\x8c\x71\xfa\x5e\xd4\x3c\x06\x66\xa7\xe5\x05\x39\xe5\x42\x07\xb9\xf6\xcc\xbc\xb0\x4c\x9d\x14\x19\x58\xf7\x5e\x10\x3c\xb9\xc1\xab\xf5\x43\x49\xd7\x9d\x49\xe4\x6f\x82\xbb\x7d\xbc\x6c\xe7\x6e\xe3\xa1\xb5\x0a\x9a\xfe\x96\x49\x14\x0a\xef\x30\xf3\x97\x94\xe4\x58\xdd\xa6\x22\x7a\x69\xb1\x6b\x25\x51\x37\xde\x6e\x38\x64\xe3\xde\x74\xce\x61\x6a\x8b\xd2\xb4\x8b\x71\xed\x2f\xfc\xe6\x94\xe8\x5a\x52\xfb\x2a\xb3\x09\x72\x94\x93\x59\xe1\x8b\x36\x0e\x14\xa4\x66\xed\x3e\xf0\x62\xfd\x51\x08\xfd\x55\x5b\x81\x24\xc2\xa5\xf9\xde\xbd\xe0\xb1\xfe\x5f\xe8\xd3\x6d\x89\xe5\x9c\xcd\x58\x27\xb8\xd1\x28\xac\xc2\x0b\xa6\xb8\x33\x6e\x8e\xfb\x13\x8a\x2a\x59\xf3\x53\xf5\xb5\x14\xb5\xa7\x65\xb4\xf5\x78\xfb\xfa\xfc\x2d\x4a\xf4\x9a\x07\x3c\x5e\x28\xd7\x72\x5d\x09\x66\xe3\x0f\x51\xfd\x05\xdf\x1a\x95\xb8\x71\xff\x7d\x05\xd5\x1c\x6a\xae\xa8\x9e\xc2\x7b\xb2\x06\x52\x28\xd1\x38\x39\xbc\x55\xee\x25\xa2\xd4\xfb\x7e\xc4\x29\x60\x3d\x44\xef\xc7\x25\xe3\x30\x13\x7a\xb9\xe5\x9e\xf4\x2f\x80\xb8\x3d\x46\xac\x9a\x14\x04\x2e\xef\x6a\xa7\x33\xbe\x39\x54\x5f\x89\x4f\x6e\xa8\x82\x4a\xd2\x8c\xe6\x94\x67\x41\xf7\x2b\x12\x8a\xe4\x8f\xbf\xf7\xbd\xa1\x17\x82\x1b\x21\x19\xe1\x8e\x9e\xf3\x9c\x65\x44\x5b\x2f\xa4\x8e\xe2\x60\x40\xfc\x9a\xf3\x6c\x11\x2c\xa8\x63\x44\xa4\x27\xdb\x5a\x51\x89\x01\x42\x2d\x6b\x6a\x0f\xd6\x37\xf5\x8c\x16\x54\xa3\x1b\xd1\x3f\xb8\xc5\x72\xa2\x6d\xb5\x2f\x56\x92\x05\x05\xa2\x1b\x31\xe0\xef\x63\xa2\x5c\x19\x75\x8a\x2b\xc9\x34\xe4\x82\xb6\x65\xaa\x7c\x9d\x1d\x0a\xbe\x3d\x7f\x0b\x2f\xe1\xd0\xac\xe1\x11\xda\x13\x73\xc2\x0a\xff\x7a\x15\x88\xa4\xdf\xb0\x7f\xd8\xbc\x19\xae\xaf\xf6\x3a\x77\xb2\x0f\x84\xb4\xea\xeb\x18\xb8\x00\x55\x67\xcb\x66\xad\xfd\x7d\xb0\x8d\xbb\xd8\x65\xc5\x20\xa4\xc4\x09\x58\x4f\x8e\xad\x58\xbe\x4b\xc0\xfa\xae\xad\x65\xba\x4b\xc0\x7a\x87\xea\xf2\xbb\x04\x6c\x10\x4a\xef\x99\x0b\xd8\x40\x03\xe6\x5b\x45\x65\x24\xfb\xe5\xdb\x67\x6e\xbf\xf4\x9f\xb8\x46\x56\x76\x3b\xeb\x6f\x20\x58\x81\x58\x52\x4d\x72\xa2\x89\xb3\x6b\x42\xeb\x6a\x6e\xdb\x44\xe9\xf2\x3d\xcf\xcb\xf7\x94\xd6\x8d\xa2\xef\x18\xaf\x3f\xd9\x24\x8e\x58\x01\xa4\xab\x33\x64\x8a\x97\x2e\x60\x89\xf1\xe8\x92\xaa\x2a\x58\x87\x41\x0d\x6a\x58\x02\xad\xe2\xec\x97\x37\x0f\x17\x0e\xcd\x73\x06\x15\x67\x03\x9b\x35\x6f\x56\xc2\x73\xe1\x8b\xee\xde\x58\x44\x0b\x47\x20\xd9\xb2\x9f\x5a\x61\x2e\xb9\xef\x5d\x4b\xa2\xe1\x33\x10\x0d\x4f\x1a\xf8\x2b\xe8\x8a\x7a\x57\x63\xdf\x10\x0b\xef\x0c\x2f\x60\xaa\x39\xd6\x01\xd1\x03\x1c\x16\x14\x64\x46\x0b\x6b\xf9\x5b\x11\x11\x21\x47\x2c\x58\xb8\x44\x09\x93\x49\x51\xc4\xaa\x81\xf1\x51\x14\x98\x20\x42\x22\x2c\xbb\x19\xd6\x2f\x78\xd5\x91\x45\x9c\x55\xbf\x5e\x57\xd1\x56\x1d\x43\x06\xbf\xdc\x55\xaf\xbd\x1f\x0e\xb0\xb9\xea\xe6\x0d\x12\x6b\xd5\xd1\xb0\xff\x65\xae\xba\xa2\x59\x26\xca\xea\x52\x8a\x39\xf3\x95\x33\x5b\x06\x9f\x63\x0a\xa2\x0a\x29\xdb\x6d\x5f\x54\x16\x76\xd3\x8f\x1b\x04\xf4\x60\xda\x18\x18\x06\x4f\x2b\x29\x56\x2c\xf7\x7e\xaf\x11\x6d\xed\x9a\x26\xa9\xf8\x7f\x04\x9b\x8f\xa8\xd0\x36\x2c\xd1\xc0\xa5\x14\x2b\x2a\x65\x53\x5d\xdf\x8c\xd2\xb1\xfb\x4c\xcb\xe9\x7a\xe3\x0d\x22\x18\x41\x22\x23\x05\xb6\x2b\x0b\xb9\x31\xb0\x79\x6b\x36\xd9\x06\x88\x16\xd6\x7a\x94\x11\x30\x6b\xb8\x41\x58\x2a\x82\xe5\x0a\x04\xa3\x6c\x0d\x2e\x80\x8b\x9c\xba\xbe\x1f\x01\x6c\x5d\x49\x50\x1b\xa7\x6e\x46\x1b\x9e\x1a\x6e\xac\x6d\x97\x09\x41\x73\x37\xe2\x00\x8e\x38\x57\x2d\x5c\xcf\x80\xf7\xc1\x6d\xdb\xec\xe6\x53\x9e\x33\xbe\xc0\x08\xf3\x31\x48\x5a\x90\x80\xa2\x35\xd0\xe9\x94\x1b\xeb\x9e\x3f\x40\x89\xe9\x96\x20\x80\x6b\x23\x32\x9b\xcd\xc1\xd7\x2c\x13\x3c\x24\xcd\x1e\x57\x10\x83\xb7\xcd\x8b\x73\x1e\x8a\x21\x62\x0a\x5e\xbc\x6b\x2e\x91\x77\xff\xa4\xe7\x66\x3a\xbe\x40\x7b\xaf\xbd\xd1\x01\xeb\x63\x11\x1b\x37\x8c\xe7\x2e\x27\xbe\xbf\xa9\x21\x7c\x5d\x70\xc0\xf9\x65\xa6\xf0\x1d\xb6\x24\x0c\x53\x57\x86\x88\xa4\xaf\xe1\xaf\x1c\xda\x4d\x85\x49\x27\xd0\x82\x6e\x1e\x8a\xc2\x2d\x81\x16\x2a\x1e\xba\x16\x48\x56\xa0\x7d\xb4\x4e\xa0\xb0\xba\x61\x60\xd5\xdd\x2e\xb0\x4c\xd8\x12\x20\xd4\xa1\xb9\xd2\xed\xd0\xc3\x4c\xe4\x7c\x0a\xdf\x72\x94\x39\x66\x7d\x27\xc0\x45\x84\xed\xea\x96\xb5\x39\x61\x2f\x9e\xea\x6e\xdf\x32\x9e\x8b\x5b\x15\xd7\x37\xfa\xbd\x65\xda\x38\x9e\x7c\xab\x20\x29\xaa\x35\xe3\x0b\xd5\xf7\x8f\x92\x22\x2c\x4d\xc9\xd2\x2e\x07\x69\xd8\xed\x9e\x4b\x61\x4b\xeb\x6d\x3b\xf0\x02\x23\x94\xf6\x10\x5a\x7c\x46\xe3\x70\xf4\x75\xb7\x6e\xe3\x33\x76\x39\x1c\x03\xe0\x6f\xc9\xe1\xf8\x10\x2d\x4a\x45\xde\x48\x33\x09\xcd\x48\x71\x55\xf9\xb6\xc0\x83\xcd\x8b\xf7\xf5\xfb\xab\xd3\x21\xe3\x30\xcb\xe3\x76\x49\xa5\x7d\x5b\x19\xce\x40\xf2\x92\x29\xe5\x1f\x70\x37\x74\x4b\x67\x4b\x21\x6e\xe0\xb0\xc9\xfa\x5d\x30\xbd\xac\x67\xd3\x4c\x94\xbd\x04\xe0\x89\x62\x0b\x75\xe2\x04\xd3\xc4\xac\x97\x6f\xfa\x12\xce\x84\x17\x8c\x3b\x78\x23\x86\x19\xb8\x56\x20\xfc\xfb\x1d\x43\xb7\x24\x59\xbb\xda\x78\xe2\x43\x94\x2d\x76\x66\xb5\xb9\x38\x3b\x36\xf2\x22\xac\xfc\x15\x16\x4c\x7f\x52\xeb\x71\xfb\xd0\x5f\x04\xd5\xe3\x7f\xe0\xe0\x07\xae\x97\xed\x23\x68\x6b\xb5\xb9\xd0\xba\xf9\x8c\x00\x8e\x1b\x27\xc5\x79\x81\x9e\xd6\x03\xdf\x60\x1a\x22\xee\x04\x62\x1b\x1c\xcb\xb0\x67\x79\x63\x41\x74\x28\x89\x1e\xde\x21\x80\xf5\x26\x52\xa2\xc5\x3c\x04\xf0\xdc\x4c\xd6\x8b\x82\x98\x80\x47\x44\x4d\xc0\xde\xc8\x89\x80\x0f\x18\x1a\x2c\x91\xac\x00\xb8\x3b\x4a\x1a\x28\xd0\x1f\xcd\x70\x81\x68\xc6\xcb\xff\xcf\xde\xdb\x78\xc7\x71\x1b\x7b\xa2\xff\x0a\x0e\x93\x7d\x24\x13\xce\x50\xb2\x73\x73\x13\x6d\x5e\x7c\x18\x89\x72\xf8\x2c\x51\x7c\xa2\x2c\xbf\x3c\xcb\x37\xc1\x74\x63\x66\x70\xd9\x0d\x74\x00\xf4\x90\x93\xf5\xfe\xef\x7b\x50\x05\xf4\xc7\xcc\xc8\x72\x17\x5a\x22\xe5\x0c\xf6\x9c\xb5\xa5\x5c\xd7\xa0\xf1\x51\x5f\xf8\xd5\xaf\x58\xda\xc5\x0f\x6c\xb7\xfb\x36\xc6\xdb\x63\xdf\xc6\xf8\xe7\x8d\x7d\x1b\xe3\xfe\xd8\xb7\x31\x4e\x09\x06\xf6\x6d\x8c\xf7\x6d\x8c\x61\xec\xdb\x18\xef\xdb\x18\x13\xc7\xbe\x8d\xf1\x87\x27\xb7\x6f\x63\xfc\xd9\x36\x66\xd8\xb7\x31\xfe\xf0\xd8\xb7\x28\xd8\xb7\x31\xde\xb7\x31\xde\x1a\xfb\x36\xc6\xf7\xed\x5a\xec\xdb\x18\xef\xdb\x18\xc7\xb1\x6f\x63\x3c\x60\xec\xdb\x18\x0f\x1b\xfb\x36\xc6\x1f\x1c\x0f\xac\xb1\xd1\xbe\x8d\xf1\xbe\xb1\xd1\xcf\x95\xf3\xf0\x1a\x1b\xb1\x7d\x1b\x63\xda\xd8\xb7\x31\x1e\x3e\xf6\x6d\x8c\x87\x8d\x7d\x1b\xe3\xe1\x32\xf7\x6d\x8c\xdb\xb1\x6f\x63\xbc\x6f\x63\xfc\x99\x1e\xdd\x7d\x1b\xe3\x7d\x1b\xe3\xdd\x63\xff\x46\xb0\x6f\x63\x3c\x6c\xec\xdb\x18\xd3\x85\xee\xa3\x7d\xba\x9c\x87\x17\xed\xef\xdb\x18\xef\xdb\x18\x7f\x70\xa4\xb8\x6e\xd6\xe5\x92\xd0\xab\xeb\xe3\x90\x71\x07\xb4\x6c\x87\xe0\x6c\x56\xcf\xe7\xc2\x80\xdb\x0d\x33\x25\x25\x6e\x76\x97\xbb\x22\x07\xed\x52\x52\x8e\x6b\x40\xf9\x59\xe1\x4e\x80\x37\xdc\x62\x09\x22\x4c\x91\x06\x78\xec\x4f\x31\xf0\xbc\x41\x87\x2a\x23\x2c\x2d\xbe\x96\x8a\x9d\xbf\x7a\x3e\x1d\x81\x87\x3c\x85\xc2\x13\xd6\xe4\x95\xca\x52\x61\xef\xed\x21\x4b\xa3\xd3\x8b\x54\x7a\xe1\xac\x65\x85\xb6\x88\xad\xc5\xcd\xcb\x96\x5c\x29\x41\x61\x21\x46\x85\x28\x1d\xa4\xdd\x66\x42\x28\xa6\x2b\xa1\xb0\xb2\x8c\x33\x2b\xd5\x82\x54\xb6\xcc\x9d\xe3\xd9\x72\xea\xbf\x5f\xc5\x03\x16\x5a\x98\x35\xb3\xa6\x5c\x35\x67\x04\x2f\xf1\xa0\x19\x51\x72\x89\xd3\x65\x3c\x33\xda\x5a\x56\xd6\x85\x93\x55\xc2\x84\x99\x15\x50\xb0\x68\xb1\x7a\x36\x1e\x02\x46\xba\x6e\x56\x20\xd8\x13\x08\xa3\x9b\x35\x08\xcb\x4b\x72\xc1\xda\xab\x06\x01\xfc\x09\x34\x72\x2d\x2b\xb7\x66\xfe\x78\x50\xb6\x1f\x70\xff\xd2\x58\xc7\xb2\x42\x42\x04\x07\xeb\x20\xc0\x92\xc1\x9c\x29\x08\x60\xae\x72\x2f\x59\x85\x3d\xb2\x61\x93\x54\x0e\x0e\x68\x45\x72\xf8\xa1\x98\x09\x3e\x13\x2f\x13\x4e\x37\x97\x36\x04\x14\x96\x34\xd1\xd8\xc2\x03\x2f\x57\xdc\x23\xb8\x5e\x39\x91\x8b\x3e\x7e\x73\x10\xd2\x99\x72\xc2\xfd\x87\xae\x1b\x21\x2b\xde\x98\x00\xec\x97\x11\x15\x24\xe9\xfb\xb7\xcb\xda\x22\x03\x3b\x18\x08\x82\xc8\x8e\x49\x81\x6b\xaa\xc4\xca\x5b\x2f\x91\x09\xb9\xf2\x4e\x38\x41\xe4\x4e\x7b\xf0\x49\xcd\x81\xe3\x66\x21\xdc\xd3\xb8\x56\xb4\xfa\xc7\x3e\xdf\xfd\x1c\xed\xf0\x46\xd5\x68\x92\x52\x80\xa5\xbf\xd2\xf9\x35\xd4\x8b\x22\x8d\x3e\x49\x73\xed\xa8\xaf\x0a\x4b\x80\x9d\x74\x46\x12\x19\xe9\x0a\x68\xb4\xf4\xc1\x43\xf2\x8b\x67\x2b\x9e\x09\xcb\x8e\x2e\xae\x9e\x9e\xb0\xab\x8b\x67\x58\x19\x40\x90\xa9\xe7\x3b\x38\xd6\xa2\xd3\x04\x2a\x8d\xa8\x63\x77\x7d\xbe\xb4\xa1\xe0\x82\x20\xf3\x76\xc9\x1d\x5c\xac\xce\xe7\x73\xe3\xfd\x03\x6e\xb0\x47\x2f\x71\xa2\x95\xce\xa7\xec\x52\x3b\xd1\xf4\x61\x18\xc5\x6f\x81\x20\x3c\x64\x1b\x83\xee\xc2\x9e\x3f\x54\xb7\x8e\x14\xf4\x3a\x61\x4a\xa9\x80\xb6\xe9\xa5\xb0\x96\x2f\xc4\x15\x09\xc4\xf2\xbe\x14\x19\xe0\x58\xa2\x4d\x21\x5b\xe3\x02\x39\xb6\x9a\x18\xb5\xad\x24\x3a\xa4\x5c\xe6\xce\x47\xb3\x12\xbf\xba\xb9\x79\xb7\x46\x3a\x47\x3a\xd4\xd2\x62\xa7\x2e\xc0\xff\x6d\xb2\x38\xd2\x26\xda\xa9\x92\x62\x2f\xe3\x44\x71\x82\xfe\xe7\x7c\xac\xa9\x68\xfc\x84\x08\x56\x9c\x19\x29\xe6\x6c\x2e\xa1\x18\x09\xca\x66\x4e\xb0\x33\x04\xa7\xcc\x96\x2b\xc6\xad\x15\x06\xd6\x35\x94\x4d\xc4\xf5\x9d\xb2\xef\x68\x3d\x41\x66\xc2\xbb\x8b\x2a\xe3\x6d\x9f\x55\x64\x55\x92\x73\xb6\x80\x02\x1d\xda\xbd\xe6\x8a\xfd\xee\xd1\x1f\x7f\xcf\x66\x6b\x27\x42\x33\x34\xa7\x1d\x2f\xe2\x84\x09\x42\x0b\xa1\x16\xfe\xb4\xa3\xe7\xdd\xe7\xd8\xa1\xb6\x44\x99\x09\x56\xc8\x52\x3a\xe4\xed\x79\xfc\xc5\xcd\xac\x97\x5a\x21\x48\x3c\xcd\xc5\xea\xb4\x73\x03\x26\x85\x5e\x4c\xd9\x53\xae\xbc\x4e\x27\xbd\xff\xd5\x55\x0e\xf8\x81\xe1\x69\x93\x71\x15\x97\x2e\x64\xb6\x4e\x75\x42\x02\xa1\x1a\x5b\xea\x5b\xec\xc4\xd7\xfe\x0e\x61\x69\xa2\x76\x69\xcb\x87\x2b\x5d\xd5\x05\x2c\x17\x7b\x4e\xe3\xbf\x02\x4d\x55\x5b\xb1\x49\xc6\xf2\x1e\x5d\x4e\x53\x0e\x71\x9a\x1b\xf9\x0c\x54\x12\x09\x0b\xa1\x03\x93\x41\x78\x24\x6e\xba\xe6\x90\xec\x1e\x63\xcf\x79\x51\xcc\x78\x76\xf3\x46\xbf\xd0\x0b\xfb\x4a\x9d\x1b\xa3\x4d\x6f\x85\x28\xf7\x98\xfb\xe0\x6f\x59\xab\x1b\x68\xf8\xdc\x7c\x7c\xa1\x17\x4c\xd7\xae\xaa\x49\x49\x9c\xf9\xe6\x71\x6a\xd6\x84\xc8\x83\xd6\x44\xba\x21\xb6\xec\xcc\x54\xdc\x49\xda\x0b\xe6\xad\xf4\x0a\x4c\x31\xe1\xd7\x11\xb5\x62\xfb\xd5\xb4\x98\xbf\xa3\xbe\xbe\x78\xf4\xbb\x3f\xa0\xc2\x65\xda\xb0\x3f\x3c\x82\xda\x6a\x52\x94\x0a\xae\x00\x78\x7b\xd2\x32\x5b\xf2\xa2\xf0\x8e\x69\x9a\x62\xf4\xd7\xb1\xa3\x08\x1b\xb5\xf6\x49\xb5\x9a\x4b\x55\x60\x1f\x31\x87\xfb\xe6\xcd\xdf\x20\x81\x2b\x9d\x15\xc5\x9c\x14\x5c\x17\x56\xb7\xbd\x32\x0f\x21\x26\x3e\x0c\xbe\x88\x33\x35\x49\x05\xdc\x6f\x56\x74\xa5\x8b\xba\x14\xcf\xc4\x4a\x66\x94\xd7\xe9\xde\xd6\xf5\x64\xd1\x09\x0c\x0a\x69\xa1\x99\xd1\xac\xd0\xd9\x0d\xcb\x83\xb8\xb6\x3a\x85\xe2\x85\xac\x53\x39\xc9\x53\x6a\x89\xc8\x35\x44\xef\x5d\xdd\xb6\x02\x88\xf4\x4e\xc3\x59\xc9\xab\x4a\xaa\x85\x5f\x66\xce\x0c\xbf\xed\x2d\x36\x49\xa6\xd7\xbc\x40\x3c\x9a\x44\xfc\x9e\x88\xf1\x48\x41\x78\x4c\xc2\xd7\x13\x7d\x0e\x72\x79\x51\x2a\x38\xa4\x9d\x35\xf5\xfd\xba\x77\xcc\x5a\x71\xa9\x14\x24\x15\xc8\x40\xee\x89\x91\x7a\x93\xb1\x36\x85\x81\xf3\x6c\xc2\x5e\x7f\xa0\x13\x68\xb6\x9c\xa6\x62\x07\x92\x1f\xec\x53\x8a\xb9\x7a\x3b\xa7\x1a\x68\x44\xc9\x1d\x29\x59\x81\xa3\x9b\xbf\xe4\xac\x12\xc6\x4a\xeb\x7d\xf4\xb7\xa0\x80\x9e\x16\x5c\x52\xdf\xbf\x9b\x0c\x5f\xa5\xa9\x5b\x95\xb0\xdc\xa8\x40\xa1\xb1\x75\xaa\xa5\xbb\xd2\x79\x10\x07\x86\x09\xd2\x26\xa4\x7c\xe7\x56\x9a\x25\x95\x59\x66\x34\xf7\xef\x3e\x4d\xdd\xdb\x76\xa7\xd2\x2d\x9d\x97\xd2\x98\x3a\x94\x1c\x8c\x15\x51\xe2\xe7\x6b\xe0\x60\x2d\x3e\x37\xfb\xd6\x4c\x7a\x14\x25\x09\x86\x2d\xf8\x2a\x29\xc6\xad\x8d\x55\xdb\x07\xc7\xa5\x08\x4a\x81\x2c\xb5\x4d\xb3\x84\x4c\xec\x34\x60\xbe\x15\xb9\xcb\x71\x33\x55\x76\xf8\xe4\xf0\xde\x8c\x1c\x6e\xa2\xd1\x15\x5f\x40\xee\x60\x94\xbd\xdc\x14\x4a\x5e\xa1\x5c\x60\x5a\x43\x58\x48\x9b\x81\x5c\x78\x7c\xa1\xfb\x3e\x61\x56\x22\x6f\x39\xc1\x81\xe9\x3f\x81\x45\xa3\x73\xe4\x42\xc2\x44\x43\xa4\x7c\x9b\x40\x6f\xc0\x8d\xae\x55\x1e\x40\x1d\x0d\x92\xe8\xe5\xc6\xc2\x5e\xd2\x89\x08\x21\xcd\x13\xfb\xa0\xf8\x10\x17\xea\x9d\xa5\x65\x33\xe1\xe8\x5d\x46\xa4\x62\x8f\xa7\x8f\x1f\x7d\xfe\x3e\x1b\xac\xc9\x48\x3e\xdb\x65\xe3\xb3\xa1\x95\xbb\xb7\xd5\x31\x82\xe7\xaf\x54\x41\xc8\x04\xe1\xe8\x97\x0d\x85\x27\x29\x2f\x74\xa2\x55\x02\x65\x8c\x8c\x9d\xde\x41\xd4\xad\x91\x2e\xdc\xa0\x5b\x99\x50\x6f\x7a\x04\x49\x1b\xa6\x4d\x97\x93\xf7\xb8\xcd\xe5\x25\x84\x24\xd4\x7c\x50\xf8\xef\x13\xdb\x5d\x33\x66\xeb\xd9\x83\xb3\xbb\x68\x60\x51\xa9\xee\x7a\x4f\xa5\xaf\x77\x90\xbc\x6d\x82\xc9\x12\xbb\x10\xe2\x83\x03\x76\x84\xbf\x70\x88\xa4\x94\xc7\xf7\x76\x3d\xc3\xb6\x9e\xdf\x55\xe4\x86\x84\xbd\xad\x3d\xbf\xab\xb8\xca\x45\x8e\x01\x7f\x82\x6b\xcd\x22\x0b\xf3\xae\x3d\x4e\x37\x9b\x87\xb6\xbf\xc7\x64\x89\x5d\xf7\xec\x2f\x62\xc9\x57\x02\xa8\x3b\x65\xc1\x4d\x82\x7a\x72\x9a\x5d\xe3\xce\xb0\x59\xed\x98\x50\x2b\x69\xb4\x2a\x45\x02\xd3\xf9\x8a\x1b\xc9\x67\x85\x60\x46\xcc\x85\x11\x2a\x13\x96\xfd\xfa\xe8\xed\xd9\x6b\xa8\x96\xa0\xf7\x53\xe0\x46\x30\x11\x77\xbd\xb6\x50\x65\x3f\xd2\x2d\xec\x7c\xf6\x74\xe3\x02\xd1\x55\xf4\xc6\xc5\x8b\xeb\xec\x6f\x00\x7d\x0d\x54\xde\xec\x97\x5f\x8f\xb2\x76\x35\x2f\x80\xbd\x35\x2b\x6a\x2b\x57\xf7\x61\x7f\x03\x9b\xee\x33\x49\xb8\xd9\x1b\x2c\xc4\xed\xa5\xd9\xa2\xe8\xa5\x7c\x58\xc4\x5c\x8d\xd7\x8e\x3c\xe0\x90\x0e\x6d\xd3\xf4\xa9\xdb\x2b\x87\xfc\x28\xc7\x4a\xb9\x58\x42\x02\xa5\xd3\x66\x8f\x6c\xb4\x3a\xd0\xb0\x12\x50\x24\xf7\xf5\x3c\xe7\x83\x8f\xb3\x42\x72\x3b\x2c\x0c\xdf\x62\x17\x0c\x32\xa0\xfd\xac\x0a\xdd\x92\xf8\x30\x60\x48\x7c\xdf\xf1\x53\xc2\x07\xf4\x8b\xab\x80\x50\x8d\x3b\x28\xd5\x7f\x8b\x6c\xe8\x0b\x70\x93\x4d\xab\x74\x7e\x68\x83\x78\xc0\x5e\xc9\x39\x95\xf5\x1c\xfc\x73\x69\x91\x8e\x7d\x05\xfd\xdf\xe6\xda\x00\x07\xae\x97\x7f\x29\x9c\xbf\x1d\x83\x44\x56\x3a\x1f\xc4\x69\x47\x4b\xc7\x11\x12\x71\xbb\xf7\x9a\x2d\x75\x91\x23\xcb\x7b\x78\x34\x1a\x78\x60\x67\xc2\xdd\x0a\xa1\xd8\xc5\x15\xec\xb5\x5f\x36\x40\x38\xf6\x76\x7c\xa0\xcc\x78\x3e\x18\x87\x63\x08\x4d\x41\x3a\xb9\xe5\xb8\xfb\x03\xa5\xfa\xb3\x32\xec\x78\x90\xb3\x79\xf4\xa4\x58\xb3\x7e\x89\x1a\xfe\xaf\xcd\x3e\x44\x12\x05\x3e\xd3\x24\x4a\x06\xbf\xb1\x79\x6e\x48\xfd\x53\xee\x25\xd7\x9c\x60\x60\x65\x95\x8a\xcf\x6a\x16\x2b\xbe\x89\x2d\x69\x45\xd8\xa0\xd8\xe0\xe0\x7f\x42\x0b\x72\x71\xf5\x94\x6c\x3d\x0e\xbf\x0d\x90\x2f\x2f\xe8\xf0\xd0\x32\x59\x65\x2d\xd6\x79\xd8\x47\xb4\xf8\xdc\x88\x9e\x68\xa2\xe5\x21\x20\x3e\x5a\x88\xdc\x51\xfc\x49\xa6\x94\x29\x14\xe2\x7d\xab\xc0\xa1\x4a\xc0\x79\x03\x4e\x06\x20\xde\xbd\xf5\xb5\x51\x3a\x75\x89\x63\x41\x0a\x9a\x78\x80\x29\xc5\xe2\x86\x4a\x1b\x67\x87\x33\xde\x77\xdd\xb3\xa6\x84\xbb\xb5\xcb\x24\x02\x1f\x4a\x92\x84\xbe\xeb\x57\x17\xcf\xc6\x3b\xfe\x95\xcc\x3f\xdb\xe3\x3f\x34\xff\xd9\xe7\x79\xeb\xb5\x8e\x89\xe2\x28\xd5\x32\x57\x3a\x7f\x4f\x60\xd1\x3a\x01\x83\x5f\xad\xe2\x31\x0d\xb5\x7e\x9c\xe1\x63\xec\x24\x76\xd7\x85\x22\xee\xe1\xe7\x6d\xa0\xb6\x85\x70\xe1\xaa\x2e\x8a\x6b\x91\x19\x31\xec\xc1\xba\x7f\xee\x2e\x36\x24\x8d\xe1\xba\x77\xf2\x09\xc0\x05\x1d\x04\xa3\x03\x66\x87\xae\x78\x73\x0b\x02\xf7\x1f\x78\x24\x55\x5d\x14\xc0\x91\xa3\xd6\x94\xa3\x01\xeb\x87\x2f\x0f\x88\xfe\x92\x36\xd6\x51\x61\x21\x68\x73\x5e\x06\x6a\x5b\x61\x45\xf3\xc1\xf1\xa8\x54\xdc\x5a\x44\x88\x4a\x95\xcb\x95\xcc\xeb\x81\xeb\xea\x3f\x16\x62\xc4\xc0\xba\x03\xaf\x2e\x8d\x67\x56\x92\x3a\x05\x3e\xd7\x86\x89\x3b\xee\x45\x9e\x34\xb5\xe7\xdc\xc2\x45\xcb\x75\x76\x23\xcc\x09\x1b\x9c\x4f\x7f\x06\xff\xe1\x53\x88\x8c\xe1\x60\x37\x6b\xc1\x8d\xbf\xcb\x4a\x9b\xa1\x21\xd6\x40\x22\x84\xb6\x24\xe1\x14\xf7\xf8\x57\xb8\x95\x6b\xa9\x16\x13\xf8\x1b\xbf\x98\x61\x56\x13\xad\x26\x7c\xe2\x95\xc1\x83\x0f\xb8\xa0\x19\xf8\x2b\x88\x24\x5e\xc7\xdb\x15\xd3\x07\x43\x03\x19\xa1\x74\xbd\x58\xc2\xa2\x9a\x92\x87\xd6\x5c\xac\x10\x0e\x7a\xe0\x20\x1e\x76\xa0\x48\x24\x7a\x0f\xf3\xca\x43\xc8\xd3\xed\x08\x35\xf8\xd6\x33\xaa\xf5\xbb\x87\xa0\x8b\xf6\xde\xb7\xc1\x77\xd2\x69\x24\x1a\x56\x92\x44\xfb\x35\xf0\xbe\xe8\x95\x30\x2b\x29\x6e\x4f\x83\xab\x39\xb9\x95\x6e\x39\xc1\xd5\xb3\xa7\xb0\x05\xa7\xbf\x82\x7f\x10\xe6\x82\x64\x61\x67\x79\x1e\x9e\xa2\x6b\x2b\xe6\x75\x81\x8f\xbc\x76\xca\x78\x25\xdf\x0a\x63\xa5\x26\x95\x9c\xdf\x48\x95\x9f\xb0\x5a\xe6\x5f\x7d\xa2\xc2\x1c\xa9\x64\x5b\x10\x9c\x60\x71\x5f\x04\x2b\x19\x98\x5a\xe5\xbf\xf0\x0a\xb6\x9a\x6b\xd0\xe7\xcc\x44\xa1\xd5\xa2\xc3\x64\x0b\xce\xfe\x85\x92\x8e\x2a\x11\xd3\xf7\xd0\x0d\x0e\x52\x9b\xda\xe4\x50\x2c\x2e\xbd\xb9\xd1\xf4\x79\x42\x9f\xc1\x4e\x41\xbb\x37\xdd\xb2\x37\x4f\x28\x95\x19\x58\x30\x11\xb9\xc0\xb0\x1c\x20\x92\x34\x3a\xcd\x96\x7c\x25\x9a\xfe\x43\x03\xeb\xfa\xa5\x65\x4b\xae\x72\xf8\x4f\xb3\x4c\x9b\x3c\xac\xaf\x74\x4d\x55\x3e\x96\x63\x0d\x4d\x17\x06\xe8\xa4\xb7\xdc\x5c\x6d\x7e\x3d\x64\x0e\x4d\x39\xd0\x39\x68\xff\xfb\x18\x34\xd5\x4a\xfe\xb3\x16\x8c\x97\xda\x3b\x48\x09\xbd\xf0\x37\x4e\x11\x2b\xf9\x1a\xbc\x69\x58\xda\x17\x91\x5f\x68\xd8\xe1\xc2\x46\x70\x27\xec\xb5\xe0\xb9\xec\x90\xf5\x9e\xb0\x17\x7d\xf6\xde\x61\xc7\x40\x1b\x76\x8d\x14\x97\xe1\x3f\xc7\xea\x1e\x23\xac\xae\x4d\x26\x5e\x23\x30\xce\x3b\x4f\xc3\x8e\xad\x9e\xef\xd8\x28\x7f\x43\x1c\xbf\x11\x0a\x93\xca\xfe\x88\x0c\x45\x78\xe6\xb5\x81\xfb\x90\x2d\x45\x5e\x83\x27\x3b\x5b\xb3\xb9\xf7\x0f\xc3\x6b\xd9\x52\x2e\x96\x62\x60\xea\x27\xa4\x09\x4e\xa1\x26\x09\xfb\xa6\xf2\x6c\xd9\x2c\x02\xa8\xbd\x61\xcb\xda\xf0\x7a\xb4\xcf\x78\x25\xbf\xf3\xab\x02\xa6\x8a\x3b\x02\x05\x6e\xc8\x27\xda\xba\x8c\xf6\x0e\x4f\x7d\xf7\x98\xb2\x17\xfe\x13\x86\xeb\x2d\x5e\x55\x85\x8c\xbe\x76\xff\xf0\x42\xf5\x41\x78\x87\x1d\x24\x77\xce\xed\x52\x6a\xb5\xa5\x54\x59\x86\x8f\x35\x59\x6d\xbc\xb1\x1e\xe8\x2a\xcf\x04\xe3\x79\xee\x7d\x25\xc3\x8c\x28\xf5\xca\x6b\xc5\xc4\xe7\x9f\x34\xd2\x30\xbf\x60\x93\x8e\xff\xfc\xf0\x9d\xe2\xb3\x40\x57\x84\xdb\x9e\x6d\xd8\xd1\xc1\x2e\x2c\x47\x07\x38\x76\x8e\x32\xb5\x6a\xcb\x56\xbc\x55\xfd\x34\x6e\x28\x0d\xc3\x4b\xc0\xdf\xd2\xfd\x5d\x6e\x16\xa9\xef\x0b\x87\x67\x66\x51\x83\x3a\x8e\x7e\x4b\xdb\xba\x9d\xe2\xf6\x7a\x65\x8f\x61\x2b\xc6\xf6\x87\x87\x96\x3d\x7d\xf9\x2c\xc2\x0b\x09\x12\x65\xc8\x70\x06\x0e\xb5\xca\xe8\x95\x84\xf6\x83\x6f\x03\x6c\x82\xf2\x28\xbd\x13\x68\xd1\x03\x4c\x10\xa4\xee\x82\x58\x1c\xda\x1e\x56\x82\xf6\x24\xcf\x5b\x88\x48\xd6\x68\x26\x6f\x4d\x8a\x15\xed\x09\xbd\x17\x26\xc6\xac\x83\x54\x55\xed\xe8\x88\xa5\x26\x6f\xac\xb2\x25\x57\x0b\x84\x92\x8a\x44\x20\x8b\x5d\x2b\xc7\xef\xfc\x57\x7b\xd1\xc2\x66\xbc\x12\x79\x28\x1f\x66\xb9\xae\x69\xdb\xff\xeb\x5f\x9f\x30\x29\x9e\xb0\x5f\x77\x26\x37\x65\xe7\x41\x7a\x7b\x38\xa8\xab\x80\xcc\x4b\xb3\xf6\x30\x9d\x30\x23\x16\xdc\xe4\x05\xad\xc9\x8e\x9e\xb3\xdb\x0e\x9d\x5d\x73\x18\xc4\x9d\xb4\xce\x32\x12\xe5\x8c\xd2\x6e\x97\x9d\xeb\xd8\x2e\x82\xd0\x9f\xb0\x76\x8e\xdb\x1b\x6f\xdb\xbc\x1e\x9e\xe4\xdc\xf1\x49\xc7\x58\x9c\x62\xd6\x76\x12\x9a\x2c\x4f\x78\x50\x4a\xad\x19\x3c\xfd\x95\xa9\x95\xf2\x81\x31\x6f\xfe\xaf\xa4\x9a\xf0\x09\xb4\xe4\xa5\x46\x9e\x9f\xcf\x8b\x26\xb9\x7b\x79\x5f\xdb\x9f\x37\xca\x1d\xbf\x1d\x18\x87\x08\x5f\xd2\xc4\xa5\x8d\x61\x0e\xad\x91\x5b\xfd\x4f\x51\xf5\xd1\x62\x9c\x5f\xbe\x79\xfd\xb7\xab\x57\x17\x97\x6f\xa2\xe1\x88\x66\x80\x22\xf5\x7d\x86\x23\xed\xa6\xbf\xcf\x70\xb4\x66\x20\x05\x88\xb4\x69\x38\xfa\x66\x80\x22\x79\xdb\x70\xf4\xcd\x00\x65\x65\xb7\x0d\xc7\x0e\x33\x40\xf4\x22\xba\xeb\xbb\xd3\x0c\x90\xb4\x73\xc7\x70\xec\x36\x03\x04\xa9\xdb\x86\xa3\x6f\x06\x48\xf7\x6b\xdb\x70\x74\xcc\x00\xd1\xe4\x6f\x1b\x8e\xae\x19\x20\x08\xdd\x6d\x38\xf6\x66\xe0\xe7\xfc\x28\xc9\x0c\x08\xb5\x4a\x34\x01\x31\xeb\xd9\x51\x2e\xcd\xb9\x20\x91\x9c\xf5\x9a\xcc\x76\xe8\xfb\xc6\x38\x54\x9f\xc7\x7e\xf6\x61\xf6\x6a\xf5\x96\x1b\x66\x44\x65\x84\x85\xb8\x8a\x58\xd6\xb1\x6b\x83\x58\x10\x4a\xa3\x2e\x64\x8c\xb7\x88\xe1\xcf\xae\x2a\xf6\x9e\xea\x5a\x47\xab\x21\xeb\x3e\x2c\x8d\x59\x35\x30\x6d\xda\x0d\x71\xf6\xf4\xef\x17\xcf\xce\x2f\xdf\x5c\x3c\xbf\x38\x7f\x7d\x6f\x85\x2b\x49\x8d\x5c\xfb\xee\xea\x38\x9e\x1a\x8e\x9f\xf6\xd7\xc8\x62\xb1\x97\x81\x58\x49\x5d\x03\xc4\x1d\xc0\x27\x63\xee\xaf\xdd\xd2\xad\x64\x91\xc0\x03\xad\xd6\xd0\xa0\x55\x66\xe3\x1e\x43\x3b\xdd\x99\xa9\x20\xcb\x1d\xd5\x51\xc5\xf1\x13\xee\x2a\x59\xe6\xa8\xd9\x0e\x1c\xef\xcf\x79\xd0\x37\x7e\x6c\x97\x17\xc7\x4f\x3a\xbe\x29\x3b\xff\x1e\xf7\x97\x2c\xf2\x27\xb2\x27\x64\x99\xd1\x79\xee\x57\x3f\x91\x1b\x21\x8d\xa3\x76\x9f\x1b\x5d\x8e\xa2\x7a\xaf\xf1\xa5\x2a\x40\x9b\xc8\x8b\xb4\xcb\x89\x39\xb4\xc3\xc1\x79\xfd\xd1\x49\x5b\x85\xd4\x40\x6c\xd9\x42\x16\xe9\xe5\x01\xcd\x61\x9a\xd9\x4c\x6a\xa1\x3f\x46\xdf\x79\xac\x86\x7a\xc9\xab\x6f\xc4\xfa\xb5\x48\xe8\x95\xb4\x79\x1e\x44\x21\x32\xef\xcc\xb2\x1b\x41\x2f\x9e\x64\xe1\x25\x97\x3d\x8d\xd3\x4c\x69\x32\x35\xc2\x92\xb3\xe4\x7e\x73\x38\x26\x89\xcb\x32\xc6\xd6\xfb\x71\x23\xc8\xe5\xfc\x71\x6c\xb5\xd0\x4f\xdd\x70\x16\xa3\x44\x7f\x82\x52\xf6\x9b\x8d\xd3\x2d\x0e\x47\x8a\x5f\x1f\xc7\x4e\xe4\x58\xfa\x5a\x75\x91\x67\x90\x56\x49\x16\xf9\x40\x70\x68\xfd\xb1\x1b\x95\x96\x2c\x76\x1c\x54\x5b\x7f\xa4\x60\xdc\xfa\x63\xb4\xf3\x1b\x81\xe1\xa3\x9e\x61\xc4\xfc\xa7\x5f\xf7\xae\xbf\xd5\xa8\xfa\x64\xa9\xc8\x09\xeb\xf5\x51\x84\x58\x25\x8b\x0c\x01\xdb\x28\x9b\x9a\xc2\xe1\xc1\xe2\xc1\x1d\xd3\x66\x1f\x36\x46\x3b\xe9\xfb\x90\x0b\xa8\xe9\x67\x99\x3f\x89\xed\x24\xd2\x54\x40\x29\x1c\xcf\xb9\xe3\x53\xaf\x4d\x4e\xfa\x7f\x04\xb8\x71\xda\xb5\xfd\x47\x23\xb0\xe0\x33\x51\xd8\xef\x0f\x0f\xff\xf4\xcd\xf9\xdf\xfe\x7c\x78\xf8\xc3\x3f\xc6\x92\x0c\x6e\x28\x16\x01\x8c\x27\xde\x56\x22\x9b\x2a\x9d\x8b\x4b\x58\x17\xf8\x63\x08\xd8\xcf\x10\xe0\x06\xff\x43\xda\x6f\x00\xbf\xfa\x14\x6b\x05\x4f\xe2\x1f\x2b\x9d\x5f\x5c\x8d\x22\x18\x24\xd9\x84\xa6\xb0\x0f\xcc\xb9\x83\x2b\x40\x64\xe4\x8b\x63\x2c\x17\xaf\xb5\x6b\xa3\xaa\xfe\x20\x33\x5d\x49\xa3\x9e\xb0\xd9\x52\x94\x3c\x29\x76\x8c\xe3\x79\x5c\x7c\x26\x6d\x42\xdf\x94\xfe\x90\x0a\x38\xf2\x2d\xd3\xf3\x51\xba\x21\xe3\x70\x9a\x1d\xac\x1e\x1f\x3c\x18\x27\xb7\x39\xb7\xa3\x1e\x15\xd8\x8b\x91\x1c\x5d\x34\x2e\x4d\x78\x30\xca\xbe\x2e\x3b\xf5\xaa\xec\xec\xea\x22\x59\xe8\x0a\xef\xc6\x83\xd8\xd6\x08\x22\x7e\xfe\x40\xbd\x85\x06\xe4\xbc\xc9\x25\x9d\x76\x04\x81\xd9\x23\xca\xb6\xd8\xed\x21\xed\xbe\x72\x95\x47\xa0\xb6\x65\x47\x28\x70\x9a\x55\x75\x9a\x01\x0c\x72\x4a\x51\x6a\xb3\x3e\x89\x7f\x6c\x9a\x90\x4d\xac\xd3\x86\x2f\x12\xcd\x77\x9c\x36\x4c\xb7\xfd\x13\xfe\xe8\x68\x8b\xb2\x3d\x6b\x7a\x4e\x9b\x05\x5c\x78\x83\xd1\x8e\x3e\x24\xa9\x9f\x4f\x3b\x1e\x94\x97\x10\x8f\xe7\x03\x70\x12\xb2\xb4\x86\x89\xfd\xd1\x57\x13\x4f\x93\x9f\xa1\xe2\x80\x14\x4c\xb3\xf6\xc4\xd6\x79\xfd\x11\xd8\xbe\x4f\x68\x75\xd3\xbb\x06\x54\x6f\xa8\x15\x5b\x71\x43\x6c\xd8\xdd\x8e\xd1\xec\x7a\x2e\x57\xd2\xea\x44\x95\xfa\xbe\x7a\xff\x51\xec\x7a\x68\xe5\x83\x95\xad\x63\x39\x95\xe2\xae\x82\xce\xae\x8d\x1d\x48\xcf\xec\xe4\xdd\xd7\x9b\xc7\x74\xf2\x3a\x1c\x15\x77\x4e\x18\xf5\x84\xfd\xd7\xd1\xbb\xdf\xfe\x38\x39\xfe\xea\xe8\xe8\xfb\x47\x93\x3f\xfe\xf0\xdb\xa3\x77\x53\xf8\x97\xdf\x1c\x7f\x75\xfc\x63\xfc\xc3\x6f\x8f\x8f\x8f\x8e\xbe\xff\xe6\xe5\xd7\x6f\xae\xce\x7f\x90\xc7\x3f\x7e\xaf\xea\xf2\x06\xff\xf4\xe3\xd1\xf7\xe2\xfc\x87\x9f\x29\xe4\xf8\xf8\xab\x5f\x27\x4e\x9c\xab\xf5\xab\x24\x57\x82\x81\x06\x4c\xef\x4d\xbf\x2d\x6d\x84\xeb\xc2\xd8\xdd\xa4\x4d\x7a\x4e\xa4\x72\x13\x6d\x26\x28\xf8\x09\xb0\xcd\x8e\xe2\xf2\x8c\xab\x67\x5f\x8f\x60\x93\xfa\xf3\x6b\xdd\xec\x07\xa1\xc8\xb0\xf8\xff\x61\xbf\x53\xe1\x1c\x7b\x9c\x65\xc9\xaf\x0e\x90\xdc\xfa\xa5\xf8\x3c\xfb\x67\xaf\x9f\x1a\x31\x19\x82\xa7\x68\xbc\x28\x77\x6e\x74\x19\x7b\x0e\x00\xf0\x0b\x38\x0f\x93\xc5\x86\x79\xde\x08\xf2\x2b\x78\x1c\xfb\x67\x3a\xca\xd8\x3f\xd3\xa5\x8d\xfd\x33\xdd\xb0\xd1\x7d\xa6\x43\xda\xa9\xfd\x1b\xdd\xae\x21\xd4\x8a\x06\xac\xda\x89\xbc\x8f\x39\xac\x4e\xfb\x5b\xc2\xb7\xed\xc4\xef\x6f\xc3\xf0\x09\x92\x83\xf1\x6b\xd1\xac\x6d\x8d\x17\x35\xbd\x51\xee\x46\x28\xb3\xb3\xa2\x60\x52\x51\x8d\x17\x4c\x32\xd6\x1b\x19\x81\xe9\xa4\xc8\x35\xbb\xa2\x81\x5a\x6f\x97\x62\x63\x09\x81\x53\xd1\x71\xe3\xa4\x5a\x50\x96\x13\x7a\xb6\x80\x3b\x1a\xcb\x6e\xa4\x62\x65\x5d\x38\x59\x15\x82\x25\x04\xb2\x08\x66\x2c\x6a\xc1\xb8\xb5\x3a\x93\x3c\xd6\xe3\xc1\xff\x52\x70\x12\x5f\x69\x88\x14\x60\x55\x1d\xbf\x01\x6c\x73\x26\x72\xa1\x32\x31\x65\x6f\xfd\xaf\x51\x2c\x4a\x3c\x49\xb3\xb5\xdf\x9b\x73\xb5\x6a\x2a\xb1\x6a\x2c\xfe\xa1\x1c\x2a\xbf\xa2\xbb\xe7\xf9\xef\x5b\x7a\xe2\xd5\x54\x80\x6e\xb6\x15\x28\x24\xcd\x09\x7e\x6b\x93\xc9\xe7\x50\xe4\xa3\xe7\x2d\x9a\x83\x54\x2b\x94\x16\xb9\xa4\x46\x0b\x0d\x36\x32\x21\xe0\xdc\x0a\x13\x9a\x05\x49\xe9\x19\x85\x61\x01\xb8\xf5\x44\x19\x0f\x04\x7e\x9a\xea\xae\xbf\x97\x8b\x2d\x31\x41\xd3\x75\xd3\x1f\x9e\x9b\xfd\x11\x5c\xec\x1d\xee\x35\xba\xc7\x49\x52\x53\x5d\xeb\x51\xdc\xea\x31\x5c\xea\x5d\xee\x74\x42\x71\x6d\x3b\x7a\x88\xb7\x51\x5c\xe0\x74\xf7\x37\x1d\x9e\x56\x19\x31\x97\x77\xa3\xe8\xcc\xb3\x96\xd3\x96\xc9\x5c\x28\x27\xe7\x32\xa5\xd1\xb0\xf6\x93\xab\x84\x02\x10\x01\xd0\x6c\x79\xbf\x20\xb1\xb5\x51\x0b\x4f\x7f\x68\xc5\x75\x98\xa2\x19\xd3\x80\x5d\x8f\x95\x9c\xda\x5b\xaf\xbd\xf5\xda\x5b\xaf\x0f\x8d\x07\x6f\xbd\x82\x3e\x88\x21\xfb\xfd\x9a\x1f\x60\x84\x49\x25\xbd\x79\xd6\xe1\x23\x83\x3b\x4e\x4e\xd7\x26\xf0\x5f\x93\x12\x31\xdd\x4e\xac\x8d\xd5\x74\x9a\xf1\xa2\xd0\xb7\x04\x89\x40\x66\x69\x58\x21\x56\xa2\x08\xe1\x10\x2b\xb9\xe2\x0b\x60\xe4\xa4\x45\x30\xb1\xad\x97\x36\xcc\x2b\x1c\x23\x73\xb1\xd9\x4f\x8b\xc4\xda\xa3\x58\xe4\x45\x04\x71\x46\x17\x85\x30\x96\x15\xf2\x46\xb0\x67\xa2\x2a\xf4\x7a\x38\x8b\x28\x0e\xe8\x09\xe7\xb8\xf3\x6a\xea\x5a\x38\x0a\x4e\x39\xa5\x37\x4d\x24\xfa\x47\xe6\xda\xd4\xc3\x0d\x7d\x03\x80\x99\x9e\x55\x48\x85\xcb\x5e\x91\xda\x00\xeb\x39\x3b\x2b\x6e\xf9\xda\x9e\xb0\x4b\xb1\x12\xe6\x84\x5d\xcc\x2f\xb5\xbb\xc2\x24\x02\xc5\xe1\xe9\x56\xc6\xa2\x68\x26\xe7\xec\x49\xc1\x9d\xb0\x8e\x39\x4e\x51\xa2\xd2\x76\x7b\x48\x68\xd3\x9b\x64\xdb\x27\x76\x9c\x9e\xfc\xe9\xa4\xf7\x20\xa9\xa1\xbc\x27\x00\x88\x12\x0e\x5a\x11\x89\x81\x13\x8f\xd8\x19\x52\x05\x23\x31\x27\x32\xcf\x46\x8d\x41\x49\x30\x42\x9b\x8e\xd8\xbf\x15\x52\x77\x52\x31\x23\x6c\xa5\x95\x15\x34\x15\xd4\xaa\x9b\xe6\x9b\x31\x01\x6c\xef\x35\x17\x48\xf4\x67\xd3\x3c\xd9\x4a\x5b\x07\x0c\xcc\x34\x07\xa3\xaf\x5c\xae\xa2\x30\xa0\xf5\xe6\x45\x41\x76\x04\x64\x59\x8a\x5c\x72\x27\x8a\x35\xe3\x73\x27\x0c\xe3\xc9\x84\x16\x7e\x4e\x46\xf0\xc8\x63\x0e\x6c\xcd\xc0\x16\x4e\x22\x30\x6f\xc7\x56\xfa\x1f\xdb\xce\xf3\xa1\x9d\x0e\xdb\x81\xb0\xda\x40\xba\xbe\x45\x65\x4e\x14\x1a\x04\xb6\x6a\x1f\xbc\xef\xa4\xcb\xc9\x5a\xcc\x42\xbb\x00\xb3\x42\x67\x37\x96\xd5\xca\x49\xaa\x57\x8f\x1d\x84\xf4\x0d\xcb\x74\x59\x15\xa0\x3c\xd3\x88\x26\xd9\x4f\x93\x4d\xee\xd2\xc8\xcd\xbf\x4e\x1a\x25\x31\xf1\x73\xb2\xa7\xbf\x6a\xff\x27\xf8\x0b\x5a\x8c\x90\x1c\xc3\xa6\x47\xb0\xe2\x4e\x64\xf4\xb8\xa2\x77\xf5\x5f\x29\x01\xa7\x36\xa9\x95\x3b\x63\x5a\x35\x85\x00\x73\xed\x9d\x56\x20\x5b\x4f\xeb\xeb\xcc\x36\x1a\x92\x9d\xdf\x89\xac\xf9\x73\x4a\x28\x0b\xdd\x15\xb3\xd8\x87\xc5\x9b\x26\x3a\x0c\x66\x14\x90\xd6\x38\xf0\x28\x32\x75\x68\x77\x6c\xb4\x1d\x06\x89\x29\x7c\x1b\x38\x50\xd1\xa0\xb0\x42\x2a\xa2\xf9\xef\x8e\x40\x4c\xda\x6d\x79\xd3\xdc\xee\x54\x80\x89\x17\xb6\xd5\x65\x39\x51\x66\xec\xea\x19\x57\x21\x7d\x4d\x8d\xd6\x8e\x1d\x1d\x9e\x1e\x1e\x6f\xa1\x01\x12\xc1\x8b\xd8\xcd\x12\x1d\x38\xa4\x3b\x0a\xb3\x4e\x94\x2a\xa1\x2f\x7b\x05\x4d\xb9\x45\x76\x98\x9f\x30\x99\x0a\x44\x09\x9c\xaf\xa6\x56\xf1\x24\xa4\x55\x35\x31\xe4\xb7\x3d\x61\x56\x33\x67\x78\x2e\x47\xa9\x2e\x00\x99\x7e\x82\xce\xd4\xc1\xc9\x3e\x3a\xfc\xf1\x30\xf5\x9c\x0a\x97\x1d\xb3\x5b\xad\x0e\x1d\x1c\xd7\x29\x7b\x93\x7a\xab\x6a\x2b\x22\xc5\xef\x09\x70\xf3\x2b\x91\x0e\xc8\xd1\x4c\xdc\x55\x85\xcc\xa4\x2b\xd6\xe0\x5c\x32\x5d\xa7\xee\x3b\x70\xd8\x73\x17\xd9\x88\xcf\xef\x92\x4f\x12\x56\x34\x7b\x23\xf6\x08\x5c\x41\x74\x38\x13\x85\x72\xcb\x0a\xb9\x12\xa7\x4b\xc1\x0b\xb7\x5c\x0f\xee\x8b\xb3\x3d\x94\x56\x93\x7f\x09\xa3\x81\x2f\x59\x05\xb9\x69\x28\xce\x14\x40\x43\x77\x90\xc1\x0d\xdb\x93\x49\xca\xbd\x7a\x7f\xf1\x6b\x41\x8c\x8b\xd8\x56\x6b\xd8\x37\x6f\xae\xbe\x16\x6e\x34\xc7\xc3\xcf\x2e\x96\xde\xc1\xab\x96\x30\x73\x6d\xca\x7b\xf6\x40\xd2\x41\xe2\x13\xe8\x43\x7b\xcf\x2e\xd0\x52\xdb\x84\x7d\x67\xbb\xdb\x02\xd3\xf8\x48\xbb\x03\xbb\x78\x29\x91\xf9\x1d\x1f\xad\x0c\xbd\xed\x3f\xc6\x2e\xae\xa6\xec\x6f\xba\x86\x56\x4c\x7c\x96\xe4\xc9\xfb\x11\x3b\xb2\x58\xe1\xd8\x81\x5f\x84\x83\x94\x87\x56\x1c\xfe\xdc\xff\x55\xf0\x1c\x5b\x03\x59\x27\x38\x89\x31\xbc\x1d\x23\x41\x77\x3b\xf3\x1a\xd3\x73\xae\xad\xd3\x25\x5b\xa2\xe0\xf4\x8d\xee\x50\x2f\x07\xdd\x91\x8a\xdc\xf7\x7a\x0d\xdf\x17\x2c\x33\xa2\x1a\xc3\xda\x85\xaf\xfd\x05\x59\xa3\x2d\x4b\x80\x27\x25\x51\x6a\x94\x3b\x13\x96\x71\x96\xc1\x51\x49\x16\x89\x8b\xef\xcf\x4a\xa0\x4b\x4c\x96\x28\x15\x1e\x12\xec\xef\x36\x8a\x5d\x4f\x2e\x66\x62\x23\x15\x34\xb1\x14\xaa\xe9\xbe\x90\xe1\x0d\xd9\xb6\xc7\x58\xf5\x51\x6c\xa4\x4a\x1a\xb6\x03\x40\x32\x82\xc8\xe6\x94\xe2\x63\xe7\x08\xcb\xcf\xc6\xac\xe1\x60\xa9\xa4\xd6\xdd\xf1\xf1\x97\x6f\x8c\x83\xc7\xc6\x5b\xbf\x2a\x99\x7e\x66\x9b\x7c\x06\x9b\x3d\xd2\x9a\x29\x75\x87\x46\xd3\x09\xea\xcc\x0a\xb3\xa2\x15\x4c\xb4\x63\xac\x25\xd3\xd4\xe7\x9b\x38\x76\x30\xcf\x1b\xa6\xea\x72\x96\x6c\xa4\x1a\x1e\x38\xe3\xc6\xde\x86\x4e\xf3\x88\xcb\x31\xa6\x1a\x21\x2c\xd1\x41\xe2\x6a\x91\x7a\x2f\x1e\xfb\x6f\xfe\xfd\x7f\xfc\xc7\x97\xff\x31\xc5\x65\xf5\xbf\x91\x28\x73\x26\x18\x57\xec\xe2\xec\xf2\xec\xef\xd7\x6f\x9f\x02\x27\x77\xda\x29\x1c\xa1\x98\x7f\xcc\x52\xfe\x11\x0b\xf9\x3f\x62\x19\x3f\x10\x96\x25\x6a\xf8\x3e\x2e\x0b\x04\xa6\x67\xb4\x6b\x8b\x34\xdc\x21\x52\xc4\x67\xc3\x11\x32\xd9\x3e\x26\xee\xb1\x97\x8f\x10\x38\xdc\xbb\xf6\x74\x59\x75\xad\xb3\x9b\xd1\xb2\x3c\x87\x6f\x9e\x5e\xa1\xc0\x51\x12\x3d\x5c\xc5\x07\x26\xa9\x56\xba\x58\xf9\xcd\xe4\xec\xcd\xd3\xab\x44\x63\x31\xf5\x32\xe0\x85\x15\xf3\xde\xeb\xa4\x4a\xce\x86\x9a\x29\x40\x3b\x65\x59\x15\x29\x2f\xca\x0c\x3a\x10\x18\xc1\x0b\x69\x9d\xcc\x60\xae\x05\xa9\x6b\x75\x7f\xf8\xef\xa5\xe3\x39\xf7\xf9\xb1\x76\x8c\x9c\x1f\x3b\x7c\x35\x52\xd5\x73\x93\x68\xeb\xa4\xca\x92\x93\x26\x27\x3d\xd2\x9f\x74\x86\xca\x90\x68\x4b\x2b\x39\x7f\xa0\x9e\x23\xb8\x61\xb4\x06\xa3\xdd\xa1\x3a\xbd\x8f\x82\xe7\x98\xfa\x82\x02\x7e\xe7\xb6\xe7\x98\x28\x36\x7c\x70\xdf\x73\x4c\xcd\x4b\x78\xbf\x73\xcb\x73\x1c\xc9\xb7\xdd\x7b\x8e\x3f\x6f\x7c\x04\xcf\xb1\x32\xe2\xda\xe9\x6a\x14\x9c\x1d\x8a\x1a\x15\x65\x37\x13\x73\x6d\xc4\x38\x30\xbb\x16\x00\xc7\xf2\x1a\x94\x31\x57\x09\xcc\xaa\xf1\x99\x4b\x77\xe1\x6a\xe4\x92\x7d\x06\x2e\x4b\xb6\x8c\xaf\xaa\x4a\x58\x7b\x0a\xd0\xb8\xba\xc2\x24\x25\x51\xe8\x9c\xcb\xa2\x36\xe2\xc4\xef\xb4\x28\x61\xaf\x4e\x52\x49\x1e\xfd\x66\x08\x85\xa2\x84\xcb\x10\x46\x11\x50\x8b\xf4\xfd\xf1\x3e\x1f\x1e\x1c\xec\x93\x9b\xde\x2c\x2c\x33\xdc\x2e\x05\xb4\x08\x15\x77\xd2\x59\x9c\xa8\x11\xdc\x92\x39\xa2\x01\xea\x12\x0e\x12\xb8\xc0\x96\x55\xdc\x5a\x91\xd3\xad\x41\x07\xf2\x89\x13\xbc\xd2\xf9\xe1\xa1\xed\xfe\x0c\x51\xf2\xc2\xf0\x4c\xb0\x4a\x18\xa9\x73\x06\xac\xeb\xb9\xbe\x55\x6c\x26\x16\x52\x51\x23\x80\x70\x23\xfd\xa4\xe3\x85\xf7\x2e\xac\x48\x00\x52\xc5\x3e\xcc\x53\xf6\xba\xd7\x27\x96\x6e\xb5\x74\xed\x32\xdd\x5a\xeb\xb0\xba\x27\x09\x12\x5b\x24\x29\xb0\x35\xc0\x35\xaf\x79\x51\xac\x5b\xb5\x42\x94\x1c\x88\x49\xdc\xc7\xda\xf8\xcf\x0c\x53\xeb\x2f\x6b\xaa\xc4\xee\x05\xed\x2e\x05\x5d\x37\x19\xc1\xb3\x65\x5a\x31\xc5\x1e\xba\xfb\x81\xb1\x87\xee\xee\xa1\xbb\xef\x1d\x7b\xe8\xee\x1e\xba\xbb\x87\xee\xee\xa1\xbb\x7b\xe8\xee\x1e\xba\x3b\x70\xec\xa1\xbb\x1f\x1a\x7b\xe8\xee\x7b\xc7\x83\x7c\x9a\xd8\x43\x77\xf7\xd0\xdd\x9f\x3d\xf6\xd0\xdd\x3d\x74\x77\x98\xdc\x3d\x74\x97\x34\xf6\xd0\xdd\x9f\x1c\x7b\xe8\x6e\xca\xd8\x43\x77\xa9\x63\x0f\xdd\x1d\x3c\xf6\xd0\xdd\x3d\x74\x37\x61\xec\x01\x18\x84\xb1\x87\xee\x8e\x10\x38\xdc\xbb\xf6\xdc\x43\x77\xf7\xd0\xdd\x9f\x39\xf6\xf9\xb1\x76\xec\xa1\xbb\x09\x63\x0f\xdd\xfd\xe0\xd8\x43\x77\xf7\xd0\xdd\x04\x59\x0f\xcf\x73\x8c\x10\xd1\x2b\xa3\x67\xc9\xd4\xd2\x57\x00\x8e\x92\x19\x66\xd4\xfc\x3d\x49\x01\x5e\xc6\xa9\x4d\xd9\xd3\x3e\x66\x0e\xfa\x5b\x05\xfa\x48\x82\xdc\x80\x09\xc5\x39\x02\x35\xe6\x74\x07\xdb\x2d\x41\xf0\x40\x48\x57\x24\x74\xb6\xa7\x95\xc6\xff\xaf\x05\x74\x75\x90\x5c\x98\x9d\xa4\x72\xe5\xde\x0b\xeb\x2a\x1d\xbe\xf5\x5e\xe8\x16\xd3\x24\x1a\x67\xd6\x06\xfa\x9b\xb0\xad\x3e\xf8\x8a\x28\xbb\x0f\xd9\xea\x03\xaf\xa8\x9e\x3f\x19\xae\xf5\x00\x80\x7b\xc9\x10\xad\xf7\xc0\xb3\x12\xad\xd7\x06\x34\x2b\x82\xab\x12\x24\xee\x84\x65\x25\xce\x72\x0b\x92\x15\x41\x55\x23\x7c\x39\x60\x4f\xbb\x80\xaa\xc4\x57\xfe\x0e\x14\xab\x0b\xa6\x4a\x90\xda\x81\x61\x6d\x03\xa9\x52\x76\xca\xed\x02\x51\x05\x0c\x50\x4a\x70\xd9\x03\x50\xed\x80\x40\x25\xc8\x06\xf0\xd4\xc8\xf0\xa7\x9d\xd0\xa7\x34\xff\x75\x07\xec\x29\x02\x97\x52\x16\xb6\x85\x3c\x75\x41\x4b\x29\x47\xa0\x81\x3b\x6d\x02\x96\x92\x52\x20\xf9\xd8\x60\xa5\x31\x9e\x86\x93\x9f\x85\x13\x3d\xd5\x50\x26\xf4\x66\x69\x84\x5d\xea\x82\x68\x0a\x7a\x66\xe0\xa5\x54\xb2\xac\x4b\xaf\x73\xac\xd7\xdb\x72\x95\x58\xc3\x64\x1b\xb4\x2a\x3a\x81\xf0\xa6\x4c\xb6\x78\xa0\x51\x8c\xc8\x41\xba\x3f\x62\x40\xe8\xbe\xe4\x2b\xba\xab\x6f\xeb\x2c\x13\x22\x17\x79\x2f\xaf\xc9\xbe\x9c\xc6\xb5\x20\xca\xc5\x06\xa9\xd2\xb2\xc7\x29\x1e\x46\x4a\x44\x34\xd7\xa6\xe4\x0e\x64\x7c\xf9\x05\x41\x42\x12\xf6\xed\xa3\xe0\xde\x46\xc7\xbc\x25\xbb\x71\x69\xb9\xbc\x84\x3c\x5e\xba\xff\x98\x96\xbf\xdb\x8d\x6d\x4b\xb3\x71\xbb\x70\x6d\x69\x12\x3f\x02\xa6\x6d\x27\x9e\xad\x8b\xfc\x4a\xf3\x74\xd3\xb0\x6c\x23\x21\x5e\x93\x31\x6c\x1f\x07\xbf\xb6\x1b\xbb\x06\xda\x25\xc5\xb9\xe8\xe3\xd6\xd2\x91\x67\x0f\xc2\xb5\xf8\x18\x68\xb3\x6d\xa4\x59\x58\xac\xb4\x2c\x76\x83\x32\x1b\x0f\x25\x36\x12\x42\x6c\x0c\x74\x58\x32\x32\x2c\x1d\x15\x36\x16\x22\x6c\x0c\x34\xd8\x56\x17\xd0\x11\x4e\x10\x8b\x8d\x1b\x47\xc1\x57\x8f\x95\x3d\x1e\x05\xfd\xf5\x71\x97\x6b\x0c\xd4\xd7\x08\xeb\x95\x86\xf6\xfa\x38\x48\xaf\x31\x51\x5e\x63\x2c\x51\xd2\x1b\xdd\xc7\x41\x76\xed\x44\x75\x31\x72\xfd\x3b\xdb\x4c\x77\x4d\xbb\x2f\x6b\x09\x42\x37\xd0\x5c\xdd\x57\xb5\x04\xa9\x0d\x92\x6b\xdc\x17\xb5\xc4\xd7\xb4\xb1\x5e\xd2\x46\x7a\x45\xfb\x48\xd8\xab\x54\xdc\xd5\x6e\xcc\x95\xf7\x41\x12\x0e\xc4\x16\xde\xaa\x45\x4c\x25\x48\xed\xe6\x24\xd2\xd0\x52\x89\x1b\x2a\x95\x74\x92\x17\xcf\x44\xc1\xd7\xd7\x22\xd3\x2a\x27\x7a\x13\x1b\xbd\xaa\x03\x5a\x60\xce\x2c\x0a\x25\x7e\x1f\x66\x82\xfa\x5c\x17\x4b\x6e\x19\xfd\xed\x92\xb5\xc4\x29\xf1\x79\x34\x38\xa6\x8c\xc3\xe3\xa3\x5f\x0f\xe2\xf3\x25\x7b\x70\x4f\x98\xec\x41\xa4\x9c\x90\xf2\x63\xbc\xe3\xf5\x57\x7d\xcb\xf4\xdc\x09\xc5\x8e\xa4\x8a\x27\xec\x98\x9a\x7d\x6a\x92\x4d\x6d\x3e\xb3\x49\x1a\xd2\x65\x3e\x7e\x14\x27\xd6\xa4\x1c\x93\x1c\xb3\xcf\x39\xe5\x08\xc9\x58\x6b\x1f\x66\x46\x3b\x4c\xee\x63\xa5\xb4\x83\xf8\x79\x5d\xa0\x32\xa3\xe6\x6f\x20\x19\x1e\x12\xe4\xfd\x9c\x36\xf1\x58\x30\xf6\x32\xb8\x39\x8f\xe1\xcb\x1b\x6d\xc8\x55\xce\x02\xdd\x19\x59\x72\xf7\xc0\x7f\xd6\x47\x37\x11\x45\xfc\xb1\x10\xc4\xef\x45\x0f\x23\x06\x98\x28\x75\x0b\x39\xdc\xe2\x7f\xa9\x12\xfb\xa8\xe1\x2e\xf6\x37\x61\x8e\x6d\x57\x66\x3a\xee\x77\xff\x46\x40\xfb\x6f\xdf\x8b\xef\x85\xe7\x82\x04\x97\x78\x03\xdb\x3b\x56\x19\x7c\xbf\x04\x3e\x15\x23\xfe\x60\xa2\xfd\x88\xc6\x4d\xcd\x8d\xed\xa3\xfd\x7d\xb4\xff\x81\xf1\x11\xa2\x7d\x27\x4b\xa1\x6b\xf7\x60\x03\xce\xdb\xa5\xcc\x96\x5d\x5f\x50\x96\x64\x53\xad\x6b\xb7\xe1\xaf\x85\x29\x8e\x08\x45\xd8\x47\x9d\x1b\x83\xf6\xa6\xb1\x23\xa1\x9a\xce\x7e\xdb\x20\x64\x19\xb7\x8c\xb3\x67\x97\xd7\x7f\x7f\x71\xf6\x97\xf3\x17\x53\x76\xce\xb3\x65\x92\x68\xa9\x18\x07\xcb\x06\x2a\x6c\xc9\x57\x82\x71\x56\x2b\xf9\xcf\x5a\x50\xed\xc2\x51\x33\xbf\xe3\x51\x30\xdd\x09\x1a\xc8\xdb\x24\x82\x6e\xe8\x6d\xe2\x0b\x69\x9d\xdf\x44\x90\x15\x78\xc6\x34\x29\x1f\x38\x37\xba\xdc\x34\x6d\xe7\x5e\x18\xba\xde\x44\x6f\x6e\x29\x8c\x60\x0b\xb9\x0a\xc8\x67\xc4\x80\x32\x9e\x27\xb0\xca\x79\x2d\xe0\x2f\x8e\x0f\x0e\xf8\x0c\x00\x85\x4b\xc1\x94\x70\xfe\xd2\x37\xa9\x4c\x1a\xba\xb2\x43\xfe\xcd\x6a\x2b\xec\x09\x9b\xd5\x00\x0e\xad\x8c\x2c\xb9\x91\x24\x08\x46\x67\xc2\xbc\x98\xb2\x4b\x1d\xc3\xa3\x35\x2c\x2d\x25\xdf\xe4\xbd\x19\x58\xda\x67\xaf\xce\xaf\xd9\xe5\xab\x37\xac\x32\xc0\x13\x4c\x45\x56\x82\x44\x38\x02\x33\xe1\x67\x85\xc7\x28\x9f\xb2\x33\xb5\xa6\xee\x3d\x1a\x19\x69\x99\x8f\x87\x84\xf2\x62\xc3\xf3\x54\x4e\x4e\x3e\x1d\x3c\x9a\xc2\xff\x3b\xf0\x67\xc8\x78\x57\xae\x81\xeb\xa6\x28\x9a\x58\x34\x82\xee\xa1\x9c\x15\xa2\xbd\x0f\xe1\x64\x51\xbc\xa5\xd1\xf4\x0b\x0d\x95\x41\x46\x63\x6c\x40\xec\xc3\xba\x5e\xf9\x33\x62\x44\x65\x84\x15\x8a\x18\xb3\xf0\xe6\xa2\xc2\x89\x03\x05\xef\x35\x4c\x91\x58\xd8\x96\x18\xed\xa6\xc4\xba\x93\x76\xe6\x57\xb4\x8b\x92\x1a\xf0\xf6\x7e\x9f\xea\x96\xef\x0c\xbf\xe6\x69\x15\xbb\x8d\x3d\x8a\x17\xbf\xd2\xf9\xa1\x65\x17\x74\xdc\x53\xb8\xf5\x53\xf6\x66\x29\x6d\x1b\xd9\x78\x5f\x51\xd2\xe9\x9e\xe0\x2c\xe2\xc3\xf2\x09\x7b\xc4\xfe\xc4\xee\xd8\x9f\x20\xf8\xfa\x3d\x35\x46\x1a\x23\xc0\x49\x4d\xed\x61\x1e\xe4\xe2\x6a\x94\x13\xf1\xdd\x92\x3b\x90\xc7\x2e\xae\x52\xc0\x8d\x33\xa9\x72\x38\x0a\xe2\xce\x09\xa3\x78\x11\x43\xf3\xb4\x95\x4e\x08\x01\xfd\x47\x3d\xf8\x8b\x83\x0c\x16\x17\x73\xb2\xc4\xc6\x4b\x3f\x61\xae\x77\x75\xc8\x12\xe1\xca\xed\xbc\x3a\x64\x91\x78\xe5\xd8\xc5\x1c\x72\x6d\x97\xc1\x52\x48\xdb\x99\x3d\x7d\x49\x9b\xaf\x2e\xb9\xcb\x96\x7d\xb3\x46\x4f\x85\xbc\xf4\x57\xa2\xa5\xde\x67\xb9\x86\xdc\x72\x12\x69\xb0\x9f\xea\xe7\xad\x78\x52\x20\x77\xbd\xfb\x74\x31\xdf\x3c\xb9\xe4\x55\x7d\x5f\x1a\x2c\x89\x91\x38\x04\xa3\x9d\xc6\x1a\x95\xce\x31\xf2\x25\xcb\xf4\x8b\x97\x77\xfc\xa3\x5e\x00\x4c\xb7\x9c\xdd\xc0\x39\x30\x3a\xa5\x16\x0f\xa2\xea\xf6\x96\x21\xe3\x0a\x8b\xae\xe7\xc2\x98\x94\xa3\xaf\xd9\x6c\x0d\xc8\x35\x99\x89\xc4\x4b\x90\x60\x13\x2a\xa3\x9d\xce\x34\x99\xd4\xa3\x0f\xee\x0b\xc2\x60\xb9\x53\x9e\xaf\xda\x17\xcd\x6f\x9f\x5d\x9d\xb0\x37\x4f\xaf\x4e\x98\x36\xec\xfa\x69\x0a\xbe\xa6\x9b\xb9\x3b\x78\xf3\xf4\xea\xe0\xde\x16\x9d\xc5\xb8\xf0\x09\x89\x26\xa8\x97\xc6\xf5\x21\xe7\xa4\xe4\xd5\xe4\x46\xac\x09\x5e\x75\xaa\x4f\x3f\x69\x4e\xd0\x08\x9f\x81\x0b\x5b\xf2\x6a\xa0\x2c\x23\x78\x2e\x1f\x28\x73\x43\xb8\xe1\xed\x1c\x37\x29\x1c\x08\x32\x41\xff\x94\x7a\x25\x72\x0c\xde\xe3\x6f\x08\x95\x57\x5a\xd2\x22\xd6\x3d\x13\xc4\x87\xc7\x9e\x09\xe2\xe7\x8d\x3d\x13\x44\x7f\xec\x99\x20\x12\x64\xee\x99\x20\xf6\x4c\x10\x38\xf6\x4c\x10\x7b\x26\x08\xe2\xd8\x33\x41\x7c\x78\x72\x7b\x26\x88\xcf\x16\xdb\xba\x67\x82\xf8\xf0\xd8\xa3\x3c\xf7\x4c\x10\x7b\x26\x88\xad\xb1\x67\x82\xb8\x6f\xd7\x62\xcf\x04\xb1\x67\x82\x88\x63\xcf\x04\x31\x60\xec\x99\x20\x86\x8d\x3d\x13\xc4\x07\xc7\x03\xab\x0d\xd9\x33\x41\xec\x6b\x43\x7e\xae\x9c\x87\x57\x1b\xc2\xf6\x4c\x10\xb4\xb1\x67\x82\x18\x3e\xf6\x4c\x10\xc3\xc6\x9e\x09\x62\xb8\xcc\x3d\x13\x44\x3b\xf6\x4c\x10\x7b\x26\x88\xcf\xf4\xe8\xee\x99\x20\xf6\x4c\x10\xbb\xc7\xfe\x8d\x60\xcf\x04\x31\x6c\xec\x99\x20\xe8\x42\xf7\xd1\x3e\x5d\xce\xc3\x8b\xf6\xf7\x4c\x10\x7b\x26\x88\x0f\x8e\x14\xd7\xcd\x08\xab\x6b\x93\x51\x4c\x64\xff\x5c\x3d\xd5\x65\x55\x3b\xc1\x5e\x47\x81\x8d\xdd\x27\x7c\xd3\x6c\x8d\x05\x57\x1d\xed\x78\x1f\xb0\xe9\x4c\xab\xb9\x5c\xd4\x06\x8a\xef\x4f\x4b\xae\xf8\x42\x4c\x32\xfc\xd0\x49\xb3\x72\x93\x66\x96\xa7\x9f\x15\x74\xba\x90\xa5\xa4\x30\x48\xb0\xad\xbd\x7f\x01\x92\xda\xf7\xd1\x04\x78\x4b\xc9\xef\x20\x20\xe2\xa5\xae\x95\xc3\x3a\x01\x58\x6f\xa2\xcc\x66\x97\xf0\x9d\xdb\x87\x84\xed\x21\x48\x80\x08\x3c\x80\xa3\xc3\xc6\x70\xce\x5b\x2e\x8d\xab\x64\x6f\xb9\xe2\xce\x09\xa3\x9e\xb0\xff\x3a\x7a\xf7\xdb\x1f\x27\xc7\x5f\x1d\x1d\x7d\xff\x68\xf2\xc7\x1f\x7e\x7b\xf4\x6e\x0a\xff\xf2\x9b\xe3\xaf\x8e\x7f\x8c\x7f\xf8\xed\xf1\xf1\xd1\xd1\xf7\xdf\xbc\xfc\xfa\xcd\xd5\xf9\x0f\xf2\xf8\xc7\xef\x55\x5d\xde\xe0\x9f\x7e\x3c\xfa\x5e\x9c\xff\xf0\x33\x85\x1c\x1f\x7f\xf5\x6b\x72\x70\x98\xe0\x7e\x8c\xe3\x7c\x8c\xe2\x7a\x7c\x04\xc7\x23\xa0\x4b\x46\x51\x0f\xaf\x83\xac\x71\x14\x44\xc8\x98\x8c\xaf\x20\xa2\xbd\x82\x0a\xe2\x38\x67\x7a\x12\x52\x97\xd2\x39\x91\x43\xca\xa8\x43\x2f\x42\xc5\x81\x4b\xd7\x6b\xc6\x1d\x54\x2e\x14\x18\x91\x21\xd0\xd2\x76\x71\xd5\x9d\x4a\x59\xed\x96\xc2\xdc\x4a\xf2\x7b\x90\x0f\x90\x54\x9b\xcd\x00\x25\x38\xc9\xc5\x5c\x2a\x72\x82\x04\x9c\xb8\xc1\xfe\xdb\x5e\x0d\xef\xd5\xf0\x10\x29\x0f\x49\x0d\x5b\x91\xd5\x46\xba\xf5\x53\xad\x9c\xb8\x23\x24\x44\xfa\x5a\xf8\x3a\x88\x63\x1a\xfe\x86\x5a\xe7\x54\xe9\x3c\x56\xb5\x99\x5a\x41\xe9\x7a\xa2\x4b\xf5\x73\xee\x71\xa5\x0b\x99\xad\x4f\xe3\x92\xc0\x85\x15\x77\xee\xf4\xa3\xc5\x00\x8e\xdb\x9b\x56\x7d\x88\x89\x8f\xfc\x5a\x2d\xb1\x35\x8f\xcf\xca\xf1\x07\x4f\xf8\xca\xc8\x95\x2c\xc4\x42\x9c\xdb\x8c\x17\xa0\x1f\xc7\xb0\xf5\x67\xef\x91\x4d\x7f\x1f\x72\x46\x17\x96\xdd\x2e\x85\xb7\x49\x8c\xfb\x6f\x87\xd4\x5b\xc6\xa9\x42\x17\x5c\x2a\x56\xfa\x63\x50\xc5\x89\xfa\xdb\xe0\x2d\x16\xd9\xe0\x57\xdc\x08\xe5\xe2\xe4\x02\xc1\xd0\x4c\xeb\x22\x94\xd8\x91\x31\xd7\xcd\x0a\x84\x5a\x62\xa5\xff\xae\xc4\xed\xdf\xfd\xcc\xa9\x73\x9d\x17\x7c\xd1\x70\x96\x59\xe1\x22\xd8\x2b\xa5\x22\x9b\xe1\xa9\xc4\x8f\x1f\xf9\x10\x40\x4d\x55\x2d\x18\x2f\x6e\xf9\x1a\x8e\xc2\x38\xf3\x95\xf6\x09\x7b\x7c\x0c\x6a\x8c\x5b\xd6\xcc\x37\x67\x5f\x50\x9f\xc8\x97\xdc\xb2\xa7\x67\x57\x7f\xbf\xfe\xdb\xf5\xdf\xcf\x9e\xbd\xbc\xb8\x4c\x71\x27\xfc\xe9\x11\xa4\x43\x9e\xf1\x8a\xcf\x64\x21\xe9\x5e\xc4\x16\xee\xb2\x2b\x32\xc1\x29\xcc\xf3\xd3\xdc\xe8\x0a\xf7\xd0\xd4\x0a\x68\xfd\x5a\xfe\x1b\x6a\x26\xb9\x9b\x35\xec\x30\x04\xfa\xc3\x4d\x4d\x46\xce\x7b\x9f\xcc\x16\x86\x2b\xef\xcd\x43\x66\x2a\xe1\xb5\x3b\x40\x73\x4c\xad\x9c\x2c\x3f\xdf\xe2\x6b\x9e\x8f\x55\x78\x7d\x96\xe7\x22\x1f\xe3\x78\x3d\xc4\xc2\x83\xa7\xf1\xb3\x52\x2a\x6e\x58\xcb\x9a\xc8\xae\x5e\x5d\x5f\xfc\x7f\xe3\xac\x16\x0b\x2b\x96\xf2\x80\x35\x02\x67\x8b\xd1\xd5\x48\x27\xe9\x75\x60\xef\xd8\x9f\xa5\x9f\x1a\xbf\xd0\xb3\xd4\x78\x72\x63\x60\xa6\x5e\xd7\xaa\xa3\xab\xc9\x04\x06\xed\x9c\x58\xa9\x73\x31\x65\x57\xe8\x20\x09\x3b\x8a\xcc\x0e\x6d\x1c\x37\x82\x79\xc1\xca\x49\x5e\x90\x5d\x4d\xf1\xcf\x5a\xae\x78\x21\xb0\xc0\x0f\x28\x1c\xba\xfc\x81\x23\xd8\xe6\x39\x2f\x6c\x92\xd1\xa3\xfb\x44\xde\x39\x7d\xa9\x6b\x35\x06\x3e\xa9\x91\xc5\x72\xa1\xb4\x4b\xca\x67\xfa\xef\x02\xc2\x47\xa3\x33\x86\x39\xcd\x24\x28\x76\xc4\xe6\x75\x9c\x2a\x70\xe0\xe8\xa4\xc9\x0c\x5d\xf0\xb0\x8f\x57\xcd\xb7\xe3\xdb\x6f\x6d\x93\x3e\x7f\xcb\x25\x4a\x85\xb2\xf8\xef\x37\x82\xe7\xc0\xe4\x53\x71\xb7\x44\x9c\x5e\xc9\xed\x0d\x39\xf7\x08\x62\x42\x4c\x17\xb2\xc4\x48\xc0\xd3\x2c\xc6\x1b\xba\xf2\x9b\x0b\xee\x6a\x23\x30\x2a\xc3\x62\x40\xa1\xf8\xac\xa0\x22\xab\x13\x15\xa9\x5f\xbb\x57\xaa\x58\xbf\xd6\xda\x3d\x6f\xd8\x56\x46\xb8\x34\xdf\x85\x08\xbe\xff\xb0\x9b\x10\x68\x01\x44\x2e\x9f\xc0\x46\x83\xb2\x4a\x27\x87\x09\x67\xdc\x1f\xf7\x7b\x54\x55\xa6\x56\x67\xf6\x6b\xa3\x6b\xa2\x67\xb4\x15\xbc\x7d\x7d\xf1\x0c\x34\x7a\xad\x12\x82\x17\xa1\x9c\x59\x03\x13\xda\x18\x6d\x1f\x58\x37\x5f\xf0\xad\x37\x89\x1b\xf7\x9f\xaa\xa8\xe6\xac\x56\x56\xb8\x29\x7b\xc9\xd7\x8c\x17\x56\xc7\x24\x07\xd9\xe4\x5e\x01\x22\xbf\x9b\x8a\x9d\x32\x60\x16\x25\x07\x97\x52\xb1\x99\x76\x4b\xb6\x21\x36\x81\x4a\x74\x7b\x8e\xc0\x10\x95\x04\xa4\x6f\x3b\x73\x48\xb5\x39\x55\xaa\xc6\xe7\x37\xc2\xb2\xca\x88\x4c\xe4\x42\x65\x49\xf7\x6b\x24\xc4\xcc\xef\x7f\x47\xbd\xa1\x97\x5a\x79\x25\x39\xc2\x1d\xbd\x50\xb9\xcc\xb8\xc3\x2c\xa4\x1b\x25\xc1\x00\x58\xbd\x90\xd9\xe2\x40\x1e\xe4\x55\x24\x51\x6c\x6d\x85\x81\x57\x51\x67\x6a\x81\x07\xeb\x9b\x7a\x26\x0a\xe1\xa8\x64\x8b\x2c\x32\x40\x73\x87\xcc\x66\xb2\xe4\x0b\xc1\xb8\x8b\x6a\x80\x9e\x63\x12\xca\x7a\x73\x0a\x2b\x29\x1d\xcb\xb5\x68\x28\xb9\xa8\xc9\x0e\xcb\xbe\xbd\x78\xc6\x1e\xb1\x23\xbf\x86\xc7\xe0\x4f\xcc\xb9\x2c\xe8\xdc\x1c\x50\x35\xb0\xe1\xff\xc8\x79\x9c\x2e\xd5\x7a\x5d\x04\xdd\xc7\xb4\x41\xf3\x75\xc2\x94\x66\xb6\xce\x96\x71\xad\xe9\x39\xd8\x98\x2e\x0e\x15\x40\x80\xa3\x09\x0a\x96\x28\xb1\x51\xcb\xef\x53\xb0\xd4\xb5\x45\xa1\xbb\x14\x2c\xf9\x7d\x32\x7f\x9f\x82\x4d\x42\x24\x3e\x70\x05\x9b\xe8\xc0\x7c\x6b\x85\x19\xc9\x7f\xf9\xf6\x81\xfb\x2f\xdd\x10\xd7\xeb\xca\x76\x67\xe9\x0e\x02\x2a\xc4\x52\x38\x9e\x73\xc7\x83\x5f\x93\xca\x21\xba\xed\x13\xed\x2f\xdf\xc3\xbc\x7c\xf7\xe9\xdd\x58\xf1\x42\xaa\xfa\x0e\x0b\x56\xc6\x7a\x40\xba\x3e\x07\xa1\x2c\x4b\x5b\x62\x38\xba\xbc\xaa\x0a\x09\x8c\x92\x1b\x35\x14\x49\x86\xb3\xdb\x28\x20\x5d\x39\xc4\x70\x06\x0c\x27\x2f\x0a\xed\x1d\x3c\x1f\xb3\x72\x95\x6b\x2a\x92\x7d\x63\x11\x21\xd9\x21\x7a\x6d\xf2\xa6\x70\xc9\xa9\x77\x6d\xaf\x1a\x3e\x03\xd5\x70\xaf\x0f\x7f\x85\x58\x09\x72\x5f\x83\xcd\xee\x83\x5e\x16\x93\x36\x1e\xeb\x84\xd7\x03\x98\x16\x2b\xf8\x4c\x14\xe8\xf9\xa3\x8a\x18\xa1\x1e\x2e\x59\xb9\x8c\xf2\x4c\x66\x74\x31\x16\xdf\xc7\x6b\x5d\x40\x31\x0c\x1f\x61\xd9\xfd\xb4\x7e\xc1\xab\x0e\x22\xc6\x59\xf5\x37\xeb\x6a\xb4\x55\x87\x27\x83\x5f\xee\xaa\xd7\xe4\xc0\x81\x6d\xae\xba\x8f\x41\xc6\x5a\x75\x70\xec\x7f\x99\xab\x6e\x45\x96\xe9\xb2\xba\x32\x7a\x2e\xa9\x7a\x66\xcb\xe1\x0b\x42\x23\xdc\x94\xee\xf0\xd5\x56\xec\x2a\x08\x4b\x70\x44\x7a\x13\x83\xc7\xd3\xca\xe8\x95\xcc\xc9\xf1\x1a\x77\xe8\xd7\xc4\x02\xea\xff\x2b\xd9\x7d\x04\x83\xb6\xe1\x89\x26\x2e\xa5\x5e\x09\x63\x62\x27\x01\x3f\xcb\x20\xee\x33\xa5\x0e\x26\xe3\x0d\x46\x70\x82\x74\xc6\x0b\x68\xfc\x97\x72\x63\xd8\xe6\xad\xd9\x14\x9b\xa0\x5a\x64\x93\x51\x06\xc0\xac\x97\xc6\xd2\xea\x2f\x58\x6c\xa8\x0d\xb2\x02\x2e\x40\xe9\x5c\x04\x34\x78\x82\xd8\x40\x7f\x8a\xef\xd4\x71\xb6\xe9\x65\xf0\xde\xdb\x8e\xf8\xed\x3c\xcc\x38\x41\x22\x7c\xab\xd3\xa1\x3f\xc2\xcb\xe4\x06\x88\xb8\xf9\x42\xe5\x52\x2d\xe0\x85\xf9\x84\x19\x51\xf0\x04\x82\x1e\xd6\xda\x94\x1b\x4c\xcf\x1f\x82\xc6\x0c\x4b\x90\x20\x35\xaa\xcc\xb8\x39\x10\xcd\x4a\xad\x52\x28\x05\x60\x05\xe1\xf1\x36\x46\x9c\xf3\x54\x0c\x91\xb4\xec\xe0\x45\xbc\x44\xe4\x4e\x64\x0f\xcd\x75\x3c\x00\x7f\xaf\xb9\xd1\x09\xeb\x83\x88\x8d\x1b\xa9\xf2\x50\xff\xdf\xdd\xd4\x14\xb9\xb1\xff\x35\xe6\x65\xa6\xec\x2d\x34\xf7\x4c\x33\x57\x7e\x70\x23\x9e\xb0\x77\x8a\x35\x9b\xca\x26\xad\x42\x4b\xba\x79\xa0\x0a\xb7\x14\x5a\xaa\x7a\x68\xdb\x3d\xa1\x42\x7b\x8d\x49\xa0\x34\x8e\x34\x86\xe6\x6e\x17\x58\x26\x6d\x09\x00\xea\x10\xaf\x74\x33\xf5\x34\x17\x39\x9f\xb2\x6f\x15\xe8\x1c\xbf\xbe\x13\xa6\xf4\x08\xdb\xd5\x2e\x6b\x3c\x61\x07\xf7\x75\xb7\x6f\xa5\xca\xf5\xad\x1d\x37\x37\xfa\x1d\x0a\x8d\x89\x27\x2a\xe3\x93\x15\xce\x49\xb5\xb0\xdd\xfc\x28\x2f\x8a\x11\xf0\xf5\xbb\x12\xa4\x69\xb7\xbb\xe9\x8f\xbf\x9d\xc0\x4b\x7c\xa1\xc4\x43\x88\xf8\x8c\x98\x70\xa4\xa6\x5b\xb7\xf1\x19\xbb\x12\x8e\x09\xf0\xb7\x7d\xc2\xf1\x43\x63\x51\x5a\xfe\xd4\xf8\x8f\x70\x92\x17\xd7\x15\xb5\xdd\x1f\xdb\xbc\x78\x5f\xbf\xbc\x3e\xeb\x0b\x4e\xf3\x3c\x6e\x97\xc2\x60\x6c\xe5\x25\x33\x9e\x97\xd2\x5a\xfa\x83\xbb\x1f\xb7\x62\xb6\xd4\xfa\x86\x1d\xc5\x42\xc5\x85\x74\xcb\x7a\x36\xcd\x74\xd9\xa9\x59\x9c\x58\xb9\xb0\xa7\x41\x31\x4d\xfc\x7a\x51\xcb\x97\xe0\x4b\x54\x21\x55\x80\x37\xc2\x33\x83\x72\x96\x69\x7a\xe7\x70\xd6\x2e\x49\xd6\xac\x36\x9c\xf8\x14\x63\x0b\x3d\x8e\xb1\x16\x67\xc7\x46\x5e\xa6\x51\x7d\x01\x39\xfc\xbd\x7a\x8f\xdb\x87\xfe\x32\xa9\xf7\xc0\x07\x0e\x7e\xe2\x7a\x61\xcf\x44\xe4\xa5\x0b\x4f\xeb\xfe\x37\x12\x24\x6e\x9c\x94\x90\x05\xba\xdf\x0c\x7c\xc4\x34\x8c\xb8\x13\x80\x6d\x08\x22\xd3\xc2\xf2\xe8\x41\xb4\x28\x89\x0e\xde\x21\x41\xf4\x26\x52\xa2\xc1\x3c\x24\xc8\xdc\x2c\xd6\x1b\x05\x31\xc1\x3e\x22\x6a\x82\xfd\x6c\xe4\x44\xc2\x0f\xf4\x1d\x96\x91\xbc\x00\xf6\xfe\x57\xd2\x44\x85\xfe\xd1\x1c\x17\x36\x9a\xf3\xc2\xd2\x2e\x7e\x60\xf6\x1d\xa5\xfb\xf5\x75\x47\x56\x52\x24\x1f\xf1\xa1\x7e\x47\x91\xdf\xbd\x61\x4d\x2e\xd6\x91\xa3\x5e\xfe\x8b\x76\xd6\xfd\x11\x6c\x7d\x7c\xa5\x91\x06\xa6\x43\xfa\x4e\x90\x19\xda\xdf\xe6\xcc\x07\xac\x45\x4c\xe2\x97\x55\xe1\x3d\x97\xde\xec\x89\x33\x06\x89\x9d\x06\xdb\x27\xcd\xf2\xa4\xf4\x01\x0f\xb4\xf9\x27\xec\xbf\x6b\xeb\x18\x6f\xaa\xef\x23\xf7\x33\xec\x24\x41\x78\xa4\xa5\x86\x52\x92\x8c\xab\xa6\xf5\x93\xd3\xf1\x0d\x82\x20\x35\x97\xf3\xb9\x88\xfc\x03\x33\xc1\x2a\x6e\x78\x29\x1c\x54\x86\x51\xe1\xc4\x33\xb1\x90\x58\x9e\xad\xe7\x8c\xfb\x05\x3d\x3c\xb4\x2d\xa1\x30\x45\x7f\x40\xd1\xb7\x74\xac\x94\x8b\xa5\x83\x4b\xce\x38\x2b\xb4\x5a\x00\x6d\x24\x0d\x4d\x5b\x68\x9e\x33\xd0\xf5\xda\xb0\x5b\x6e\x4a\xc6\x59\xc6\xb3\x25\xc0\x94\x49\xe0\xc5\xbc\x36\xd0\xb9\xdb\x09\x9e\xaf\x27\xd6\x71\xe7\x63\x5d\x81\x14\x42\xb8\x73\x04\xa9\xd9\x16\x7d\xe1\x03\xa3\xa2\xdc\xf7\x70\x0f\x63\xdf\xc3\xfd\xe7\x8e\x7d\x0f\xf7\x9f\x3d\xf6\x3d\xdc\xf7\x3d\xdc\xf7\x3d\xdc\xf7\x3d\xdc\xf7\x3d\xdc\x37\xc6\xbe\x87\xfb\xbe\x87\xfb\x4f\x8c\x7d\x0f\xf7\x0f\x0b\xbc\x6f\x20\xd6\x2f\xa3\x3f\xcb\xbe\x87\xfb\xbe\x87\x7b\x6f\xec\x7b\xb8\xdf\xb7\x6b\xb1\xef\xe1\xbe\xef\xe1\x1e\xc7\xbe\x87\xfb\x80\xb1\xef\xe1\x3e\x6c\xec\x7b\xb8\x7f\x70\x3c\xb0\xae\x6e\xfb\x1e\xee\xfb\xae\x6e\x3f\x57\xce\xc3\xeb\xea\xc6\xf6\x3d\xdc\x69\x63\xdf\xc3\x7d\xf8\xd8\xf7\x70\x1f\x36\xf6\x3d\xdc\x87\xcb\xdc\xf7\x70\x6f\xc7\xbe\x87\xfb\xbe\x87\xfb\x67\x7a\x74\xf7\x3d\xdc\xf7\x3d\xdc\x77\x8f\xfd\x1b\xc1\xbe\x87\xfb\xb0\xb1\xef\xe1\x4e\x17\xba\x8f\xf6\xe9\x72\x1e\x5e\xb4\xbf\xef\xe1\xbe\xef\xe1\xfe\xc1\x91\xe2\xba\x59\x97\x4b\x42\xf3\xbe\x8f\xc3\xce\x1f\xd0\xb2\x1d\xc6\xc3\x59\x3d\x9f\x0b\x03\x6e\x37\xcc\x94\x94\xb8\xd9\x5d\xff\x3e\x8d\x15\x00\x14\x99\xe8\xf8\x59\xe1\x4e\xa0\x91\x80\xc5\x9a\x64\x98\x22\x0d\xf0\xd8\x9f\x62\x20\x7e\x84\x96\x75\x46\x58\x5a\x7c\x2d\x15\x3b\x7f\xf5\x7c\x3a\x42\x63\x82\x14\x4e\x5f\x58\x93\x57\x2a\x4b\xad\x83\x69\x0f\x59\x1a\xbf\x66\xe4\xd6\x0c\x67\x2d\x2b\xb4\x45\x6c\x2d\x6e\x5e\xb6\xe4\x4a\x09\x4a\xed\x07\x2a\x44\xe9\x20\xed\x36\x13\x42\x31\x5d\x09\x85\xa5\xa6\x9c\x59\xa9\x16\x24\x1e\x03\xee\x1c\xcf\x96\x53\xff\xfd\x2a\x1e\xb0\xd0\xd3\xb0\x99\x35\xe5\xaa\x39\x23\x78\x89\x07\xcd\x88\x92\x4b\x9c\x2e\xe3\x99\xd1\xd6\xb2\xb2\x2e\x9c\xac\x12\x26\xcc\xac\x80\x0a\x66\x8b\xe5\xf4\xf1\x10\x30\xd2\x75\xb3\x02\xc1\x9e\xc0\x20\xdf\xac\x41\x58\x5e\x92\x0b\xd6\x5e\x35\x08\xe0\x4f\xa0\x9d\x75\x59\xb9\x35\xd6\x1a\x11\x2f\xf0\x5c\x1a\xeb\x58\x56\x48\x88\xe0\x60\x1d\x04\x58\x32\x98\x33\x05\x01\xcc\x55\xee\x25\xab\xb0\x47\x36\x6c\x92\xca\xc1\x01\xad\x48\x0e\x3f\x54\xbc\xc4\x92\x2a\x11\xa7\x9b\x4b\x1b\x02\x0a\x4b\x9a\x68\xec\xe9\x83\x97\x2b\xee\x11\x5c\xaf\x9c\xd8\x9c\x22\x7e\x73\x10\xd2\x99\x72\xc2\xfd\x87\x36\x3c\x21\x2b\xde\x98\x00\x6c\xa0\x13\x15\x24\xe9\xfb\xb7\xeb\x5c\x63\x4b\x06\x30\x10\x04\x91\x1d\x93\x02\xd7\x54\x89\x95\xb7\x5e\x22\x13\x72\xe5\x9d\x70\x82\xc8\x9d\xf6\xe0\x93\x9a\x03\x27\x4c\x29\x15\xd4\x43\xbd\x14\xd6\xf2\x85\xb8\x22\xbd\x7e\xbf\x2f\xb6\x86\x07\xf0\x78\x18\xc9\xd7\xb8\x40\xb6\xae\xc6\xb9\x6d\x4b\x10\x0e\x49\x95\x97\xed\x47\xb3\x12\xbf\xba\xa1\x1c\xb9\x35\xd2\x39\x41\x72\x6c\x2c\xf6\xfc\x02\xe0\xd0\x26\x1f\x24\x6d\xa2\x9d\xf2\x0a\xf6\x32\x4e\x14\x27\xe8\x7f\xce\x3b\xa9\x8a\xc6\x74\x88\x28\xa7\x99\x91\x62\xce\xe6\x12\xaa\x18\x00\x6f\x7f\x82\x3d\x26\x38\x65\xb6\x5c\x31\x6e\xad\x30\xb0\xae\x01\x6f\x1d\xd7\x77\xca\xbe\x23\x97\x70\x3a\x53\xab\x8c\xb7\x1d\x5b\x91\x9f\x49\xce\xd9\x02\x90\xfd\x14\xad\x03\x1d\xa2\x7f\xf7\xe8\x8f\xbf\x67\xb3\xb5\x0f\x34\x00\xcb\xe2\xb4\xe3\x45\x9c\x30\x41\x68\x21\xd4\xc2\x9f\x76\x34\xd9\x7d\xb6\x9e\x84\x0a\xd6\x42\x96\xd2\x61\x59\xe9\xe3\x2f\x6e\x66\xbd\x98\x8c\x20\xf1\x34\x17\xab\xd3\xce\x0d\x98\x14\x7a\x31\x65\x4f\x63\x4d\x23\x41\x62\xac\x82\xa4\x16\x2a\x92\xc2\xfc\x1d\x8a\x0b\xfa\xca\x27\xaa\xae\xd8\xbe\x87\x2d\xf5\x2d\xf6\xf4\x6b\x7f\x87\xb0\x34\x51\xbb\xb4\x75\x87\x95\xae\xea\x02\x8b\x46\x9f\xd3\x98\xb4\x40\x53\xd5\x56\x6c\xd2\xba\xbc\x47\x97\xd3\x94\x43\x9c\xe6\x46\x20\x84\x4a\x22\x61\x21\x74\xe0\x44\x08\xaf\x4b\x4d\xff\x9d\xda\x90\x2a\x1f\x9f\xf3\xa2\x98\xf1\xec\xe6\x8d\x7e\xa1\x17\xf6\x95\x3a\x37\x46\x9b\xde\x0a\x51\xee\x31\xf7\x5e\xe3\xb2\x56\x37\xd0\x3a\xba\xf9\xf8\x42\x2f\x98\xae\x5d\x55\x93\xa2\xbf\xf9\xe6\x71\x6a\xd6\x84\xc8\xa8\xd6\xb8\xc8\xc1\x29\xed\xcc\x54\xdc\x49\xda\xd3\xc7\xad\xf4\x0a\x4c\x31\xe1\xd7\x11\xb5\x62\xfb\xd5\xb4\x60\xa1\xa3\xbe\xbe\x78\xf4\xbb\x3f\xa0\xc2\x65\xda\xb0\x3f\x3c\x82\xa2\x4c\x92\x7b\x0b\xae\x00\xf8\x5f\xd2\x32\x5b\xf2\xa2\x10\x26\x55\x31\xfa\xeb\xd8\x51\x84\x8d\x5a\xfb\xa4\x5a\xcd\xa5\x2a\xb0\x8f\x98\xfc\x79\xf3\xe6\x6f\x90\xf9\x91\xce\x8a\x62\x4e\xf2\xca\x0b\xab\xdb\xae\x9b\x87\xe0\x4c\x1f\x06\x5f\xc4\x47\x93\x14\x15\x70\xbf\xe9\x94\x95\x2e\xea\x52\x3c\x13\x2b\x99\x51\x9e\xb5\x7a\x5b\xd7\x93\x45\xaf\x7c\x2e\xa4\x85\xb6\x48\xb3\x42\x67\x37\x2c\x0f\xe2\x5a\x58\x3b\xc5\x0b\x59\xa7\xb2\x9b\xa7\x14\x21\x90\x8b\x0f\xde\xbb\xba\x6d\xe9\x00\x29\xc1\xcb\x59\xc9\xab\xaa\xe1\xd3\x30\xfc\xb6\xb7\xd8\x24\x99\x5e\xf3\x02\x85\x69\x12\x85\x7c\xe2\xe3\x70\xca\xd3\xf0\x24\x7c\x3d\xd1\xe7\x20\xd7\x25\xa4\xbe\x2a\xb7\xb3\xa6\x3e\x7c\xf5\x8e\x59\x2b\x2e\x95\xbb\xa0\x02\x19\x58\xb4\x3e\x52\x97\xb3\x0e\xe9\x10\xce\xb3\x09\x7b\xfd\x81\x4e\x20\xec\x72\x9a\xfa\xe8\x98\xfc\xd2\x97\x52\x05\xd2\xdb\x39\xd5\xbc\xa9\x96\xdc\x91\x92\x15\x38\xba\xfc\x79\x9c\x55\xc2\x58\x69\xbd\x8f\xfe\x16\x14\xd0\xd3\x82\x4b\xea\xc3\x59\xf3\x78\x52\x69\xea\x56\x25\x2c\x37\x2a\x50\x68\x91\x9d\x6a\xe9\xae\x74\x1e\xc4\x81\x61\x82\xb4\x09\xe9\x45\x65\x2b\xcd\x92\x4a\x49\x31\x9a\xfb\x77\x9f\xa6\xee\x6d\xbb\x53\xe9\x96\xce\x4b\x69\x4c\x1d\x4a\x0e\xc6\x8a\x28\xf1\xf3\x35\x70\xb0\x16\x9f\x9b\x7d\x6b\x26\x3d\x8a\x92\x04\xc3\x16\x7c\x95\x14\xe3\xd6\xc6\xaa\xed\x4b\xc5\x52\x04\xa5\x40\x96\xda\xa6\x59\x42\x26\x76\x1a\xc0\xa2\x8a\xdc\x2f\xb9\x99\x2a\x3b\x7c\x72\x78\x6f\x46\x0e\x37\xd1\xe8\x8a\x2f\x20\x77\x30\xca\x5e\x6e\x0a\x4d\x40\x78\x61\x5a\x43\x58\x48\x9b\x81\x5c\x2a\xc9\x20\x8e\x2a\xcc\x4a\xe4\x2d\xbb\x38\xf4\x0c\x48\x28\xbf\xef\x1c\xb9\x90\x30\x41\x4e\xc4\xdb\x84\xba\x68\x6e\x74\xad\xf2\xf0\x1a\xdc\x40\x10\x5e\x6e\x2c\xec\x25\x9d\xc1\x0c\xd2\x3c\xb1\xa3\x8a\x0f\x71\xa1\x50\x52\x5a\x36\x13\x8e\xde\xaf\x44\x2a\xf6\x78\xfa\xf8\xd1\xe7\xef\xb3\xc1\x9a\x8c\xe4\xb3\x5d\x36\x3e\x1b\x5a\xb9\x7b\x5b\x1d\x23\x78\xfe\x4a\x15\x84\x4c\x10\x8e\x7e\xbd\x41\x78\x92\xf2\x42\x27\x5a\x25\x70\x4d\xc8\xd8\x33\x1e\x44\xdd\x1a\xe9\xc2\x0d\xba\x95\x09\x85\x6a\x47\x90\xb4\x61\xda\x74\xd9\x7d\x8f\xdb\x5c\x5e\x42\x48\x42\xcd\x07\x85\xff\x3e\xb1\x71\x36\x63\xb6\x9e\x3d\x38\xbb\x8b\x06\x16\x95\xea\xae\xf7\x54\xfa\x7a\x07\xc9\xdb\x26\x98\x2c\xb1\x8b\x3d\x3c\x38\x60\x47\xf8\x0b\x87\xc8\x66\x77\x7c\x6f\xd7\x33\x6c\xeb\xf9\x5d\x45\x6e\x6d\xd8\xdb\xda\xf3\xbb\x8a\xab\x5c\xe4\x18\xf0\x27\xb8\xd6\x2c\xf2\x39\xef\xda\xe3\x74\xb3\x79\x68\xfb\x7b\x4c\x96\xd8\x75\xcf\xfe\x22\x96\x7c\x25\x80\xf3\x4f\x16\xdc\x24\xa8\x27\xa7\xd9\x35\xee\x0c\x9b\xd5\x8e\x09\xb5\x92\x46\xab\x52\x24\x70\xa6\xaf\xb8\x91\x7c\x56\x08\x66\x04\x70\xf2\x66\xc2\xb2\x5f\x1f\xbd\x3d\x7b\x0d\x30\x6b\x7a\x67\x06\x6e\x04\x13\x71\xd7\x6b\x0b\xe5\xb9\x23\xdd\xc2\xce\x67\x4f\x37\x2e\x10\x5d\x45\x6f\x5c\xbc\xb8\xce\xfe\x06\xd0\xd7\x40\xe5\xcd\x7e\xf9\xf5\x28\x6b\x57\xf3\x02\x68\x1f\xb3\xa2\xb6\x72\x75\x1f\xf6\x37\xd0\x70\x3e\x93\x84\x9b\xbd\x41\x5f\xda\x5e\x9a\x2d\x6e\x4f\x22\x3b\x36\xb8\x97\xe3\x35\x36\x0f\xc0\xcb\x43\xdb\xb4\x8f\xea\x76\xdd\x21\x3f\xca\x05\x46\xe8\x99\xe8\x74\xab\x63\x64\xa3\xd5\xfa\xec\xd0\x0d\xe0\xfe\x9e\xe7\x94\xce\xc5\xd0\x6e\x11\xfd\xc2\x97\x20\x00\x5b\xd8\x76\x08\xe3\x6c\xb6\x14\x79\x3d\xf0\x05\x18\x99\xd2\x75\xce\xb4\x72\x9a\xf1\xa6\xdb\x14\xcc\x13\x60\x74\x72\xf0\x73\xad\xd2\x6a\x02\x0f\xca\x78\xb6\xe2\xbc\x4c\xe4\x63\x8d\x7f\x31\x4c\x6a\x7f\xa6\x90\x7e\xf6\x73\x3c\x61\xdc\xda\xba\x44\xd5\x37\x90\x33\x54\x3a\x36\x97\x0e\x70\x83\xba\x36\x99\x88\x59\x1d\xaf\xf4\x06\xf1\x64\x91\x4f\xc2\xb5\x28\xe0\x2a\x93\x4f\xc3\xe1\x65\x47\x0a\x1e\x09\x1b\xfe\x34\x68\x29\xc2\x95\x0b\x85\x40\x80\x42\x6e\x8a\x81\x35\xbc\xb9\xcf\xe5\xb0\xc5\xd5\x8a\xf1\x70\x8a\x9a\xf9\x75\x7e\x05\xc2\xac\x81\x9d\x32\xbd\x34\x20\x9c\xe7\x33\x51\xd8\xcd\x09\xce\xda\xa3\x36\xcc\xa5\x00\x4a\x9c\x70\x9c\x06\x17\x92\x44\xe5\x04\xf1\xf9\x29\xb7\x56\x2e\xd4\xa4\xd2\xf9\xc4\x4b\x3b\x1d\x82\x64\x22\x66\x24\x79\x1e\xf9\x83\xaf\x88\x09\x3e\xd2\xe9\xd5\x2b\x61\x96\x82\x0f\x4a\x80\x6e\x60\x3b\x83\x04\x66\x44\x65\x84\x05\xf0\x11\xf2\xdf\xe1\x6d\x1c\xb6\x87\x51\x18\xb7\x56\x67\xc0\x5f\x81\x18\x14\x53\x63\xc3\x02\x3e\xf8\xad\xc3\x1f\x2f\xce\x16\x72\x25\x54\xec\xd9\xf8\xb4\xe0\xd6\xf6\x12\x28\x83\xd1\x78\x33\xc1\x78\xed\x74\x83\xde\x62\xdc\xb5\x6d\xc1\x10\x64\x3d\x1b\xe6\xbb\xfa\x35\xeb\xce\xaf\x23\xce\x5b\x3d\xa3\x01\xd3\x32\x48\xe4\xc5\xfc\xe7\x49\x1d\xa6\x6d\x2d\x13\xca\x7b\xc1\xf9\x49\xbb\x5d\x65\x48\xaa\xb6\x2d\x74\x06\xc9\xbc\xd2\x39\xcb\x00\xbc\x19\x2d\x61\x80\x60\x76\xa7\x3e\x48\xe2\xae\xcf\x8c\xd5\x14\xfe\x66\x76\x7e\x72\x90\xdc\x38\xbd\xa0\x03\x7d\xb0\x82\xa9\xc3\xe6\xe0\x16\x46\xf0\x7c\xd8\xd6\x5b\xe1\xc0\x46\xf7\x36\x4a\x76\xfb\xfb\x0e\x46\xe8\xa3\xf5\x68\x5c\x2d\xe8\x12\x54\x89\xec\x84\x35\xd7\x95\x72\xe4\x63\xa1\x47\xd3\x24\xa8\xd3\x6c\x15\xfd\x4f\x63\x84\xad\x34\x34\x3e\x1e\x24\xbc\xfb\xe9\x27\x6d\x1a\xc9\xdb\xf6\x4e\x0d\xcc\x20\x91\xb5\xf2\xd3\x85\xdc\x6e\xcb\xf8\xfd\x2f\x61\x74\xd7\x38\x0c\x92\xd8\x69\xd5\x37\xbd\xf9\x03\x58\x11\xa1\x96\x5c\x65\xe8\x6a\x9c\xde\x88\xca\x9e\x5a\xb9\x40\xa3\xf1\xc5\xa3\xc7\x7f\x7c\xf4\xc5\x17\xbf\x07\x33\x12\xcf\xc7\xb4\x1c\xb6\x8f\xfd\x24\x2f\x2f\xaa\x25\x9f\x40\xff\x78\xff\x31\x7a\xce\xbe\x69\x6c\xda\x20\xb1\xab\xc7\xd3\xc7\xbf\x3f\x61\x81\x60\x1f\xba\x6a\x2c\xb5\xd2\x06\x31\xd5\x48\x28\x37\xd4\xaf\xe3\x2e\x28\x86\x78\xe0\x9a\xa3\x36\x17\xdc\xd5\x46\x0c\x02\x04\xdf\x9b\x19\xad\xb8\x73\xc2\xa8\x27\xec\xbf\x8e\xde\xfd\xf6\xc7\xc9\xf1\x57\x47\x47\xdf\x3f\x9a\xfc\xf1\x87\xdf\x1e\xbd\x9b\xc2\xbf\xfc\xe6\xf8\xab\xe3\x1f\xe3\x1f\x7e\x7b\x7c\x7c\x74\xf4\xfd\x37\x2f\xbf\x7e\x73\x75\xfe\x83\x3c\xfe\xf1\x7b\x55\x97\x37\xf8\xa7\x1f\x8f\xbe\x17\xe7\x3f\xfc\x4c\x21\xc7\xc7\x5f\xfd\x7a\x98\x82\x1b\x5e\x9a\x9d\x52\x8e\x9d\x50\x82\x3d\x5a\xd9\x75\x65\x84\x8f\x47\xa4\x56\xc3\xa1\xdd\xfd\xe4\xe9\x86\xa0\xd8\xe5\x10\xff\x34\xd8\xbb\x88\xf3\x52\x0b\xef\x9c\x58\x74\x58\x0a\x7d\x0b\xa5\x46\x52\x1b\xe9\x06\x86\xf8\xaf\x14\x3c\x3c\x5c\x8a\x95\x30\x27\x71\xb6\x2f\xbc\xc0\xab\x28\x8f\x96\x0f\x77\x7a\xa7\xb4\xd0\x4b\xcf\x5b\xa1\xc1\x2d\x90\x7a\x0f\x50\xa8\x9a\x4e\xd8\xa2\x5b\x9d\x71\xa9\xd5\x55\xb3\x42\xf1\x27\x87\xfd\x06\xea\x8f\x89\x17\xfb\xd1\xe3\xb9\xb8\x65\xe4\xd3\xf5\x06\xaa\xed\xc3\xca\x82\x99\x9c\xb2\xb7\xdc\x48\x3d\x10\x28\x8f\xa0\x15\xe8\xa8\xa6\x15\xb8\xd5\x08\x61\x6f\x0c\x02\x44\x73\x03\xfd\x02\xd7\x9d\x5c\xc3\x99\x11\x5f\x2c\x49\xbb\x73\xd6\xb8\x5a\x4f\x5b\x57\xab\xeb\x25\x4a\xe7\xaf\xc8\xca\x7f\xc2\x30\x03\x6e\x85\x89\x95\xdb\xd8\xfe\xba\xf3\xf5\xe8\x1f\xd2\x3a\xf1\x76\x5c\xc2\xe8\xc0\xdb\xee\xc2\xc2\x4f\xc6\xb5\x00\x97\xe4\x92\x0f\x7d\xff\x03\x32\x5c\xb9\x88\x25\xd1\x70\x0e\x30\x91\xd2\xf9\x5b\x8a\x7a\xa0\xea\x70\x1a\x0b\x41\xb5\xb9\x0a\xe4\x6b\xd1\xef\x40\xd8\x34\x4a\x1c\x9c\x08\xac\x74\x7e\x68\xdb\x95\x63\x07\x78\x4f\xc0\xe7\x9a\x64\x46\x3a\x99\xf1\x62\x58\x72\xdb\xbb\x41\x51\x4c\x56\xd4\xd6\x09\xd3\x4a\x82\x6c\xb4\xbb\x1d\x86\x33\x80\x2f\xe5\x05\xbb\x11\xeb\x5b\x6d\xf2\x18\x2e\xc4\xaf\x6e\xcf\xc1\x40\x2e\x99\xf0\xd9\x52\x04\x2b\x83\xdd\xcc\x4c\x29\x0c\x9b\x89\xf8\x6e\x90\x20\x78\x3d\x65\x67\x6a\x1d\x80\x10\xaa\x4b\x2a\x13\x3c\xfd\x61\x11\xc3\x1a\x43\x2c\x0c\xdc\x7b\x17\x2a\x78\x76\xf0\x15\xc3\xfd\x4c\x3f\xb3\xe9\x7b\x72\xe0\x95\xce\x9b\xaf\x19\x96\x3b\x0b\xe9\xee\x98\xfe\xd6\x86\x61\x43\x1f\xd0\x92\x46\x20\xab\xc4\x20\x91\x41\xd4\x47\xb7\x59\x3e\xe4\x94\x4a\x58\xfb\xb5\xbf\x52\xf4\x5c\x4e\xff\x8e\x72\x88\xbb\x82\xe4\x41\xdf\xbd\x80\x9b\x1d\x17\x54\x78\xe5\x87\xd8\x1d\xef\x2d\xe9\xbc\x95\x3a\x4c\xa7\x9e\xc1\x7f\x0c\x15\xe2\x3c\x5f\x63\xcf\x49\x3f\x49\xe9\x3a\xa5\x2d\x03\xf3\x04\x46\x04\x69\x67\x97\xcf\x62\x8d\x26\x86\x10\x96\xd8\xb8\xb8\xe9\xff\x10\xbe\x31\xac\x06\xa4\x0a\x42\x13\x2b\xf1\xcf\x9a\x0f\x0b\xbe\x9d\x66\x07\x6f\x4c\x2d\x0e\x76\x25\x36\x3f\x1c\x8f\x0a\x77\xab\xcd\xcd\xe9\xa3\x47\x8f\xfe\x13\xc2\x51\xf8\xe4\xff\xf1\xc5\x5f\xfe\xc7\x17\x7f\x99\x96\xf9\xf0\xb8\x6c\x28\x9a\x95\x80\x63\xdd\x04\x08\xbf\xee\x9e\xf1\xb8\xdd\x43\x1f\x46\x71\x63\xc2\xe3\x2d\xf0\x84\xc1\x91\x6a\xf6\x9c\x90\x70\x25\x60\x4f\x69\xa8\xd3\x49\x3b\xcd\x37\xeb\x6a\xa0\xd1\x24\x83\x46\x7b\xbf\x99\xfe\x0a\xda\xca\xc2\x7d\x20\x95\xeb\x6b\x44\x0d\xa3\xac\x0e\x06\xfe\xd0\x12\x77\x12\x07\x14\x4a\x81\x59\x85\x57\x0d\x30\xa7\xeb\x8a\x5c\x40\x36\x58\x87\x03\xeb\x45\x62\x68\x7b\xf8\x1a\xc5\xb0\x0a\x23\x5b\xc8\x7e\xf7\x2a\xcf\x07\xda\xc4\x88\x30\xc2\x28\x21\x44\xa6\x67\x40\x7d\x74\xc2\x5e\xa9\xe7\x58\xab\x3b\xec\x79\x18\x02\xdb\x96\xe8\xc2\xe9\x20\x70\x54\xfa\xaf\xd3\x5f\x85\x15\x9d\xe0\x52\x0c\x57\x72\x43\x37\xb0\x93\xc2\x4c\xf2\x94\x0f\x5f\x6f\x48\x0a\x57\x65\x28\xd8\x95\xf7\x13\xca\xc1\xe3\x0a\xdb\x09\xaf\x64\x68\x34\x86\x99\x76\xa3\xeb\xea\x24\xf8\xb3\x2d\xb8\x2b\x36\xba\x36\xb5\x1a\x4e\xda\x05\x47\x0b\xdd\xb9\xfe\x94\x9b\x17\x5d\xb8\x90\x83\x5f\x9a\xb1\xee\x26\x67\x19\x66\x95\xa3\x77\x88\x6c\x2d\xf8\x58\x61\x6a\x35\xf8\x4d\x05\x13\xcb\xda\xb0\xce\xeb\xf8\x41\x21\x16\x3c\x5b\x1f\xd0\x5f\x2c\x7a\x68\x8b\x18\x2f\x58\xc6\x15\xb0\xce\xca\x4c\x3a\xfc\x8e\xc1\xf7\x17\xea\xb7\xa1\x30\x1c\x7c\x78\x54\x9a\xe0\x46\xd7\x96\x10\x7f\x45\xf7\x38\x12\x75\x2d\xb9\xca\xa1\xda\x9a\xe4\x98\xe8\x5c\x9c\x06\x49\x13\xf8\x3c\x52\x82\x1c\x1e\xcc\x67\xc2\xf1\x98\x2a\x4a\xcf\x8e\xff\x8e\x90\xad\x1e\xa8\x30\x1a\x44\xc5\x88\x71\x75\xf7\x8c\x0f\x7d\xdd\xc9\xa5\xad\xe0\x9e\xe1\x23\x40\x14\xda\xce\x73\xf0\x4d\x79\x4f\x78\xd6\x44\x5a\xcd\x0f\x0e\x0d\x2b\xe3\x21\x24\x4d\x8d\xb6\x59\x22\xab\x21\x7a\xd5\xca\x89\xbb\x41\xf4\xb7\x7d\xe5\x7e\xdd\x17\xc4\x96\xba\xc8\x01\x11\x83\xc9\xd3\x81\xaf\x7c\x28\x8b\x71\xe7\x8c\x9c\xd5\x3e\xce\xe0\x2a\x87\xe6\xc9\xe1\xe9\x73\x38\x1c\x2c\xe4\xda\xec\x94\xb5\xb4\x4d\x5d\xe4\x20\xe8\x92\x29\x63\xd7\x62\x20\x46\xc9\x3b\x7d\x9d\xb5\x00\xdf\x24\x6e\x24\xe4\xc7\xfc\x9d\x1d\x24\x52\xf0\x6c\x19\xd2\x81\x9f\xe0\x6d\x89\xea\x44\xcf\xed\xd7\xde\x68\x0e\x75\x9e\x7b\xc7\xe6\xe0\xac\xc9\x29\xd9\xba\x0a\x2c\xe4\x03\x63\x48\x16\xcd\x37\x6a\x7f\x5e\x55\x85\xc4\x82\xcb\x04\x0f\x91\x61\xc4\xcb\xd1\x88\x5f\xeb\xb2\xc1\x1b\xfb\x55\xb6\xd8\xbe\x70\xb8\x07\xbd\x14\xa0\xbc\x0b\x7c\x70\xce\x96\xc0\x95\x0c\x0f\xed\xb7\x7e\x8a\x4b\x59\x0d\x96\x09\xd9\x6e\xee\x9a\xe9\x01\xd4\xc8\x8b\x8b\x2f\x15\x83\x25\x56\x3a\x7f\xc2\xde\x29\xf6\x18\x93\xd1\xfa\x16\x20\x2a\x5f\x5f\x3c\x8b\x1a\x8e\xf4\xdd\xcf\xaf\xe1\xb8\xb0\x2f\x50\xaa\x15\x6e\x21\x73\x36\xc3\xe6\xe5\x56\x0c\x87\x2f\x1f\x29\x71\x8b\x65\xb0\x01\xf1\xd0\xbc\xd7\xaf\x62\xf9\x26\x81\x8b\xaa\xbb\x78\x61\xca\xc7\xec\x4b\x9c\x73\x25\x0c\x25\x2f\x0f\x62\x25\x96\x8a\xb1\x57\xaf\x0f\x23\xf6\xe7\x76\x62\x6e\x27\x93\xc9\xc4\xaf\xf5\xc5\x30\x0d\xc1\x22\x10\xe0\xa4\x77\xa6\x1a\x17\xb0\xd4\xb9\x9c\x0f\x07\x99\xf7\x4e\x22\xa8\xdc\xf6\x93\xc1\xf3\xe0\x6a\xb8\x50\xdc\x8d\xe9\x50\x60\x76\x0a\x41\x71\xe7\x51\xe0\xf7\xbf\xa3\x28\xb5\xa7\x70\x33\x69\x54\x5b\x7d\xbb\xb8\x43\x60\x48\x3a\x0f\x57\x48\x33\xb1\xe4\x2b\xa9\x81\x46\x1b\x74\x07\x14\x2c\x77\xf7\x6b\xf8\x5d\x6f\xf6\x37\x3e\x9b\x85\xcb\x13\x7a\x30\x41\xfa\x7d\xb0\x54\x71\x57\x69\xec\x2c\x0a\xb4\x0e\x57\x3a\x4f\x83\xa5\x31\xc0\x41\x16\x6b\x50\xee\x6b\xaf\xe3\x7a\xca\x38\x44\x6d\xd8\x0b\x63\xb0\xe0\xb0\x43\x6c\xc6\xfd\x94\x9b\xe5\x3c\xda\x38\xfe\x84\x4a\x9c\x8b\x70\x23\x21\x47\xaa\x34\x13\xf3\xb9\x0f\x55\xb5\x62\xa2\x5a\x8a\x52\x18\x82\xa5\xeb\x7d\x78\x20\x31\x7c\xe2\x3d\x26\xe3\x95\x01\x42\xab\x4a\x5e\x0d\x3f\x5c\xfe\x73\xc1\x07\xca\xa5\x99\xb2\xb7\xbc\x90\x79\x74\x5f\xbc\xde\x3a\x78\xa5\x5e\x6b\xed\x5e\x4a\x0b\x41\xeb\xf0\x32\x0b\x78\x8d\xc2\x84\xc8\xc1\xae\x47\x8e\xf8\xbf\x0d\x37\xd3\xa1\x72\x74\x28\x2f\x1f\x19\xf9\x61\x6a\x75\x36\x82\xef\xe3\x2d\x8a\x37\xaa\x4d\x7a\x41\x30\xa1\x9c\x59\x57\x5a\x12\x8a\x79\x36\xa9\x53\x22\x1d\xec\x94\x7d\xeb\xc3\xe1\x10\x8c\x12\x12\x9d\x81\x76\xaa\x81\x52\xbc\xe4\x6b\x24\xb8\x42\xe0\x1c\xc5\xab\xda\x88\x15\x30\x49\x12\x7a\x4c\xcf\x34\x81\x77\x60\x33\xf8\xf0\x67\xed\x0a\x3a\x9a\x75\xff\x7a\x78\xb1\x47\x8b\x08\x6c\xc3\xc6\xed\xf9\x0f\x17\xcb\x6f\x84\x65\x95\x11\x99\xc8\x21\x63\x8f\x58\x71\xee\xe8\xa4\x11\xf7\x63\x2d\xe1\x26\x5c\x6a\xd0\x0c\x49\x77\xe1\xa2\xf3\x6e\x1e\x98\x7b\xe8\x45\x3f\xf0\xb6\xeb\xaf\x14\xb7\x00\xf2\x57\x13\xa3\x35\xa4\x85\x0c\x52\x2f\x9b\x9a\x40\xb6\xbc\xe5\x67\xad\xbc\x8a\x8c\xaf\xde\x50\xb7\x33\x5c\x27\xb6\xf9\x26\x1f\x81\x2a\x5b\x1b\x81\x2b\x20\x1d\xcb\x35\xc1\x45\xf0\x4a\x35\x7c\xfa\xb7\x17\xcf\xd8\x23\x76\x04\xc5\x6c\x0d\x01\x25\x85\x59\x00\x33\xef\x7d\xed\x22\xe7\x71\x8a\x53\xb2\xef\xca\xb4\x09\xcc\xd7\xde\x38\x82\x2d\x0b\x6b\x4a\xf1\xb0\x63\xf6\x25\x34\x0b\x14\xf9\x5e\x55\x7d\x04\x55\x45\xd3\x4b\x94\xf2\x72\xd0\x2d\xdf\x5a\x31\xb8\x46\x71\xcb\xc8\x7e\xfb\x09\x8c\x2c\xb9\x8e\x1f\x1b\xe0\x9a\xfe\xae\x81\x36\x61\xa5\x70\x3c\xe7\x04\xfe\x0b\x34\xd6\x51\xe0\xd6\x3d\xa0\xb4\x0a\xf9\xd0\x3d\x48\x3e\x68\xef\xb9\x07\xed\xb9\x1e\xae\xb6\x7e\xe2\x1e\xe0\xb9\x1e\x1e\x2d\x7d\xfe\x26\xdb\x8a\x17\x52\xd5\x77\x98\x03\x1d\xfc\x6c\xbe\x75\xb7\xae\xcf\x41\x1c\x12\x34\xdf\x91\x88\x6b\x66\x22\xe4\xec\xf2\xed\x9c\xdd\x34\x3c\x4c\x35\x61\x02\x49\x2f\x6e\x35\xe1\x89\x9d\x6e\x90\xf3\x75\xf8\x59\x65\x86\xab\x5c\x97\x5b\x5f\xef\x0f\x85\xe0\x04\x82\x96\x4e\x3f\xb6\x1d\xb7\x75\xe7\xed\x1b\x7e\x1f\xde\x7f\x5b\x3f\x37\x2b\x34\xda\xed\x23\x31\xac\xa5\x50\x95\xc1\x63\x48\x32\xf3\xdd\x0b\x28\x95\x91\xb6\x39\x80\xc3\xdf\x58\x9a\x09\xf1\x99\x28\xb6\x32\xe7\x89\x34\xb8\x89\xf4\x23\x46\x17\x24\xde\xa4\xde\x1a\xbd\xd6\x45\xa8\x42\x8f\x8b\xe4\xc5\xfe\x62\xd6\xc8\x91\x70\x4b\x9b\x1a\x7c\x5d\x6d\xac\x91\x1b\x0a\xc1\x8a\xe3\x21\xae\x51\x4d\xf0\x1e\xd9\xe6\x1a\x79\x17\xb4\xbf\x46\x5e\xec\x2f\x62\x8d\xac\xc8\x32\x5d\x56\x57\x46\xcf\xe5\xf0\x1b\xb7\xe5\x0b\x04\x71\x4c\xa3\x6f\x41\xf1\x05\x6a\x2b\xb6\x58\xb8\x2d\x3e\xeb\x20\xbf\xc2\x27\x54\xf3\x54\x12\xcd\x09\xe5\x12\x25\xd9\x14\x9d\xf1\x62\xa9\xad\x23\x6e\x24\xdb\xdc\xcc\x4d\x81\x6d\x59\x03\xe9\xd8\x73\xff\x75\x20\xa7\x53\x57\xcb\xb1\xdf\x11\x91\x8e\xb1\x69\x8f\xd3\x87\x6a\x85\x67\x3a\xfc\x35\x92\xe0\x58\x17\xe0\x7d\x8d\xb6\x4c\x59\xb7\xe0\x32\xda\x74\x35\xd0\xe3\x4c\x9b\x96\xee\x1c\x16\x5c\x0c\x2f\x28\x8e\xa3\xe2\x6e\x79\xc2\x8c\x28\xb8\x93\x2b\x11\xd5\xc8\x0d\xe6\xa7\x88\xc4\x4a\x9d\x0f\x8e\x57\x39\x6e\x1c\x38\xca\x52\x0f\x04\x95\xc5\x01\x5f\x0d\xef\x37\xd1\xa5\x9d\x23\x6c\x42\x5a\x76\xf0\x22\x1e\xb6\x83\xcf\xd3\x86\x1e\xe0\x97\x34\x09\x4c\x6a\x0b\x30\xc6\x6e\xa4\xca\x43\x87\xdc\xde\xe2\x53\x5f\xdd\xfd\x08\x91\x55\x7c\xd0\x89\xaa\x99\x1b\xf1\x84\xbd\xa3\xdd\xbd\x66\xc3\xd8\x64\xfb\x6a\x93\x24\x76\xd5\xc1\x8e\xab\x4d\x92\x89\xea\x20\xc0\x16\x23\x24\x77\x32\x02\xbd\x7c\x0c\x21\xe3\xcb\x48\x5c\x80\x04\xb6\xb8\x46\x7b\x7d\xab\xe0\x0e\x7a\x15\x39\x61\x4a\x27\x69\xb2\x56\x33\xc6\x33\x40\xa1\x46\xa3\xfb\x16\x1d\x38\x0f\xbc\x95\xa5\xe5\x1a\xce\x9a\x7e\x1f\x00\xf5\xb1\xf1\xa3\x28\xf9\xb6\xb6\x67\x66\x48\xdf\x41\x6a\x50\x2a\xc4\x5d\x35\xa7\x63\x78\xf4\xeb\xcf\x71\x28\xd4\xdf\x72\xec\xb0\xb8\xaf\xe4\x66\x38\x80\xe2\xeb\x8b\x67\x53\xb6\x99\x08\xf1\xc7\x23\x2c\x05\x15\xe7\xc2\xf3\x3c\xe4\x5c\xd4\x3a\x35\x90\xa6\xf0\xc0\x13\x59\xe0\xd3\x3a\x57\x27\x64\xce\xd6\x36\x73\x45\xda\x31\xbe\x46\x19\x80\x8e\x64\x3c\x9e\xe9\xe1\xaf\x3c\xbc\x14\xb6\xe2\x99\xb7\xd4\x41\x22\x20\xd5\x3b\x9c\x53\xc3\x8d\xe9\x55\x53\xe4\x5f\xab\x80\xa5\xe8\xc8\x3f\x1a\xc8\xfb\xc3\xde\x97\x7b\x3b\x0e\xd4\x79\x73\x4e\x68\x78\xeb\x34\x2b\x78\xad\xb2\xe5\x83\x3f\xa5\x3b\xb6\x3d\xe2\x7e\x18\x67\x37\xc2\xd0\xda\x3d\x57\xdc\xf0\x52\x38\x61\x22\xa7\x18\xe1\x59\x2b\xa9\xb9\x00\xbd\xb5\x00\xb1\x35\xc0\x84\x98\xfe\x4f\x6b\x28\x40\xa7\xee\xee\xd3\x21\xb6\x0d\x52\x70\x3a\x54\xe2\x57\xa7\x49\x5b\xcd\xd2\x99\x80\x61\xf5\x47\x58\x8a\xb7\x90\x16\xfe\x5c\xd7\xe2\x56\xaa\x5c\xdf\xda\xb1\x9e\x4d\xbe\x43\x71\x2d\xa1\x65\x44\xa7\x0f\x7f\x8b\xf8\xb8\x4f\x27\x31\x60\xd8\xee\xdb\x75\x68\x93\xd3\xfa\xdd\xda\xa0\xe9\xbf\xf9\x83\xe2\x67\xf2\x7e\xb1\x28\x2d\x7f\x6a\xfc\x94\x9d\xe4\xc5\x75\x25\xb2\xe4\x00\xfa\xeb\x97\xd7\x67\x7d\x91\xb4\x20\xd2\x87\xde\xc2\x20\x1c\xc7\xcb\xec\x90\xe5\xdd\x8a\xd9\x52\xeb\x1b\x92\xdc\xa3\x4e\xd5\xd7\xb2\x9e\x4d\x33\x5d\x76\x8a\x37\x27\x56\x2e\xec\x69\xd0\x0e\x13\xbf\x3a\x34\xbe\x6c\xa9\xa0\x49\xe8\x76\xb3\xdb\xf0\x31\xb4\x84\x4e\xb3\xaa\x70\x76\x43\xd9\x60\xc8\xaf\x6e\x2f\xfb\x25\xad\x73\x4f\x20\x4b\xfa\xe4\xd9\x9b\xed\xa3\x38\xb4\xe0\x2c\x8e\x0f\x1c\x47\xf2\xba\x04\xfe\xad\xd8\x25\xad\x39\x98\xed\xbe\xd0\x22\x7b\xbf\x97\x88\x1b\xf9\xf4\x4f\x73\x11\x95\x33\xca\x5a\x03\x3a\x27\x08\xf3\x4a\x35\x98\x45\x6a\x8e\x75\x1b\xe1\x33\x4e\x47\xc1\x2d\x94\x4f\x8c\xee\xc9\x2f\x41\x3f\x81\xf6\x61\x72\x78\x3c\xc8\x10\x52\x37\x2a\xe2\x87\x61\x48\xb8\x05\x3d\x68\xcc\x34\x2d\xd5\xf5\x31\xd1\x07\xec\xe3\x21\x10\xd8\x08\x58\x38\x46\x2f\xd2\x34\x2b\x99\x89\xb3\x2c\xd3\xb5\x4a\xa8\xd1\x7c\x26\xfc\xe4\xb9\x13\xf9\x75\x4f\xe2\x50\x0a\x75\xce\x72\x90\x84\x44\xc6\xbc\x90\x1c\xe9\xae\xfb\x52\x87\x93\x8b\xb5\xf3\x83\x67\xd7\x8d\xef\x0e\x4a\xc2\x3a\xc1\x29\x75\x91\x49\x6b\x9e\x46\x7c\xb0\xbd\x2e\x94\xa6\xa9\x5d\x33\xb2\xb1\x7f\x68\x0c\x82\x0a\x1c\x24\xb4\x79\x57\xfd\x99\x1c\x15\x8e\xdb\x9b\x96\x56\x5c\x00\xeb\x4e\xa3\x5c\x3b\x7f\x1f\x96\x6f\xc2\x71\x86\x04\xaa\xf1\xc1\xfb\xe5\xfe\xaa\xad\xf3\x8b\x74\x66\x9f\xff\xbf\xcf\x2e\x53\x2a\xcf\x81\x61\xbe\x65\x5f\x59\x06\xc1\x03\x23\x46\x0c\x6e\xba\x6c\xc7\xb6\x23\xd4\xcf\x71\x98\x8a\x33\x3c\xb4\x3c\xe7\x68\xe6\x0a\xc1\xe7\x78\x2a\x8e\xb0\xd5\x2d\x18\xa7\x81\x75\x4a\x17\x8a\xb5\x18\x36\x8c\x1c\x4f\xf0\x54\x94\x82\x2b\x1b\x03\xd3\x81\x87\x4a\xc0\xe7\xc5\x7a\xcc\xb8\x7e\xa1\xfc\x0b\xcf\xf0\x20\x89\x98\x2f\xc3\xef\x54\x3a\x17\x7d\x69\xd6\x99\x3a\x73\xac\x76\xd6\xff\xfd\xf0\x05\x88\xd1\xf8\xc8\x4b\x60\xc4\x42\x5a\x67\x02\x5b\xa6\x9f\x68\xbb\x10\x98\xa8\x1d\xb6\xfd\x51\xdc\x8d\x58\xb3\xbf\x7e\x73\xfe\xb7\xbf\xbf\x78\xf5\xf4\xec\xc5\xdf\x5f\x9e\x3d\xfd\xeb\xc5\xe5\xf9\xbb\x77\xd7\x7f\xbb\x7e\x73\xfe\xf2\xdd\xbb\xa7\xb5\x31\x42\xb9\x40\x5b\x79\x2d\xdc\xbb\x77\x41\x5f\xd8\x77\xef\xde\x64\x95\xac\xde\xbd\xbb\x8a\x79\xc4\xc1\x4c\xab\x7e\x63\xc1\x0b\x40\x8e\xa9\x5c\x0b\x0b\x55\x07\x50\xe4\x36\xfc\x50\xc3\x3a\x2f\xb9\x6d\xeb\xe3\x7a\x0c\x3a\x83\x7b\x9b\xd1\x00\xe7\x76\xc9\x8d\xb8\x42\x37\xef\x32\x26\xd7\x13\x14\xbe\x17\xc7\x38\xb3\x52\x2d\x0a\xd1\x3c\x33\x35\x69\xfb\x41\x2b\x34\x13\xee\x56\x04\x4a\xb8\x4d\x77\xd6\xb6\x45\xea\x83\x64\x02\x2d\xaa\x0b\x1c\x23\xde\x9d\xeb\x48\x8c\x8a\x8b\xcf\x86\x76\x6b\xd1\x6c\x25\xc5\x2d\xb8\x73\x56\x2e\x14\x2f\xe2\x97\x8b\xc0\x77\x0a\x04\x8c\x83\x64\x6e\xa2\x80\x04\xb3\xfe\xfe\x54\x3a\x3f\x69\xfa\x5b\xc2\x5b\xde\x20\xa9\x71\x43\xb6\xde\xfc\xba\x24\x3a\xc3\x5c\x22\x68\xad\x21\x72\x76\x75\xf1\x8c\x3d\x9e\x32\x6f\x8b\xfc\xbf\x42\xff\xa7\x5d\x87\x6b\xd8\x2a\x84\x76\x40\xde\x79\x46\x8f\x7e\x07\x8b\xc5\xd0\xbd\xc2\xab\x35\xdc\x30\x0f\xbe\x5b\xf5\x2c\xd7\x25\x97\x83\xba\xb9\x7e\x80\x0b\x66\x5e\x17\xc5\x9a\xfd\xb3\xe6\xc5\x70\x22\xc3\x2b\x9d\xb7\x8a\x38\x1e\xf6\x83\x3f\xc5\xbf\xfa\xf3\xf4\x4f\xcd\x8c\xff\x3c\xfd\xd3\xd0\xbe\x1c\xcd\x1d\xff\xf3\xd4\xae\xb2\xe9\x9f\x02\xf1\x2a\x0b\x02\x9b\xd2\xd7\x61\x4f\x8f\xef\x21\x9b\x69\xf4\x2e\x0f\xf2\x07\x7b\x29\xdc\x79\xbd\xf2\xd1\x69\x66\xb0\x71\x2e\x40\x88\xbe\x36\x3c\x13\x57\xc2\x48\x08\xf8\xb4\xca\xe9\xc4\x9e\xf1\x0a\xb0\x3c\x74\xb8\xf1\x17\xda\xa2\xd0\xc1\xd6\xda\x2f\xaa\x12\x22\xc7\xe0\x3e\xcc\x57\xb0\x85\x9f\x2e\x1c\xb7\x61\x1a\xd6\x47\xe0\xc0\xba\x9a\x19\xc1\xb1\x16\x9e\xe5\xa2\x10\x6d\x2f\x90\x29\x3e\x89\x0c\x92\x1a\xe1\x69\x4a\xab\x89\x12\x0b\x04\x7f\x85\xa7\x70\x04\xbf\x0d\x4f\x6d\x23\x1b\x6c\x83\x5f\x0a\x93\x94\x65\x29\x72\x1f\xe0\x15\xeb\xc1\x15\x7e\x60\x58\xd0\xe9\x91\x96\x29\x59\xe0\xb1\x8d\x88\x19\x58\x52\x56\xc1\x11\x20\xb9\xd4\x75\xe0\x16\x80\x48\x10\xbe\x9a\x2c\x32\xa4\xe8\x76\x1c\x20\xc6\xe7\xae\xe1\xb3\x0e\x56\x6c\x98\xbf\x16\x7a\xfb\xb4\x44\x83\x50\x48\x6f\x85\x72\x8c\x77\x6f\xc4\x30\x55\x80\x86\x35\xda\x3e\xac\x66\x41\x6b\x4e\x9d\xa8\x9f\xd5\x5c\x9b\x4c\xce\x8a\x35\x5b\xf2\xa2\xe9\x4e\xc4\xd9\x8d\x5f\x71\xfc\xc9\x61\xc7\xff\x5a\xb8\xee\x31\x28\xb4\x5a\x74\x43\x17\x71\x57\x41\x1f\x97\x61\x56\xd0\x9b\x9d\xba\xc2\x6f\xf6\x1e\xf4\x5a\xd7\xa9\x25\x78\x4e\xb3\x2f\x1f\xc5\x2d\xff\xc4\x7c\xe5\x03\xf0\x27\x4e\x17\x02\x4f\x28\x5d\x5b\xee\x64\x54\x3b\xb4\x5d\xd9\xc3\x17\xe0\x53\x33\xe6\xbe\x89\x1d\xd5\xfc\xd9\x7a\xd3\xcc\x7c\x68\x06\xcb\x1b\x3e\xc7\x81\x13\xce\x6b\x7b\x94\x03\x2c\x63\x6b\xe6\x3d\x41\x37\xbc\x5d\x1f\x8b\x6c\x8e\x78\x2f\x8d\xac\x0a\xc1\xfe\x74\x23\xd6\x27\x48\x92\x8f\xc1\xcd\x9f\x07\xca\x6c\xdb\xa6\x36\xe4\xad\xba\xf2\x93\xd5\x86\xfd\x29\xfe\xdb\x9f\x87\xdd\x4d\xf2\xd3\x21\xfd\xe1\x10\x3f\x3e\x11\x45\x73\x8e\xf4\x29\x74\x8e\x7d\x1c\xb8\xbf\x81\x8b\xc5\x69\x5c\xd8\x29\x3b\x07\x2e\x49\x88\xf8\x09\x42\x43\xc3\xc0\xa2\xe8\x89\xb7\xa1\x01\x45\xc2\x23\x3c\x43\xaa\x31\xd1\x23\x63\xb9\xd4\xd7\x81\x21\x10\xfa\xa8\xcc\x85\x69\xff\x86\xf2\x0b\x2a\x67\x97\xfa\xfc\x4e\x64\xf5\xb0\x4e\x24\x38\x12\x1e\x94\x6e\x04\xa1\xfd\x7b\xef\x50\x7c\x23\x9a\x3e\x37\xb8\xf2\x37\x82\x82\x2b\x69\x68\x27\x5a\x6d\xd8\xa9\xd1\xa1\x64\xfa\x3b\xe7\x69\xeb\x74\xdc\x88\xf5\x40\x8e\x78\x1c\xa1\xf3\xdd\x0d\x7e\x73\xe0\x69\x6d\xf4\x81\x77\x0e\x09\x42\x67\x82\x9d\xdf\x49\xeb\xec\xff\x44\xad\x9a\xe9\x72\x16\x3c\x13\xf2\x75\x88\xd7\x0a\xbe\x39\x1e\x5c\x95\xc3\x1f\x69\x1f\x9f\x70\xc8\xe2\x02\x25\x9e\xb4\x57\x71\x9d\x3b\x1d\x21\x87\xd7\xe6\xc3\x99\x3f\xb4\xa1\x74\x43\x2b\x60\xee\xea\x36\x9f\xa3\x9c\x8b\x08\xee\xc7\x09\xa2\x8e\xc0\x3d\x85\x55\x3f\xf7\x81\x32\x45\x6e\xf7\xbd\x13\x85\x44\xb1\x12\xd8\xfe\xe5\x8a\x17\xb4\xce\xe3\x4e\x7b\x6f\x3e\xcf\xb8\x41\xd4\x6a\x68\x24\x63\x43\xef\x5c\xca\xba\x02\xe3\xbd\xf7\x2f\x83\x35\x6f\xef\x1b\x52\xd7\x51\x44\x72\xe3\x64\x56\x17\xdc\x30\x6f\x71\x16\xa4\xae\xd6\x09\x27\xb7\x55\x46\x84\x50\x19\x47\xdf\x7b\xda\x94\xd7\x39\xcb\x24\xa5\x19\x63\x2e\x48\x4c\x02\x8d\x4d\x4f\x85\x12\x64\x1e\xf5\x7b\xfd\xea\x79\xb4\xd4\x8d\x81\xa2\xd8\xd0\xb6\xf3\xa2\xeb\x75\x1e\x94\x0b\xe8\x0e\x48\xc1\xec\xb4\x4e\x63\x63\x7b\xa6\xec\x2f\x0d\x87\x2f\x65\x96\xc8\x85\x09\xbc\x68\xc2\x45\xb2\x6c\xb4\x20\xf1\xd7\x88\xbb\x84\x66\x67\xae\x8d\x58\x09\xc3\x8e\x72\x0d\xbf\x22\x56\x32\x1b\xfa\x5e\x84\xe3\xff\x17\x46\x83\x6a\x69\x92\x10\x41\xc9\xd3\x6b\x95\x3a\xdd\x2c\x1f\xb1\x23\x98\x5a\x37\x09\x41\xd9\xa2\x80\x74\xc2\x16\x48\xd4\x8b\xfb\xe9\x0b\x0d\xc8\x98\xdb\x1d\x78\xdb\x9e\x6b\x44\x83\x3d\xb2\x4d\xbf\xa8\x89\x73\xf4\x34\x78\x24\x94\x1b\x19\xad\xa9\xb4\xc1\xa6\x9c\x74\xb1\x1b\xd4\x62\xaa\x99\x68\xdc\xa2\xe6\xca\xff\xb7\xd7\x25\x9c\x19\xb1\xf0\x9a\x9c\x20\x14\x75\xf7\x27\xd2\xfc\x4e\x57\xba\xd0\x8b\xf5\x75\x65\x04\xcf\x9f\x6a\x65\x9d\x01\x23\x46\xef\xdc\xf7\x3e\x89\xe1\xff\x6c\x36\x30\x5f\xb4\xd4\xb7\x8c\x07\xca\x65\x3d\xc7\xe6\x90\xba\x5e\x2c\xb1\xcf\x3f\xfc\x08\xe3\x99\xd1\x03\x49\xfd\xe3\x87\x87\x54\xb6\x9d\xb2\xeb\xa6\x37\x3f\xa8\x15\x4b\x89\x70\x60\x76\xf0\x48\x76\xcb\xd7\x41\xa5\xf2\x99\xcc\x85\xed\x14\x9a\xc7\x05\x19\xd8\xb7\xc9\xfb\x17\xef\x5d\x5b\xef\x83\x9d\x5d\x3e\x13\x83\x5e\xe6\xee\x29\xa9\xf2\x9e\x8f\x18\x78\xe0\x63\x94\x6b\xe1\x84\xb4\x67\xa1\xc9\x5c\xf8\xbd\x18\x9a\xa6\x29\x75\xc8\x7f\x60\xab\xf3\xb8\xde\x9f\x28\xe3\x41\x6d\x69\x54\xf2\xbb\xeb\x1b\x31\x8c\x20\x7c\xd2\x7c\xdc\x37\x03\x43\xd8\x09\x64\x80\xbf\x55\x96\x3b\x69\xe7\x72\xf0\xc3\x2d\x3d\xaf\x03\x8c\x16\xd7\xd0\x94\x3b\x39\xbe\x7a\xd1\x95\x15\x59\x5d\x69\xa1\xc5\x5c\xaa\x8d\x63\x37\xc5\xf2\x36\x42\x56\x8f\x35\xd9\x1d\x70\x1d\x91\xc3\xc3\xc6\x69\xfa\x5b\x0e\x08\x27\xea\x54\x73\x81\x2f\x01\xe8\x3a\xab\xba\x9c\x09\x13\xb5\x2a\xc5\x85\x84\xfc\xba\x34\xfd\x9e\xe5\xcd\xc9\x22\x48\x44\x6d\x4c\x35\x7e\xc4\x2a\xb3\xb4\xe2\x2d\xd8\xae\xf3\x3b\x1f\xd9\x58\x4a\xb9\x0e\x8e\xde\xe1\xdc\x14\x49\x92\xc8\x90\x47\x26\x56\x32\xf7\x8f\x12\x51\x62\xd0\x50\xd0\x80\x06\xdf\xc2\xba\x7f\x43\x14\x4a\xb2\x5d\xed\xa0\x17\x5b\xe2\x20\x96\x5c\xe2\xd8\x2c\x1b\x1f\x63\x91\x7b\xcb\x8c\x9b\x98\x2c\xb1\x4b\x5f\x16\x9e\xc9\xec\x09\x94\x86\xae\x69\xc8\x67\x16\x32\xb9\x5c\xb5\xce\x35\xfc\x08\xa4\x9a\x88\xdc\x2d\x2c\xb8\xff\x37\x62\x0d\xc2\x71\x9e\xb4\x63\x91\xa8\x13\x70\xd0\xeb\x4f\x71\x4c\x88\x09\x62\xfc\x6f\xe3\xc2\x12\x05\xa4\xa9\x35\x1c\xa4\x94\x79\x3b\x7a\xd7\xe3\xa6\x49\x9e\x27\x48\x8c\xbc\x56\x5e\x58\x93\x46\x4f\xbe\x1e\xac\xa9\x6d\xa4\x26\xe0\xe3\x48\xac\x7f\xc5\x41\xcf\x21\xb7\xa3\xb7\xf4\x7a\x3b\x9b\x9c\xb6\x56\xbb\xf3\xca\x89\x32\x81\xa5\x79\x1e\x6f\x3d\xe6\x99\x93\x44\xf6\x73\xd4\x17\xea\x84\x5d\x6a\x77\xa1\xe8\x1a\xcf\x8f\x4e\xaa\xfb\x99\x16\xf6\x52\x3b\xf8\x9b\x7b\x3f\x34\xb8\x6c\xa3\x1d\x99\x90\x62\x83\xee\x79\x69\xfb\xea\x2d\x73\x00\x4e\x7b\xef\x30\x4d\xa9\xe3\x08\x4f\x53\xdd\xb4\xce\x45\xda\x2c\xb5\x09\x67\xa3\xcd\x0b\xd9\x04\xa7\x22\x8e\x2e\x84\x2a\xf4\xfc\x22\x90\xa9\x76\xc7\xe6\x77\xe3\x71\x4c\xfd\xf6\xee\x49\xee\x2e\xc1\x08\x3b\x1f\x97\x20\x7c\xfe\x9b\xa1\x8d\x2d\x77\x4b\x85\x06\xd6\x55\x01\xac\x24\x79\x9d\x74\x71\x18\x2a\x1f\x67\xb8\x13\x0b\x99\xb1\x52\x98\x85\x60\xd0\x54\x2f\xfd\x52\xa7\x1e\xa1\x24\xef\xb4\x3b\x11\xb2\x76\x81\x60\x04\xc2\xe5\xd1\x42\x1b\x94\x06\xba\x85\xf8\x65\x25\x87\x6c\xe0\xff\x6a\x10\x2f\xff\x9b\x55\x5c\x1a\x3b\x65\xb4\xe2\x65\x16\xd1\xf3\x5d\x89\x01\x4b\xd7\x99\x72\xc2\x6c\x7b\x6f\x98\xc8\x83\xc4\x04\x72\x56\x11\xa5\xea\xf9\x56\xa0\x78\xc2\x6e\x97\xda\x8a\x04\xaf\xb3\x79\xac\x3a\xb8\x11\xeb\x83\x93\x9e\xba\xa1\x87\xa1\x07\x17\xea\xa0\x85\xd0\x8f\xa0\x5d\x9b\x50\x06\x88\xfe\x0e\x40\xe2\xc1\xc3\x8a\x48\x13\x02\x8f\xc8\xeb\xc5\x8b\xab\x64\x1f\x3e\xe1\xf6\x87\xbc\x62\x62\xa6\xed\xf0\x25\x8a\x69\xf3\xff\xc4\x10\x20\x17\x0b\x23\xa0\xee\x10\x13\xeb\x90\x6c\x2f\x11\xf9\x5c\x2b\xb1\x12\xaa\x20\xa5\x9c\xa4\x0d\x7d\x3f\xf3\x00\xa0\xfa\xc7\x56\x82\xf3\xff\x7e\xa6\x2f\xb5\x8b\x2f\x04\xff\xa0\x3f\xb7\xa2\x3e\xb9\x93\x65\x5d\x62\xbb\x2f\xe7\xbc\x01\x93\xf3\xd0\x4e\x9f\xf4\x08\x85\x15\x3b\xfd\x8c\x5e\x4a\x1a\x9c\x35\xa9\x3d\xe6\xb8\x59\x40\xfb\xc8\xf0\x5a\x12\xaf\xf0\xa2\xd0\x33\x12\xa1\x40\x29\x95\xff\xf8\x29\x7b\xae\x0d\x13\x77\xbc\xac\x0a\x71\x82\x4f\x26\x5f\x4e\xfe\xa5\x15\x65\x05\x42\xd5\xc3\x09\x8b\x27\x2d\x94\x19\x39\xcd\x1e\x9f\x90\x1a\xd5\x85\x97\x1c\xc0\x25\x37\x65\x40\xbd\xf4\x33\xe5\x61\x2f\x3c\x56\x59\xf6\xf8\xf4\xf1\xe9\xa3\x27\xec\x47\xe6\x3f\xf8\x71\xf8\xe7\x17\x04\x91\xf8\x5f\x7e\xc9\x7e\x64\x3f\x32\xc6\xae\xe0\x6f\xda\x7f\xc2\xff\x05\x41\xea\x84\xc9\x79\x77\x2d\x1f\xfb\x0d\xca\x74\x19\x8e\x13\x65\x87\xb8\x6a\x29\x59\xc3\x2d\x02\x30\x2c\x4e\x9f\x14\x39\xce\x44\xa6\x4b\x01\x6b\xf9\xf8\x7f\x46\xa9\x00\x81\x77\x4c\x2b\x92\x48\xd8\x8e\x23\xd8\x8c\x63\x76\x0b\x8c\x96\x25\xbf\xc1\x64\xf9\x59\xe6\x6a\x5e\xf8\x25\x39\xfa\x62\xf2\x88\x02\x10\xd0\xaa\xff\x03\x2b\xa9\x0b\xee\x44\x5c\xe9\xa3\xc7\x24\x70\xc4\xe6\x66\x7d\x31\xca\x66\xf5\xf6\xc9\xaf\x26\x80\x95\xfd\xc4\x29\x73\x7c\x9f\x56\x8d\x0a\xf5\x4c\xad\x6f\xf9\x3a\x41\xad\xc6\xce\xf9\x0b\xb9\x12\x6c\x29\x17\x4b\xe8\x96\x13\xa9\x13\x68\x6f\x25\x41\xe7\xc9\xd8\x26\x0c\x27\xbe\x66\xd2\x4d\xd9\x85\x3b\x24\xd1\x1e\xf3\x26\xa3\x18\x68\x6c\x9a\xea\x53\x2a\x5a\xc2\x5f\x4f\xd0\xca\x8f\x22\x9a\x27\x20\x78\x07\x77\x28\x1c\x11\x82\xf2\xe5\x50\x5d\xd6\x79\x8b\x4c\x06\x9d\x35\x92\xa2\xbd\xa5\x39\xc3\x7a\x8e\xc4\xc0\xa0\xf5\xed\x94\x5d\xea\x3c\x9e\x84\x25\x5f\x91\x80\xcf\x21\x75\x19\xac\x8a\xb4\x4d\x9e\x5b\x02\x41\x4f\x46\x32\xa8\x1d\xa0\x76\xa6\xa1\x03\xaa\xc1\xbb\x30\x13\xc1\x88\x53\x4c\x15\x87\x26\x71\xe1\xf5\x9b\x7d\xd7\xca\xa6\x75\x9c\x61\x58\x9b\x80\x93\xfd\x33\xb6\xca\x3b\x98\xd5\xd9\x8d\x70\x07\x54\x0b\xed\x0c\xf4\x66\xad\x6a\xc7\x66\xbc\xe0\x2a\x13\xf9\x18\x2f\x9a\x4e\x63\x95\x2e\xce\x0e\xae\xba\xed\xdc\x5b\x82\x4c\x22\x61\x55\x82\xe3\xbe\xa5\x69\x53\x5d\xf8\xef\x36\x05\x26\x91\xf4\x07\xc0\x46\x2e\x78\x11\x4b\xbf\x2a\x9d\x77\xba\xfc\xa9\xc3\x43\x4a\xe0\x14\x35\x34\x78\x6c\xe8\x6c\xb5\x70\x9b\x29\x9b\x10\x44\xf6\xfc\x7e\x76\x14\x59\x2f\x98\x13\x45\x41\x8d\x63\x6c\x03\x34\xf2\xea\xda\xe9\xe6\x2f\xc0\xb4\x50\x66\xd9\xb7\xa3\xed\xe4\xda\x9f\xa2\x99\xc0\x66\x62\xb1\xa4\xd0\xfb\xe9\x6a\xdd\x10\xf4\x9f\x78\x37\xac\xa6\x6c\xd5\x42\xae\xbc\x83\xb2\x65\xaa\xfb\x86\x97\x32\x6b\xaf\xa0\xd1\x75\x5b\x8a\xa2\x62\x46\xe4\x75\x86\x1f\xc0\x98\xbd\x11\xb7\x14\xff\xe5\xac\x73\x8e\x18\x14\x2d\x34\x8a\xf6\xa0\x77\x2d\x28\xa4\xe7\x73\x6d\x18\x57\x3d\xa7\xcd\x5f\x05\x6f\x17\x34\x2d\xa2\x95\x73\x26\x56\xc2\xac\x59\xa5\xad\x95\xfe\xb6\x82\x25\x03\xd6\x00\x62\xbe\xa9\x69\x81\x05\xd5\xe0\xb0\xbc\xd1\x7d\x3d\x08\xce\x27\xe5\xdb\xb5\x62\x56\xf7\x4c\xcd\x46\x58\x48\x32\xb3\x18\x48\xbe\x2f\x2c\xa4\x5d\x05\x0c\x24\x3f\x6e\x58\xf8\xa5\x0f\x65\xc6\x0e\x0b\xaf\xe0\xff\x6d\x85\x87\x04\xa9\x17\x73\xb6\xc3\x0e\x34\xa1\x76\x4f\x55\x92\x5c\xf9\xee\x0d\xd8\x19\x31\xd2\xb6\x0e\x56\x11\x82\xae\x2f\x8f\xd1\x31\x82\xc0\xf1\xcb\xd3\x2f\x4e\x1f\x1f\xf9\x35\xff\x82\x12\xcd\x71\xdb\x0f\x09\x1f\x1f\xc7\x00\x2f\xfe\x16\xd9\x82\xf9\x90\xa3\x13\x14\xb2\x0b\x85\xf8\x62\x76\xab\x4d\x6e\x29\x4b\x0b\xc8\xd3\xc0\x0d\xe1\x57\xd6\xba\x50\xdc\x2e\xcb\xe8\x3b\x51\xc4\xce\x6a\xd7\xb1\x66\xb7\xda\xdb\x6d\x8c\x98\xa5\x63\xbf\x29\xb5\x11\xbf\xa1\x9c\x83\x66\x4e\x21\xd0\xda\x0e\x9b\xa8\xb1\xcd\x60\x6f\xea\x6e\xd2\x61\x5f\x2d\xa4\x75\x93\x92\x57\x93\x1b\xb1\x1e\x94\x8f\xa5\x82\x2d\xd3\xa0\x96\xdb\x73\xc7\x45\x28\x79\xf5\xb3\xa5\xac\x74\x51\x97\xc3\x92\xcf\x7d\xcf\xf1\x45\x80\x9f\x05\x41\x01\x88\x04\x19\x86\x41\x7b\x58\x22\xec\x91\xcd\xd6\x5d\x96\x9e\x99\x28\xb4\x5a\x20\xe6\x70\xb0\x37\x36\x80\x88\x2e\xd3\x2a\x13\x95\xb3\xa7\xd6\x69\xc3\x17\xe2\x34\x7c\xce\x70\x3e\x9b\x4f\x8d\xb6\x7e\x0b\x13\xed\x55\x11\x22\x33\xef\xc0\x1b\x84\x1f\xdc\x10\x40\xe1\x3e\x86\xe4\x3b\xcf\x80\x07\x62\xa8\xc8\xd9\xba\xdf\x0b\xa4\xc3\x5d\xf1\xc0\x01\xd7\x83\x89\x6f\xe8\x50\x2c\x7e\x6b\xcf\x0b\x6e\x9d\xcc\xfe\x52\xe8\xec\xe6\xda\x69\x93\x1c\xcd\x9d\x7d\x77\xbd\x25\x93\xa0\xa7\xbb\x67\x4a\xb1\xb3\xef\xae\xd9\x33\x69\x6f\x98\x11\x56\xd7\x86\x96\x75\x83\x66\xf4\xb6\x47\x97\xc0\x9b\x3e\x63\xa4\x8c\x1b\xb4\x8e\x2a\x79\xb6\x94\x4a\xc4\xd7\x0b\xc5\xc4\x5d\xa5\x31\x65\x48\x34\xa6\x23\xe8\x8e\x5f\xf1\x5b\x2b\x70\x1b\x66\x7e\x1b\xfc\xff\x2c\xa8\x86\xed\x1e\xfa\x6b\xe0\x67\x5c\x3c\x1b\xfc\x9f\xa6\xe1\x12\xe7\xf6\x0d\xb1\x91\xda\xe6\x35\x78\x2e\x0b\x81\xd5\x7a\xf4\x46\xa4\x4d\x97\xf6\xa0\x1f\xe1\x04\xaf\x75\xcd\x6e\x39\xf9\x5d\xdf\x69\xb4\x76\x53\xf6\x46\x56\x4f\xd8\xb9\xb2\xb5\x11\x0d\xd8\x91\xfc\xae\xdf\xfb\x58\xf0\xdb\x63\xdb\x1d\xa2\xc8\x50\xd1\x04\x37\x0c\x21\x02\xde\x10\x53\xeb\x1f\x71\x9c\x63\xe8\x67\x9f\xb0\x03\x71\xe7\x7e\x77\x70\xc2\x0e\xee\xe6\xd6\xff\x43\xb9\xb9\x25\x35\xed\xf3\xe3\xa2\xac\x0a\x99\x49\x57\xac\xfd\x7d\x15\xa6\x4d\x91\xe2\xcf\x50\x91\x0d\x9b\xad\xef\xc7\x57\x08\xc4\x99\xbd\x79\xf5\xec\xd5\x13\x48\xb4\xe5\x9a\xdd\x42\x87\xc9\x95\x50\x8e\x09\x63\xf4\x40\x16\xce\xce\xe7\xaa\xc0\x80\xd8\x1c\x25\xe0\x59\xcc\x74\x59\x19\x5d\x4a\x4b\x07\x61\xe1\xb3\x38\x28\xe9\xe1\x1a\x90\xa5\x63\x9c\xa0\xf4\x1e\xd4\xc2\x08\x7a\x05\x58\x83\xa2\x40\x2a\x75\x39\x7b\xaf\x56\xa1\xe3\x6c\x83\x56\xb9\x98\x33\x8d\xc0\x83\x1e\x53\x1a\x1d\xdd\x13\x15\x96\xd7\x08\x61\xc6\x6a\x30\x1d\x77\x3b\x5a\x1d\xf0\x5c\x9b\x28\xf0\x34\x17\xab\x53\x9b\xf3\xc7\x54\xf0\xae\x5f\x3e\xbc\xaa\xa8\xb6\xda\x1d\xe2\xd4\xfb\x70\xf0\xf8\x60\xca\xae\x65\x29\x0b\x6e\x8a\xf5\x49\x77\xc7\x1a\xe9\x54\x75\xad\x4d\xf3\xc9\x00\xa0\x7a\x74\xc0\x8e\x90\x84\x8c\x8a\x98\xe2\x8a\x15\x82\xaf\x44\xe4\x6e\x83\xa6\x48\x88\xca\x3c\x26\x04\xd4\x2c\xf9\xc1\x90\x25\x3e\x1a\x32\x70\x60\x78\xfe\x4a\x15\xc4\x22\x85\x0d\x1e\xdd\x70\x3a\x0e\x9c\xa9\xc5\x01\xfd\x9a\xcd\xb5\xc9\xd0\xd7\x84\xcc\xd8\x52\xb0\xd7\x61\x96\xa9\xbd\xa8\xa4\x0a\xf1\xdc\x4b\x7f\xdd\xe0\xe2\xe1\x64\x13\x50\xc5\xbb\x54\x01\x9c\x38\x60\x6c\x25\x5b\xdc\x07\xe1\x1b\x33\x32\x8d\x6c\x3b\xa2\x9b\x3b\xc6\x09\xfb\x56\xc9\x7f\xd6\x82\x5d\x3c\xa3\xb0\x92\xb7\xa3\x12\xc6\x4a\xeb\xbc\x3d\xcf\xbb\x11\x17\xdd\xd6\xf8\xe0\xed\xe8\xac\xe4\xff\xd2\x8a\x9d\xff\xe5\x3a\x7c\xf4\x31\x7a\x34\xe4\xc3\xfa\x50\x36\x9f\xe4\x16\xf0\x7f\xd5\x46\xf8\x80\x36\x31\xda\x3e\x8b\x72\xd2\x6a\x6f\x7c\x84\xed\x25\xb1\x67\xdc\x71\x0c\xb4\xd1\xe6\x6a\xea\x1b\x3f\xf8\xed\x5e\x4b\xcd\xa0\x7e\x39\xb6\x76\x20\x77\xf4\xbc\xb7\x40\xd4\xdf\x01\x52\xd7\x24\xfc\x4f\xbf\x7d\x7d\xf1\x89\x43\xd8\x0c\x3c\xdd\xc5\x4b\x9d\x8f\x12\xc7\xfe\xd5\x6f\xe4\x53\x94\xc9\x4a\xb2\x50\xc6\x2e\xb5\x12\x27\x60\xac\x98\xb7\x56\xe1\x5f\xbf\x33\xd2\x0d\x63\xee\x6e\x47\xa2\x5b\x1e\x77\x76\x84\x55\xf2\x4e\xf9\x65\xa7\xa7\x49\xce\x1d\xb5\xf6\x00\x74\x6e\x88\x85\x66\x85\x9e\xb1\xa0\xbf\xee\x6b\x85\xbe\x7d\x7d\x31\xd2\x02\x7d\xfb\xfa\xe2\x97\xb4\x38\xa3\xa5\x8a\x36\x32\x45\xc9\x11\xd8\xcb\x50\x12\xc5\x3b\xb1\x34\x35\x4a\xf4\xf3\x69\x1b\x28\xef\xcc\xc9\x10\x45\x87\x4c\x0e\x3b\xbf\x9b\x7e\x8e\xd9\x98\xfb\x38\x71\x37\x52\x11\x6b\xc5\xfb\x2a\xfd\x3c\x30\x56\xa7\x55\xe1\x41\x2b\x88\xfc\x09\x2b\xeb\xc2\x01\x41\x30\x5c\x48\x7f\x43\xa9\x12\x2b\x61\xe2\x85\x66\xa1\xd9\x12\x63\xcf\x04\x42\xc1\xc8\x55\xf2\xa1\xf4\xaa\x99\x5d\xf7\x67\x88\x22\x9b\xc9\xbd\xe4\x8a\x2f\xfc\x22\x80\x3f\xc7\x4a\xfc\x23\x55\xb9\x79\xdf\x0b\x66\x78\x04\xd8\x04\xa9\xa2\x40\xc6\x57\x5c\x16\x7c\x26\x0b\x49\x8e\xee\xac\x70\xc7\xd3\x18\x82\x41\x70\x07\x8d\x62\xf2\x7b\x31\xbd\x23\x06\xd6\x5d\x5e\x4f\x08\x2a\x89\xeb\x73\xe4\xe7\x74\x7a\xeb\xdd\x91\xe3\x69\x1b\x53\x2f\x05\x39\x44\x01\xa2\x2f\x0c\xd7\x7b\x61\x3a\xa5\x07\x53\x3b\x36\xa2\xf4\x14\x45\x44\x0b\x5b\xe1\xa8\x7b\x9b\x35\x46\xe8\xe2\xe5\x8c\x14\xba\x80\xa8\xd0\x1c\x6a\x1f\xbd\xc0\x98\x30\x2b\x32\x23\x1c\x31\x7e\x01\x05\x41\xfa\x6f\xd3\x22\x98\xbd\x76\xf8\x7c\xb5\x03\x03\x53\x13\x0f\xdd\x08\x3b\xd8\xed\x3a\x8c\x82\xc9\x2f\x1e\x5d\x92\x22\xd4\x19\xd7\x49\x6e\x40\x6c\x59\x09\x91\x9f\xd7\x16\x43\xc9\xee\x9a\xa9\xa5\x59\xd3\xe6\x9e\x8e\xb0\xdc\xd8\xee\x8d\xdc\x26\x3a\xe1\x4b\x32\x51\x2d\xe7\xa9\xac\xd0\x4f\x45\xb5\x7c\x7e\xdd\x07\x24\xf9\xbf\x23\x7c\xcc\xf3\xeb\x9e\x15\x41\x9b\x80\xb5\x5a\x7e\x8d\x68\x05\x5a\xd8\xa6\xa4\x90\x73\xe1\x24\x61\x89\xef\xcd\x8e\x94\x5a\x49\x47\x79\xdb\x4d\x64\xbf\x0b\x3f\x3b\x46\xd4\xf3\x3a\x7e\x3e\x7b\x49\xfd\x18\x1c\xc0\x99\x96\xe9\xa2\x10\x19\xbc\xf0\xe9\x39\x1c\x31\xfa\x1a\xe1\xd8\xf1\xa6\x11\xa0\xea\x76\x7a\xf3\x07\x48\x6c\x87\x14\xf6\x29\x5e\x95\xd3\xd7\xe7\x67\xcf\x5e\x9e\x4f\xcb\xfc\x57\x4b\x7d\x3b\x71\x7a\x52\x5b\x31\x91\x2e\xc5\xa3\xbf\x27\xa2\xbb\xe4\x07\x76\xb7\x1c\xe3\x88\xb4\x7d\x08\xbf\xb5\x40\xdf\x9d\x02\x38\x08\x90\x52\xa3\xb5\x3b\xe9\xf6\xbb\x4d\x90\x39\xaf\x8b\x02\xcf\x9a\x33\x42\x9c\xa4\xbf\xad\x0f\xea\x65\xdc\x99\xcb\x83\x89\xfe\x0e\xb7\x5a\x47\x92\xf7\x2c\x38\x88\xef\x71\xf5\x88\x52\xbd\x83\xf8\x3e\x57\x8f\x1e\xc8\xbb\xd0\x8b\xad\xe7\xea\x8d\xf7\x9a\xf6\xe9\xd5\x4e\xaa\xaf\x49\x0b\x47\xd9\x4f\x9c\xa6\xeb\x46\x6e\x02\x72\x05\x80\x20\x6e\xe9\xcf\xd6\x8d\x58\x33\x20\x28\x9b\x93\x99\x6e\xbe\xb5\xc2\x9c\x74\x1f\xd1\x4f\x85\xcb\x60\x53\x4e\x6b\x2b\xcc\x34\xc9\x3b\x7e\x10\xd6\x87\xee\x01\xc3\xa7\xbf\x16\xf3\x8f\x71\x08\x5e\x0b\x2a\xfa\x01\x68\xc4\x02\xf7\x4a\xcc\x1f\xf0\xda\x2d\xb1\x1e\x3b\x01\xc0\x83\xdf\x0b\x38\x9e\xcd\x53\x41\x94\x18\xf8\xd3\x1e\xc4\x31\x48\xe0\x36\x4a\x67\x25\x55\xe4\x38\x8a\x6d\x9d\xa4\xce\x93\x20\x59\x22\x8b\x47\xc8\x0d\x46\x80\xea\x95\x30\x2b\x29\x6e\x4f\x6f\xb5\xb9\x91\x6a\x31\xb9\x95\x6e\x39\xc1\xd5\xb5\xa7\xd0\xdd\xf7\xf4\x57\xf0\x8f\x84\xd9\x21\x16\xf4\x2c\xcf\x43\x15\x59\x6d\xc5\xbc\x2e\xb0\x92\x2a\x89\x87\x91\x57\xf2\xad\x30\x16\x0a\x81\x6f\xa4\xca\x4f\x58\x2d\xf3\xaf\x68\xe7\x8a\xa5\xab\x18\xaf\x62\x47\xf7\x31\x0d\xfd\xc2\x42\x57\x7e\x9e\x6b\xa0\x27\x31\x70\x6c\x47\x70\x08\x79\x5e\x4a\xf5\x30\xb4\x00\x2d\x89\x20\x55\x4e\xd9\xa7\xfe\x1e\x3d\x05\x29\xa9\xcd\xd1\x70\x2e\x11\xb3\xd9\x54\x9d\xf0\x98\x51\x26\x3d\x14\x69\x15\x2b\x56\x6c\xaf\xfa\xa4\xab\x1c\x28\x09\xef\xf7\x6c\x73\xb9\xb6\xff\x2c\x26\xf8\x25\x93\x2a\x6f\xf7\x79\x5f\x4a\xf2\xa1\xf1\xd0\x4a\x49\xda\xc2\x8f\xcf\x0d\x20\xb0\xbb\x68\x83\x28\x36\x80\x0b\x76\xc1\x04\xe8\x0b\xdb\x80\x0b\x46\x81\x09\xfc\x2c\x6f\x7c\xc4\x9b\xc9\xf6\x21\xfd\x80\xf1\x8b\x08\xe9\x3f\xca\xe9\x49\x8d\xe2\x47\x8f\xdf\x2a\x2d\xe9\x34\xad\x50\x1d\x1a\x02\x2d\xb4\x5a\xf1\xf5\x88\xae\xd3\x2a\x6e\x78\x29\x9c\x30\x2d\xa9\x5c\xa6\x95\xc2\xee\xcd\x44\x99\xaf\x2a\xa1\xae\x1d\xcf\x6e\x92\x50\x94\xfb\x98\xab\x37\xf6\x31\xd7\x43\x88\xb9\xc6\xac\x8e\x88\x14\x03\x79\xbc\x79\x54\xbd\x0a\x6c\x7a\xa1\xcc\xab\xe5\x2d\x40\x55\xfa\x6f\x61\xef\x33\xad\xe6\x72\xf1\x92\x57\xa9\x6f\xb5\x51\x4e\x22\x00\xa8\x9d\x50\x7c\x9e\x05\x06\xa9\x4a\x57\x75\x41\x6d\x33\x2b\x6d\xd8\xdb\x4f\x1b\xe6\xa4\xa9\xd2\x10\xfd\x8f\x85\xfc\x6f\xed\x68\xa9\x73\xc1\x66\x92\x6c\x4a\xa3\xad\xb3\xc2\x21\x2f\x35\xf2\xc9\xfb\x60\x36\xc3\x56\xb9\x44\xc1\x10\xbf\xf8\xa8\x23\x7c\x7a\x27\xb6\xa1\xa6\x56\x75\xe6\x78\xe8\xf3\xde\x90\x5f\x3f\x7a\xf4\xe8\x11\x91\x47\xd2\x8f\x47\xff\xf9\x9f\xff\xc9\xb4\x61\x9c\xe5\x22\x93\xe5\xa6\x78\xaa\x54\xc8\x24\xfc\xc7\xe3\xc7\x53\xf6\xb7\xb3\x97\x2f\x80\x27\xa5\x72\x96\xcd\xb4\xa3\xc0\x1d\x58\xf3\xed\x5e\x6c\x6f\xa2\xf6\x84\xfd\x3f\xd7\xaf\x2e\x89\x42\x43\xe8\x6e\x37\x64\x26\x3c\x84\x34\xc7\x71\xda\xc3\x77\x3d\xfa\xfd\xef\x7e\x47\x55\xc0\xcf\xa4\x01\x86\x35\x29\x90\x80\x2d\x92\xc5\x70\xf2\x5a\x72\x23\x90\x30\x17\x5a\x7e\xc7\xd8\x18\x09\xcd\x1c\xa9\x05\x2f\x8e\x37\x5e\x46\x29\x17\x4b\x17\x38\x58\xbd\xf6\x2b\x64\xe6\x60\xde\xd4\x8d\x07\x37\x42\xc3\x85\x0f\x2c\x4a\x38\xef\x44\x4e\x08\xd8\xaa\x13\x56\xc8\x1b\xc1\xe6\xf6\x6b\xa3\xeb\x8a\x4a\xc8\xca\x62\xce\x53\xd8\xba\x88\x24\x4f\x61\xe2\xfe\x57\x88\x22\xfd\x31\xf2\x5b\xf2\xd9\xd6\x28\x27\xe0\x2e\x7a\xea\xfe\xa2\x97\xb8\x38\xa1\x32\xf1\x32\x6c\xeb\x36\x41\x0d\x57\x71\xd9\x10\x2f\x41\x69\x21\xb8\xa8\xd4\x43\x3a\x0f\x07\x20\xbc\xa8\xe5\xad\x07\x41\x94\x18\x3a\xbc\x7b\xb3\xfb\xdf\x78\x49\x81\xa1\xb7\xf5\xec\xa8\x77\xdf\x86\xdc\x5a\x68\x98\x02\xf8\xc5\xa4\xe6\x74\x91\xcb\xd9\x47\xa0\xa1\x6f\x63\xd3\xeb\x84\x5c\x28\x33\x67\x9d\xfd\xf6\xe2\x0a\x69\xfd\x22\xdc\x88\x35\xd5\xd2\xff\xc4\x8a\x36\xbf\x45\x8e\x9d\xdd\xd2\x22\x4f\x66\xad\x3a\x33\x85\xdf\xa4\x06\x9e\xda\xe1\x6c\xc1\xfb\x04\xf2\x0a\x1e\x3a\x09\x52\x53\x39\xf1\x2b\x43\x1b\x91\x40\x9b\x1e\x7e\x81\x9c\xcb\x81\x15\x6c\x8e\xfb\x49\xfa\x11\xb5\xc2\xd5\x15\x6e\x17\xb0\xb6\xf8\x35\x15\xd6\x22\xe3\x3d\xd5\x2e\x73\x73\x23\xf2\x60\x46\x78\x31\x65\x57\x7e\xcb\xa0\x45\x17\x55\x3b\x8b\xd0\x04\x70\x85\x00\xdb\x92\xaf\x61\x39\x43\x22\x26\xc1\x8c\x1c\x4e\xa7\x87\x08\xce\xd0\x86\x59\xc7\x4d\x92\xfd\xf4\xd2\x3e\xf7\xfe\xb2\x2f\x79\x65\xb1\x53\x99\x54\x8b\x84\x1e\x4f\x21\x73\x06\x6b\x1b\x5c\x29\x1e\xce\xea\xbf\x6d\xaf\xd5\x04\x3f\xf2\xa1\xf5\x59\x7d\x13\x3a\xe8\x26\xf6\xe3\x0c\x06\xe2\xde\xfb\x5a\xa6\x54\xb4\xb3\xf7\x87\xcc\x49\x6b\xd3\xc4\x37\xdd\xc0\x39\x6d\xb5\xfb\x41\x37\xc4\x21\xde\x3f\x49\xeb\x93\xd9\xc6\xda\xdd\xa8\x39\x49\xe4\x66\xc4\x0d\xb1\x73\x92\xc4\xd1\xe3\x6e\x1c\xef\x89\xbe\xd3\x3e\x5e\x7b\x73\xb4\x19\x83\x27\x89\xec\xc6\xef\x4d\x24\x9e\x24\x71\x3b\x8a\x4f\x09\xbf\x70\x60\x2c\x7f\x31\x07\xdb\xde\xfa\xa4\x49\x32\x3b\xe9\xd9\x4e\x5e\x2c\x49\x64\x74\x6e\xfd\xad\x9c\x76\x02\xf1\xc4\x13\xbf\x15\xc4\x63\x54\x9b\x76\xea\x47\x0d\xe5\x71\xbc\x2f\xa0\x4f\x12\x1a\x5b\xbe\xf5\xc2\xfa\xb4\x4f\x6f\x52\x02\xa9\xc1\x3d\x8e\xf4\x10\x1f\x47\x6a\xa0\x8f\x83\x5e\xea\x80\x63\xcb\x96\x47\xff\x3a\xcd\xbe\x80\x23\x3d\x6f\x08\x1c\x01\x6c\x42\x0e\xcb\x71\xb8\xc6\xd1\x98\xb2\x97\xc1\xef\x4f\x3c\x1a\x5c\x31\x3e\xb3\xba\xa8\x1d\xa6\xf6\x40\x70\x92\xc4\x4e\x30\xd2\xc2\xbd\xd3\x1a\xaf\xe2\x80\x88\xa2\xf9\xee\xe4\x00\x05\x07\x84\xe1\xe8\xdf\xd3\x23\x96\x20\x2a\xcd\xf9\xa2\xbf\xf8\xbe\xf7\xb5\xb7\x7d\xb3\x1d\xef\x11\xee\x5e\x5f\x7a\x3f\xca\x2b\xef\x98\x2f\xbc\x89\x67\x40\x27\x39\xcb\xfd\xaa\xd5\x40\xae\x78\xbb\x14\xa1\xce\x8a\xaa\x28\xda\x47\x49\x6d\x98\x37\x1f\x90\x62\x0a\x5d\xc6\xc9\x61\xf6\x5c\x2a\x62\xde\x2b\x05\x59\x93\x59\x99\xfa\x44\x7b\x7d\xc1\x8e\x9e\x36\x14\xfa\xf4\x72\xe9\x0b\xe5\x84\x99\xf3\x4c\x1c\x77\x51\xb5\xa2\x5a\x8a\x52\x18\x92\x8f\x1b\x89\x62\x22\xab\xfb\x92\xab\xbc\x08\x2d\x1c\x84\x21\x66\x87\xc4\x9d\x13\x46\xf1\x02\x3e\x3c\x37\x72\x25\x8c\x65\x47\x7f\x11\x8e\xb3\xb9\xe0\xae\x36\x82\xd0\x45\xf3\xfe\xa8\xeb\xe0\x03\x3e\xf5\x23\x34\xfc\xe8\x18\xd4\x0d\x20\x28\x66\xba\x07\x37\x45\x68\x47\x30\x0f\xed\x96\xc6\x3e\x8b\xfe\xc0\xd0\xe1\xf7\x0d\x44\x60\xea\x95\x06\x78\xaf\xe0\xbc\xaf\x75\x4d\x75\x13\x11\x7d\x8f\xdd\xb0\x04\xcb\xb4\x31\xde\x6f\x87\xd7\x03\x72\x2d\xaa\x11\x0b\x69\x1d\x74\x13\x0b\x3e\x4a\x68\xd5\x73\x2f\x14\x56\x0f\x96\x34\x6d\x7c\x1a\xb2\x79\x48\xfc\xeb\x95\xcc\xe3\x03\x0b\x54\x59\x25\xa5\x49\xa4\x65\x15\xb7\x21\x2d\x04\xf5\x64\xd6\xea\x4c\x26\x60\x28\x3a\xf7\x02\x9f\x2c\x20\xcc\xcd\x85\x13\xa6\x94\xa4\x8e\xd9\x2c\xb8\x9a\xb1\x28\xad\xdb\x1d\x40\x33\x5e\x55\xc5\xfa\x5e\x0e\x9f\xd2\xb9\xb8\xaa\x67\x85\xb4\xcb\xeb\x11\x01\xa7\x97\x3b\xc4\xd2\x77\x97\x6f\x97\x0c\x26\x15\x76\x6e\x41\x57\x99\x15\xca\xca\x84\x90\xcf\xbb\xc8\x3e\x94\x95\x5a\x41\x8b\x54\x6e\x6d\x9c\xe9\xd3\xeb\xe1\x6c\xa7\x38\xa2\x66\xd6\x40\xf8\x5f\x08\x27\x1a\xa5\xdd\x59\xdf\xb7\x49\xaf\xb2\x2a\x07\x59\xdf\xaa\xaa\x2b\x8d\x65\xbc\x28\xc8\xfe\xf4\x1b\x4c\xa5\x8a\x22\xf7\x9b\x17\x5d\x5a\x7c\xa6\x64\x25\x39\xba\x9c\x45\x5d\x21\xbd\x1a\x89\x30\x64\xa8\x27\x45\x7f\x20\x41\x2d\xb5\x47\x6a\xe3\x70\x90\xdf\xfd\x34\x76\x10\x51\x4c\xab\x28\xfa\x84\xf1\xa2\x48\x3b\xb9\xcd\x3d\xc0\xfe\xc3\xa8\xf6\x52\x14\xc7\x1e\xe3\xdc\x1b\x7b\x8c\xf3\x43\xc0\x38\x8f\x58\x39\x73\x1d\x32\xe7\x68\x44\x78\x3e\x21\x76\x78\x65\x0d\xc8\xb7\x36\xa8\xe6\xa3\x4b\x9a\xf6\x8c\xbb\x45\xc6\xd6\x2f\xcc\xf9\xe4\xf1\x31\x6b\x20\xe6\x67\xce\x19\x39\xab\x1d\xf5\x7a\xef\x68\x8a\xd7\x8a\xa4\x22\x34\x9c\x06\xd4\x24\x18\xc6\x49\x78\x15\xc9\x3a\x9a\x88\xec\x99\x71\xd7\x51\xa8\x1d\xd3\x1d\x7e\x8b\xba\xbd\x31\x0a\xf2\x01\x50\x10\x75\x68\x59\xae\xb3\xba\x14\xca\xa5\xd0\x1d\xf8\xe3\xd7\x16\x19\xe2\xcb\xd3\x3d\x19\x02\x9e\xe7\x12\x6d\xfc\x55\xb2\x49\x48\xd0\x1c\xb9\xbe\x55\xb7\xdc\xe4\x67\x57\x04\x76\xee\x7e\x98\xdd\x4a\x4a\xc3\xe1\xc7\x29\x31\x2f\x89\xcf\x74\xed\x9a\xc6\xde\xfe\xc8\x51\x52\x3c\x7d\x20\xff\x1e\x96\x3f\x32\x2c\xdf\x69\x6f\x55\x3b\x28\xfc\x6d\x3c\x3d\x35\x95\xde\x54\x18\xef\x8b\x08\xf6\x45\x04\xfb\x22\x82\x7d\x11\x41\xc2\xdd\xdc\x17\x11\x7c\x70\x3c\x98\x22\x02\x2f\x07\xb3\x58\x05\xb6\xe6\xa6\xa6\x83\xba\xce\x44\x80\xf1\xcc\xa9\x64\x6c\x0f\x07\x63\xdb\x71\xb6\x30\x4a\x48\x20\x98\xeb\xb5\x48\xee\xe7\xe4\xc8\x12\xd1\x90\xb6\x30\x8e\xe4\x82\xf7\xa6\x9f\x71\x52\xe5\xc7\x83\xc0\xff\xde\x33\x86\x17\xd6\x8f\x9c\xb0\xc6\xf1\x1e\x42\xdc\x24\x4c\xc9\xb5\x28\x44\xe6\xb0\xe0\x45\x14\x79\x7a\x5a\x0a\x5a\xe7\x3f\x61\xd0\x02\x83\x2b\xa5\x31\x72\xb4\x69\x30\xb3\x82\xcf\x44\x61\x4f\xc2\x5b\x9a\xca\xe1\x5f\x6c\xc5\x49\x8d\xc4\xdb\xe1\xed\x73\x13\x98\x8e\x80\x32\x4b\x3a\xe2\x6c\x84\x63\xce\xe0\xa8\xc3\x4e\x5e\xd1\xcf\x3b\x1b\xe9\xcc\xb3\x5e\xba\x2e\x4d\xce\x66\x92\x06\x65\x26\x8a\x6c\x1e\x97\x6d\xb6\x14\x25\x4f\x3e\xf9\x7e\x3c\x8f\x8b\xef\xed\xe8\xad\x91\xce\x25\x42\x95\x59\xa8\x20\x12\xa6\xb4\x4c\xcf\x1b\x96\xb8\x34\x1c\x30\xc3\x00\xf2\x60\xf5\x98\xfc\x44\xda\x88\x19\x03\xc8\xcf\xa2\x8e\xbc\x4a\x44\x48\xb2\xcd\xa3\x72\x85\xe0\xc6\xf4\xd5\x02\xab\xea\x75\x24\x44\xb1\x45\xda\x4d\xc7\x11\x42\x8c\xb6\xea\xec\xec\x8a\xfa\x02\xd7\x8e\x15\xde\x8d\x07\xb1\xad\xff\xde\xf5\x19\x69\x46\xaf\xdc\xd7\x67\xec\xeb\x33\xf6\xf5\x19\xfb\xfa\x8c\x84\xb1\xaf\xcf\x18\x36\x46\xad\xcf\x18\x29\x44\x8b\xce\x64\xd8\xc8\xb1\xea\x3d\x54\x07\x7b\x4f\xce\xcd\xc4\x81\x24\x9a\x21\x91\x1f\x32\xf0\x4a\x27\x5f\xdd\xa6\xdc\x43\x9b\xc4\xa2\xf1\x30\xcd\xa5\x60\x87\x87\xd3\xe9\xe1\x61\x2c\x20\xa1\x17\xb7\x37\x93\xac\xdd\x7c\xf2\x07\x26\x54\xa6\x73\x54\x5c\xa9\x7a\xc0\x58\x07\x49\xab\xb6\x32\x62\xac\x3d\x2f\xc3\xbe\x8c\x55\x91\x82\x6b\x99\x7e\xfd\x13\xbd\xcc\xd8\xe3\xfe\xf9\xe8\x49\x96\x26\x3d\x92\xb4\x4c\x4d\x0f\xfe\xb0\xa1\x59\x84\xe4\xa7\x29\x06\xc8\xb1\x44\xd9\x96\x15\xb2\xa4\x3f\xcf\xe1\xf0\xe6\xc2\xbb\x31\xc2\x3a\xcb\x8e\x50\xe0\x34\xab\xea\xc4\xec\x0d\xca\x29\x45\xa9\xcd\xfa\xa4\xf9\x01\x2f\x78\xb4\xd9\x06\xe9\xc7\x8c\x93\x29\x57\x71\x64\xb5\x31\x42\xb9\x62\xfd\x4b\xcc\x0c\xc5\xc3\xf2\x00\x12\x43\xcd\x1d\xa0\x77\xbe\x6b\xc7\x06\xff\x7b\x14\x9d\x1c\x4a\x03\xea\xaf\x59\xfb\x84\xe7\xca\x76\x04\xe6\xfd\x93\x06\x6c\x9a\x2c\xd1\xc7\x08\x42\xad\xd8\x8a\x1b\x9b\x72\x52\xd9\x98\xb9\x9c\x5c\xae\xa4\xd5\x89\x0a\xee\x7d\x00\xb9\x51\x72\x39\xba\x76\x55\xed\x82\xdf\x38\x56\x22\x51\xdc\x55\xda\x8a\xbc\xd5\xca\x69\x9a\x93\xb5\xf8\x13\x78\xde\x3e\x78\x4c\xed\x7f\x1e\x47\xc5\x9d\x13\x46\x3d\x61\xff\x75\xf4\xee\xb7\x3f\x4e\x8e\xbf\x3a\x3a\xfa\xfe\xd1\xe4\x8f\x3f\xfc\xf6\xe8\xdd\x14\xfe\xe5\x37\xc7\x5f\x1d\xff\x18\xff\xf0\xdb\xe3\xe3\xa3\xa3\xef\xbf\x79\xf9\xf5\x9b\xab\xf3\x1f\xe4\xf1\x8f\xdf\xab\xba\xbc\xc1\x3f\xfd\x78\xf4\xbd\x38\xff\xe1\x67\x0a\x39\x3e\xfe\xea\xd7\x89\x13\xe7\x6a\xfd\x2a\xc9\xb0\x33\xd0\x80\x63\x85\x1b\x5d\x69\x23\x5c\x17\xc6\xee\x26\x2d\x66\x77\x22\x95\x9b\x68\x33\x41\xc1\x4f\x98\x33\x89\x79\x9f\x78\x1c\xc7\xd5\xb3\xe3\x84\x37\xdd\xf9\xb5\xa9\xd5\x7b\x54\x64\x80\xdc\x7f\x26\x93\xdb\x90\x9c\x07\x39\xa9\xfc\xb8\x4e\x94\x95\x36\xdc\xac\x59\x1e\x10\x2a\xeb\x51\x1a\x99\x76\x3a\x99\x0e\xc6\x90\x87\xf2\xcd\xd8\x47\xe6\x57\xb0\x66\xb9\x34\x9f\xb8\xaf\x48\x62\x7b\x52\x91\xcb\xba\x1c\x03\xd4\xf7\x9d\xdf\x0e\x28\x64\xd3\xf3\x58\xda\x4a\x05\x36\xc1\xa4\x22\x78\x72\xc6\xb3\x1b\xcc\x27\x37\x7b\x4f\x07\x0d\x89\x6e\xf7\xb9\x83\x83\x50\x2f\x56\x0a\x4e\x2e\x1d\x09\x10\x44\xa8\xf0\xd4\xb9\xf0\x47\x2a\xfe\x04\x7e\x47\x32\x02\x51\x85\x42\x9a\xc0\x7b\x70\x14\xc4\x1f\x53\x41\x4e\x86\xbd\x84\x40\xe1\x1e\x4f\x3c\x1b\xa1\x61\x9e\xfc\x97\x78\xe1\xa3\xaa\x31\x0e\xef\x1b\x0d\x29\xf1\xd0\x2d\x99\xfa\x50\x56\xe8\x8c\x17\x4d\x59\x77\xd7\x65\x86\xf3\x4b\x94\xda\xe8\xd0\x58\xab\xeb\x4f\xb1\xff\x7a\x0c\x2a\x89\x52\xa5\x65\xbc\xb0\x58\xcb\x28\x33\x3e\x2b\x04\x26\xda\xe1\x64\x24\xdd\x5b\x9c\x60\xc9\xef\x64\x59\x97\xac\xb6\x7e\x2d\xc8\xcf\xd4\x38\x9f\xa8\x11\x9a\xa5\xb8\xf5\x9a\x81\x0a\x75\xc3\xcb\x5a\x4a\x05\x13\x1c\xe3\xc1\xc6\xcb\xbb\x8e\xe7\xb1\xf3\x94\x99\xd0\x5c\x3f\x66\xad\x6d\x0d\x39\xb0\xb0\x0e\x49\xf9\x0d\x3d\x87\x8a\xb6\x26\xea\xb4\x0c\x88\x0d\x2b\x4d\x2e\xc5\xdb\xd0\xa7\x4a\x16\x63\x28\x54\x30\x24\xcb\x70\xbc\xbd\xdc\x5a\x05\xfe\x89\x91\x78\x51\x76\xab\xb9\xda\x0a\x33\x59\xd4\x32\x1f\x4b\xc1\x7d\x66\x71\x46\x42\x74\x31\x46\x4c\x31\x42\x24\x31\x72\xfc\xd0\x70\x7b\x24\x7a\xc1\x07\xe7\x51\x50\xaa\x1b\x1c\x5e\x1b\x77\x10\x86\xf0\xc8\x89\x40\xb1\xa4\xc1\x60\x85\x02\xe6\xa3\xb3\xa2\x5a\xa6\xb0\x85\xa0\x5e\xc0\xb9\x06\x07\x3b\x5b\x67\x05\xf2\x47\x4b\x6a\xe7\x92\x6e\x25\x4e\xe0\xa3\x01\xae\xdf\x89\xff\xff\x88\x04\xca\xed\x7b\x0d\x9b\x89\x39\xd6\x00\xe3\xaf\xc0\xe3\x00\x29\x73\x81\xef\xea\x85\x70\x40\xa0\x2c\x54\x23\x12\x4a\x9f\x4b\xbd\xa2\xa9\xb1\x77\x8a\x7d\x6b\x43\x01\x91\x9c\x3f\x61\xfc\xb8\xd7\xbe\x85\x72\x9e\x20\x77\xae\x84\xc8\x91\xea\xb9\x68\xbf\xde\xd4\x34\xb4\xe2\xec\x38\x1e\x1b\xeb\xad\x8d\xd2\x06\xde\xf1\x51\x9b\xc2\x93\x2e\x41\xa8\x11\xfe\x80\x42\xe3\x69\xa3\x4b\x66\x15\xaf\xec\x52\x3b\x78\x0f\xe3\x15\xcf\xa4\xa3\xf8\x2b\xef\xfc\x91\x32\x3c\xbb\xf1\x82\xa1\x48\x01\x16\xe2\x84\x65\xc7\xc4\x67\xec\x8d\x6b\x24\x6d\xc7\x11\x70\x4b\xa3\xeb\x05\xe5\xa1\x89\x37\x72\xb3\x82\xdb\xc0\x1e\x9e\x1f\x07\x22\x34\x6a\x94\x15\xe6\x18\xd2\xfb\x96\xe5\x6b\xc5\x4b\x99\xc5\xe3\x04\x94\x1f\x56\x6a\x22\x6c\x3a\x7c\x2d\x4e\xff\x4a\x18\x2b\xad\x13\xca\x21\x5e\xfc\x69\xc1\x25\xa5\x57\xe3\x91\x15\x82\x35\x9a\x14\x65\x5d\x63\xc6\x04\x11\x22\x24\x57\xeb\xdd\x06\x1b\x84\x56\xf1\x75\x4a\x89\x8c\x58\xef\x19\x11\x46\x9d\x62\x3f\x0c\x8c\x51\x3b\x10\x24\xee\x5c\xc3\xe3\x69\x54\x0a\x63\x2d\xb1\x36\x40\x7f\x10\xf2\xb8\x2b\xa1\x72\xdd\x29\xdb\x3d\xbb\xba\xa0\x68\x19\xbf\x39\x51\x03\x80\xee\xae\x70\xb6\xf0\x3f\x14\x5a\xd1\xfc\x05\xe0\x6a\x40\x27\x31\x5a\x17\xef\xde\x2a\x26\x55\x2e\x57\x32\xaf\x49\x8f\x0a\xde\x15\x8e\x8b\xfa\xf4\xfa\x02\xa7\x28\x17\x4b\x37\xb9\x15\x44\x18\x0e\xc6\x84\x8d\x2b\xd1\x2c\x85\x9c\x27\xd0\x8d\xb4\x2a\xc6\x3b\xda\x2e\x40\x0f\x10\xca\x47\x2b\x54\xbd\xe5\x6b\x36\x61\xfe\x8a\x01\xed\x4d\xb7\xe2\x99\x8e\x87\x0f\xd3\x8c\xd7\xb3\x7b\xd1\xfc\x32\x13\x24\x9e\x81\x79\xca\xb8\x82\x9c\x0b\xa0\xd9\xfc\xcd\x02\x6b\x93\x42\xc5\x16\x77\xc5\x2b\xd7\xaa\xb9\x4d\xed\x5f\x53\x96\x14\x34\x34\xf7\x77\x5f\x96\x62\x3a\xfc\xd1\xe2\x1e\xb3\x82\x7b\x46\x87\x07\xc0\xe8\x00\x5a\xfc\x8d\x28\xab\x82\xbb\x31\xca\xae\x0f\xbe\xeb\x80\x0b\xe9\x25\x56\xa1\xc0\xca\xfb\x25\x5c\xe5\x13\x5e\x78\x93\x71\xf5\xf6\x29\x5d\x62\xe3\x6d\x74\xb7\x13\x62\x88\x4a\x53\x93\x3c\x52\x85\x4c\x04\x18\xe1\x9d\x6e\x03\x3d\x71\x26\xca\x99\xc8\xc1\x6b\x0e\x2b\x0a\x6f\xa9\xb7\xf4\xd7\xf6\x60\x71\xaf\xde\x3e\x3d\x61\x72\x2a\xa6\xf1\x4f\x29\x8d\x61\x66\xa2\x09\x43\x9c\x5e\x20\xa9\x28\x40\x3f\xe9\x20\x4d\x30\x8f\xb0\x31\x5d\xe0\x5c\xfa\x3c\xff\xf1\x27\xaf\xd5\xbd\xcc\x3f\x4f\xfe\x14\x1c\x26\xf8\xd3\x3f\x88\x32\x6f\xa1\xc3\xf1\x3f\xfa\xb2\xd2\xda\x17\xc1\x17\x43\x00\xe2\xbf\xf9\x1f\x57\x3a\xf7\x9a\x6d\x8a\x07\xca\x52\x27\x0a\x15\x9d\x4c\x28\x67\xd6\x53\x76\xa5\x81\x19\x44\xe6\x29\x44\x23\x70\x24\x8d\xf8\xef\x00\xc7\xc5\xc8\xb3\x81\x5c\x65\xdc\x09\x95\x40\x34\x10\xdb\x40\x29\xed\x70\xaa\xa0\x85\xb9\x3f\x03\x44\x89\x47\x00\xdd\xc0\x4e\xa1\x27\xcc\x69\x0d\x3e\xe1\x31\xd1\x3f\xf0\xe3\x4c\x31\x71\x27\x2d\xb4\xa3\xc6\xb3\x09\x87\x9e\xbb\x14\x06\xce\x98\x72\xf1\x1f\xee\x6f\x7a\xd3\x28\x9e\xae\xa2\x60\xa7\x7e\xa3\xb4\xfb\x4d\xa3\x94\xa3\x49\xa3\x0b\x75\x9a\xf1\x95\x86\x16\xb1\x10\xd8\x2a\x56\x2b\xc0\x4e\x92\xb7\x3c\xdc\xa1\xd9\x9a\x95\xd2\x3a\x7e\x23\xa6\xec\xda\x71\x93\xd0\x16\xbf\x93\x10\x71\x4b\xa1\xd8\xac\xd0\xd9\x8d\xc8\x59\xad\x9c\xa4\x6a\x11\x2f\xb3\xf9\x52\xd8\xf6\xb4\x74\x0b\x0b\xdd\xc5\xea\x6c\xc9\x38\xab\x8c\x98\xc4\x44\x11\xca\x26\x3f\x67\x6c\xb8\xeb\xed\x29\xa2\xa2\x64\xa2\x0a\x5e\x72\xf0\x61\xea\x2a\x87\x69\x26\xe0\x5a\xb9\x42\x63\xb6\x4d\xe3\x48\x3f\x97\x5a\x65\x6d\x7a\x09\xae\xa7\x9d\xb2\x4b\xc8\x0f\x91\xdd\x41\xa4\x91\xc0\x47\xe2\xd0\x06\x4d\x89\x4c\x58\xcb\xcd\x9a\xba\x9a\xb3\xda\x31\xe9\xa0\x4b\x17\x6e\xd1\xbc\x2e\x30\x8d\x57\x72\x55\x27\x4c\xd6\x88\x4c\x2b\xeb\x4c\x9d\x81\x62\xe2\x6c\x66\xf4\x8d\x50\x69\x54\xb6\x90\x16\xec\xf3\x37\x36\x3e\x76\x02\xbf\x84\xd2\x2c\x5b\x72\xb5\x10\xb6\xf1\x70\x4a\x9e\x83\x0e\xf8\xa6\x49\xb0\xd3\x15\x54\x3c\xb1\x7c\xee\x7c\x10\xeb\xe0\xe8\xce\xe8\xaf\x6f\x0d\xe4\xfe\x9d\x62\x11\x8f\x73\xd2\xe0\xbc\xe9\x6e\x89\x92\x05\x21\x6c\x63\x63\x00\x5e\xd3\xa0\xae\x13\xc8\x3c\xd2\xde\xac\x92\xa1\xad\xa5\x70\x3c\xe7\x8e\x8f\xc4\x14\xf9\x92\xaf\x9b\xf6\x14\x58\x02\x9f\x80\x8a\xf2\xe1\x7d\xa7\x20\x1f\xad\x7a\x82\xef\xca\xc2\x1b\x82\xae\x64\xb7\x4f\x24\x78\x1d\xcb\xa4\xf2\x3f\x38\xd3\x5e\x51\x48\xe7\xf5\x64\x28\x39\x42\xea\xc8\x94\x05\x30\x82\xf1\xa2\xd0\xb7\x22\x87\xc5\x08\xd7\x3b\x41\x22\xba\x9a\x22\x67\x79\x0d\x39\xfa\xd6\x81\xa5\x17\xdf\x8e\x80\x17\xf7\x17\x60\xa4\x13\xf8\xa6\xad\x4e\xce\x52\x3c\x73\x16\x92\xa1\x70\x42\x76\x65\x6c\x53\xaa\x95\xfd\x24\x85\x72\xd2\x88\x6e\x83\x55\x3c\x98\x09\x62\x6b\x85\x86\x60\xe3\x70\x13\x93\x8c\x71\x2c\x84\xb3\x2d\x61\x1b\xc6\x54\xde\x19\x0c\xb9\x8e\xd4\x75\x80\xa4\x1b\x5e\x15\xc6\x11\xe4\x90\x20\x71\xe7\x56\x25\x96\x58\x00\xf2\x06\xe3\x27\x1f\xa9\xde\xeb\x4d\x19\xab\x9c\x81\x67\xde\xf5\x7a\xa9\xf3\xd4\xaa\x88\x3e\x32\xeb\xac\x15\x9b\x24\xb5\xa9\xb6\xb0\x81\xd8\xdd\x7a\xfb\x9a\x28\x12\xbf\x19\x2a\x41\x6d\x7a\x43\xdb\x38\x82\x4b\xbb\xe4\xab\x1e\x28\x35\x51\xea\x10\x80\x5f\x9b\x02\x9f\x44\x28\x0c\x7e\xea\x04\x3e\x75\xf2\x38\x0d\x9a\x9c\xca\x66\x15\x47\x12\xab\x55\x7f\x32\xc9\xf8\x75\xef\xf2\x5c\x8f\x00\x30\xdf\xc0\x25\x36\xbe\x7d\xea\xe1\x47\x9e\xb8\x86\xed\x01\xbb\x0d\x25\x0a\x15\xd2\x7b\x25\x4f\xd8\x6f\xba\x39\x97\x44\x99\x21\x43\xdb\x3c\xf2\xa7\x16\x8d\x31\x78\x3a\x0e\xe2\xa6\xe1\x80\x4f\x6f\xfe\x00\xa7\xbf\xff\x63\x54\x40\x6d\x1c\xbf\xd9\x4a\x3d\x1d\xed\x7e\xb8\x1d\xf5\x77\xb2\xda\x3a\x4d\x79\xed\xed\x8e\xb6\xf8\x00\xf2\x5c\x65\x85\xfd\xdf\x52\x55\xae\xbf\x14\x91\xfc\x56\x6a\x15\xa0\x45\xa9\xdf\x7f\xa1\x98\x36\x39\xb6\x5a\xa8\xad\x18\x7b\x05\xe0\x3d\x31\xd1\xc3\xf1\xa3\x59\xc5\xcd\x65\x48\xad\x87\xf2\x86\xe6\x4c\xad\xf1\x44\x3d\x6b\xf4\x4e\xa2\xd4\x00\xdc\x61\x0b\xee\x44\x62\xb7\xb0\x38\x84\xe2\xb3\xc2\x07\xe6\xa1\x65\x43\xf3\xd0\x93\x5c\x76\xa4\x0d\xc0\xe2\x63\xaf\x2b\x6f\xda\x8d\x2e\x8a\x64\xb9\x5e\x4d\x06\x50\xcc\x28\x1d\xff\xe3\x80\x13\x80\x07\xec\x24\x01\xaf\xd6\x9b\x6a\x7c\x87\x53\xe2\x76\x1c\xbf\x63\xc6\xbd\x75\x68\x11\x30\x6e\x04\x0d\x10\xc9\xc5\x1a\x24\x94\x5f\x89\x54\xff\x08\xd6\x31\xa9\x22\x79\xb4\x9a\xe4\x71\xaa\x92\xa1\x39\xbb\x24\xe7\xeb\xa2\x88\x84\xf7\x0d\x1c\x63\x15\x36\x03\xe7\x1d\x50\xb7\xa4\xd7\xc5\xf5\x1c\xa2\xb3\xab\x0b\x10\x9b\x2c\x95\xc5\xae\x6c\x0b\x2f\x6e\x94\xaa\xe6\x86\x97\x17\xed\xc8\x4c\xa4\x3b\x43\xac\xdb\x43\x06\xf5\xe8\xb8\x2b\x30\x22\x1b\x12\x8e\xfe\x65\xff\x26\xf5\x4c\xe3\x88\x2c\x60\xb1\xfb\x1b\x0d\xea\xb7\x39\xce\xae\x2e\x70\xf7\xa7\xec\x39\xd8\x93\x54\x77\x98\x35\xd4\x40\x6e\x29\x4d\x3e\xa9\xb8\x21\x41\x53\x37\x07\x78\x24\x27\x23\xef\x7c\x6a\x17\xa6\xfe\xf4\x46\x2a\x00\xf6\x3a\x70\x64\x8d\x31\xd2\x11\x0c\xda\x22\xd6\x37\x8e\x40\x22\x11\x07\xe8\x89\xce\x2d\x7f\x48\xfb\x91\xd6\xf1\x29\x8e\x7e\xab\xb9\x54\x1b\x85\xa3\xd3\x53\xf3\xdf\x64\x3f\x1a\x3a\x85\x31\xf3\x0b\xaf\xa3\xd0\xe4\xe8\xa9\xe1\xf1\xee\xd4\xd6\x8d\x14\x92\xfd\xd2\x53\x6b\xcd\x77\x3e\x10\x8f\x76\x3c\x2f\x10\xcb\x15\x47\xd6\x20\x87\x2f\xd2\x49\x9e\xba\x62\x67\xe1\x80\x85\x8a\xd5\x11\xe4\x36\x75\xc4\xd0\x09\xb2\x76\x63\xa8\xa5\xf6\x32\x84\xf7\xbb\x74\xc3\x3d\xb8\x5f\x7c\x0f\x7f\x7b\x5a\x72\xc5\x17\x62\x12\x3e\x71\xd2\x4c\x70\xd2\x14\x98\x9e\xa6\x32\x58\x8c\x78\xa8\xd9\xc8\x9d\xaf\xba\xe3\x33\x2b\xf4\xdc\x58\x94\x31\x48\x65\xd8\xe8\xc4\x32\x6c\x6c\x72\x19\xf6\xb1\x09\x66\x58\x43\xc4\x36\xb6\xc2\x7b\x1d\xe4\x8e\xaf\xf2\x46\xb1\xd3\xec\xa3\xab\xbc\xf1\x82\x15\x40\xf5\xc5\xf5\x84\x7e\xb7\xa5\x74\x74\x70\x64\x77\x20\x12\xb6\x51\x7e\x63\x44\xd3\xd2\xf5\xa8\xaf\x46\x33\x7c\x00\x08\x46\x40\xab\xb8\xab\x0a\x99\x49\x47\x06\xb6\x75\x47\x9b\x4a\xc0\x40\xf8\x56\xda\x31\x0e\x82\xd3\x50\xd9\x15\xf3\xe9\x60\x7e\x26\x81\x12\x60\x04\xf1\xc0\x00\x31\xa2\x3b\xc8\x7e\xa6\x4b\xb8\x37\xa7\xbb\xc7\xde\x9c\xb2\x7f\x7b\x73\x8a\x0c\x68\xa9\xe4\x89\xfd\xdc\x31\xe2\x07\xd9\x3f\x6b\x41\x66\xb8\x89\x43\xaf\x44\xa7\xaa\x55\x7b\xad\x6f\x65\x9e\xbc\x4b\xde\x84\xcc\xa4\xca\x13\xfa\xe2\xe1\x78\x80\xb1\x60\xc9\x5d\xb6\x3c\xbf\xab\x8c\xc0\x2e\x11\x23\x3b\x49\x9b\xe2\xc7\xc9\x31\x35\x4d\xe0\xf0\xec\x8c\x61\x22\xc3\xc1\x8e\x3e\x0d\x3c\xb3\x8f\xe1\xd7\xbc\x59\x8a\x9e\xcc\x31\x74\x99\x11\xec\xec\xf2\xd9\x78\x49\xe2\x74\xc8\x0f\x1b\x0b\xf6\xc3\xde\xa3\x1e\x46\x10\xbb\x7b\x93\x47\x11\x0c\x47\x32\x4a\x1f\x45\x22\xf8\x81\x11\x1a\x37\x8a\xc4\xd8\x10\x84\xb3\x1b\x41\xae\xc3\xe8\x0f\xc4\x6d\x33\xaf\x8a\xf8\xa8\x1f\x8e\x05\x43\x29\x75\x81\xfd\x71\x23\xa0\xee\x22\xa9\xc1\xf7\xc6\x34\xc7\xf4\xd8\xc6\x7a\xad\xc6\x31\xf1\x9f\x3b\x8a\x9c\x11\x37\x76\x3c\x83\x85\xe3\x46\x10\xab\xe0\xb7\x47\x4f\xdd\x8c\xb3\x74\x38\xc2\x63\xc8\x78\xfa\x8b\x85\xa3\x1c\xa9\xd8\x46\x13\xda\x28\x46\xa0\x1d\x1c\x81\xc5\x3a\x0e\xa7\xc7\xb8\x6c\x6c\xdc\xe7\x33\x1c\xf1\x70\x7f\x94\x63\x34\xaa\x4a\x64\xbd\x97\x9c\xd1\x44\x82\x21\x38\xb4\xa1\x87\x87\x56\x76\x29\xc7\x78\xc4\xc6\xe1\x34\x58\xc4\x04\xd6\xce\xed\x11\xb4\x37\x7b\xcb\x0b\x39\x46\x82\x01\x47\xdc\xaa\x11\x17\xd6\x08\x76\xa1\x4e\xd8\xa5\x76\x17\xc9\xa8\xc2\x76\x9c\x43\x79\x66\x42\xfd\xe0\xf6\x78\xa6\x85\xbd\xd4\x0e\x24\x3f\xd8\x8b\x8a\xdb\xfe\x51\xae\x29\x8a\x1e\x53\xe1\x73\x35\x92\x37\x1d\x07\xb0\x36\x8f\xb6\x96\xac\x73\x8d\x2e\xc6\xbb\x99\x40\xb4\x31\xb6\xca\x93\x16\x21\xc5\x63\xdf\x23\x78\xb5\x1e\x77\xe3\x91\x2f\xa2\x4c\xed\xd8\xd4\x1d\x33\xc1\x94\x56\x13\xa0\x3a\x1d\xeb\x6a\xb2\x88\xf8\xfd\x18\x7b\x85\xea\x69\xbc\x73\x6f\x7a\xda\xe9\xdf\x70\xfb\x47\xde\x7a\xa8\x59\x19\x57\x37\x01\x5e\xad\x2a\xf8\x18\x70\x9c\x38\x42\xbd\x2a\xf7\x5a\x8f\x3b\xb1\x90\xb4\x82\xe9\x5d\xa3\x14\x66\x21\x58\xc5\x5d\xb6\x1c\xd7\xd8\x8d\xb9\xaa\xa3\x65\x51\x70\x8c\x68\x8d\x21\x95\xf7\x02\x6a\xbd\x3f\x46\x92\xf0\x45\x6a\x15\x79\x1c\x90\x8c\x29\x79\xe5\x4d\xe7\xff\xba\x11\xeb\x13\xb8\xed\xff\x7b\x94\x17\x10\x69\xec\x94\x9d\x31\x2b\xd5\x22\xb1\x2d\x21\x8e\xce\xfc\x02\x8c\x76\x04\xa1\x9d\xe5\xf4\xeb\x30\xce\x92\x8a\x7f\xd6\x72\xc5\x0b\x01\x3c\x29\xa3\x3c\xc8\x30\x11\xea\x70\xf4\x7c\x2b\x4d\x3c\x86\xba\xbf\x5d\x6a\x2b\x20\x5e\x1e\xa3\x52\x8f\xe1\x32\x1c\xdc\x88\xf5\xc1\xc9\xd8\x46\xd4\x0b\xbe\x50\x07\x27\x91\x5e\x7e\xac\xd7\xd3\xa0\xf0\xc7\x4c\x24\x02\x87\xc9\x01\x48\x3f\x48\xef\x28\x89\xa3\x9b\x1f\x4f\xee\x92\x87\x63\xd4\xfc\xf8\x03\x7f\x98\x1d\x49\xc7\x07\x28\xe4\xd3\x82\x5b\x9b\xde\xf9\xae\x0f\x95\xb9\x44\x40\x70\xe2\xc7\x42\x3f\x87\xce\x2c\x9b\xb4\x69\xa2\xdc\xc0\xf6\x94\x01\xdb\xc3\x83\xc1\x9f\x02\xb1\xf4\x38\x35\xdd\xc9\x67\x03\xe7\xf4\x32\xb1\x65\xfe\x66\xf4\xdd\x08\x4d\x5c\xe8\x48\x3b\x7f\xdb\xe9\x75\x94\x28\xb2\x21\x70\x6f\xfb\xc5\xcc\x52\x5d\xbc\xce\x19\x7b\x0b\xdd\x4d\x92\x67\xf9\x5c\x16\xc2\xae\xad\x13\xa5\x9f\xa9\x2c\xab\x22\xbd\x26\x12\x58\xb5\x94\x76\x4c\xaa\xac\xa8\x73\xe0\x18\x49\x14\x09\x1f\x0d\x28\xa4\x31\x9e\xcf\x47\x3a\xcc\x23\xab\xb8\xb7\x8d\xd0\xc4\xc5\x0a\xaf\x06\x01\x6f\xd0\x56\x3c\xa4\x1e\x3e\xbd\x93\xe1\x26\x55\x73\x06\xa6\x7e\x20\x8a\xc9\x52\xd9\x72\x92\x76\x78\x4e\x20\x16\xea\xed\xe0\xf3\xa7\xdd\x7a\x09\xce\x9e\xcb\x19\xc9\x15\x79\xba\xe4\x4a\x89\x62\xb3\x78\xdf\x32\xee\x1c\xcf\x96\xa4\x0b\x0a\xe9\x74\x6f\x47\x0a\xe1\x0e\x2d\x5b\x6a\xeb\x58\xc9\xb3\xa5\x54\x82\x98\x10\x06\x8a\xc7\xd8\x13\xb4\xe5\x11\x1c\xbe\x7d\xf7\xc8\x87\x3d\xb7\x6f\xfc\x8f\x93\x4e\x5c\xdf\x3f\xe9\x28\x52\xff\x3d\xc4\x33\xec\x34\x03\xbc\xed\xb4\x6d\x12\x07\xfd\xeb\x51\x32\x55\xa8\xb7\x67\x4d\xc3\xe7\xe8\xab\xc0\x09\xc0\x08\x84\xae\x0c\x71\x5e\x53\x76\x7e\x37\x65\x07\xe2\xce\xfd\xee\xe0\x84\x1d\xdc\xcd\xad\xff\x87\x72\x73\x7b\x40\xa6\xe8\x2c\x23\x7a\xd5\x3b\x52\xc2\x18\x3c\x63\x33\x11\x7e\x86\x28\x56\xce\x59\xad\x1a\x30\xeb\x94\xbd\x79\xf5\xec\xd5\x13\xb6\xd4\xb7\x2c\xa7\x86\xa4\xb7\x82\x55\x46\xac\x7c\x18\x2a\x8c\xd1\xd8\x7c\xcb\x2f\x70\xf2\xbe\x01\x81\x56\xa6\xcb\xca\xe8\x52\x5a\x54\x92\x22\x5e\xda\x7b\x69\xcd\x57\xd4\x6a\x8c\xbb\xf2\x2a\x74\x87\x06\x8d\xe9\xb8\x59\x08\x6a\x68\x54\xd4\x8a\xa9\xba\x9c\x89\xa4\x56\x85\x29\x48\x4c\x6c\x7c\x00\x32\xbe\xfc\x82\x20\x61\x44\x46\xfe\xce\xba\x46\xf2\x7b\xba\x1a\xda\x41\x99\xcf\x5e\x87\xb9\x12\xa5\x02\x77\x37\x10\x13\xce\xb5\x09\xac\xb1\x89\x22\xad\x70\x48\xa6\xa8\x82\xfb\xf4\xd2\x6b\x4f\x4b\xa4\x90\x48\xa5\xf7\xc7\xa3\xfc\xdd\x77\x97\xc4\xa0\xfc\x63\xdd\x92\x5b\x6d\x8a\xfc\x56\xe6\x58\x56\x6b\xd9\x91\x9f\xe2\x71\xca\x1a\xd1\xf3\xd5\x49\xd9\xe9\x44\xf5\x75\x7b\x2b\xf3\xf1\xb7\x26\xa9\x7e\x15\xb6\x86\xc1\xde\xc8\x5c\x28\xe7\xed\x92\xb1\xec\x08\xa6\x4a\xe5\x53\x3a\x97\xd8\x14\xc0\xcb\x80\x6e\x5a\xba\x9c\x49\x95\x42\x71\xa9\xe7\x9d\xc3\x0d\x39\x46\xaf\x79\xd3\xc8\x84\xac\x70\x27\x40\xcb\x0c\x14\xcf\xda\x2d\x99\x95\x65\x5d\x38\xae\x84\xae\x6d\xb1\x4e\xba\xc4\x9f\xdf\x01\x9d\x17\xe2\x0e\x75\x58\x6a\x14\xd2\x08\x4a\xed\x4a\xb8\x10\x4a\x98\xb6\x79\xd8\x66\x38\x42\x90\xd9\x12\x45\xe5\xa7\x31\x98\x69\x19\xed\xc5\x1d\x89\xdc\x18\xe9\x8d\xaa\xa2\x5e\x48\x02\x37\x6d\x52\xf4\x41\x47\x5d\x4e\x42\x13\xa5\x4f\x1c\xf0\xe0\x8f\x8e\xa0\x03\x9f\x35\x9d\xaa\x22\x5d\x43\x82\x6a\x59\x36\xcd\xf5\x02\xf3\x5b\x62\x67\xe5\x94\xce\x41\x89\x36\x66\xb4\x88\x72\x23\xa0\xa4\xbf\x99\xed\x03\x4a\xb6\xd1\xd1\xb8\x5d\x00\x96\x8b\x4a\x28\x32\xf3\xb6\x56\x5d\x6d\x8b\x9b\x77\x2f\xa7\x4e\xc3\xa1\x19\xd9\xb7\x39\xbf\x73\x86\x4a\xe9\x96\xe9\xb2\xf4\x6e\x42\x98\x98\x0f\xbc\xb9\x4a\x33\xe9\x09\x6f\x68\x63\xbe\x9b\x25\xee\xd4\x3e\xde\xfb\xe5\xc4\x7b\x56\x64\x46\xb8\xd7\x82\x58\x16\xfa\xbe\xcd\xbc\x8e\x62\xa9\x49\x2e\xbb\xdd\xe0\x05\xa7\x9a\xf6\x0e\x1d\x30\x00\x7e\xfd\xad\x50\x56\x3a\xb9\xea\xb5\x7e\xa4\x1f\xbe\x8a\x5b\xdb\xa4\x90\xc1\x8f\x0b\xca\x94\x5c\x69\x03\x58\xb5\xd0\xec\x05\x60\x70\x5e\x03\x29\x1d\xd6\x81\xaa\xee\x61\xf5\x7a\x0d\x80\x23\x05\x2a\xf9\x3c\x77\xb6\xa5\x25\x32\x27\xf6\xbc\x65\xb1\x7f\xaa\x56\x71\xc7\x4f\x18\x2f\x8a\xf0\xef\x54\xed\xc0\x8d\x80\x1d\xea\xa4\xf9\xfb\x7b\x74\x4f\x5a\x3d\xbd\x22\x28\x8d\x06\x6d\x27\x40\x21\x11\x7c\x13\x2e\xae\x9b\x0e\xa5\xf0\xd1\x2b\x61\x56\x52\xdc\x9e\xde\x6a\x73\x23\xd5\x62\x72\x2b\xdd\x72\x82\xab\x6b\x4f\x21\xef\x73\xfa\x2b\xf8\x47\xc2\xec\x30\x5d\x7e\x96\xe7\x81\x0e\x31\xb4\x51\xc2\x96\x0c\x29\xef\x76\xbc\x92\x6f\x85\xf1\x81\xe1\x09\x70\x05\x9e\xb0\x5a\xe6\x5f\xd1\x81\x0b\x49\x71\xb8\xce\x6e\x28\x21\xd2\x46\x10\x0e\x52\x7a\xef\x81\x84\xaf\x89\x62\x42\x04\xde\x84\xcc\xfd\xd7\x3c\x82\xe0\xee\xfb\xdf\x14\xb5\x65\x70\x85\x03\x4f\x70\xc2\x64\x03\x69\x33\xb3\xfe\x44\x46\xc2\x54\x66\x6a\x45\xea\x3a\x7e\x8f\xaf\x83\x39\x77\xdc\x0a\x47\x7f\xe7\xdf\x22\x48\x6c\xa2\x5d\x94\x4c\xb5\x1a\x4e\x1b\x91\x33\x6e\x9b\x9e\x4c\x6c\xf2\xe7\x40\x99\x48\xb6\xc2\xed\xac\x20\xfa\x8e\x9b\x89\xc4\x7a\x44\xa1\xd0\x42\x09\x09\x14\x70\xbe\xb9\xbf\x0e\x19\xb9\x69\x61\xa2\xef\x1d\xbe\xef\xdb\x6f\x2f\x9e\x8d\xb0\x9f\x5e\xcc\xc6\x7e\x26\x79\x2b\xd2\xb2\x5a\xc9\x7f\xd6\xdd\x4c\x30\x1d\xe0\xc3\x9b\x1d\x4c\x39\x6b\x09\x0b\xbe\xc8\x44\x0b\x15\x79\x26\xed\x4d\xa2\x46\x3d\xfc\xfa\xe9\x79\x5f\x60\x6a\x7a\xf3\xeb\xa7\xe7\x2c\xc8\xf9\x48\x38\x8b\x8f\x0b\xb4\x48\xc3\x19\x0e\xc1\x16\x46\x40\xe1\x22\x13\x2d\xcc\x30\x97\xf6\x66\xb8\x85\xbe\xb7\x74\x6b\x95\x93\xa0\x55\xbf\x2c\x7c\x49\x50\x57\xc1\x9d\x80\xe3\xbe\xd6\x35\xbb\xe5\x64\x1a\x8b\x16\xb1\xf2\x46\x56\x4f\xd8\xb9\xb2\xb5\x11\xa9\xf5\xe5\xf3\x8d\xdc\xa7\x8f\xb8\x62\xba\xf1\xff\xb0\xf7\xed\xcd\x8d\xe4\xd6\xbd\xff\xe7\x53\xa0\xe4\x5b\xa5\x99\xb5\xc8\x99\x8d\xd7\x5e\xdf\xa9\x54\x5c\x5a\x49\xeb\xe8\xee\x68\x46\x91\xb4\xe3\xba\x65\xfb\x26\x50\x37\x48\xe2\xaa\x1b\xe8\x05\xd0\xd4\x30\x71\xbe\x7b\x0a\x07\x40\xbf\xd8\x6c\x36\x01\x48\x94\x62\xe2\x9f\xd9\x95\xc4\x43\x3c\xcf\xf3\x77\xce\xf1\x15\x45\x7d\x4e\x4a\xe7\x6e\xf4\x8d\xb3\x99\xee\xc6\xf2\xc3\xab\xc4\xbe\xec\x68\x60\x6c\xe5\x05\xbe\xb2\xaf\x01\xc1\x59\x07\xd3\xf8\xae\xb5\x0b\xc1\x59\x07\xd3\x04\xe8\x49\xfb\x84\xe0\x14\x58\x28\xf0\x65\xc6\x60\x2a\xd0\x8a\xdf\x11\xf4\x47\xe9\x6e\x62\x29\xc1\x31\x8b\xcb\x99\x2b\xe3\x78\x62\x9b\xbb\x81\x9b\xd3\xdf\x2f\xe6\xb8\x95\x66\x07\x8d\x1e\xf2\xe1\x0c\xe0\x47\x5e\x19\x69\xef\x52\xb2\x7c\x27\x53\xfc\xad\x6f\x0a\x92\xde\x3e\xdb\xc7\xcb\xc8\xfa\xea\x84\xb0\xef\x7b\x38\xfa\xf6\x68\x8a\x6e\x69\x4e\x33\x2c\xb2\xd5\x49\xf3\xc4\x2a\xea\xbe\xbc\x9a\x8b\x6a\xc9\x90\x86\xf4\xfe\x08\xbd\xe1\x42\xaf\xc2\xd7\xcf\x88\x19\xca\x08\x5e\x12\xd7\x5b\x48\x0b\xe0\x95\x71\xe3\xbd\xf5\x3d\xaa\xd8\xdc\xee\xb5\xe2\xcd\x8c\x1a\x14\x83\x79\xfc\x6c\x8c\x15\x16\xec\xf7\xba\x3e\xaf\x35\x70\xca\xb4\x5a\x3e\x45\x3f\x1b\x5d\xd7\xf7\xa5\x1b\x03\xca\x3c\x1f\x7d\x5a\x15\xdd\x2b\x7f\xcf\xea\x0b\xb9\x3c\x2f\x22\xf2\xe4\xc2\x38\x75\x8c\xc7\x9f\x7b\x74\x22\x43\x8d\x18\x8f\x27\xcd\x56\x64\xa8\x0a\x8d\x55\x41\xae\xff\x09\x1c\xc4\x2f\x66\x35\xa7\xea\x86\x14\x1e\xd6\x62\xc7\x10\x37\x64\x42\x7d\x9b\x73\xaa\x34\x09\x2e\xa9\xe2\x62\x85\xb0\x42\xd8\x08\xa3\xa4\xcc\xb0\x40\x82\x18\xa4\x90\xcf\x71\x9d\x5f\x5c\xdf\x5c\x9c\x9d\xde\x5d\x9c\x7f\x40\x6e\xb6\xb4\xe9\x7d\xf2\x21\x7a\xc7\x6b\xf8\x52\xb3\x1e\x34\x7a\xa4\x6a\x11\xb4\x03\x27\x56\x29\xc1\x0c\x5d\x68\x21\x77\x4e\x05\xb4\x65\xf6\xf1\x6a\x30\x74\xc9\xa8\x3a\xab\x26\x67\xca\x00\x66\x9c\x79\x17\xc3\xd3\x33\xb4\x18\xad\x39\x55\x27\xc6\x1d\x61\x26\xac\xdf\xad\x9b\xb1\x07\xe5\xba\xf5\x34\x4f\x8f\x8f\x65\xbd\xa5\x1e\x11\xa5\xbd\xf9\x15\xea\x2b\xfc\xdc\xde\x69\x2a\xa0\xe4\x5a\x0c\x86\x7e\x07\xe0\xce\x9a\x64\x40\x3c\xcd\x22\x8d\x18\xaf\xe2\x99\x88\x0b\x24\x15\x16\xde\xf0\x65\xfd\xbe\x8e\xa7\xd3\xe3\x29\x94\x9f\x39\x9e\x1e\x3b\x87\x40\x16\xd0\xdc\xac\xa1\x02\x57\xcb\x0e\x6c\x9b\x0f\x6d\xe7\x5a\x5c\x6d\x8a\xd0\x67\x57\x2f\xdd\x77\xa2\x74\xd6\x2c\xbf\xde\x98\x76\x80\xd8\x75\x27\xb3\x3e\xe3\x30\x2b\x50\x96\xf7\xcd\xcd\x54\x0b\xfb\x0d\x4b\xe2\x4b\xd5\xdf\x3c\x0b\x56\x97\xdc\x96\x44\x78\x5f\x37\xf5\xfe\xfe\x7c\xf3\x71\x3f\xcb\x31\x92\x2b\xc2\x62\xce\x78\x9e\x53\x85\x16\x58\x2e\x2c\x50\xd3\x1b\xfe\x50\x35\x14\x0c\x91\xf6\x61\x61\x8a\xac\x94\x8a\x88\x99\x07\x0b\xee\x68\x45\x8e\x50\x70\x58\xa2\x22\x64\x5b\x6f\xb0\xda\x73\xe9\xd9\xbd\x58\x2e\xb0\x20\x52\xeb\x57\x46\xd0\x66\x74\x46\x14\xcd\x43\x7b\x23\x38\x35\x98\x58\x37\x88\xeb\xbe\x6d\x55\xde\x77\xd5\xde\xbe\xbb\xb9\x38\x3d\xbf\xba\x98\xe6\xe9\x2b\x12\xec\x84\xa5\x05\xa7\x3e\xa7\x38\x41\x05\x56\x8b\x67\x56\x07\xaa\xe9\xc6\xb0\xef\x2e\x1c\x31\x08\x5a\x7b\xe3\xb0\xf5\xbd\x75\xf3\x32\x8e\x02\x50\x47\x53\xa2\x30\xf5\xae\xd4\x54\xbf\x0f\xc5\x0b\x9e\xf1\xf9\x2a\x42\xc5\x0d\x8f\xab\xfc\x2b\xd3\xa8\x79\x82\x27\xfa\x55\xed\xc7\x17\xac\x16\x31\x4e\xfb\x1a\xab\x85\x43\xf2\x57\xbb\xeb\xb9\x91\x95\x57\x51\x2d\x7a\x43\x0c\xaf\x6a\x83\x5f\xb8\xcb\xa4\x7e\x09\xce\xfb\xee\xeb\x30\xbb\x27\x46\xd8\x90\xd4\x68\x6d\x7a\xe1\x13\x28\xd4\x54\x10\x91\x53\x53\x52\xcb\xd7\x71\xb2\xee\x81\x79\xdd\xef\xd5\xcf\xf9\xa2\xe5\xf7\xb5\xd7\x83\x6d\xdf\xa3\x7f\xb1\x74\x42\xd5\x8c\x42\x90\x09\xf9\x4a\x25\xf8\xda\x66\x34\x23\xda\x4c\x0b\x31\x00\x9b\x7a\x8a\x03\x3c\x38\x40\x85\xa1\xeb\x05\xfb\xee\x00\x1f\x6a\x1f\x81\x43\xcd\xf8\x38\x5e\x08\x23\x02\x67\xd9\x0a\x95\x9a\xb4\x56\x62\x6d\x98\x10\xcf\x3d\x37\x94\x0b\x8b\x89\x2c\x04\x5d\xd2\x8c\xcc\xf5\x94\x17\x94\xcd\xa5\xaf\xd2\x86\x05\x71\x2d\x21\xf5\xe2\x25\x21\x6b\xfb\xeb\xf3\x22\xaf\xf4\xe7\xab\x5d\x94\xc6\xe4\xfd\xf4\xf9\x0e\x31\x62\xa6\xec\xf5\xce\x03\x9d\xa3\x7a\x51\x5e\x3a\x13\x42\x93\xc9\x04\x62\xc8\x6f\xfe\x3f\x67\x44\xa6\xd9\x5b\xf4\x27\x62\xd7\xc2\x91\x20\x9a\xf7\x7b\xe1\x8b\x1f\x17\x1c\x22\x51\xa5\xb4\x7b\x5e\x1b\xb6\xc0\x2a\xbd\x5e\x1d\x4b\x1d\xdd\x77\x9a\x36\xe3\xca\x2a\xf9\xad\x6f\xf0\xab\x9f\x8f\x25\xaa\xb3\x37\x5e\x93\x07\x6d\x0f\xca\x72\x54\xcd\xc9\x61\x00\x03\x9d\x67\x0d\xfe\xe9\xb2\x0a\x60\x9e\xfe\xea\x37\x46\x72\x95\x67\x94\x3d\x9c\x20\xaa\x5c\x26\x8e\xe6\x28\x01\x26\xbb\x26\xe7\x78\xb1\x20\x38\x6b\x68\x7a\xcf\x1e\x57\x73\x5c\x63\x2f\xba\xa1\x8a\x04\xec\xba\x5b\x15\x26\xdf\xd5\x09\xf6\xa0\xa8\x57\x4b\xd9\x3a\x3a\x8a\xa7\x68\xbd\x8a\x73\xa1\x32\x91\x34\x54\xc1\xba\xbc\x3d\xbb\xbd\x6c\x05\xb7\x7c\x7c\x97\x86\xca\x01\x5e\xba\x49\x41\x87\xa3\x7a\x95\x7e\x21\xfa\xcb\xee\xf7\x61\x82\xb2\xd2\xe7\x53\xa6\xe8\xc6\x35\x17\x0a\xef\x6e\x2e\x86\x89\xc8\x64\x81\x8b\xd3\x52\x2d\xce\xa9\x4c\xf8\x92\x44\x71\x83\x3f\x2e\x08\xe8\xc8\x16\xcc\x89\xa8\x7e\x24\xbe\x56\xa5\x9b\x17\x3a\xfb\x97\xd3\x6b\x84\x4b\x7d\x8f\x15\x4d\xfc\x53\x11\x43\xd3\x41\xdd\x8e\xdd\x9a\x12\xd4\x2f\x6c\xbf\xec\xac\x5e\xcc\x6e\x1d\xa0\xd1\x5e\xe3\x00\x8d\x7e\xf9\xd0\x68\x90\x6d\x9e\x53\x39\xc0\xa1\x77\x1a\x94\x51\x45\xb1\xe2\x22\x12\xaa\xf1\xac\x94\x8a\xe7\x86\xd1\x02\x92\x86\x06\x14\xe8\xff\x04\x70\x88\xcb\x59\x7b\x96\xad\xfc\xf1\x10\x48\x04\x5c\xb3\x4b\xa6\x88\x98\xe1\x84\x74\xaa\x67\xf9\xa2\x0d\x18\x79\xb4\xab\xa7\x15\xe5\x7f\x0a\xaa\x3e\x57\x80\xf6\xf2\xcf\x1f\xfe\xa9\x01\xb8\xfe\xe7\x40\xa4\x85\x71\xe5\xa6\x2e\xfc\x8c\x12\xce\x18\x49\xd4\x3e\x02\xc8\x7a\xd0\x5f\x62\x48\x7b\x0b\xc2\x31\xbb\xff\xaf\x25\xce\x42\x6e\xc8\xa7\x7d\xe1\x26\xda\xb7\x32\xc2\xb6\xb8\xb7\xe8\x6e\x63\x40\x85\x6c\x90\xbd\xa5\x24\xd0\x65\xcd\xd0\x55\x02\x33\xa9\xaf\x68\x8c\xe8\xc6\xb1\x4d\x50\x38\x46\x6f\x54\x52\x78\x62\xd5\x5f\x44\x8d\x56\xb3\x39\xf6\x46\x7e\xf4\xb0\x5d\xcc\x30\xb5\x59\x43\xf6\x61\xaf\x58\x79\xe0\x5c\x31\x02\xea\xad\xed\xf4\x34\xe7\xcc\xf8\x48\xa5\x82\xae\x29\x76\x76\xd0\x59\xc7\xd4\x7b\xf4\x52\xc3\xf5\xb8\xbc\x46\x5c\x20\x5a\xfc\x1b\x4e\x53\xf1\xc1\x58\x1a\xd6\xff\xc8\xbd\x51\x7b\x54\xda\x80\x08\x54\x24\x71\xa5\xb7\xde\xa8\x55\x41\x13\x9c\x79\x57\x00\xba\x3b\xbb\x86\x59\x49\xf4\xfb\xdf\xbd\x07\x87\xfa\x6f\xfe\xf1\x77\xef\x83\x9e\xda\xeb\xab\x15\x89\xe2\xc6\xa6\xff\xfe\xd0\xfc\x2f\xa9\xf2\x13\x18\xe4\xa6\xe6\x13\xe8\x33\x21\x46\xbe\x51\xd4\xe0\x59\x54\x3a\x67\x3c\x63\xff\x50\xab\xa7\x35\x0e\xb5\x7a\xf6\x5d\xab\x07\x55\x57\xde\xc8\xd4\xa7\x91\xd4\x21\x25\x27\xaf\xd7\x85\xb4\x11\xb7\xbe\x52\x75\x83\x90\xf6\x0f\x12\xbe\x12\x21\xed\x75\x3f\xfc\x78\x46\x9b\x57\x18\xf9\x73\x7c\x2c\x1b\xd9\x0d\x1e\xeb\x80\xca\xab\xe7\x9f\x6e\xff\xed\xe3\xe9\x0f\x17\x1f\x61\x4f\x6c\xb5\x17\xfd\xf8\xbd\xa4\x63\x4f\xa0\x26\x32\xfb\xf1\x8d\xca\xf8\x1d\x56\x38\x06\xfb\xd3\x8f\xb7\xed\xc0\x1d\xfa\xf4\xe3\xad\xc7\xce\xf6\x03\xaf\x2b\x18\xb5\x97\x29\xd1\x02\x5e\x87\x7a\x18\xd9\xcc\xfb\x6c\x5e\x0b\xc0\x63\x02\xf5\xc3\x9e\xbd\x40\x76\x54\x64\x88\x0b\xf8\x92\xaf\x31\x1c\xf4\xfa\x76\x9b\x3d\x89\x08\xa0\x7c\xf2\x5b\x87\x5e\x94\xa9\xf3\x14\x30\x5c\x7d\x2e\xe6\x84\x6d\x2c\xc2\x42\x69\x43\x7c\xbb\xaf\x06\x80\xfb\x8c\xf7\x27\xc4\x5c\x13\x71\xaa\xde\x1f\xdf\x02\x25\x07\x96\xd7\xa2\x21\xa4\xf4\xbd\xd0\xba\xa0\xd6\xe7\x88\x94\x2e\x00\xd9\x78\xe5\x9e\x64\xf7\x21\x5b\x50\xd8\x2b\x2f\x3a\x4d\x05\xcf\x32\x4c\xf3\x50\x6d\xa0\xdb\xa9\x10\x88\x9a\xff\xbc\x05\x40\x8e\x17\x2b\x6a\xf4\xf7\x6b\x55\x59\xc6\x6b\x9d\x11\xe1\xfb\xbc\x62\x5a\x26\x97\x12\xdb\x60\x89\x2c\x70\x12\x2b\x55\xcb\xb3\x93\x6c\xfd\x23\xf3\x13\x68\xd4\xf8\x9a\x54\x10\x98\xf0\x1e\x0a\xc0\x55\xdf\x1b\x83\xf9\x9c\x39\x62\x96\xff\x04\x78\x52\x34\xb7\x89\x77\x63\xd1\xa6\x5b\x8b\x70\xc8\x44\x0b\xee\x9a\xc3\x40\x77\x50\xdb\xd5\xe3\x79\xb1\xa6\x4f\xf8\x18\xd0\x8b\xd2\x8c\xfe\xf4\x2c\x85\xfa\x9d\x2e\xe2\xab\x74\xed\xc7\xe5\x5b\x2c\xb8\xe2\x2c\x6a\x39\xd3\xeb\x1e\x92\xa1\xf2\xc8\xd0\x3c\x33\xe5\x97\x33\x22\x1a\x62\xd5\x83\x34\xd4\x4d\xaa\x2a\x4e\x63\x96\x56\x29\x62\x9c\x39\x08\x6a\x68\xe9\xe9\xd7\x23\x40\x8a\xf4\xf2\xfc\x99\x65\xc7\xa1\x95\xd0\xcb\x6c\x25\xf4\x3c\x20\xb4\x7d\x88\x13\x7d\xc9\x23\xdc\xb7\xcb\x73\xeb\xf9\x70\x75\xac\x7d\x7d\xd3\x86\xa1\xa1\x58\x1c\x0d\x59\xae\xf6\xec\xd6\x0d\x17\xea\x91\x8b\x38\xed\xfd\xae\x5b\xc4\x82\xb3\x40\x2d\xb5\xb5\x0e\x03\x0d\x7e\xef\x41\xb8\x21\x21\x5e\x29\xbf\x37\xfb\xf1\x8a\x79\xfe\x2d\x24\x16\x05\x5d\x0f\x64\x83\x0c\x5d\xcc\xb1\x03\x36\xfb\xfa\x27\x7a\xc4\x47\x47\x10\x84\x39\x4a\x23\x23\x99\x3b\xe2\x63\xda\x10\x00\xfe\x66\xc8\xba\xd8\x78\x09\x02\x20\xa2\x3d\xb1\xe6\x74\xf4\xdc\xab\xfe\x96\x64\xe0\xbe\xf5\x76\xb0\xf6\x5a\x3a\xce\x66\xf1\xb7\x7f\x5b\x96\xce\x5e\x1c\x9d\x8e\x6b\x45\x38\xbf\x2f\x96\x94\x0d\x53\xfa\xdf\xf5\x4a\x09\xd0\x16\x4a\x5b\xdc\x3c\xbb\x20\x16\x5c\x0b\x12\x1f\x89\xd0\x56\x70\x14\xc9\x25\x80\x75\x70\x96\xe9\x93\xe7\x1e\xa2\x0d\x55\x89\x81\xd2\x35\xe8\x3a\x41\x09\x67\x33\x3a\xcf\x71\x21\x4f\x3c\xd3\xf9\x52\xfe\xc8\x1e\xb1\x48\xd1\xe9\xf5\xee\x28\xa2\x7d\x36\xdb\x31\xfc\xe2\x8a\xa7\x31\xc4\x9f\x26\x83\xee\xa9\x92\xa6\xc2\x83\xb7\xc5\x23\x89\x6a\x46\x60\xb4\x62\x53\x61\xcf\xb5\xf0\xf2\x17\x54\x76\xbd\x0d\x6b\x8a\x21\x9e\xf8\x03\x43\x97\x38\x2b\x09\xba\x27\xea\x91\x10\x86\xde\xbf\x7f\x6f\x80\x17\xef\xbf\xff\xfe\x7b\xff\xf0\x04\x46\x29\x49\x68\x8e\xb3\x2e\x79\x4f\x92\x7a\x46\xbf\xfd\xf6\xdb\x29\xfa\xbf\xa7\x57\x1f\x11\x4e\xc0\xd7\x66\x9a\x7f\x87\xac\x5d\x93\x6d\x4d\x54\x9e\xa0\xff\x73\xfb\xf9\x93\xd3\x00\x7d\x8f\xa9\x4d\x13\x1e\x7c\xee\x2e\x96\x77\x30\xae\x2e\xf2\x60\xa1\x1f\x55\xa6\xbf\xef\xea\x05\x81\x4a\x12\x78\x36\x03\xe6\x66\xd4\x20\x2a\x9d\x40\x0b\xeb\xa1\x48\xe7\x0b\xb8\x9e\x94\x01\x73\xca\x68\xa2\x60\xde\x41\x70\x23\xd7\x16\x16\xcc\x44\x33\xef\xc0\x9c\x38\x38\x98\x13\x94\xd1\x07\x82\x66\xf2\x8f\x82\x97\x85\x2f\x07\x45\x56\xed\x15\x44\x96\x99\x82\x22\x20\xf7\xc4\x4e\x5c\x7f\x8b\xef\x9b\xd7\xdc\xc8\xbb\x49\xd4\xfe\xd1\xf0\x56\x56\x45\x60\xce\x19\xd5\xfa\xf9\xac\xaa\x15\x66\xa4\xb2\xbe\x10\x01\x5b\xb3\x27\x14\x77\xdb\x36\xaf\x56\xe2\x5b\xf4\xc7\x0c\xdb\xb8\xb4\x52\x57\x10\xce\x38\x9b\x87\x3c\x3b\xf7\xf0\x6a\x57\x9b\x4b\x74\x5d\x15\xde\xec\x31\x18\x15\x1c\x03\x17\x8c\xac\xce\x74\x85\x0b\x7f\x12\x5d\x10\x68\x70\x53\x5b\x33\xf0\x3d\x2f\x95\x4b\x50\x33\x73\x84\x76\x6c\x41\x44\x15\x77\x17\x23\x80\x4c\x84\xa3\x43\x91\x8e\x0f\x85\x3e\x41\x37\xda\x2a\x7a\xcb\x98\xf6\xcd\x86\xac\x07\xc1\xc9\x02\x3d\x90\xd5\xc4\x28\x42\x05\xf6\xaa\x78\xde\x1e\x56\xf4\x9f\x63\x85\x0d\x2e\x3b\x98\xa2\xc5\x90\x54\xc0\x84\x70\x8a\x67\xd5\xc5\x0d\xcb\xd8\xac\x47\xcd\xd5\x5c\xfd\xf7\x60\x92\xce\x79\x29\xad\x4f\x09\x3d\x2e\xb8\xb7\xc3\xa1\x1e\xac\x0e\xb5\xeb\xa3\x0f\x50\x27\xea\x91\x70\xa6\x08\x53\x8e\x2c\xdc\xa6\x10\x34\xbe\x19\x97\xdd\x1a\xe1\xc1\x14\xb5\x8c\x26\xa9\x5e\xb6\x7c\xc9\x27\x5f\x57\x90\xd6\x0a\xb4\xb7\xd1\xdc\x1e\x25\xeb\xae\x3e\xfc\x2a\x71\x65\x24\x3a\x38\x63\xa7\xe8\xd2\xb7\xaf\x67\x3d\x30\xdc\xc9\x08\xc9\xe4\xf5\x78\x5c\xd0\x04\x2a\xc1\xea\xe9\xda\xb9\xc6\xe2\x72\x15\x23\x09\xe7\xc5\x8d\x3a\x1d\x92\xa8\xb2\x88\x73\x44\x50\x61\x41\x9f\x3d\x91\x12\xd1\x80\x8c\x8a\x7a\xe4\x58\x3c\x90\xd4\x5a\x3b\x38\x9b\xa2\x6b\x7d\x49\xc3\xc9\x5a\x8f\x81\x20\x19\x86\x26\xfc\x31\x2e\xbd\xd6\x39\x9b\x4d\x1b\x62\xbc\xce\xe3\xe9\xf4\xd8\xd4\xb0\x0b\x6c\x01\x51\x8f\xba\x19\x44\x20\xa9\x50\xab\xa1\x1e\x51\x94\x97\xae\xff\x0a\x17\xe1\xf7\x04\x2a\x00\x82\x9f\x14\x58\x85\xb7\x13\xac\x4d\x11\xce\xd3\x7a\x2e\xc2\x34\x59\x33\x2c\xac\x2b\x9c\x2b\xc4\x51\x69\xcd\xf0\x0f\x1d\x76\xc7\x44\xef\x7d\x04\x2a\x01\x0e\xa2\x7a\xc4\xd2\xd7\xcd\x78\x20\x9e\x81\xa2\xee\x68\x97\xc1\x88\xc0\x78\xcc\x30\x97\xde\xa9\x1d\xe1\x37\x0c\x85\x07\xd8\xba\x23\xf7\x76\x77\x77\x47\x1b\x2a\xfa\xd9\x8a\x9c\x38\xb4\x51\xed\xf6\x04\x7f\x7a\x24\xa2\x50\xd5\xb8\xe5\x5f\x8f\x44\x18\xfc\x2f\x54\x82\x2d\x10\xe7\xd8\x51\x2c\x37\x7d\x77\xb4\xfc\xea\x91\x68\xc6\x70\xfe\x77\x47\x33\x18\xf0\x92\x97\xde\x0e\x31\x44\xa2\xda\x0c\x54\xc4\xda\x4f\x7d\x87\x9a\x81\x8b\x98\x9b\x6a\xc3\x1f\x91\x48\xba\x20\xca\x93\xcc\xb4\x0a\xaa\x44\xa2\x0a\xa1\x19\x6d\x0f\x33\x1e\xae\x05\x98\x11\xd9\xb2\x36\xc3\xb5\x1e\xab\xa3\x9e\x91\x08\x5b\x63\x1d\xf8\x74\x2c\xde\xd7\x8a\x04\x45\xa2\xd9\x88\x27\x45\x5b\xb9\x36\x34\x9a\xf1\xa5\x58\x72\xaa\x8e\x52\x45\xa3\x48\x1a\x51\xab\x48\x44\x5b\xb1\xaf\x58\x9c\x8f\xa5\x8d\x58\x58\x24\xa2\xcd\x88\x5a\x74\xfd\x44\x12\xe5\x51\xfc\xbe\x6f\x84\x87\xdc\xba\x23\x34\x04\xd7\x1d\xfe\xc9\xca\xdd\xf1\x44\x1a\x78\xe5\xa1\x88\x62\xbd\x98\x61\x7d\xdc\xfa\xf9\xc4\xd3\x43\x73\x5c\x38\x37\x6f\x34\xa2\x53\x74\x65\x7c\x2a\xb1\x44\x1b\x28\x9f\xf8\x5e\xf2\xac\x54\xb1\xd6\x6e\xcb\xf7\x47\x9d\x68\x4c\x17\x92\x19\xe0\x73\x20\x19\xc9\x63\x38\x24\xcd\x30\x0d\x45\xe3\x2e\x1c\x5c\x5c\x55\xdf\xcb\x68\x44\xc1\x83\x13\xc3\xe7\x65\x46\x34\x13\x36\xac\x24\x93\x19\xbd\x85\x99\xa2\x78\x88\xdb\xe5\x99\x22\xb8\xb1\x5f\x54\x79\x27\x33\xfa\x8b\x3c\x05\x93\xb5\x45\xa2\x9a\xa5\x9e\x82\x69\xc6\x28\x15\x65\x46\xb4\xfb\xcb\x23\x39\x49\x5a\x77\xf8\x16\xac\x85\x70\x29\xe2\x6a\xbf\xb7\x62\x27\xe1\x01\x62\x81\xb4\x92\x04\x81\x2d\x1b\x46\x88\xe0\xb8\x9e\x51\x16\xec\x14\x0a\x85\x3e\xdb\xb9\x58\xf4\xeb\xe9\xf5\xe5\x0b\x46\x83\x34\x66\x19\x44\x31\xc5\x0a\x1f\xf0\x20\x9b\x46\x0f\x64\x3b\x42\x4c\x0f\x57\xf0\xb5\xf3\xfa\x14\xbf\xf8\xc3\xd9\x9b\x23\x82\x4e\xfb\xb2\xc3\x5a\x6b\x5b\xf6\x63\x1c\x2d\xbe\x91\x06\x1d\xeb\xb5\x9a\xa1\xb8\xc5\x7b\xc7\xb4\x39\xac\x7e\x6c\x0a\x1b\x40\x0d\xb7\x08\x44\xe3\x00\x88\x5e\x6c\x10\xed\x05\x86\xbf\x60\xc7\xbd\x6b\xc0\x76\x47\xb7\x4c\x55\xac\xad\x33\xe3\x96\x64\x5a\xfb\x44\xb1\x80\x66\x66\x70\x57\x80\x32\xda\x3c\xa1\xe4\x15\x66\x8c\x2b\x78\xc1\x32\x9a\x6f\x0c\xdf\x93\x4c\x9e\xa0\x80\x6a\x4d\xdd\x81\x59\x5a\x17\x3a\x89\x45\x53\x34\x92\x20\xa3\xba\xb1\x22\x3d\x69\x14\xf5\x59\x23\x78\xda\x70\x23\x03\x3a\xdf\xb5\x47\xdc\x37\x8e\x5a\x05\x6f\x63\x51\xec\xa6\xda\x19\xea\xd1\x88\x57\x0f\x53\x26\x0b\x92\xc7\xc0\x68\xb8\xa1\x89\xfe\x18\xf5\xb8\xcc\xa0\x12\x3d\x0a\xaa\x54\xb4\x38\x20\xb2\xc0\x33\x22\xf2\x58\x51\x00\x04\xfb\x7a\xe2\x42\x36\x31\xc9\x2a\x8e\x8e\x96\xdf\x7a\x17\xa4\xe8\x21\x18\x17\xa5\x80\x9c\xb4\xf3\x6b\x60\xbd\x69\xb4\x73\x27\xe2\xde\xa8\xca\x4b\x1c\x4f\xda\x21\x07\x59\xc8\xe2\x05\x82\x50\xa3\x72\x56\x34\x18\x67\x3d\x4e\xaf\x2f\xd1\xd2\x70\x97\x17\x7b\xb9\x0e\x10\x98\xa7\x86\xc0\xc4\x52\xa2\xf2\x03\x04\xe6\x00\x81\x39\x40\x60\x0e\x10\x98\x38\x44\x0f\x10\x98\x03\x04\xe6\x00\x81\x39\x40\x60\x82\xc6\x13\x41\x60\xa2\x3b\xe0\xa0\x1f\x00\x95\x28\x22\xff\x7c\x0a\x70\x0d\x8b\xd2\x19\xa9\x39\xe0\x8d\x9b\x3a\x57\xb6\x72\x4a\x54\x44\xb6\x49\xac\x8b\xf5\xd4\x2d\xb6\xc6\xbf\x3f\x4f\x77\xc4\x87\xc2\x1c\x1f\x4f\xa7\xc7\x26\xab\x2a\x36\xb4\xbd\x54\xb3\xc9\xef\x23\xd1\x24\x2c\xe1\x29\x49\xa7\x11\xc1\x64\x33\x2a\xa4\x82\xb0\x54\x0c\x88\x88\x19\x86\xb1\x9b\x77\x14\x13\xab\x94\xdb\xbb\x19\x1f\x58\x64\xce\x3f\x26\x7b\x8f\x66\xc9\xbb\x7a\x56\x3f\x3e\x61\x60\xc4\x06\x32\x62\x3d\xf8\x6a\xce\x71\xaf\x94\x7d\xf6\xbe\x3d\x27\xd6\x07\xc4\x45\xaa\x7a\x61\xd1\xb4\xa5\x9c\x42\x9b\xa4\x14\x0c\x1c\x22\xa3\xed\xeb\x1b\x43\x7a\x9a\x14\x65\x3c\xd5\x0e\x28\xe6\x24\xe7\xc2\xbb\xbb\x75\x77\xb8\x65\xeb\x89\x46\x54\x17\x2b\xb2\x66\xb6\x6f\x23\x46\x87\x92\x52\x08\xc2\xfc\x4b\x4f\x76\xc7\xdf\x5d\xb4\xc9\x3d\xa2\x17\x1a\x6c\xaa\x38\x87\x7f\xd3\x88\xbe\xd1\x69\x24\xe1\xbe\x24\xa2\xab\x19\xc0\xa0\xd5\x69\x45\x24\x3c\xe3\xc2\xba\x0a\xa2\x45\x83\x51\x03\xfc\x17\x79\xa6\x84\x2d\x23\x52\x5c\x62\xe1\xd9\x58\xa2\x6f\x3c\x41\x54\x28\xa5\x4b\x2a\x79\x34\x31\xd7\x8b\xa5\xf4\xaf\x1f\xde\x37\xb4\x78\xe6\xa5\x2a\xca\x98\x21\x1c\x63\xd5\xc6\xd3\x21\x90\x9d\x28\xf9\x5a\xf0\x78\xc1\x06\xd4\xac\x39\x1a\xf3\x2d\x3d\x51\x48\xf4\x5b\xdf\x52\xfa\xeb\xa3\xc0\x4a\x11\xc1\x3e\xa0\xff\xf7\xe6\x2f\xbf\xfe\xdb\xe4\xed\x1f\xde\xbc\xf9\xf3\xfb\xc9\xff\xfe\xeb\xaf\xdf\xfc\x65\x0a\xff\xf1\xcd\xdb\x3f\xbc\xfd\x9b\xfb\x9f\x5f\xbf\x7d\xfb\xe6\xcd\x9f\x7f\xba\xfa\xe3\xdd\xf5\xc5\x5f\xe9\xdb\xbf\xfd\x99\x95\xf9\x83\xf9\xbf\xbf\xbd\xf9\x33\xb9\xf8\xeb\x48\x22\x6f\xdf\xfe\xe1\x7f\x45\x5b\x02\x66\xab\xcf\x91\x54\x6a\x04\x92\x30\xbe\x73\xa7\x49\x37\x2a\x9b\x41\xe8\xeb\xa4\x86\xdc\x4f\x28\x53\x13\x2e\x26\xe6\x2b\x3e\x20\x25\xca\x78\x3e\x15\xf3\x3c\x9e\x4a\xf2\xc6\x76\x2b\xa1\xc6\x9c\x9f\x22\xcc\xfd\xc2\x84\x8f\xa9\x93\xfc\x82\x91\xdd\x66\x82\x87\x22\x7f\x7d\xe3\x50\xe4\xef\xa5\x16\xf9\xbb\x35\xb7\xd6\xc5\xcd\xaa\x3a\x6d\x11\x16\x6f\xea\xbc\xd5\x15\xfa\x82\x49\x36\x2b\xfc\xc5\x81\x73\xb6\x2b\xfc\xb9\x0a\x7d\xb1\xc8\x9a\x0a\x7f\xed\x0a\x7d\xc1\xb4\x35\xe1\xe8\x35\xea\x5a\x15\x67\xf5\xc9\x45\x99\x66\xb7\x42\x5f\xf8\x05\x80\xd6\xe9\x8d\xd5\x07\x53\x84\x7b\xdf\xa9\xd0\x17\x4c\xf4\x72\xf6\xda\x2a\xf4\x19\x2e\x10\x27\xc2\x7f\x28\xcf\x77\x28\xcf\x17\x34\x5e\x76\x1e\xd3\xa1\x3c\xdf\xce\xe3\xc5\x66\x16\x1d\xca\xf3\x6d\x1b\x87\xf2\x7c\xe1\xe3\x80\x4d\xae\xc7\xa1\x3c\xdf\x01\x9b\x7c\xc0\x26\x1f\xb0\xc9\x71\x48\x1e\xb0\xc9\x07\x6c\xf2\x01\x9b\x7c\xc0\x26\x87\x8f\x57\x82\x4d\x3e\x94\xe7\x8b\x42\xf4\x50\x9e\xef\x50\x9e\x2f\x0a\xd1\x43\x79\xbe\x5d\xc7\xa1\x3c\x5f\xd0\x38\x94\xe7\xdb\x69\x3c\x79\x79\x3e\x13\x38\x09\x8f\xeb\x56\xb5\xf9\xfe\x47\x96\xe6\x93\xfa\xd9\x25\xe4\x34\x49\x78\xc9\xd4\x1d\x7f\x20\x41\xf5\x54\x9e\x1c\xc8\xb1\x36\xdb\x20\xca\x2f\xae\x54\x5f\x0c\x17\x7a\xb0\xdb\x3b\x96\xc3\x1b\x97\x29\x25\x2c\x1c\xb6\xd5\xba\x54\xa7\x96\x68\x2c\x24\x80\x36\x55\x58\x4a\xd2\x6a\xb6\xb1\x90\x20\x4a\xdf\xce\x29\x3a\x45\x82\x24\xb4\xa0\x31\x94\x30\x3e\x43\xd8\xd0\x35\xbc\xc8\x76\xf1\x0f\xe7\x9b\x54\x49\x92\xcd\x8c\x12\x86\x99\xa3\x4b\x23\x58\x70\x35\xd0\xc0\xc6\xb3\x9f\x64\x9b\xe3\x74\x18\x04\x75\xe0\x91\x4a\x82\xe4\x82\x97\x59\x8a\x04\x89\x12\x17\x6b\xdc\x86\xbb\x98\x3b\xe0\x00\xbe\xc8\xc2\x79\x22\x1e\x9b\xdd\x5c\x5c\x50\xcd\x72\x89\x88\x13\x38\x8e\xa0\x7e\x90\xaf\x05\x15\x20\x52\x6e\x49\xc2\x59\x1a\x17\xba\x76\xd1\xa5\x1e\x8b\xcb\xd8\xdc\x23\x92\xa2\xb4\x14\x71\xca\x60\xf2\x19\x5a\xe2\x8c\xa6\x54\xad\x62\xe5\x06\x5b\xf1\x8a\xb0\x91\xaf\xf6\xd2\x06\x93\x3d\x95\xf5\x13\x40\xb8\x28\x04\xc7\xc9\x22\x82\x22\x5f\xdf\x85\x13\xe3\x87\x28\xef\x49\x16\x41\xe5\x73\x1d\xd0\xb3\x72\x4e\x59\x1c\x9c\x0c\xac\x59\xd1\x25\xc9\x56\x48\x70\x85\x23\xb8\x22\x1a\xfa\x90\x3b\xb0\x70\x9a\x35\x97\x8a\xb5\x99\xe0\x5a\x37\x36\xbe\x12\xab\x18\x01\x60\xc5\xed\x16\xd6\xb7\x2a\xfc\x99\x36\x84\x89\x7e\xb3\x3c\x4b\x23\x70\x51\xb5\xc0\x0c\xfd\xfe\x3d\x2a\x88\x48\x08\x8b\x92\x89\xa2\x6d\x11\x45\x73\x48\xde\xcf\xe8\x32\x4a\x52\xfc\x13\x2e\xfe\x1f\xbf\x43\x0b\x5e\x0a\x39\x3d\x8f\x95\x8c\xa2\x38\xfa\x16\x68\x82\x9b\x5d\xab\x41\x31\x20\x96\x58\xa1\x8c\x60\xa9\xd0\xb7\xef\x51\x4e\x59\xa9\x88\x8c\x23\xf2\xe2\x78\xc2\x1b\x3e\xf0\xdf\x7d\x17\x44\x2b\x86\xf7\x7b\xad\x42\x60\x0c\xd8\x1f\x94\xac\xd5\xb4\xa2\x25\xfe\x5b\xad\x28\x07\x51\x56\x70\x1a\x47\x01\xaf\xa2\x50\x51\xcc\x46\x3b\xd3\xfa\xf5\x31\xc5\xf7\xa8\x6b\xfd\x52\xf2\xfb\x95\xf2\x30\xd8\x5a\x57\xe2\x5f\x0d\x95\x66\xfd\x6f\x1f\xcc\x9b\x23\x63\x0e\x90\x1b\xf3\x61\xc1\xa5\x32\xb1\x45\xb9\xc0\xc2\x4b\x89\xc0\xa8\xe0\xe9\xb1\x44\x19\x9d\x11\xcd\x4a\x77\x26\x11\x64\xeb\xfb\x5b\xf8\x13\x24\xc8\x9c\x4a\x25\x76\xb7\xf7\x26\x56\xa7\xd9\xf9\x83\x61\xae\x80\xb9\xe0\x65\xe1\xc7\x6d\x5a\x17\x0a\xa2\xb3\x2e\xe2\xe4\xb9\x12\x33\x70\x92\x10\x09\x06\x93\x15\x48\x06\xb5\x6d\x66\xea\x45\x33\xd0\xb2\x11\x04\xa7\x9f\x59\xe6\x89\x09\x6c\xed\xd2\x8d\x25\x85\x16\x44\x90\x10\xb5\x75\xc6\x45\x62\x94\x2b\xf7\x04\xad\x46\xec\x0d\x86\xbd\xb7\xaf\x98\xa4\xc6\xc7\xa0\x57\x3d\x81\xea\x19\x0d\x1c\x9b\x2f\xdf\x3b\x6f\x98\xc1\x33\x9c\x49\x4f\xf4\x5a\xa8\x3f\xd5\x3d\xce\x28\x27\x69\x48\x35\x38\xa8\xef\x7d\x47\x92\xb2\x79\xa6\xd5\x44\x94\x97\x99\xa2\x45\x56\x9d\xaa\x27\xc9\x6a\x72\xd6\xf8\x08\x4f\xa4\xc0\xb2\xc6\x5c\x63\x09\x2c\xfe\x43\xc1\x85\x0a\x49\xf5\x7a\x53\xad\x96\x30\x25\x28\x91\xa6\x8a\x3b\x29\xb0\xc0\xfe\x39\x54\x70\x79\x13\x9e\xe7\x58\xbe\xb5\x59\x1f\x18\x0a\xf8\xcb\x00\xfb\x5b\x9b\x06\x02\x67\xd5\x05\x6a\xd6\x56\xd8\x07\x4b\x52\x84\x61\xe6\x99\xce\xd9\x86\x44\x00\x21\xc4\x1f\x5d\x53\x0d\xcf\x0d\x9a\xd3\x25\x61\x5d\x5e\x14\x14\x2a\xff\x01\x27\x0f\x84\xa5\xe8\x67\xe9\x38\x52\xba\x62\x38\xa7\x09\xce\xbc\x6b\xb8\x14\x82\x2f\xa9\x66\x64\x24\xed\xcc\xd5\x3b\xbd\xca\x80\x3d\x29\xe0\x73\xd0\xfd\xca\xe8\xc8\xe0\x95\xd8\xc7\xbd\x28\xa5\x6f\xe5\xa4\xd6\xad\xf8\x59\x12\xf1\x34\xb2\x5c\x1a\x70\xb4\xa0\xcb\x84\x84\x79\x44\xf4\x52\xf7\xb1\xc5\x66\x3f\x22\x6c\xf2\x17\xfb\x48\x6a\xce\xea\xb9\x13\xa0\x6a\x57\x49\xad\x12\xc0\x34\x99\x16\xdf\x2b\x57\x38\xd0\x93\x70\xe7\x39\xdf\xaf\x00\x19\x11\x22\xba\xbd\xd6\x29\xee\x3d\x34\xf1\x4e\xf5\x80\x1f\xce\x5b\xa6\x0e\xba\xc1\x29\xf7\xe1\xdc\x3f\x64\x3c\x79\x40\xe7\x04\x5c\x7a\xfd\x56\x8f\x07\x55\x63\x27\x59\xab\xa7\x61\xf6\x18\x88\x87\x81\x68\x78\x90\x75\xa0\x0e\xf2\x15\xe7\x45\x46\xe4\xf4\xe1\xf7\x00\xeb\xb0\x2c\xef\x9d\xb8\x4f\xdf\xdd\x5c\x9c\x9e\x5f\x5d\x4c\xf3\x74\x77\xf4\xc2\xde\x6c\x2c\x9a\xe3\xf9\xee\x1c\x69\x82\x72\xce\xa8\xe2\x62\xf7\x73\x0f\x33\xb1\x66\xf2\x4e\xef\x54\x38\xc7\x38\xfe\x91\x66\x44\xae\xa4\x22\x39\x6c\xbe\xe7\xb3\xb6\x1e\x12\x67\x30\x68\xee\xb1\xe2\x25\x7a\xc4\xde\xbc\x58\x8b\x0a\xfd\x16\xa6\xe8\x8e\x16\x1f\xd0\x05\x93\xa5\xb0\x94\xfd\x15\x80\x59\x7b\xb1\x20\x63\x5d\xcd\x35\x5f\x1b\x67\x55\x3f\x55\x7d\xa2\x58\x69\xad\xc7\x7c\x89\xaf\x69\x73\x61\x1f\xd7\x07\x74\x44\xbe\xaa\xef\x8e\x4e\xd0\xd1\xd7\x99\xd4\xff\x30\x35\x93\xde\xad\x49\x2e\xf3\x22\xa3\x09\x55\xd9\x4a\x3f\x7f\x22\x04\x49\x6d\x31\x58\xf3\x35\x9e\x64\x69\xab\xf0\x43\x93\xbf\x8c\x82\x80\x49\xc5\x05\x9e\x13\xc7\x41\x7e\x25\xee\x7d\x8f\xc2\x20\xbc\x16\xfc\x11\xa5\x1c\x3d\x42\xfa\xf8\x92\x30\x65\xb2\x95\x7d\x4d\x29\x1b\xbf\x6e\xdc\x9c\x99\xe0\xb9\xb6\x06\x0a\xc1\x73\x2a\x43\x64\x2c\x41\x39\x4e\x16\x94\x11\x3f\x98\x57\xa0\xd6\x01\x2c\x2f\x06\x0b\xb9\x5b\x10\x24\xb4\xf0\xf3\xe4\xa2\x66\x80\x1e\xd0\x77\x79\x46\x89\x9a\x5f\x2d\xf8\xe3\x44\xf1\x49\x29\xc9\x84\x7a\x56\xca\x09\xdc\xcf\x07\xb2\x82\x12\x48\x11\x76\xf4\x27\x43\xca\x85\x91\x03\x80\x3d\x8a\x03\x86\x0d\xa8\x69\x03\xf3\xe6\x87\x73\xad\x89\x4f\x9d\xf2\xec\xfb\x2a\x24\x7a\x47\x54\xf2\x2e\x21\xc5\xe2\x9d\x5d\x78\xa0\x66\x81\x76\xd5\x2e\x5e\xc0\x91\x3b\xe9\x1f\xe3\xcc\x4f\x51\xc2\xb3\x8c\x24\xfa\x7f\xfd\x43\x86\x67\xa4\x58\x54\xd3\x7a\x09\xcf\xc9\xbf\x6a\x40\x50\xad\x80\xc0\x83\x2d\x38\xf7\x84\xba\x6e\x62\x8d\x9a\x62\x80\xad\x83\x9a\x9e\x6b\x71\xdf\x2f\x66\x5f\xcb\xb3\x89\xe8\xfd\x3e\x7e\x02\xf7\x77\x45\x52\x12\x05\xda\x9c\xa7\xe3\x05\x59\x7b\xfc\x4a\xeb\xb1\x72\x1a\xcb\x63\x8d\x5e\xc0\xd1\xfb\xfb\xcb\x4d\x51\x36\xef\x82\xe4\xdd\x02\xe4\x96\x18\xc4\x73\xfc\xeb\x4f\x39\xdc\x5b\xa9\x16\x84\x29\x9a\x00\xba\xc8\x4e\xd5\xff\x3a\xd5\xc2\xf6\x72\x66\xfc\x84\x29\x49\x11\x5f\x12\x21\x68\xea\x0d\x84\xaa\xa4\x6d\x33\x94\x45\xb3\xa0\xd4\x8d\xbd\xde\xa5\x00\xf4\x74\x38\x64\x39\x2c\x2f\xa7\x37\x23\x27\x10\x93\xd7\xce\xc5\x79\x69\xb9\x34\xfd\x59\x34\x2e\x0b\x26\x80\x70\x23\x7f\x26\x4a\xfe\xcb\xcb\xf0\x7a\x37\x14\x00\x4d\x31\x96\x02\x80\xd3\x9c\xb2\xbf\x33\x7d\x5b\x26\x38\x23\x97\x9f\x03\xdd\xb6\xb7\x86\x4a\x28\x48\xc5\x91\x29\xf4\x95\x95\x8a\x30\x55\x55\x55\x54\x0a\x27\x0b\x2f\x77\x12\x20\xdb\x6c\xbc\x9c\x33\xf4\x53\xf5\xd6\x11\xe3\xa9\x0f\x32\x6d\x6f\xde\xd4\x39\x56\xe4\xd1\x43\xed\x9f\xd4\xea\x81\xcf\x67\xc1\x3f\xf3\x5a\x3d\xb1\x1d\x47\xac\x3f\xea\xc2\xba\x4d\xab\x22\x3c\x0d\xdf\x55\x80\x31\x55\x3b\x4a\xfb\x5d\x9e\x9e\xa4\xad\xa3\x14\x5d\x7c\x9d\xc6\x75\x76\x36\xb8\x25\xd0\x7b\xf6\x10\x93\x1e\xf6\x1d\xc4\x08\xaa\xbb\x0d\xc7\x69\x2a\x88\xf4\x15\xe1\x56\xd1\x75\xec\xeb\xf4\xfa\x12\xfd\xd1\xcc\x71\x2f\xfb\x53\x08\xae\x8c\xc7\xe3\x9c\xe7\x98\x7a\xe6\x20\xae\x6d\x54\xa3\x71\x9a\x5b\xaa\xe7\x7e\x5d\x57\x13\x44\x66\x86\xa0\xd7\xdb\xae\x42\x33\x3a\x2f\xfd\xdb\x6b\x58\xbf\xf7\x5e\xf6\x3d\xa2\x01\xbe\x66\xd4\xfa\x22\x77\xf4\x9c\xde\x3d\x0a\xaa\xc8\xdb\x69\x1b\xd4\xe6\x8d\xda\xc9\xb2\x01\xab\xde\x3f\x1e\xd0\xb2\xea\x5f\xbd\x11\x5d\xdb\xd0\x75\xbc\xdf\xdf\xd9\xdc\xa8\xbb\xae\x5f\x8a\x63\x34\xde\xc8\x0a\xa3\x15\x19\x5b\x43\x12\x26\x29\x94\x48\x69\xa4\x18\x7b\x07\xc3\x66\xa6\xee\x5d\x55\xbe\xd7\x98\xe7\x27\xe8\x23\xf7\x05\xda\x20\x27\x0d\x39\xb3\x97\x0f\xd3\x2c\xe4\x82\x1c\x2c\xe3\xd6\x38\x58\xc6\x2f\xc1\x32\x96\x32\xbb\x60\xf8\x3e\xf3\xcd\x56\x6f\x2b\xbd\x19\x9e\x6b\xb6\x41\x80\xe2\xbb\x94\x4a\xfd\xaf\xe7\xd2\x6e\x6f\x3f\x02\x4a\xb3\x64\xce\x83\x07\x18\x3f\xab\xe0\xf8\xa2\xf1\x6c\xba\x6d\x80\x70\x0b\xe6\xf6\x46\x53\xb8\xf2\xae\x7f\xda\xee\xd3\xc0\x52\xbd\x3d\x44\xba\xb2\x19\x01\xe1\x6b\x3b\x33\x60\xf5\xb8\xaa\x33\x0e\x59\xd4\xbe\x70\x0a\x82\xee\x16\x34\x79\xb8\x6e\xc0\x2a\xb9\xd0\x3f\x63\x8d\x1f\x45\x30\x0a\xa2\x50\x0c\x7d\x4a\x66\xfb\xae\xe3\x04\x9b\xee\x1a\x8a\xfd\xad\xa1\xec\xab\xf5\x72\x9e\x21\x2c\x25\x4f\x28\xae\xc0\xfb\x10\x88\xae\xd4\x61\xdf\xc7\x04\x4a\xf4\x7e\x36\x1b\x2c\xcd\x27\xb0\x30\x64\xd0\x5e\x5b\x93\x1f\xcb\x86\x45\xa1\x95\x4c\x7b\x92\x7b\xd9\x2a\xf3\x90\xfd\x9b\x1e\x6e\xdc\x2e\x1c\x08\xfd\x6d\x43\x50\xab\x5e\x09\x41\x26\x9e\xf3\xb9\x2c\xb0\x71\xad\xb6\xaf\xbd\x37\x73\xa4\xb2\xe2\x87\xd0\x10\xea\xd9\x0f\xd2\xb7\x3d\x53\x5f\x84\x2d\xd4\x5d\x6a\x2d\x02\x9b\xc0\x07\x45\x36\x0a\x5e\x94\x99\xc9\xe6\xf6\x4a\x23\xb5\xa5\xf0\x43\xd1\x66\x66\x66\xcf\x0c\x54\x0d\x53\xce\x1b\x75\x70\x63\x44\x28\xaa\xf2\xe7\x75\x61\x50\xcf\x4b\x5f\x4a\x03\x28\xec\x14\x2a\x47\x9c\x05\x82\xc6\xc1\x81\x89\xee\x57\x6e\xe9\x0d\xe7\xa6\xb7\xa5\x06\x35\xa5\x5b\x65\xb5\xab\x5a\xe0\x9e\x24\xdf\x7f\xff\xfd\xf7\xad\xda\xdf\x51\xaa\x76\x77\xaa\x74\xc7\xa8\xaf\xbd\x56\x4f\x3b\x46\x25\xec\x6e\xe5\xeb\x46\xcd\x6a\x6f\x3f\xb6\xbd\x8e\x6d\xe4\xc4\xfb\xdf\x7d\xf7\x9d\xb7\xfe\x47\x05\x49\x14\x87\xc4\x30\xdb\x96\x23\x10\x5f\x87\x05\x01\xff\x81\x29\x79\xec\x9c\xe3\x26\x77\x47\x51\x36\xf7\x9d\x69\xab\x8c\x74\xb3\x00\x74\x88\x54\x6a\x15\x7c\x6e\x96\x6a\x0e\x84\x54\x9b\xd2\xcc\xed\xa2\xca\x01\x0f\xa9\x2e\xa2\xdc\x2a\x7f\x1c\x52\xfa\x3c\xb0\xdc\x71\x78\x51\x87\xd0\x72\xc6\x01\x60\xb8\xa1\x2e\x7d\xd0\x65\xcf\x1f\x88\xd2\xe8\xcd\x17\xad\xb7\xde\x5a\x47\xbd\x66\x47\x3c\x7f\xab\xb2\xdd\x4d\xad\x91\xad\xe0\xfb\xf0\xe5\x7a\xf7\x3b\x8b\xd7\xf5\xdf\xcf\x66\xcf\xbb\x76\xcf\x3a\x7f\x2f\x67\xbb\x24\x3f\x0a\xef\xd5\xb6\xd6\x99\xb0\xde\xd1\xd0\x94\x60\xd3\x95\x6e\xbd\xab\x5c\xc8\xd9\x77\x7a\xc9\x35\x7b\xc1\xf9\x5a\x0c\x55\x71\xbb\x88\x1d\xe0\xd6\xfb\xbe\xb5\xfa\xb6\x85\x9c\xd5\x7a\xb7\x36\xdb\x6d\xcd\xdb\xcb\xdd\xea\xd1\xb6\xd6\x63\x2d\xc0\xd1\xdf\xd3\x59\x0d\xaa\x39\x07\xdc\xa7\xaa\x9f\x5a\x68\x3f\xb4\xbd\xe2\x99\xd7\x3a\x9e\xb5\xfa\x95\xf9\xfb\x82\x79\xb7\x4b\x59\x60\x8f\xb1\x08\x05\x51\x43\x8b\xa1\x86\x74\x11\x0b\x2a\xa2\x1a\xa3\x80\x6a\x60\x9f\xb0\x35\xcf\x4b\x84\x66\x76\x11\x7a\x82\x45\xa9\x03\x19\xda\xff\xeb\x29\xba\x7e\xb5\x7b\x7d\x59\xe3\x37\x6c\xb7\xdb\x86\x73\xa4\xde\x5c\xdd\x8e\x5c\x46\xab\x08\x22\xd9\xb5\x9a\xc3\x3b\x68\x45\xb7\x9d\xcd\xd8\x60\x41\x87\x2d\x9e\x6b\xc1\x12\xb5\x2f\x55\xd3\x06\xaf\xac\xe9\x20\x8a\xeb\x96\x78\x78\xf7\xa8\x66\xcf\xa8\x58\x4d\x94\x1b\xba\x4e\xac\x1e\x4f\xad\xce\x4e\x0d\x63\x3a\xf0\xc6\xaf\x19\xe2\x11\x1a\xf3\xc4\x35\xc7\xcd\xd8\x64\x94\x07\x11\x6d\xf7\x37\xb2\xa6\x79\xd8\xd2\x2b\xb3\x3e\x4e\x3f\xa2\x58\xb5\x17\xe3\xf4\x1e\x0a\xad\xb9\xb8\x26\xcb\xa3\x94\x48\x34\x2a\x71\xbb\xa0\x61\x8e\x7d\xed\x0b\x33\x54\xa5\x68\x54\x5d\x62\x42\xaf\x46\xa3\x7b\x4f\xdd\x77\x27\x88\x62\xd7\xac\x88\xd6\x27\xa7\xd5\x1d\xa7\x61\x6a\x04\x6f\x69\xa4\x6e\x36\x81\xca\x57\x58\xe7\x8f\xbe\x7e\x1f\xcd\x7e\x1d\xbe\x50\x0f\xe3\x12\xaa\xbb\x74\xd4\x56\x68\x48\x9b\x8d\x38\xb8\xbc\x48\x81\xd3\x26\x6a\x2a\x2c\x17\xcd\xdd\x78\x53\x09\x06\x80\x4e\x05\x4e\xe0\xe9\x97\x51\xb3\x10\x9f\x23\xf2\x86\x02\xc3\xa2\x66\x1a\xdc\xc3\x46\x6b\xdf\x65\x43\xe7\xf3\x6d\x58\xb5\x3e\xdc\x20\xd4\xc9\x20\xf1\xf4\xa0\xbf\x9c\x0c\x92\x43\x62\xc5\xb6\xf1\x1a\x13\x2b\x9e\xa7\x8a\xcc\x3e\x60\x2f\x07\x54\xfc\x01\x15\xbf\x8e\x8a\x77\x77\xd2\x1b\x14\x5f\x23\xe2\x8d\xbc\x05\x43\x9c\xdf\x6b\x45\x34\xac\x78\x50\x2d\x39\x4e\xaf\x2f\x51\x22\x08\x34\x82\xc1\x99\x9c\x22\x74\xe9\x5b\x40\xa4\x6d\xd7\x57\xe8\x57\xe3\x43\x08\x8c\x18\x61\xa5\x48\x5e\xa8\xb0\xe7\x7d\x00\xc5\xb7\xc6\x01\x14\xff\x12\x40\xf1\x51\x11\x93\x5f\x2a\x62\x61\x01\xe5\x45\x99\x63\x36\xd1\x12\x04\xdf\x67\x9d\xac\x38\xc7\x3a\x3c\x49\x3b\xf4\x9d\xab\x38\x0a\xf7\x04\xc0\x30\x9c\x79\x97\xd2\x2d\x19\xfd\xa5\x24\x75\x24\xaa\x32\x54\xf6\x0c\x82\x85\x39\x44\x3d\x57\x63\x7e\x45\x91\x2c\x09\x2f\x48\xa7\xfc\xa2\xd9\x40\x5f\xcb\xda\xdd\x0c\x10\x22\x88\xf1\xfa\x18\x7c\x75\x83\x46\xa9\x70\x3d\x4d\x63\x8c\x5e\xf3\xf4\xd8\x77\xe1\xb5\x05\xdb\xf6\xf3\x82\xa3\xd7\x37\xfa\x9c\x65\xfc\xd1\x20\x2e\x9a\x66\x93\x7e\x33\x7a\x8f\x03\x24\x35\xe8\xc6\x39\x15\x82\x0b\x0b\x2a\xa6\x2c\xf8\x01\x42\x1a\x2a\x9d\x2f\x14\x11\xc6\xe1\x69\xf2\xce\xa6\xe8\xd6\xdb\x4b\xd0\x60\x3b\x8a\x23\xcc\x4c\x69\x5e\xfd\xdf\xae\x64\x4d\xc0\x3d\x75\x7a\xc4\x3d\x59\xe0\x25\xe5\xa5\x80\x99\xfa\xdb\x62\x47\x96\xe0\x91\x36\x1c\x56\xbc\xac\x80\x78\x65\x40\x45\xc6\xea\x5e\xc9\xb5\x63\xf2\x95\x55\x9f\x6a\x92\xe0\xe0\x4f\xb9\xc3\x8a\x4c\xc8\x57\xea\xdd\xc5\xa8\x3b\xbd\xea\x21\x58\xa0\xed\xb3\x73\xcc\xa5\x2c\xb4\x51\xf2\xc5\xb3\x92\x75\x9b\x4f\x36\x69\x85\xba\x57\x96\xb7\x40\xac\xcf\xb9\xe2\x5c\x25\x3e\x4e\x51\xe6\x3a\xa5\x99\xc6\x05\xae\x90\xe7\xf3\x3a\x58\x42\x4a\x74\x98\xfd\xb8\xf6\x41\x3b\x1c\xfc\x3a\xdb\xc6\xc1\xaf\x53\x8d\x17\xe0\xd7\xa9\xd2\xec\x32\x9a\xac\x2e\xcf\x63\x78\x07\x6c\xde\xa3\x21\x89\x7e\xc0\xd2\x1b\x4c\x77\x85\x19\x9e\x43\x10\x0a\xbd\xb9\xbd\xfe\xe1\xea\xad\x7e\x5e\x10\x98\xbb\x3c\xf7\x55\x65\x7a\x32\xf7\x6e\x9b\x7b\xf0\x69\x1f\x25\xf7\x51\xf7\x24\x22\x59\x4b\xcf\x72\x16\x7b\x69\x52\x80\x2a\x2b\xe4\xda\x3b\x94\xbc\xde\xb4\xcf\x24\xba\xb9\x9e\xc1\xbe\xea\x72\x47\xac\x2e\xf3\xf4\xe1\xa9\xb6\xa7\x81\x88\xda\xbc\x07\x63\xc0\x99\x5b\x01\x98\x9d\x7b\x25\xb0\x22\xf3\xd5\x39\x29\x32\xbe\xd2\x97\xe2\xba\x01\xcd\x32\x7f\x7a\x4f\xb6\x9a\xe7\xe2\x1e\x27\x48\x94\x19\x34\xd1\x48\xd7\x7a\xed\x32\x42\xd2\x5a\x42\x50\x26\x15\x86\xc6\xa9\xe6\xbb\x07\x28\x8f\x54\x1c\xc6\xa8\x08\x13\x33\xbf\xc1\xbf\x68\xb7\xe0\xff\x34\x5c\x6a\x73\xac\x82\x00\x5f\xbb\xed\x5e\x8f\x87\xdd\x8e\x04\xd8\xb6\x9f\x04\x70\x8d\x9b\x32\xd3\xe2\x39\x4b\x65\xb3\xb4\x88\xd5\xd8\xed\x49\x8f\x79\x29\x18\x15\x86\x0b\xe9\x95\x9d\xa0\xfb\x52\x2b\xfc\x44\xb6\xb0\x07\x8d\x2f\x18\x43\xf1\x9e\x97\x0a\x3d\x2e\x0c\xbe\x5e\x93\x45\xb8\x28\x32\x4a\x20\xb4\xc0\x85\x85\xa0\xef\x62\xa3\xf7\x10\xda\xce\xda\x76\xd2\x53\xc7\xeb\xa5\x13\xb4\x24\xe2\x7e\xfb\xd6\xee\xa6\x72\xe2\x82\x02\xde\x69\xa4\x7e\xda\xba\x10\xa7\xd7\x97\xe6\xb3\x2e\xff\xa2\xe9\x36\x73\xbf\x1c\xc9\xea\xe0\xfe\xd8\x73\x77\x0d\xc1\x4d\x36\xb0\x71\xd1\xd7\xbd\xd9\x4e\xaf\x2f\x47\xd2\x9c\x9b\xc9\x41\x5b\xb3\xda\x4d\xaf\xad\x75\x6c\xea\x54\xd5\x3d\xc7\xf1\x5c\x7f\xef\x58\xb3\x82\xb3\x6a\x99\x84\x95\x39\x81\x86\x69\xf5\x84\x11\x65\xf0\x2d\xa7\xd7\x97\x3b\xb5\x4d\xac\x7c\xff\x59\xc6\x1f\xc7\x2a\x80\xbb\x42\xed\x77\x82\xd6\xef\x28\x91\x19\x67\x37\x76\x13\x7e\xbe\xf9\xe8\x73\xa5\x3e\xb5\x29\xd8\xf6\x4c\x44\xe9\xed\x2e\xb0\x50\x74\x34\x72\xb4\x14\x99\x03\x0a\x9a\x7a\xa2\x36\x99\x7a\x81\x97\xa4\x6e\x8c\x35\x45\xe8\x9b\xb1\x72\x5d\xdf\x23\x7b\x34\x86\x5f\x41\x7b\x46\xd3\xd8\x0e\xcd\xca\x2c\x3b\x41\x33\xca\xb0\x16\x49\x64\xec\x91\x37\x01\x56\xb7\x94\x25\x44\xef\xe1\xc4\xdd\x24\x04\x7b\x60\xdd\x35\x23\x29\x56\xec\x0d\x92\x98\x00\x11\x4d\xb2\x14\x9a\x56\xc3\x74\x35\x23\x4b\xc0\xc9\x3d\x3e\xdd\xf4\x2c\x2b\xa5\x22\xe2\x86\x6b\xd1\xdc\xc8\x36\x83\xf6\x1e\xb8\xf9\xeb\x1f\x28\x4b\x77\x48\xe5\xbc\x01\x61\x9f\x60\x86\x08\x85\xa0\x87\x9e\xde\x4a\xb3\x6b\xfd\x76\xea\x07\xf5\x46\x96\xa3\x73\xef\xb0\x44\x47\x05\x4f\xe5\x91\x66\xf9\x47\x26\x9c\x28\x8f\xde\xea\xff\xeb\xee\xed\x48\x8a\x90\x6a\x65\xe6\x00\xd4\xdf\xe1\x82\x1e\xbd\x3d\x41\x70\x09\x00\xc0\xc7\xd5\xe2\xf5\xbd\x56\xb7\x13\xe0\x77\xf3\x78\xab\x37\xcd\xcf\xc3\x4b\x65\x15\x02\x4e\xcb\xda\xd1\xfd\x33\x33\x2a\xe1\x81\x9b\xc8\x88\xeb\x5b\xb4\x26\x78\x11\x3a\x1d\xeb\xa9\x27\x79\xa1\x20\x4e\x8f\x72\x82\x1d\x60\x98\x2c\x89\x58\xa9\x85\x6d\x16\xf2\x6a\x99\x6c\xf5\x2a\x02\x8e\xcc\x32\x56\xb7\xf1\x15\xc9\xd1\xc2\x9a\xca\x9e\xe3\x71\xd4\x4f\xb3\x6c\x77\x57\x24\x86\x0f\x39\x91\xff\xea\x4e\x05\x74\x33\x8f\x13\xf9\xa2\x3f\xd7\x3e\x0d\xf3\x23\x23\xba\x34\x3b\x1c\x3b\x61\x8e\x4e\x3f\x7e\xb4\x48\x15\xb3\x8f\x3f\x51\x96\x1a\x5b\xea\x54\x29\x41\xef\x4b\x45\x6e\x88\x5e\x12\xa8\x3f\x63\x4f\xc6\x6a\x65\xae\x88\x8c\x3d\xfa\x29\x82\x89\x7a\x9f\xf5\x83\x9e\xdb\x6b\x3a\xe7\x75\xb3\x6e\x9c\x39\xb6\x91\xb4\xb3\x5c\xfb\xc9\x0c\x7c\xd8\x9a\xbe\x57\x3c\xed\x63\x02\x9d\x0a\x66\xf5\x9f\x5a\x25\x78\xd5\xf0\xb6\x5a\x4a\xd6\x84\x5b\x15\x3d\x1c\x60\x68\xf3\x37\x6e\xf4\xa6\x39\xd4\xfe\x36\x90\x16\x8d\xdf\xdc\xad\x0a\x13\x8d\x45\x18\xcd\x32\xdc\x7f\x14\xd5\x45\x03\x1e\x6e\x14\xf0\xb3\xdb\x2f\x6e\x41\x12\xd1\x3e\x2d\x69\x8b\x3d\x36\x64\x81\x4d\x06\x7b\xde\x4d\x36\xb5\x01\xdc\x66\x82\x55\x44\x37\xdd\xa0\xed\xf0\x2e\x35\x10\x18\xd8\xb4\xfb\x77\xb6\x8f\x1f\x6e\xdc\x00\x70\xbf\xf3\x99\xbb\x09\x1b\x6f\x34\x64\x9e\xcc\xb8\x80\xfd\x6e\x5e\x9b\xc1\x15\xf4\x5e\xdf\x07\xb2\x7a\xe4\x22\xed\xd9\x1b\xaf\xbb\x36\xf0\x4d\x19\xbe\x27\xd9\xb6\x27\x72\x85\x0b\xbd\x01\x75\x86\xb0\xe1\x98\x36\x13\xcc\xd8\xa5\xa6\xb4\x86\xcb\x5b\xe4\x62\x8e\x19\xfd\x8f\xbe\x93\x87\xa2\x04\xfa\x55\x73\x41\xff\x83\xa0\x37\x06\x73\x60\xbc\x59\x19\x49\xd4\x5b\x7b\x0f\x7b\x38\xdf\xe0\x35\xc5\x69\x4a\x8d\x66\x75\x3d\x78\xb7\x86\x36\x83\xb2\x87\xb8\x7b\xbe\xf1\x49\x6d\xbb\xff\x43\xd0\xb0\xad\xfc\xb8\x14\x1b\xf3\x2b\x06\x3e\x9b\x63\x6a\xa4\x58\x5f\x07\xb2\x7d\xec\x01\xc9\x31\xf5\x59\x88\x19\x9e\x3b\x98\x63\x55\x0a\xaa\x7a\x44\xce\xd0\x87\x28\xfb\xa9\xbc\x27\x16\x43\xb6\xd3\x47\x19\x24\x61\x9d\x5e\x5f\xc6\xda\xf4\xd6\xcb\x05\xff\x92\x9d\x96\x56\x75\x50\xc9\x70\x7e\x4f\xe7\x25\x2f\x65\xb6\x6a\x38\xee\x11\x06\x75\x63\x8a\xd0\x65\xbf\x19\x9d\x72\x22\xd9\xb1\x42\x98\x71\xb6\xca\xed\xc7\x59\x92\x95\x29\x69\x7d\x0b\xa0\x3d\x96\x9c\xa6\x08\x97\x8a\xe7\x58\xd1\x04\x25\xdc\xfc\x6e\x3b\xf5\x52\x12\x84\x37\xd0\x4b\x4a\xa9\x78\x8e\x72\x2c\xe4\x02\x67\x59\xff\xb9\x07\x49\xb2\x4d\x9e\xa8\x09\xec\x4d\xef\x2f\x96\x66\x96\x1e\xb7\x1b\xbe\xcc\xfb\x76\xeb\x09\x79\x7f\x78\xb9\xe9\x9e\x6e\xfd\xbc\x2d\x6c\xdd\xd3\xcc\x66\x70\xe3\x87\xf7\x62\xf3\x4b\xdd\xb2\x92\x8d\x7c\x6e\xe0\x73\x82\x14\x19\xee\x35\x0d\x07\xea\x4c\x6a\x89\x0e\x6a\x3d\x67\xa4\xa2\x30\x45\xb7\xc6\x5f\x96\x63\x95\x2c\x36\x84\x6e\xfe\x3d\x27\x0a\xa7\x58\xe1\xa9\x56\x87\xff\xdd\xba\x9a\xac\x67\x94\x67\xa9\x26\xbd\x49\xd0\xf5\xce\xdf\x08\x49\xde\x73\x02\xad\xf9\x7f\xd4\x72\xbd\xfa\x63\x50\x4b\x20\xe1\xb3\xe9\x84\xdd\x51\xc0\x0e\x1f\x22\x6c\xc2\xc5\x57\xad\x7d\x0e\x04\xd7\x5a\x73\xec\x7e\xa4\x6d\xe3\x65\xed\x15\xd8\x97\x9b\x93\x81\x84\x00\x93\xd6\x5a\xff\x1d\xf8\x05\x4f\x3f\x9d\x6f\xf2\x61\x6c\xb3\x9a\x06\xad\xa4\xb6\x9f\x7f\x60\xba\xce\x43\x6b\x7f\x33\xd8\x81\xbd\x72\xef\xbb\xfc\x7d\x28\x2e\x64\x6a\x18\x81\xef\x88\x08\xec\x88\xd8\x03\x95\x2e\x61\x76\x23\xd1\x5a\x57\xdb\xb4\x71\x23\xe2\x31\xdb\xa2\x30\x43\x75\x52\x26\xd5\xc4\x37\xfc\xc1\x98\x80\xcc\x96\x5a\x26\xad\xe3\x30\x05\x99\x4c\x85\x2a\x38\x17\xc8\x27\x76\x5e\xb3\xea\x28\xac\x6b\x66\xd0\x46\x1d\x0e\x67\x8d\x32\x8d\xdd\xe2\x47\x4f\xbf\x3a\xe6\x66\xa1\x54\xbd\x86\x63\x69\xd3\xb6\x39\x93\x0b\x5a\x6c\x03\x29\x55\x71\x01\x7b\xfa\xe8\x0b\xce\x68\x5a\x91\x37\xef\xe3\x92\x9d\xa0\x4f\x5c\xe9\x7f\x2e\xbe\x52\xb9\xc5\x43\xa1\xef\xd2\x39\x27\xf2\x13\x57\xf0\xd7\xc1\x9b\x63\xa6\x36\x7a\x6b\xac\xcd\x61\x5c\xa9\xf0\x72\x1b\x96\x89\x5b\xe6\xe5\xf6\x34\x88\x6a\x8b\xa9\x44\x97\x0c\x71\xe1\xf6\xa0\x2a\x92\x26\x2d\x79\x97\x09\xcc\x38\x9b\x80\xd3\x74\xd8\x23\x73\x69\x59\x7b\x83\xbe\xd9\x56\xfd\x1d\xcd\x9d\x6b\x7e\xd5\xf0\x96\xb7\xa6\x61\xa6\x60\x8a\x50\x98\xdf\x50\xe9\x44\x52\x8a\xd2\x12\x36\x02\x3b\xcf\x09\x4d\x06\x49\xe7\x44\xcc\x21\xb4\x92\x0c\x3a\xe7\xc7\x79\x97\x46\xf8\x94\xb6\xdc\x08\x10\x08\x1f\x37\x58\xa4\xa8\x57\x7c\x98\xbf\x36\x2c\x36\x37\x66\xea\x7f\x6a\x8e\x09\xfb\xfa\x5f\x50\x4b\x50\x4e\xd1\x29\x92\x94\xcd\x37\xb6\x02\x68\x7e\xc2\x86\x9b\x9a\xc4\x35\x5d\x2a\x91\x66\x80\x4b\x9c\x69\x8e\x0e\x88\xe6\x2d\xe9\xfe\x7c\xb6\x26\xe0\x4e\x6c\x75\x3f\xcd\x8d\xaa\x98\xd3\xd1\x03\x59\x1d\x9d\xb4\x2e\xcd\x06\x8a\xfa\x8f\x2f\xd9\xd1\x49\x55\x3b\xa3\x75\x4f\x2b\xd1\x01\x41\xac\x23\xf8\xdd\xd1\x74\x4d\x26\x6e\xa0\x3d\x4a\x52\x0e\x08\x88\xb1\xd6\x37\x1a\xbe\x05\x1b\x35\xd3\xd6\xc9\x7f\xb6\xfb\xe4\x4c\x04\x38\xfd\x47\x81\x8b\x82\x08\x84\x05\x2f\xc1\x99\x90\x2f\x89\x98\xba\x3f\x01\x60\x43\x9f\x87\xd1\xf9\xc5\x12\x2e\x04\x49\x94\x33\x2f\xf4\x2b\x52\xdc\x96\xf8\x61\x29\xd4\xd1\xd9\x49\x4f\x7b\x24\xf7\x0b\xce\x1f\xa0\x7e\x00\xec\xcc\x93\xd8\x77\x7f\x32\xdf\x72\x5e\xff\xcc\xa9\xe8\x12\xa5\x44\x61\x9a\x01\xb2\xe3\xf3\xc7\x2b\x8b\xfd\x70\x62\xbc\xf7\x68\xec\x9c\xfb\xee\x48\x90\x5d\x85\x53\x8b\x74\xba\x21\x4b\x4a\x1e\xed\x99\xf4\x7d\xcd\x04\xcd\x09\x03\xb0\xc0\x06\x50\xd0\x04\x49\x9a\x92\x0b\x28\x6c\xd3\x4f\xc0\xd3\xe1\xb8\x61\x8e\xc3\x77\x78\x88\x25\x6e\x61\x87\x5b\x85\xa3\x8b\x29\x88\x6b\x2e\x36\x16\x5e\x1f\x53\xa3\x66\x4c\xfd\x19\x9b\xff\xf0\x01\x7d\xf7\xdd\x6f\x36\xfc\x49\x8e\xbf\xd2\xbc\xcc\x3f\xa0\xdf\xfd\xf6\xb7\xbf\xf9\xed\xa6\x3f\xa2\xcc\xfc\xd1\xb7\x9b\xd6\x64\x5f\xf8\xd9\xcd\xf9\x1e\xf7\x36\xad\x50\x78\x43\x41\x8a\xad\x64\x66\x98\x66\xa5\xb0\x00\x54\x6f\x2a\xcd\x1b\xef\x4d\x04\x44\xcd\xf0\x44\x3a\x2e\xdd\xea\xef\xc1\xe7\x5d\x65\x8f\x81\x60\x71\x2e\x6f\x63\xd9\x1a\x14\x9a\xef\xcc\x0c\xcf\xb8\xdd\x68\xb6\xf6\x4c\x6e\xcd\x9a\x32\x86\x21\xfc\xec\x97\x92\x88\x15\xe4\x10\x55\xea\xed\xc6\x7b\xd0\xc0\x47\xdd\xd5\xa5\xa6\xdc\xba\xac\x74\x37\x85\x42\xdb\x82\x7a\xb3\x29\x55\x89\x49\x74\xca\x6c\x0c\xbd\x33\x57\xa0\x45\x20\x7a\x5e\x79\xb2\xd1\xe9\x46\x8a\xac\xcc\xb2\x4d\x24\x18\xdf\xec\x0b\x6f\xee\xfe\xa0\xe1\x36\xc6\xb6\x1a\x67\xbc\x9b\xe1\x6d\xc2\x0f\x6a\x86\x2d\xf3\x7e\x67\x43\xbe\xb9\x19\x11\xd4\x54\x4f\xd3\x7e\x90\x66\x17\xbf\xb7\x83\x81\xbf\x95\x2e\xa9\xaa\x3d\x0f\x9b\xf9\xcd\x6d\x1a\x01\xbe\x1c\x07\xbc\xdc\x5e\x20\x75\xab\xf9\x6f\xc6\x78\x54\xe6\xa8\xb2\xa6\x1e\x0e\x81\xad\x34\x91\x07\xca\x75\x14\x3e\x62\x8c\x8b\xa0\x67\x59\x63\x1d\x05\x23\x16\x06\xb5\x7b\x77\x72\x17\x8c\x20\x6a\x2d\xdf\x5d\x9c\x06\x76\x36\xe3\xb7\x6e\xbb\x03\xc1\x8c\x9d\xdd\x08\x23\xd6\xd7\x63\xec\x0f\x3a\x13\x46\x90\x5c\x77\x37\x0c\xba\x14\x46\x50\xdc\xe4\x74\xd8\xec\x58\x18\xf3\x0e\x46\xb8\x1e\xc6\xba\x17\xcc\xd8\x05\xc2\x32\x1a\xbe\x32\xea\x1e\x6d\x75\x3b\x98\xe1\xe9\x7c\x18\x9c\xa5\x73\x4c\xec\xec\x82\xd8\xe2\xb3\x6c\xb8\x27\xc6\x3a\x22\x06\x29\xf6\x38\x29\x46\xba\x23\x86\xbd\x70\x83\xae\x8a\x5d\xa4\xfe\x56\x71\xb6\x8b\x83\xa2\x49\x78\xe0\xee\x08\x42\xd9\x92\x9b\xe6\x90\x3b\xa8\xde\x37\x6b\x1f\xeb\x68\xe0\x8f\x20\x97\xac\x0a\x3e\xa8\x7c\x1b\xe1\x5f\x99\xae\x48\x5b\xef\xa8\x94\xdb\x1c\xfd\x43\x6b\x1a\x4a\xa2\x09\x36\xcc\xda\xfb\x50\x66\xe4\x4f\x54\x2d\x3e\xbb\x36\xb7\xf6\x25\xa9\xb2\xc8\x60\xe9\x8d\x5f\x0c\x17\xaf\xbb\xa9\xf5\xfc\x4b\x65\x98\x52\xc2\xf3\x9c\xb0\xd4\xa0\x51\x72\xfc\x40\x90\x2c\x05\xb1\x90\xc1\x2c\x33\x56\x8e\xfe\xa2\x01\xb2\xe4\x6b\x81\x99\x51\x6b\xf5\x4d\x5c\x6a\x69\xb8\xf9\x26\x8e\xba\x87\xe3\x74\x9c\x91\x19\x27\xc3\x99\x26\x55\x6a\x45\x27\x57\x64\x0b\xd7\xbc\x27\x19\x07\xdf\xd7\x14\x1d\x7f\x73\x6c\x61\xc0\x96\x10\x88\x22\xfb\x53\xab\x6f\x9c\x8c\xa8\x28\x93\x11\x36\xaf\xcb\xc4\xca\x8c\x26\xa4\x92\x3a\x9c\x91\x29\xba\xb1\x8a\xe6\x18\xbd\x75\xbb\x80\x18\x25\x1c\x46\x2a\x18\x75\x61\xa0\x1d\xcf\xc2\x7d\xaa\x79\x1a\x4b\xf7\xb3\xf0\xf3\x70\xa4\xfe\xfe\x4e\xa4\x6a\x8a\xbd\xcb\x81\xb4\x59\x4c\x2d\xc5\xaa\xd3\xa8\x58\xe8\x96\x49\x02\x83\x4d\xb0\xd0\x62\x0e\xfc\xa9\x13\x74\x76\x73\x71\x7a\x77\x71\x82\x7e\xbe\x3e\x87\x7f\xcf\x2f\x3e\x5e\xe8\x7f\xcf\x3e\x7f\xfa\x74\x71\x76\xb7\x5d\x47\xfb\xc6\x34\xbc\xcd\x32\x73\x1e\x5a\x2e\xf3\x16\xe7\x83\x4c\xa9\x59\xa9\x34\x03\x1b\x3b\xd1\xd6\xfa\x34\xcf\x83\xcf\xa6\x24\xdd\x74\x63\xec\x9d\xd8\x46\xf6\x15\xde\x98\x91\xd9\x00\xad\x0b\x73\xb4\x2d\x0d\xa0\x46\x79\x6f\x99\x64\x13\xfe\xff\x17\x86\x7e\xe4\x02\x91\xaf\x38\x2f\x32\xf2\x01\x1d\x17\x3c\x95\xc7\x36\x01\x43\xff\xf7\xd4\xfc\xe8\x5d\xc6\xe7\xdb\x8a\x8f\xb9\xac\x0d\x82\x32\x3e\x47\xb2\xbc\xaf\xb2\x76\x40\x69\x00\x5a\xdf\x38\xda\xad\xcc\x81\x6d\x86\x9b\x4b\xd9\x69\xd0\xac\x26\xd6\xa2\xd8\xfc\x83\xed\xf7\xc6\xcd\xe9\x9d\x4c\x70\x46\x5a\x74\xf4\x0f\xba\x5f\xf7\xcd\xbb\x6f\xc6\x6d\x41\x6b\x6d\x4e\x17\xa5\xa2\x43\xef\x2f\x4c\xdf\xfb\x47\x9a\xa5\x09\x16\xdb\x32\xfa\xbb\x4f\x03\x24\xbf\x41\x80\x43\x4a\x87\xe9\x83\xc4\x40\xa3\x18\xbb\x03\xb6\x54\x0f\x5f\x12\x91\xe1\xc2\xe0\xb8\x09\x4e\x6c\xcd\x7f\x98\xe0\x39\x29\x08\xe4\x86\x99\x56\x1d\xdb\x6e\x16\x61\x49\xc6\x25\xfc\x39\x28\x1d\x27\xad\x25\xdb\x76\x7f\xb6\x5f\xd5\xc8\x54\x9e\xea\x11\x0f\xd7\xe7\xd8\xc7\x2b\x06\x98\xf0\x0e\x2f\xd8\xc0\x8a\xdb\x6e\xed\x46\x79\xb3\x2a\x45\x03\x7c\x1c\xa3\x5c\x0c\xc0\x43\x8f\x6c\x26\xdf\xd1\x09\x3a\xaa\xaa\x31\xa5\xd6\x08\x3a\xfa\xe6\xa8\xfe\x83\x91\xef\x17\xdb\x24\xc9\xc4\x7c\x6c\x02\x73\x6c\x66\xca\xc2\x65\x03\x03\x6e\xab\x1f\xb0\x5a\x54\x5d\x15\x4e\xeb\x1d\xd6\x87\x0c\xf3\x6f\x7f\xcd\xb6\xfb\xd0\x5c\xe2\xda\x8c\xeb\x34\xca\xce\x6c\xb7\xad\xdc\xc2\xe5\xaa\xd9\xea\x6d\x6b\x10\x57\x50\x0a\xc2\xa4\x74\xda\x23\x13\x8d\x94\x9c\x6d\x73\xbe\x6d\x3d\x02\x07\xcd\x6b\x95\xb6\xa3\x02\x15\x58\x68\xdb\xd8\xfd\xe5\x36\xa2\x8d\x56\xef\x47\xdf\x6c\x29\x8a\xb3\xf5\x42\x37\x22\x98\xde\xf1\x1e\x85\xc5\x9c\xa8\xa1\xd0\x20\x66\xab\xcf\x1b\x6b\xd7\x4e\x46\x45\x0e\x27\x63\x1e\xe7\xd7\x49\x5d\x17\x74\x42\x99\x9a\x70\x31\x31\x1f\xf8\x80\x94\xd8\xd0\x16\x48\xd1\x9c\xf0\x52\xdd\x92\x84\xb3\xbe\x34\x07\xfb\x57\x51\xa2\x9b\xa3\xf3\x40\x6c\x30\xfd\xd4\xa9\x58\x2e\x19\xa4\x19\x11\xab\x6d\xed\x81\x60\xb9\x19\xad\x8a\x4d\x9f\x3f\x5e\xf9\x1e\x35\x82\x0c\xfa\xcd\x27\xf9\xc5\x4a\x27\x36\xaf\x66\x6e\x57\xb2\xf1\x23\x57\xa5\xda\xed\x03\x67\x55\xe0\x76\xe8\x2f\xed\x96\x0c\xd5\x97\xd9\xb0\x5a\xa9\xb0\x2a\x3b\xf7\xa0\x75\x36\x96\xab\xde\x9a\x0c\x33\x6b\x5d\xdd\xc2\xa7\x9a\xce\xef\x66\xbd\x0d\x50\xd0\x3b\xd3\x30\x8d\x30\xe0\x53\x00\xec\x2d\x78\x3a\x45\x96\x4c\x8e\x57\x48\x09\x4c\x8d\x73\x00\x27\xaa\x84\x44\x75\xac\x2c\x08\xd8\xd6\xca\xfa\x87\xf5\xe5\xf4\x18\xfd\x9b\x0d\xfd\x84\x08\x25\x3f\x62\xa9\x7e\x2e\x52\xdc\x9b\xe0\xd4\x01\xf2\x4a\x05\xcf\xc5\x98\x2d\x8f\x8c\xa4\x9a\xa9\xdb\x8d\x30\xd4\xd0\xa3\xe6\x98\xa5\xa1\xb7\x46\x6e\xf0\x82\xb9\xe7\xa3\x3f\x3a\xd1\x5f\xd3\x37\xdb\x1b\xae\x77\xe1\xb4\x87\xd5\xb4\x31\xd3\xdb\x66\xa9\x25\x99\x00\x5a\x88\x91\xaf\xeb\x5e\x92\xb0\x99\x72\x96\x6e\x02\xda\xb4\x77\xd4\xea\xf2\xf5\x07\x4e\x10\x46\x0b\x2a\x15\x17\x36\x0c\x00\x9d\xe4\x05\x66\x92\xf6\x67\x81\x86\x03\x77\xce\xaa\x2f\xd7\x16\x02\xc1\x55\xc7\x5b\x7b\x3b\xa1\x21\xac\x20\x09\x17\x69\x35\xa5\x7e\xee\x56\x4f\xd3\xaa\x8d\xfd\x6f\xa5\xe7\xc3\x81\xe9\x39\x19\x96\xea\xae\xfa\x76\x7d\xf8\xa3\xb8\x6c\xfb\x42\xdb\xe5\xd6\xab\x70\x35\x13\x38\x73\xbf\xdc\xec\x71\xe3\x08\x33\xa3\x3e\xfb\xf3\xd6\x6d\xd7\xaa\x5e\xab\x79\xaf\x1e\xeb\x7c\xac\xde\x66\x63\xc9\x4f\x3d\xe3\x9c\x48\x89\xe7\xe3\xa6\x7a\x6a\x8a\x3b\xa3\xaa\xb8\xb3\xfd\x30\xa2\x2c\xa5\x09\x48\x8a\x0a\x4d\xd6\xc7\x55\xeb\xf1\xb8\x58\x6d\xbe\x82\x5a\x96\xba\xfc\xe8\xea\xf1\x79\x1f\x5d\xb1\xc0\x72\xdc\xf2\xaa\xb7\xe6\xdc\x17\x63\x1f\xc8\xa8\x79\x08\x82\xe5\xe6\x5c\x9a\xce\x3e\xdf\x0b\x4a\x66\xe8\x0c\xe7\x24\x3b\xc3\xf2\x39\x36\x1a\x38\xc7\x14\x91\xe9\x7c\x8a\x8e\x6f\x1a\xd1\x95\x4f\x5c\x5d\x6d\xee\x98\x33\x98\x32\xba\xfd\xdd\x87\xbd\xf8\x7e\x5c\xfb\xc6\xb7\x1e\x24\x36\xb6\xbd\xec\xa0\x37\x1d\x34\xb3\x8d\x2f\x38\xec\xed\xea\xab\xd3\x27\x0c\x02\x5f\xed\x50\xd2\x58\xff\x4b\x6d\xbf\xd1\x52\x80\x41\x96\xf8\xbd\xd5\xc1\x84\xaf\xfe\xf7\x19\xf8\x32\x43\xb6\x71\xe7\x37\x39\xb8\xbc\xea\xe3\xb7\x3d\x4a\xf4\xda\x4a\xef\x5a\x1a\x30\x78\xa0\x9a\x80\x26\xa8\x04\xae\xe7\x78\x76\xfb\x25\x8e\xda\xf3\xdc\x19\x99\xf6\xe0\x7a\x7f\xc7\x36\x82\x8a\x37\xc9\xe4\x90\x0c\xcf\x14\xfc\x79\xfa\x5c\x9f\x27\xa0\x7a\xee\xbe\xcf\x1a\x34\xd6\x74\xb5\xa7\x3d\xb3\x0d\x71\xed\xdf\x0c\x3a\xcc\xeb\xfb\xf0\x46\x71\x54\x08\xb2\x04\xb0\x1b\x03\x2c\xbb\x56\xde\xa5\x7e\x10\x6f\x37\x6b\x66\x63\x62\xa1\xdb\xe1\x65\x9b\xcf\xdf\xfd\x7e\xc3\x2d\x70\xbf\xde\xa2\x40\x0e\x1d\xae\x19\xe3\xe2\xb5\x83\xa9\xbc\x66\x8c\xf4\x72\x0e\xa5\xf5\xee\x44\x68\x8b\xfa\xb7\x13\xad\x3e\xe3\xbc\x3b\x3a\xc5\x4e\xf5\x07\x6e\x80\xf1\x9a\xf8\x49\xa2\xf9\x6a\x82\x25\xf8\x0a\xe1\xc7\x86\xd1\x6c\xf3\x71\x37\x6d\xf5\x9b\x2e\xa7\x83\x8c\xaa\xf6\x9d\x8f\xb1\xdc\xb2\xa4\x71\xce\x60\x4b\x9a\xf5\x48\x5a\x7b\xcc\x13\xdf\x72\x89\x9e\xaa\x04\x83\x19\xc3\xb7\xce\xf7\xbe\x6d\x63\x09\xa1\x37\x6d\x7b\x6d\x8e\x81\xdb\x15\x3d\x71\x5f\x12\xb1\x24\x69\xc3\x0f\x6b\x4b\x66\x37\x7f\xd2\x70\x97\x3b\xba\x76\xeb\xd1\x7f\xfe\xd7\x3f\xfc\x77\x00\x00\x00\xff\xff\x6a\xbf\x6a\x45\xd5\xd7\x0a\x00") func operatorsCoreosCom_clusterserviceversionsYamlBytes() ([]byte, error) { return bindataRead( @@ -119,7 +119,7 @@ func operatorsCoreosCom_clusterserviceversionsYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "operators.coreos.com_clusterserviceversions.yaml", size: 712003, mode: os.FileMode(420), modTime: time.Unix(1607724218, 0)} + info := bindataFileInfo{name: "operators.coreos.com_clusterserviceversions.yaml", size: 710613, mode: os.FileMode(436), modTime: time.Unix(1607975192, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -139,7 +139,7 @@ func operatorsCoreosCom_installplansYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "operators.coreos.com_installplans.yaml", size: 14165, mode: os.FileMode(420), modTime: time.Unix(1607724218, 0)} + info := bindataFileInfo{name: "operators.coreos.com_installplans.yaml", size: 14165, mode: os.FileMode(436), modTime: time.Unix(1607975192, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -159,7 +159,7 @@ func operatorsCoreosCom_operatorconditionsYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "operators.coreos.com_operatorconditions.yaml", size: 10575, mode: os.FileMode(420), modTime: time.Unix(1607724219, 0)} + info := bindataFileInfo{name: "operators.coreos.com_operatorconditions.yaml", size: 10575, mode: os.FileMode(436), modTime: time.Unix(1607975192, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -179,7 +179,7 @@ func operatorsCoreosCom_operatorgroupsYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "operators.coreos.com_operatorgroups.yaml", size: 15412, mode: os.FileMode(420), modTime: time.Unix(1607724220, 0)} + info := bindataFileInfo{name: "operators.coreos.com_operatorgroups.yaml", size: 15412, mode: os.FileMode(436), modTime: time.Unix(1607975192, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -199,12 +199,12 @@ func operatorsCoreosCom_operatorsYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "operators.coreos.com_operators.yaml", size: 9266, mode: os.FileMode(420), modTime: time.Unix(1607724220, 0)} + info := bindataFileInfo{name: "operators.coreos.com_operators.yaml", size: 9266, mode: os.FileMode(436), modTime: time.Unix(1607975193, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\xdc\xb8\x95\x28\xfe\x7f\x3e\x05\x4a\x49\x95\xa4\x44\xdd\xb2\xb3\x73\x93\x5c\xdf\x54\x52\x1a\x49\x4e\xb4\x63\x7b\x74\x2d\xd9\x53\xfb\x9b\xcc\xdd\xa0\x49\x74\x37\x22\x12\xe0\x10\x60\xcb\xbd\x9b\xfd\xee\xbf\xc2\x39\x00\x48\xf6\x83\x00\x5a\x2d\xd9\x93\x11\xfe\x48\xc6\x2d\xf2\x10\x8f\x83\xf3\x7e\xd0\x8a\x7f\x64\xb5\xe2\x52\xbc\x22\xb4\xe2\xec\x93\x66\xc2\xfc\x4b\x8d\xef\xfe\xa0\xc6\x5c\x9e\x2e\x5e\xfe\xe2\x8e\x8b\xfc\x15\x39\x6f\x94\x96\xe5\x7b\xa6\x64\x53\x67\xec\x82\x4d\xb9\xe0\x9a\x4b\xf1\x8b\x92\x69\x9a\x53\x4d\x5f\xfd\x82\x10\x2a\x84\xd4\xd4\xfc\xac\xcc\x3f\x09\xc9\xa4\xd0\xb5\x2c\x0a\x56\x8f\x66\x4c\x8c\xef\x9a\x09\x9b\x34\xbc\xc8\x59\x0d\xc0\xdd\xa7\x17\x2f\xc6\x5f\x8d\x5f\xfe\x82\x90\xac\x66\xf0\xfa\x2d\x2f\x99\xd2\xb4\xac\x5e\x11\xd1\x14\xc5\x2f\x08\x11\xb4\x64\xaf\x88\x6a\x26\x2a\xab\x79\x05\x9f\x18\xcb\x8a\xd5\x54\xcb\x5a\x8d\x33\x59\x33\x69\xfe\xaf\xfc\x85\xaa\x58\x66\x3e\x3e\xab\x65\x53\xbd\x22\x1b\x9f\x41\x70\x6e\x8e\x54\xb3\x99\xac\xb9\xfb\xf7\x88\xc8\xa2\x84\xff\xc2\x95\xdf\x74\xbe\x09\x3f\x17\x5c\xe9\x6f\xd6\xfe\xf4\x86\x2b\x0d\x7f\xae\x8a\xa6\xa6\xc5\xca\x5c\xe1\x2f\x6a\x2e\x6b\xfd\xae\xfd\xf2\xc8\x3c\xd3\xfe\x97\x7d\x88\x8b\x59\x53\xd0\xba\x0f\xe0\x17\x84\xa8\x4c\x56\xec\x15\x81\xf7\x2b\x9a\xb1\xfc\x17\x84\xd8\x1d\x04\x78\x23\x42\xf3\x1c\xce\x84\x16\xd7\x35\x17\x9a\xd5\xe7\xb2\x68\x4a\xe1\xbf\x96\x33\x0f\xef\x15\xb9\x9d\x33\x52\xd1\xec\x8e\xce\x98\xfb\xd2\x84\xe5\x44\x4b\x78\x98\x90\x7f\x28\x29\xae\xa9\x9e\xbf\x22\x63\xb3\xa5\x63\xb3\x63\xf6\x4f\x78\x16\xd7\xf8\xb2\xfd\x4d\x2f\xcd\xe4\x94\xae\xb9\x98\x6d\xfb\x5c\x46\x35\x2d\xe4\x8c\x20\x0e\x91\xa9\xac\x89\x9e\x33\x62\xc0\xf3\x29\x67\xb9\x9b\xcf\x96\x19\xe0\x6b\xbd\x39\xdc\x74\x7f\x8a\x9a\xc2\x9c\x0a\xc1\x0a\x22\xa7\xa4\xa9\x72\xaa\x99\x22\x5a\xb6\xeb\xdf\xbe\x7c\xfb\x62\xef\xeb\xe7\xbd\xdf\xd6\x3e\x8f\x0f\x2d\x5e\xd2\xa2\x9a\xd3\x97\x78\xb8\xd9\x9c\x95\xf4\x95\x7d\x43\x56\x4c\x9c\x5d\x5f\x7d\xfc\xb7\x9b\xde\xcf\xa4\x3f\xed\x2e\x92\x91\x3b\xc6\x2a\xd5\x22\x35\x69\x2a\x33\x7f\xb3\x10\x32\x59\x12\x5d\xd3\xec\x8e\x8b\x19\x2c\x73\x06\x6b\xf3\x30\x09\x39\xc7\xed\x57\x63\xff\x1b\x4e\x59\x4e\xfe\xc1\x32\xed\x7f\xac\xd9\x8f\x0d\xaf\x59\xde\x4e\x67\x44\xdc\x25\xef\xfc\x64\x76\xc5\xff\xb3\xaa\xcd\x94\xb4\xbf\x43\x38\x3a\xd4\xa5\xf3\xeb\xca\xf2\x0e\xcd\x0e\xe0\x53\x24\x37\x64\xc5\x4c\x7b\xce\x1c\x6a\xb3\xdc\x6e\x9a\x39\x32\x3d\xe7\x8a\xd4\xac\xaa\x99\x62\x02\x09\x4d\x0f\x30\x31\x0f\x51\x61\x57\x34\x26\x37\xac\x36\x60\xcc\xc5\x6b\x8a\xdc\x50\xa3\x05\xab\x35\xa9\x59\x26\x67\x82\xff\x97\x87\x0d\x48\x60\x3e\x5a\x18\x8c\xd0\x2b\x30\xe1\x2a\x09\x5a\x90\x05\x2d\x1a\x76\x42\xa8\xc8\x49\x49\x97\xa4\x66\xe6\x2b\xa4\x11\x1d\x78\xf0\x88\x1a\x93\xb7\xb2\x66\x84\x8b\xa9\x7c\x45\xe6\x5a\x57\xea\xd5\xe9\xe9\x8c\x6b\x47\x55\x33\x59\x96\x8d\xe0\x7a\x79\x0a\x04\x92\x4f\x1a\x73\x98\xa7\x39\x5b\xb0\xe2\x54\xf1\xd9\x88\xd6\xd9\x9c\x6b\x96\xe9\xa6\x66\xa7\xb4\xe2\x23\x98\xba\x40\xb2\x57\xe6\xbf\xac\x2d\x1d\x56\x87\xbd\xb9\xae\xa1\x20\x0e\xa0\x63\x03\x27\x60\x88\x19\xe1\x8a\x50\xfb\x2a\xae\xa2\xdd\x68\xf3\x93\xd9\x9d\xf7\x97\x37\xb7\xc4\x7d\x1a\x0e\x63\x75\xf7\x61\xdf\xdb\x17\x55\x7b\x04\x66\xc3\xb8\x98\xb2\x1a\x0f\x71\x5a\xcb\x12\x60\x32\x91\x57\x92\x0b\x0d\xff\xc8\x0a\xce\xc4\xea\xf6\xab\x66\x52\x72\xad\x00\x2f\x99\xd2\xe6\xac\xc6\xe4\x1c\x58\x0d\x99\x30\x7b\x8d\xf3\x31\xb9\x12\xe4\x9c\x96\xac\x38\xa7\x8a\x3d\xfa\x01\x98\x9d\x56\x23\xb3\xb1\x71\x47\xd0\xe5\x92\xab\x0f\xaf\xdc\x3f\x42\x1c\x0b\xdb\x72\x5e\x5d\x82\x70\x53\xb1\xcc\x5f\x1b\x2a\xc8\x59\x55\x15\x3c\x83\x9b\x41\xf4\x9c\x6a\x92\x51\x61\x76\x89\x0b\xa5\x69\x51\x00\xd3\x08\x7e\x7f\x13\x0d\x20\x70\xe9\x3b\x4c\xc0\xfd\xd4\xa3\xca\xfd\x1f\x3d\xab\xea\xfd\x75\x33\xad\x30\xc3\xd2\xd8\xd5\x9f\xb7\x6e\x2a\x41\x09\x63\xca\x67\xeb\xaf\x6c\xdd\xb1\x73\x78\x01\x24\x13\xca\x85\xb2\x00\x9a\x1a\xf7\xac\xe5\x45\x53\x59\xaf\x01\x25\xe6\x8a\x74\x60\x8d\xb7\xcc\x74\xc3\x8e\x0e\xaf\xdc\x0c\x26\x16\x9b\x7e\x5e\x59\xca\xa5\x58\xe0\x55\x35\x52\x88\x21\x77\x4c\x2c\x78\x2d\x45\xc9\x84\x26\x0b\x5a\x73\x3a\x29\x2c\x53\x63\x9a\xf0\x55\xfa\xe8\xe7\x69\x6e\x1b\x6e\x01\xab\x37\x5d\xa7\x8d\xef\xe1\xea\x68\x5d\xd3\xe5\xc6\xbf\x73\xcd\xca\x8d\x6b\xdb\xb4\x8c\x8f\xb4\xee\x50\x0a\x83\xbc\x9b\x96\x42\xec\x03\x5b\x80\x1a\xea\x4c\x28\x39\xf7\x4b\xd9\xb6\xde\xa1\x73\xc1\xb1\x19\xe7\xdb\xb1\x01\xfb\xdb\x31\x7c\xb4\x38\x40\x1e\xd8\xfa\xd7\x95\x0d\x32\x77\x07\x59\x1e\xdb\xb8\x2f\x63\xf2\xb6\x51\x70\x62\x74\x00\x24\x21\xe7\xff\x79\x75\x71\xf9\xee\xf6\xea\xf5\xd5\xe5\xfb\x6d\x9b\x43\x86\xaf\x58\x3b\x80\x2f\x44\x2f\xe1\xf0\xa3\x3b\xc3\x9a\x4d\x59\xcd\x44\xc6\x14\xf9\xd5\xd1\xc7\xb3\xf7\xff\xf9\xee\xec\xed\xe5\x31\xa1\x35\x23\xec\x53\x45\x45\xbe\x42\x97\x56\x47\xa3\x1c\x0b\xaa\x6a\xb6\xe0\xb2\x51\x96\xe6\xe5\x5b\xd0\x9f\x1b\xea\xb7\xed\xac\x70\x78\xec\x07\x7e\x4e\xc5\x92\x28\x56\x2f\x78\xb6\x79\xbb\xd5\x98\x5c\x4d\x03\x5b\xed\x51\x36\xf3\xb7\xc9\x30\xcb\x62\xc1\xf2\x13\x98\xbc\xdf\x06\x3b\x3f\xc2\x45\xd5\x6c\xc7\x6c\x33\x2c\x43\xbe\xe7\x45\x01\xb7\x53\xa0\x64\x97\x8f\x41\x9a\xed\x6e\xa6\x5a\x0a\x4d\x3f\x59\x7a\x3f\x08\x93\xa9\x8c\x56\x2c\x27\xf7\x5c\xcf\x09\x25\xb9\x6c\xcc\xa4\x7f\xf5\xab\x13\xc2\xd9\x2b\xf2\xab\x0e\xd0\x31\xb9\xb4\xcf\xb6\x27\x38\x08\x1a\xe6\x29\xd8\x82\xd5\x66\xb6\xee\x6c\x4f\x48\xcd\x66\xb4\xce\x0b\xa6\x94\xc1\xe9\xfb\x39\xd3\x73\x86\xc2\xbf\xdb\xb4\xe1\x19\x7f\xe2\x86\xf1\xcb\x9a\x08\xa9\xc7\xe4\x82\x4d\x69\x53\x80\x24\x40\x0e\x0e\xc6\x87\x7b\x41\xeb\xd7\xb5\x2c\xa3\x51\xfb\xa6\xaf\xc1\x6c\xc2\x98\x43\x85\x70\x87\x2e\x1d\xe9\x12\x5e\xc5\x72\xc2\xa7\x56\xf6\xe2\xca\x2c\x95\xb0\xb2\xd2\xcb\xf0\xb5\x1d\xa4\x6b\x24\x92\x3c\x11\xcf\x4d\xdf\xd2\xea\x1b\xb6\x7c\xcf\xa6\xc3\x0f\xaf\xee\x09\x2b\x58\x66\x08\x39\xb9\x63\x4b\x10\xc4\xc9\xb9\x03\x37\xbc\x09\xd1\xcb\x20\x11\x64\xda\x8d\x91\x99\x46\xe0\x99\xd8\x6d\x31\xe3\x8e\x2d\xc3\x0f\x91\x75\x8d\xd3\x6c\x06\x70\x63\xb3\x3b\xa1\x7d\x20\xb1\x28\xeb\x46\x88\xa7\x6c\x9c\xd6\x61\x97\xb9\xd8\x9b\xad\x37\x8a\xcc\x77\xcd\x84\xd5\x82\x69\x06\x52\x73\x2e\x33\x65\x04\xe6\x8c\x55\x5a\x9d\xca\x85\xa1\x97\xec\xfe\xf4\x5e\xd6\x46\xe9\x1c\x19\x7a\x32\xc2\x33\x54\xa7\x60\x60\x39\xfd\x25\xfc\x5f\xc4\xfc\x08\xb9\xfd\xf6\xe2\xdb\x57\xe4\x2c\xcf\x89\x04\xe2\xd0\x28\x36\x6d\x0a\x32\xe5\xac\xc8\xd5\xb8\xa3\x4b\x9e\x80\x3e\x73\x12\x05\xb4\xe1\xf9\x9f\x87\xc8\x83\x1b\x49\x7b\x2e\x2b\x34\xb2\x24\xef\xfb\x0d\x08\x97\xcb\x1e\xfd\xf3\x57\xc4\x50\x37\xae\xe3\xf6\xca\xe0\x54\x69\xd9\xbf\x65\x84\xd1\x8b\x9c\x48\x59\x30\xba\x4d\x2e\xc4\x01\x9b\x9e\x7a\xff\x0f\x5b\x02\x00\xef\x3b\x04\xab\x64\xfe\x8a\xa8\xa6\xaa\x64\xad\x95\x57\x84\xc0\x9e\x14\x3e\xc4\xde\xe3\xa0\x4b\x9c\x90\xbf\xfb\x1f\x0b\x3a\x61\x85\xfa\xfe\xf0\xf0\x8f\xdf\x5c\xfe\xc7\x9f\x0e\x0f\x7f\xf8\x7b\x18\x62\xfb\x76\xc7\x5a\xd9\x03\x41\xd0\xde\x25\x73\x50\x60\xc2\x10\xd1\x38\x85\xc2\xc3\x59\x96\xc9\x46\x80\x91\xef\x84\x28\x4d\x75\xa3\xc6\x73\xa9\xf4\xd5\xb5\xff\x67\x25\xf3\xab\xeb\x08\xa8\x9d\xa7\xd5\x20\x8f\x23\x8f\x45\x40\xe1\x18\xaf\xa9\x9e\xef\x91\x8c\x6e\xb3\x09\x6d\x1e\x3d\x04\x73\x56\x22\x8b\x57\xd6\x2c\x64\xfe\xf3\x75\xe4\x44\x71\x70\x45\xee\x6b\xae\x35\x13\x20\x87\xb1\xba\x34\x52\xc9\x89\xb9\x49\xad\x58\xb1\x78\x79\xb0\x77\x62\xed\xf7\x33\x79\xe9\xe6\x25\xb7\x6e\xbc\x5c\x9e\xa5\xc4\xc8\xba\x6e\xb4\xda\xed\xd9\xf5\x95\xb3\xb0\xed\x75\x99\xce\x3a\xf4\xfa\x81\x14\xc4\x5b\x99\xec\xa2\xbd\xb4\xfe\x8a\x48\x51\x84\xf8\x7a\x3b\x0f\x45\x0a\x0e\xd6\x23\x23\xe4\x7b\x0b\xd2\x11\xfe\x38\xce\xaa\xe6\xc4\x3e\x30\x2e\x59\x29\xeb\x65\xf8\x5e\xda\xc7\x59\x35\x67\x25\xab\x69\x31\x52\x5a\xd6\x74\xc6\x4e\x3c\x78\x04\xeb\xff\x85\x80\xc3\x17\xa3\x33\xc1\x75\xe8\xa8\x2c\x65\x4d\x6d\x58\x75\xb1\x74\xf4\x94\xe5\x9f\x87\x32\xb8\xed\xdd\x23\x61\xf0\x27\xfc\x6e\x27\x91\xc6\x5b\x00\xac\xd9\xdd\xad\x05\x64\xf4\x85\x2c\x9a\x92\xa9\x38\x99\xc1\xb1\x77\x78\x93\x89\x85\x91\xe8\xd5\xde\x85\x88\x9c\x2f\xb8\x92\xf5\x8e\x32\x04\xb7\x46\x72\xd9\xe8\xaa\xd1\x66\xa6\x25\xd5\xf6\xae\x44\x2d\x92\x7d\xaa\xa4\x02\xbd\xce\xde\x93\x15\xf2\xf7\xf2\x20\x02\x4c\x45\xb5\x66\xb5\x78\x45\xfe\xdf\xd1\xdf\x7e\xf3\xcf\xd1\xf1\x9f\x8f\x8e\xbe\x7f\x31\xfa\xdf\x3f\xfc\xe6\xe8\x6f\x63\xf8\x8f\x5f\x1f\xff\xf9\xf8\x9f\xee\x1f\xbf\x39\x3e\x3e\x3a\xfa\xfe\x9b\xb7\x7f\xb9\xbd\xbe\xfc\x81\x1f\xff\xf3\x7b\xd1\x94\x77\xf8\xaf\x7f\x1e\x7d\xcf\x2e\x7f\x88\x04\x72\x7c\xfc\xe7\x5f\x45\x4c\x8e\x8a\xe5\xb7\x41\xf2\x43\x00\x9b\xf1\xe0\xb8\xd0\x6c\xc6\x36\x19\xfd\xb6\xbd\x11\x79\xd4\x84\x7c\x1a\xb5\x82\xf4\x88\x0b\x3d\x92\xf5\x08\x5f\x7e\x45\x74\xdd\x84\x8f\xcc\x1d\x53\xfa\xbd\x78\xef\xee\x74\xc7\x70\xef\x58\xc7\x5e\x91\x5a\xb1\xac\x66\x7a\x3f\x7a\x23\xc2\x72\x56\x92\x4a\xe6\x87\x61\xb9\x58\x6c\x34\x36\x6f\x5b\xd0\xbf\xac\xaa\xe9\x84\x23\xdc\xc1\x56\x4a\x98\xd6\xb2\x1c\x13\x30\x1a\x46\x11\x88\x09\x23\x94\x2c\x68\xc1\x73\x07\xeb\x8e\x0d\x5a\x22\xdc\x78\x56\x5f\x7f\x4e\xea\xeb\x0d\xe2\x06\xea\xae\x11\xd7\x00\xc7\xfe\x75\x57\x26\x16\xdb\x0d\x78\xab\x9e\x07\xf3\x64\xdf\x89\xe2\x84\x45\x2d\x49\x25\xab\xa6\xa0\xba\x67\xd4\xdb\x32\xc1\x55\x7b\x73\xd7\xa3\x62\xef\x63\x6b\xa8\x36\xe8\x05\xbe\x8a\x41\xc9\xc9\xed\x0c\xed\x1b\xee\xc9\x59\x51\x10\x2e\xf0\x3e\x02\x58\x67\x11\xae\x19\xca\x81\x84\x6e\xc3\x53\x2a\x08\x5b\x30\xa1\xcd\xb9\xad\x4c\xd3\x6c\x82\xd2\xb4\xd6\x5c\xcc\xc6\xe4\x3b\xf3\x77\xa4\xc2\xd6\xe0\xba\xd5\x7d\x54\x36\x85\xe6\x55\xc1\x88\x97\x1e\xd0\x96\x5b\x34\x8c\x50\xa5\x64\xc6\xa9\x76\x16\x66\xf4\xab\x2b\x3d\xbc\x70\x58\x8f\xa6\x77\x60\xe2\xcf\x58\xce\x44\xc6\xc6\xe4\x23\xb8\xd3\xfd\x1e\x4e\x96\x66\x35\x97\x62\xe1\x6d\xd7\x0d\xba\x3b\xb7\x41\x35\x6b\xd9\x0c\xf9\xaa\x2c\x1b\x0d\x8e\x94\xc7\xf7\x74\x19\x7c\xb3\x16\xe3\x8e\xc3\x0b\xc8\xb4\x57\x72\x28\xf8\xeb\xe4\x74\xeb\x5d\xf0\x86\xa2\x6d\xe7\x1c\xc1\xd8\x62\x98\x90\x37\x01\x07\xf8\xf8\x1a\xf7\x69\x2d\x59\x7d\xae\xf3\x74\xd6\xeb\x18\x6e\xf2\x65\x73\x92\x54\x2e\x12\xc5\x21\xa2\xb9\x43\x2c\x67\x48\x30\x6a\xa6\x51\xfa\x38\x0b\x65\x55\xb3\x29\xff\x14\x8d\x9b\x67\xa2\x55\xe9\x78\xce\x84\x36\xea\x53\x0d\xa4\xbe\x66\x15\x13\x60\x4b\x61\x34\x9b\x07\xd9\x97\xa5\xf2\xad\x57\xa3\xf5\xc1\xee\xd7\xcf\x8a\x12\x57\xea\x05\xbc\xd9\x24\xf3\x3d\xdf\xbe\x9f\xdd\xed\xb3\x78\xb0\xdf\xab\x27\x64\xce\x50\x53\xdb\x66\xb4\x58\x39\xdb\xce\xf3\x36\xb6\xcc\xfd\xeb\x7e\xce\xb3\xb9\x9f\x9e\xd1\x7f\xb7\x04\xdb\x10\x1b\xa8\x52\x49\xb8\xa3\x53\xae\x89\x34\x12\x8a\x99\xcb\x98\xdc\x6c\x80\x57\x52\x9d\xcd\xed\x13\x87\x5b\x95\x46\x74\x1b\x78\xef\xad\x05\x3f\x41\x93\x72\xde\x14\x2c\x27\x2e\x7c\x0a\x3f\xd5\xa2\xe4\x16\x88\x31\x88\xda\x0b\x34\x3a\xa5\x4a\xf1\x99\x18\x55\x32\x1f\x99\x6f\x9c\x6e\x46\xa3\xe0\x15\xed\x86\xfc\x86\xae\x69\x00\x13\xbd\x29\x28\xe6\x78\xdf\x7b\xfb\x6a\x47\xa2\xc9\x64\x59\x35\x9a\x75\x8c\xaf\x4e\x83\xde\x32\xa3\xc9\x12\xa3\x01\x3b\x72\x73\x2b\x97\xa5\x12\x82\xfe\xfe\x96\x54\xd0\x19\x1b\xd9\x29\x8d\xfc\x94\x46\xfe\x5b\xbb\x6e\x79\x98\x1e\xa2\x89\x78\xfb\x3d\xee\x6f\xe5\x1b\x34\x50\xe3\x8f\x13\x6b\xd8\x2b\xe9\x27\x5e\x36\x25\xa1\xa5\x6c\x04\xa8\x28\x76\x25\x03\xd7\xb8\xdd\x76\x5a\x14\xf2\x9e\xe5\x9f\x6b\x0b\xa3\xb6\x91\x24\x62\x2f\xf9\x52\x0d\x8e\x41\x43\x63\xbc\x81\x31\xda\xb0\xb8\xa3\x41\xd1\xf9\x17\x62\x51\xf3\xbd\x73\x98\xac\x20\x27\x17\x0f\x40\x4e\x47\x13\x20\xa2\xca\x7f\x81\x2b\x22\x4b\xae\xb5\xb5\xd8\xd3\x96\x26\x0c\x99\x4a\xb8\xee\x99\xad\xed\x55\xe2\x53\x24\xde\x5c\x11\xf6\xc9\x28\x88\x1c\x5c\x26\xce\xf9\x75\x82\xec\xfd\x9e\xab\xa1\x09\x6b\x69\x74\x4d\x5e\x56\x05\x2b\x5d\xb0\xf9\xc8\x29\xa2\x18\xd9\xf3\x7c\xbd\x9e\xaf\x97\x1b\x2a\x5e\x36\xea\x8a\x45\x68\x1c\x99\xb0\xa2\x15\x8f\x0c\xfa\x57\x32\x57\x56\x26\x71\x48\xb3\x2d\x26\x97\x90\xcb\x4f\x5c\x41\x8c\xfe\x7b\x06\xd6\x90\x1b\xa6\x15\xb9\x9f\x4b\xc5\x10\x0e\xad\x99\x85\x8e\x26\x14\x60\xb9\xd6\x7e\x34\x20\x75\x49\x08\x29\x9f\x4e\xfb\xef\xe5\xac\x2a\xe4\xb2\x04\x49\xfd\x4a\x77\xa5\x2e\x2b\x4a\x6d\x83\xc8\xca\xaa\xa0\x9a\x1d\x2a\x2b\x7e\x0d\xd9\x5d\x1e\xc4\x7d\x61\x36\x97\x9f\x8c\x54\xa2\xda\x4c\xb4\x4d\xa3\x77\x2a\xab\xaf\xf5\x0d\x84\xfd\x33\x1a\xa4\x73\x40\xdd\x4a\xcc\x7e\xb8\x05\xcd\xa6\xfd\x05\xce\xe2\xec\xdd\xc5\xf6\xc3\x0c\x9b\x9e\x48\xc8\xfc\xb4\xb6\xb4\xb3\x55\x14\xeb\x4c\xa9\x2f\x9b\x0f\x2a\x09\x98\x4f\xe0\xe2\xe6\x31\xd3\xe5\x04\x0d\x86\x27\x36\x88\xd6\x67\x26\xe1\xc3\x35\x83\x84\x9a\x00\x54\x74\x5c\x18\x00\x36\x7b\xe6\xe1\x3a\x6b\x8c\xe7\x26\xe4\xb5\x19\xf9\xc5\xec\x41\x39\x8e\x70\xe9\xf4\x8e\xcc\xec\x48\x8f\x3c\x40\x18\xa1\xd9\x53\xf4\xee\x44\x1c\x17\x81\x68\x9b\xaa\x00\x5f\xb1\x8c\x8b\xc0\x8c\x52\x53\x71\x53\x92\x96\xe3\xd1\xa2\x1b\xf0\x6f\xd6\x74\xa8\x10\x49\xcc\x8d\x9b\xf3\x2a\xb8\x20\xc3\x95\xad\xa5\xd4\xe7\x5a\x7d\x04\xab\x78\x9b\x13\x67\xee\xd8\x95\x38\x21\xef\xa4\xbe\x12\x61\x47\xcb\x25\xda\xba\x0d\xfe\x5d\x48\xa6\xde\x49\x0d\xbf\xec\x6d\xc3\x70\x9a\x49\xdb\x85\xaf\xc0\xd5\x14\x48\x09\xc0\x49\xd1\x49\xce\x82\x78\xf4\xf0\x6e\x19\x32\xee\xb6\x9e\x2b\x72\x25\x88\xac\xed\xbe\xb4\x16\x7b\x65\x3f\x51\xc6\xf8\x06\x27\x8c\x08\x29\x46\x18\x98\x6c\x24\xb8\xd5\x6f\x5c\xfa\x58\xed\xee\x6e\x86\x8f\x61\xe3\x74\x20\x8a\x1c\x3f\x75\x6b\xb8\x0f\xfe\x05\x93\x00\x0b\x9b\x03\x1b\xd8\xd7\x06\x36\x0d\x52\xdb\xa8\x66\x33\x9e\x91\x92\xd5\x33\x66\x84\x9d\x6c\x1e\x77\xc8\xc3\xb4\x18\x47\x90\x22\x77\x01\x0e\x62\x0d\x30\xa2\x37\xc0\x23\x53\x58\x17\xbe\x81\xe4\xbc\xa4\x95\x41\x98\xff\x36\x94\x19\xf6\xf4\x7f\x48\x45\x79\xad\xc6\xe4\x6c\x60\x86\x8a\x8b\x59\xc1\x7a\x6f\x59\x8b\x67\xf7\x03\x06\xb6\x11\xac\x7f\x6c\xf8\x82\x16\x43\x99\x39\x4e\x86\x66\x28\x41\x9b\x19\xad\x32\xd9\x13\x2b\xa7\x18\xea\x86\x71\x6d\x5c\x91\x83\x3b\xb6\x3c\x18\x42\x98\x55\x94\x3b\xb8\x12\x07\xc8\x81\xd6\x90\xc8\xb3\xab\x40\xd4\xd8\x01\xbc\x75\xf0\x10\x8e\xbd\x67\x61\x3c\x80\x29\x5a\x16\xac\xee\xa6\xda\xaf\x8e\xbe\x79\xb8\x7d\x1a\x16\xe4\xc3\x2a\xba\x70\x1e\xdb\x13\x76\xeb\x6c\x6d\xe6\x26\xb7\x33\x02\x94\xd5\x9a\x66\x73\x48\x3f\x77\x33\x1a\x10\x1b\xa8\x58\x12\x73\xaa\x1a\x39\x22\x20\x95\x55\x4d\x75\x0d\x6e\xc9\x3f\x7a\x1c\x3e\x61\x20\xc1\xfe\x09\x73\x88\xb6\x1f\xa1\xc3\x72\x43\x2c\x3c\x6e\xfd\xd1\xfd\xd7\x9f\x1e\x90\x57\x16\x23\x22\xe0\x24\xa3\x05\xba\x4b\x78\x9c\x70\x91\x83\xf3\xd3\x2e\x1d\x76\x04\x21\x99\x7d\x2c\xc3\x04\xee\xd2\x90\x56\x52\x32\x2a\x94\x33\x9d\x82\xaf\xb4\x05\xa4\xac\x5b\xb8\xa3\x3c\x5b\xe3\x52\x04\xcf\x03\x54\x7b\x27\x6f\xac\x55\xf5\x84\x5c\x83\x95\xbf\xfd\x05\xee\xec\x3b\x79\xf9\x89\x65\x8d\x1e\xcc\x94\x89\xe2\xb6\x01\x21\xab\xb7\x85\xdf\xb4\x02\x16\xae\xb7\x27\x60\xb5\xb7\xc2\x89\x50\xc3\x32\xac\x1c\x0f\xee\xe5\x1d\x5b\x2a\xcf\x2c\xad\x68\x07\x6c\x6d\x98\x2d\x7a\x3c\x74\xac\x10\x79\xeb\xff\x71\x46\xd3\x72\xc2\x05\x4e\x12\x3f\xeb\x0e\x7d\x10\xa8\x99\x95\x3b\x1e\x23\xb3\x17\x05\x4e\xef\xa1\x9b\x1f\x23\x17\xf6\x4e\xe0\xdb\x48\x99\xb0\x5f\xc4\x60\xc3\xec\x1c\xcd\xdf\x2c\x09\x76\xc4\xbb\xcb\x1f\x1b\x5a\xb4\xe9\x63\x81\x23\x75\x8f\x5b\x00\x3d\x9e\x67\xfe\x7c\xcf\x8b\x3c\xa3\xb5\x8d\x30\x05\x5a\x33\x08\x51\x49\xc4\x2f\x0a\x44\x30\xa3\xc2\x53\xba\x16\x53\x14\x86\x02\x54\xb4\xd6\x3c\x6b\x0a\x3a\x2c\xe1\xdb\xca\x25\x11\x09\x62\x81\xb3\x6b\xd1\xfd\x86\x65\x52\xe4\xf1\xaa\xe5\xed\xea\x9b\xab\x11\x0e\x15\xab\xb9\xcc\x87\x02\x1b\x60\x02\xbc\x64\xab\x17\xef\xa8\xef\x27\x92\x53\x47\xdb\x3c\xc1\x08\xdc\x1e\x67\xe4\xb3\x15\x07\x9c\x78\xc1\x67\x42\xd6\x2c\x3f\x6e\x19\x4d\x4b\x05\x86\xc9\xe5\xd7\x4b\x67\x6d\x3c\x21\x5c\xbb\x1c\x3d\xc5\xf4\x89\xf3\x41\xd9\x6b\x68\x8f\xd5\x83\x1d\x84\x3a\x95\x35\x24\x4c\x1e\xe5\x12\x73\xfe\x16\x3c\xd3\xc7\x63\xf2\xff\xb1\x5a\x02\xda\x0a\x36\xa3\x9a\x2f\xbc\x64\x73\xcf\x8b\x62\x10\x22\x78\xd5\x18\xc5\xa8\x20\xf2\x82\x1c\x01\x48\xc2\xcb\x92\xe5\x9c\x6a\x56\x2c\x8f\xd1\x9e\xc3\x88\x5a\x2a\xcd\xca\x30\x02\x85\x8d\x6b\x18\x83\x0c\x4f\xfe\xee\xab\xad\xcf\xa5\x65\x10\x7f\x74\xb9\x90\x2d\x99\xc6\x18\xa3\x15\x54\xb1\x12\x40\x90\x46\x6f\x55\x57\xba\xf1\x4b\xb6\x58\x88\xd3\x3c\x62\x91\xec\x1f\x06\x4f\x29\xa9\x19\x54\xef\xb1\x37\xee\x01\x37\x13\x63\xd6\xdf\xca\x46\x6c\xb3\xd7\xf7\xb6\xea\x8d\x35\x54\x7d\xec\xbc\xd6\x56\x01\x58\x89\x4e\x7b\x64\x41\xaf\x33\x87\x8e\xe7\x80\x12\x70\x17\x80\x80\x65\x88\x1c\x3e\x65\xe3\xe2\xb6\xcb\x7a\xa1\x69\xef\x29\xb7\x1f\xe6\x36\x90\x42\xf4\xe0\xec\x7f\xff\x81\x68\xec\x87\xa4\x1f\x1b\x36\xd8\x0f\xdb\xa3\xda\x12\x1c\xc0\x5a\xd8\xc7\x61\xd6\xe3\x51\x1a\x66\xc1\x72\x1b\x09\x0c\xf4\xc6\x82\x25\x87\xaf\x0e\x1f\xcc\x48\x70\x91\xb5\xac\xe8\x0c\x6e\x66\xf4\x5a\x57\x5f\x24\x39\xd3\xac\x2e\xa1\xac\xc9\x5c\xde\xe3\xdf\x81\xa1\x0f\x2e\xb4\xb2\x10\x58\xde\x56\x98\x99\x4b\x05\xfc\xba\x9f\xf0\x0f\x74\x00\x42\x26\xee\x03\xba\x3d\xad\x65\x23\x72\x2b\x07\x7b\x82\xff\x76\x65\xc2\xef\xa4\x00\x4a\xd5\x28\x4c\xce\x5f\xab\x8d\xd3\x1f\x9e\x1b\x4d\x98\xa6\xe6\x82\xbe\x1c\xbf\x7c\xf1\xe0\xed\x4f\xaa\x30\x01\x06\x95\x15\xfb\xbd\x8b\xc8\x71\xb7\xf3\xc1\x33\xaa\x19\xcd\xbf\x15\x45\xbc\x5c\xfe\x16\x11\x14\x5e\x1c\x19\xa5\x1d\xbc\x79\x75\x03\xf9\x55\x34\x1f\xdd\xd7\x5c\xb3\x28\x07\x1e\x21\x47\x53\x5a\x28\x46\x64\x4d\x1a\xe1\x15\x98\xe3\x7e\xfd\x00\x78\x24\xbc\xcc\x50\x4c\x9a\x6a\x26\x0f\xba\xdb\x78\x89\x11\x69\xdb\xab\xed\x51\x36\x90\xff\x60\xdf\xde\x70\xcd\xfb\xa5\x12\xc8\x11\x3e\x69\x24\x6c\x29\xf5\xf1\xc3\x03\xd5\x70\xd9\x97\x9f\xaa\x78\xb9\xff\xd2\x56\x85\x20\x55\x68\x0f\x82\x62\x7f\x67\x7f\x06\xf6\xe0\x6b\x36\xa7\x0b\xa6\x88\xe2\x25\x2f\x68\x1d\xc8\x1e\xd4\x92\xdc\xe0\xaa\xc8\xa4\xd1\x9b\x6b\xd2\x6c\xae\x67\x12\xa0\x22\x6d\x3d\x8c\x4e\x3d\x93\xee\x0a\x3a\x9f\x8a\x57\x52\x36\x1c\xaa\x9b\xbf\x39\x15\xa0\x75\x6e\x3d\x66\x0e\x65\xa3\x1b\x5a\x04\xf6\x80\x7d\xca\x8a\x46\xf1\xc5\x43\xee\xbf\xcd\xb9\x4b\x16\x5d\x56\xa5\x96\x4a\xe6\x37\x15\xcb\x9e\x46\x66\xe9\xeb\xa2\x86\x9c\xe6\x0e\xb1\x20\x76\x1f\xcd\x57\x74\xbb\x40\x5f\xd2\x25\xc4\x83\x66\x19\x53\xca\x45\xac\x2f\xbb\x11\xf7\x7e\x55\x5f\x72\xa9\x22\x7a\xaf\x2e\x0b\xaa\x34\xcf\xbe\x2e\x64\x76\x77\xa3\x65\x9d\x50\xf7\xe7\xec\xbb\x9b\xb5\xb7\x57\x4a\x3d\x9d\x7d\x77\x43\x2e\xb8\xba\x1b\x44\xc3\x4e\xa9\x39\x8c\xe6\xe8\x9a\x09\x29\xb9\x6b\x26\xac\x60\xfa\xf0\x50\x21\x8f\x2f\x69\x36\xe7\x62\x98\x25\x58\xd6\x2f\x7c\x02\xa4\x2d\xfc\x67\xce\x23\x35\x9c\xc3\xa6\xe6\x9e\x5a\x4c\xff\x25\xbd\x57\x0c\x97\x3d\x31\xcb\x36\x7f\x66\xe1\xda\x34\x7b\xf2\x65\xe2\x24\xae\x2e\xf6\xe0\xab\x9c\xaa\x5b\x33\xb3\x14\x87\xd5\xe1\x6b\x5e\x30\xd4\x25\x61\x59\x2e\xaa\xd7\xde\x1d\x38\xbf\xa5\x6c\x82\xee\x91\x7b\x8a\xb6\x15\xa0\xdd\x63\x72\xcb\xab\x57\xe4\x52\xa8\xa6\x66\xad\x6d\x6e\xda\xff\x54\x10\x26\x57\x6d\xb6\xb4\x53\x7b\x01\x5f\x50\x0d\x34\x94\xd8\x6a\xc1\xe4\xf2\x13\x2d\xab\x22\x26\x45\xef\x80\x7d\xd2\x5f\x1d\x9c\x90\x83\x4f\x53\x65\xfe\x4f\xe8\xa9\x3a\x18\x93\xab\xd2\x87\x1b\x41\xb1\xc3\x9a\xb9\xd0\x52\x7c\x21\x3c\xd9\x69\x57\x56\x79\x14\x94\x0c\xce\x01\xc3\xa0\x8d\xd4\x9d\x4b\x72\x8f\x35\xb7\x0c\xfb\x63\x75\x2d\x6b\x9f\xeb\xd4\x39\x86\x40\x9c\x39\x8e\x4c\x96\x55\x2d\x4b\xee\x59\x9f\xbd\xae\x7b\x8b\x9f\x06\xa3\x59\x48\xe9\x20\x6b\x98\x8b\x75\x70\xed\xab\xa4\x2f\x8a\x38\xbc\x05\xbc\x0c\xfb\xf6\x3c\xde\x5e\x4d\x5d\x30\x1b\x1a\x16\xac\xd5\x08\x2c\x19\xf6\x21\x83\x89\x11\x9a\x1b\xb1\x52\x7d\x07\x37\xc9\x6b\x9f\xd1\x4e\x4e\x73\xb6\x38\x55\x39\x7d\x79\x02\xd3\x44\xc4\x09\xe7\xe0\xe9\xde\x9a\xa9\x22\x07\x2f\x0f\xc6\xe4\xc6\xc9\x47\x27\xdd\x3d\xf0\xcf\x05\xa1\x4e\x65\xed\x27\x04\x6e\xb9\x17\x07\xe4\x48\xd6\x30\xb3\x8c\x0a\x52\x30\xba\xb0\xae\x27\xa4\x44\xe1\x89\x82\x05\xe6\x38\xb2\xc6\x41\x5c\x02\x77\xc7\x4e\xf5\x6f\xbf\x0d\xb0\x9f\xb0\xee\x42\xd6\x6b\x58\xd8\x88\xfc\x03\xa3\xb4\x1c\x80\x8a\x21\x0d\x0f\x33\x9c\xc7\x88\x35\x50\x48\xd5\x42\x0e\xae\xdf\x6d\x94\xc1\xcb\x55\xcb\x0e\x7e\x60\x0d\xd9\x82\x30\x3b\xc8\x78\x00\xda\xcf\xc1\x93\x73\x3e\x92\x54\x8d\xc8\xb1\xb6\xb4\x73\xf8\x20\xf8\x8f\x0d\x23\x57\x17\xbe\x0e\x11\xab\x15\x57\xda\x50\xb2\x9c\xab\xbb\xd8\x1a\x16\x90\xf6\x63\xc4\x95\xa3\xb3\x92\xfe\x97\x14\xe4\xf2\xeb\x1b\x3b\xa5\xe3\xcf\xb8\x71\x01\x82\x48\xff\xab\xa9\x99\x11\xb0\xe2\x83\xc4\xdc\x1b\xab\x92\x9a\xf9\x9d\x5c\x50\x4d\x41\x60\x43\xea\x35\x6c\x13\x15\x2d\x8f\x35\x58\x3f\xe1\x22\xb7\x44\xaf\x23\x6d\x3d\x95\x60\x64\xce\xfa\xdd\x76\x69\xb8\x7d\xe8\xc3\xfb\xab\x3d\x08\x4f\x19\x70\xb5\xd9\x5b\x99\x27\x4a\x50\x7f\x35\xdb\x75\x8e\x6f\x93\xd2\xbc\x4e\xde\x49\xc1\x4e\x80\x58\x10\x43\x2d\xf0\x3f\x83\xe8\xfa\x5d\xcd\x35\x8b\x24\x99\x11\x6c\xd5\xed\x5f\xd2\x6a\x6e\x3b\xb6\x24\x60\x80\x06\x7d\xe0\xd6\x59\x06\x3b\x29\xe4\x84\xd8\xdb\xb0\xcf\x99\x7e\x78\x7f\x95\x3c\xd1\x0f\xef\xaf\x9e\x6e\x92\x3b\x08\xd7\xab\xb2\x75\x2b\x67\xb4\xe9\x87\xad\x34\x16\x66\xfe\x06\x46\xbc\x44\x3c\x76\xb2\x6e\x58\x26\x4e\x93\x85\x09\x0f\x07\xb0\x75\x65\xe1\x7d\x9d\xc0\x7a\x35\xf4\xf5\xd1\xbf\x9a\x97\x9f\x2a\x0c\x82\xb6\x0e\xb8\x9b\x39\x85\x8a\x2a\x3e\x0b\xde\x20\x4a\x98\xef\x72\x75\xa7\x0c\x17\x72\x28\x45\x28\x16\x8b\x23\xe4\x82\x61\x20\x47\xfe\xca\x05\x61\x45\x43\xdc\x0c\xf0\x2d\xe4\x16\xe4\xaf\x90\x0f\x10\x4c\x35\xc8\x49\xaf\x84\xff\x20\xd4\x23\x34\xbd\x0a\xff\x2a\x5d\x50\x5e\xd0\x09\x2f\xb8\x5e\x1a\x39\xe6\x78\xec\x33\x2f\x62\x04\x63\x05\x5b\xb6\x37\xa2\xb4\x93\x68\xb6\x66\xf6\x25\x47\x06\xce\x29\x98\x94\x8f\xc7\xf1\x52\xd9\x9c\xd5\x0c\x03\xe8\x51\xb4\xeb\x8a\x74\x66\x6f\xe0\x06\xad\x48\x6c\x71\xe8\x1b\x12\x87\xe0\x38\x0d\x3d\x48\x63\xeb\xe6\x8d\x8d\x6c\x1d\xfe\x70\x83\xa5\x0b\x07\x27\x68\x33\x7d\xbe\x28\xce\x8e\x59\xd2\x41\xde\x0e\xa8\x17\x78\x2a\x96\xbb\xff\x5c\xf1\x8e\xf8\xa4\xf4\x64\x51\xc0\x4c\x52\x58\x51\xc0\x55\x25\xea\x25\x12\x00\x26\x06\xd7\x7e\x63\x49\x9c\x2d\xb0\x89\xd2\x85\xc1\xc1\x6f\x82\x35\x67\xe2\x4b\x58\x39\x4c\x49\x4b\xc1\x9e\x43\x98\xdb\x30\x82\x45\xcf\x23\x63\xd5\x7c\x1a\x1f\x7f\x73\xce\xaa\xf9\xeb\x9b\xbe\xd9\xda\xfc\x46\x5e\xdf\xac\xdf\xd9\x80\x3f\x85\x6a\xdc\x01\x85\x86\xee\x43\x45\x0a\x3e\x65\x9a\x0f\x2e\x6c\xaf\x37\xba\x94\x82\x6b\x59\x0f\x71\x94\xd8\x9b\xea\x40\xa5\x71\xfa\xb6\x5a\xda\x5b\xfb\x3e\x06\x54\x67\xb2\x28\x58\xa6\xb1\xfa\x68\x10\x57\xe1\x00\xdc\x04\x36\xa9\x88\xcc\xda\x72\x7c\x97\x2d\x54\x07\x4f\xf1\xf0\x4f\xdf\x5f\x9e\x5d\xbc\xbd\x1c\x97\xf9\x2f\xe7\xf2\x7e\xa4\xe5\xa8\x51\x6c\xc4\x83\xe5\xda\x3e\x47\xb0\x3a\x8e\x2a\xa2\xa6\x69\x7f\xa3\xbf\x75\xc5\x0e\xc8\x07\x85\x61\x4a\x60\x12\x74\xce\x5f\x29\xf5\x09\xa9\xa9\x9e\x47\xd4\xe3\xd3\x73\x6a\x2d\x92\x4d\x51\xe0\xde\xeb\x9a\xb1\x93\xae\xa1\x63\x20\x93\x32\x71\xa9\xbb\x19\x85\xda\xe5\x06\x98\x41\x70\xb5\x9e\xde\x3f\x06\x33\x20\x4f\x8d\xac\xf1\x7c\x27\x24\xf4\x90\x81\x3d\xbf\xf1\x10\x5c\x2c\x19\xb8\x9e\xb5\x8c\x2a\x58\x06\xf9\x23\x53\x59\x1b\x4c\xad\xfb\x58\xc5\x74\x06\xdb\x70\xda\x28\x56\x8f\x2d\x77\x7b\x1b\x63\x63\x7f\xba\x2d\x8e\x2e\xdd\x98\x5c\xad\x77\x75\x83\xdf\xb3\x29\xa6\xe6\xb8\x2e\x17\x28\x13\x06\xf7\x82\x36\x7a\xce\x84\x76\x6d\x8b\xec\x36\x6e\xdc\xf1\x60\x3f\x04\x1c\x4f\x8c\xc5\x51\xc5\x24\x53\x0a\x40\x3e\x97\x45\x1c\x1c\x7b\x2f\x8b\x68\xae\xef\x03\xf8\x97\xcf\xe4\xae\x69\x2e\x21\x04\x0c\xab\x10\x87\x57\xd3\x41\x6d\x9a\x97\x5c\x3c\x35\xe6\x86\x84\x51\x2e\xf2\xe1\x9d\x59\x29\xc2\x0c\xcf\xf7\xa5\x51\x84\xe1\xbc\x49\xce\x83\x3f\x38\x3b\xea\xb4\x4a\x2c\xc4\x63\xfd\xfc\x7d\x2f\xff\x46\xc4\x5e\xdd\xaa\x72\xa9\x7e\x2c\x46\x38\x83\x51\x95\xb7\x7b\xf5\x73\x75\xcb\x3f\xad\xe9\xf0\x27\xe0\x4c\xdf\x0b\xc6\x90\x67\x01\xd2\x8f\xc7\xdf\xe3\x78\x99\xf1\x01\x12\x0d\xf4\xa4\x54\x2e\xdd\x1c\x6b\xdc\x62\x73\x4b\x6b\xb7\x88\xa9\xb4\x5b\xd1\x9a\x96\x4c\xb3\x1a\xc3\x82\x6d\x10\xb2\xb0\xf9\x79\xdf\x56\x4c\xdc\x68\x9a\xdd\xed\xb3\x84\xff\xb3\x94\xf1\xe5\x4a\x19\xbb\xf9\xb1\x5d\xf8\x61\xee\x71\xc8\x16\xb1\x5c\xc6\x46\xff\x13\xf4\x61\xe3\x85\xfb\x02\xa8\xa0\xaf\x30\x1b\x6f\xe5\xf2\xf5\x44\xfb\xa2\x45\x5b\x71\x16\x8d\x57\xb2\x29\x86\x25\x0b\x5f\xdc\x19\x52\xc2\x82\x7b\xb7\xe7\x0a\x99\x56\xda\x4b\xf7\x0d\xb7\x74\xa9\x94\x39\x23\x13\xae\x5b\x8a\xa2\x98\x26\x15\xab\x4b\x8e\x19\xf5\x41\x4c\x90\x02\xbb\xac\xb3\x1c\x39\xbf\xe1\xe2\x76\x62\x1d\xa9\x40\x10\x99\x69\xd7\xf2\x38\x08\x73\xc2\xf4\x3d\x63\x82\xbc\x78\xf1\xe2\x05\x48\x6f\x2f\x7e\xff\xfb\xdf\x13\x28\xe3\x95\xb3\x8c\x97\x0e\x50\xfb\x60\x58\x29\x14\x39\xf9\x5f\x2f\x5f\x8e\xc9\x7f\x9c\xbd\x7d\x03\xf1\xb4\x95\x56\x64\x22\xf5\xdc\xce\xcc\x3c\xd0\x03\x1e\xd1\xde\xe3\xdf\x6f\xbe\x7d\xe7\x04\x37\xb5\xf2\x36\x28\x9c\x7e\x7b\x23\x03\xb0\x09\x7a\xb7\x5e\xfc\xee\xab\xaf\xc6\xe4\x82\xd7\x50\x95\x85\x43\x8e\x9e\x0f\x6b\xaf\x5c\xe8\xb5\x90\xda\xd7\x53\x0a\x6f\xa9\xad\xb7\x64\x19\xb1\xad\x7f\x51\xf2\xd9\x5c\x63\x3f\x5f\xc0\xfe\x82\x67\x1a\x6b\x61\xcb\x28\x5b\x19\xd6\x18\x55\x36\x11\xd5\xa6\x8a\xdb\x60\x3e\x58\xfc\x09\x29\xf8\x1d\x23\x53\xf5\x97\x5a\x36\x15\x14\x55\x88\x30\xc0\x41\xc9\x47\xa3\xc7\xd8\x6e\xc3\x48\x85\x5b\x5c\x55\x4c\x7f\xa6\x18\xae\x28\x4b\x67\xef\xb2\x5d\xf5\x84\xc6\x13\x5f\x19\x78\x84\x18\x5c\x51\x5e\x6f\xaf\x8b\xde\x59\xce\xdc\x06\xcd\xf4\x7a\xa1\x79\xdb\x48\xde\xa1\x69\xc3\xa5\xb8\xda\x51\xd5\xf2\x1f\xe8\x87\xe6\xc2\xba\xdb\x9c\x56\xa5\xac\x1c\x6f\xcb\x69\x80\xbf\x25\x90\x81\x44\x56\x6a\x2f\x19\xb9\xc6\xd6\x83\xea\x64\x54\x5f\x4d\xbb\xa9\xff\x31\xd6\x9c\x82\x2b\x33\xc5\x5e\x91\xfa\x0d\x33\xef\x36\xfd\xd7\xf3\x88\xbb\x6b\xe6\xd8\x88\x35\xe8\xb6\x7b\xa6\xe5\x0a\xd8\xa5\xd5\xa6\xd8\x07\x41\xb6\x73\xc0\x94\x1b\x9b\xd0\x6b\x61\xad\x95\x7b\x8e\x5b\xbf\xcb\x43\x61\xba\xb1\x47\x0b\x71\xb3\x66\xee\x4c\x29\x9b\x37\x5c\xd2\xfa\xce\x28\xb7\x96\xae\x87\xc5\xea\x6b\xb3\x49\x3e\x17\x1a\xd3\xe3\x17\xcc\xb7\xa2\xef\xe6\xf1\x99\x39\x1f\x8e\x83\xf7\x0d\xad\xf6\x86\x48\x43\x07\x00\xa4\x22\xe6\xbd\x27\xaf\x89\xd3\xcf\xff\xa2\x55\xa7\x11\xbd\x6d\x9e\x49\x7b\xb9\x42\xe1\x10\x06\x77\x0a\xe1\x7d\x4d\x10\xad\xe3\xfb\xc1\xc4\x75\x84\x31\x4f\x55\x31\x3d\xeb\x52\x64\xfa\xe8\xe6\x31\xdb\x3b\x95\xda\xcb\x1a\xd3\xeb\x25\xb1\xf3\x08\xc1\xb8\xb6\xf4\xd9\x85\x04\xa0\x28\x88\xa4\x2b\x26\xa1\x5b\x14\xca\x02\xf4\x7a\x69\xa7\xc9\x3d\x38\x52\xa5\x9f\x48\xb0\x2f\x92\x64\xa0\x48\xa0\xae\x6a\x5f\x94\x24\x14\xbb\x7e\x90\x97\xae\xa6\x98\x1c\xdb\xe3\x16\x8e\x1a\x76\x24\xdf\x48\xa0\xbe\xe3\xb5\xcf\xa7\xdd\x2e\xfc\x44\x82\x44\xa9\x24\x52\x04\x8a\x84\xd9\x15\x94\xc2\x82\x50\x24\xd0\x18\x71\x09\x47\x6a\xe7\xb2\x14\xd1\x09\x47\x8c\x6b\x17\xc7\x1a\x3d\xf1\x5c\xaa\xea\x75\xaf\x2c\x58\xa8\xa2\x4b\x3b\x4a\xd0\xed\x1c\x69\x1a\x93\xb7\x96\xd7\xe1\x55\xa5\x13\x25\x8b\x46\xe3\x07\xe2\xe8\x15\xf1\x20\xba\xec\x12\x26\xe8\xca\x94\x01\x0f\x74\x8f\xc5\x9e\x58\xcb\x42\x41\xb8\x41\xee\x15\xc3\x4d\x71\x44\x93\xd1\xe7\x26\x0b\x0f\xdb\xbf\x47\x68\x71\xd2\xf6\xbe\x0a\x2f\xfe\x31\xda\xa1\x64\x8a\xc7\x1b\x52\x6e\xae\xc8\x51\xdb\x2a\xd3\x05\x55\x5d\x09\xcd\xea\x29\xcd\xd8\x71\xc7\xc0\x32\x38\x39\xdf\xa0\xd4\xc7\x9e\xba\x1c\xcd\x39\x15\x79\x81\xce\x81\x8c\xd5\x70\xc5\xd8\x27\xcd\x6a\x11\xe0\x51\x66\x6a\x79\xcd\x17\xac\x56\xe4\xe8\x6b\x66\x34\x27\x46\x75\x53\x0f\xdb\xb4\xf7\x9b\x2a\x00\x9f\xdf\x87\xa1\x07\x00\xa5\x05\x09\xc2\x2b\x4e\xfb\x12\x9d\x4b\xdb\x6e\xcc\x70\xea\xb1\x1b\x78\x00\xaa\x6b\xe2\x1a\x1b\x74\x05\xbe\x04\x24\x6a\x29\x9b\xda\xfa\x1b\x6d\x0f\x8c\x20\xd0\x4c\xd6\xb5\xe1\x94\x30\x31\xaa\x48\xcd\x66\x46\x13\xab\x41\xa5\xc3\x4c\xf6\xa2\x31\x3f\xec\x2d\x4c\x7b\xaf\x81\xf2\x9d\x30\x76\xeb\x65\x0a\x3b\xa5\x9c\x17\x6a\x6a\x95\x42\xb9\xe0\xb9\x13\x6b\x20\x0e\xc1\x4a\x75\x5c\x91\x8a\x2a\x15\x61\xd3\xb1\xaa\x6f\xa7\x41\x5a\xe7\x6c\x51\x05\x05\xb1\xc7\xd7\x3e\x89\x52\xe0\x9d\x0f\xb9\x9b\x17\x2b\xa1\x6c\x5d\x30\x52\x22\x9e\xed\xc8\x9c\x5d\x37\x93\x82\xab\xf9\xcd\x4e\xae\x95\x77\x1b\x00\x60\x68\x5d\x37\x5c\x24\x6a\xbd\xdb\xdc\x31\x44\x31\xa1\x38\x08\x1c\x86\xb1\x19\x31\x27\x26\x6b\xd1\x68\x3c\x54\x29\x77\x38\xdd\xdb\x26\x21\x69\xb5\x60\xb6\x94\x97\xf9\x53\x67\x1d\x1f\xe3\x2c\xef\x58\xe2\x30\x67\x1f\x44\xd5\x7d\x8f\x64\xb4\x28\x94\x95\x6c\x7d\x35\x18\xc7\x9e\xe2\xcc\x21\xae\xda\x00\x62\x23\x37\x88\xea\x5b\xa7\xae\xf4\x59\x88\xb9\xe3\x1b\x37\x56\x91\x52\x62\xf6\xb5\x20\x52\xb8\xdd\x87\x2a\x90\xf6\xbf\x23\xd4\x66\x5f\x2d\x83\xd6\xcc\x5e\x96\x38\xd4\x7c\xf6\x79\x6d\x1d\x3f\x0d\x9f\xd7\x4e\xde\xee\xb6\xc7\x35\xed\xd4\x01\xea\x75\xcf\x18\xe8\x18\xd5\x99\xa5\x57\x40\x37\xd4\xfc\x49\x72\x9b\xa7\x26\xab\x9e\x69\x5d\xf3\x49\xa3\x13\xeb\x7e\x7f\x5c\x79\x19\x84\x2b\xa3\x9f\x03\x41\x1a\x59\xdd\x3a\x4b\xb0\x18\x59\x35\xd7\x5f\xbb\x75\x32\xe7\x65\x83\x20\x54\x10\x1b\xf0\xa5\x43\x45\x72\x99\x35\xbe\x31\x0a\xc8\x11\x6d\x60\x48\xb8\x8e\x3f\x49\xbb\xe2\xa9\xc5\x93\xbb\x1f\x08\x60\x69\x2e\xef\xc5\x3d\xad\xf3\xb3\xeb\xc1\xcc\xc1\xbe\xb0\xd6\xbe\xd3\xf5\x48\x3a\x50\xc4\xfc\x4e\x27\xb2\xd1\x41\xba\xeb\x0a\xca\xb8\xba\x45\xff\x42\x0e\x4a\x2d\x0d\x4d\xea\xf8\x1b\x83\xe7\x35\xe0\x8f\x24\xdb\x2c\x80\x31\xfc\x7d\xc5\x45\x1a\x76\x81\x46\x38\x3c\x57\x4c\x85\x11\x46\xc0\xb0\xe7\xa0\x0f\x28\xca\xfc\x17\x61\x5c\xef\xb9\x48\xf7\x64\xf8\xeb\xbb\x48\xa3\x5c\xa0\x61\x89\x66\xc5\x45\x1a\x76\x81\x46\x68\x2d\x6b\x2e\xd2\x08\xfb\x5f\x84\x8b\x6b\xc5\x45\xba\x07\xcb\xdf\x4f\xca\x45\x6a\xde\xe8\xf7\xc7\xe9\x91\xbe\xc8\x98\x14\xb3\xe3\x9f\xd5\xd7\xd4\x21\xe3\xc8\x79\x57\xf3\x24\x53\xf4\x08\xa0\x34\x48\x56\x5a\x7c\xea\x68\x27\xae\xd3\x24\x08\x68\x9f\xcf\x2f\xf5\x08\x1e\x27\x58\x51\x84\x42\x88\x63\x5b\xc2\x15\x76\xc5\x42\x47\x76\xeb\x31\x8f\xf5\xec\xc8\xfc\x15\xb4\x78\x20\x54\x08\x89\x32\x89\x3a\xb1\x9d\xa6\x4e\xac\xd5\x42\xe4\xf0\x1f\xaa\xa2\x11\x45\x3f\x70\x40\xeb\x2c\x27\xd6\x24\xd9\xe4\x23\x8f\x8e\x24\x1d\x1f\x81\x23\x84\xfd\x19\x28\x55\xdb\x1f\x69\x67\x49\xa0\x69\x90\x53\x1d\x62\xdf\x58\x15\x63\xf1\x6d\xa7\x31\xa9\x6c\xce\x4a\x0a\xff\xf9\x3a\x69\xea\x38\xb8\x22\x46\x48\xd7\x0c\xab\x33\xb1\xba\x54\x44\x4e\x4f\x7a\x8d\xff\x0e\x16\x2f\x0f\x62\x1d\x00\xc9\x4e\x4b\xe2\x70\x3c\x54\xe1\xb3\x3f\xd6\xeb\x7d\x7a\x17\x88\xc1\xef\xb6\x4d\x73\x04\x23\xeb\xcc\xbd\x17\x3b\x01\xd4\x16\x77\xfb\xd1\x96\xff\x65\xfa\x6c\x4f\xbc\x2d\xfd\xd9\x67\xfb\xec\xb3\x7d\xf6\xd9\x76\xc7\x8e\x3e\xdb\x0e\x33\x06\x72\xc5\x95\x8b\xed\x43\x3f\x6e\xec\x8d\x35\xef\x76\x1d\x18\xd6\xe5\x0b\xcd\x2c\x51\xed\x1a\xfb\xea\xe3\xd1\xd7\xb5\x75\xf6\xca\xba\x1f\xea\x74\x38\x1e\x1f\x1e\xa2\x0b\x38\x4e\x79\xf3\x20\x1b\x3d\x1d\xfd\x81\x30\x91\xc9\x1c\x11\xd6\xcc\xb5\x56\x1a\x84\xc9\xd6\xde\x97\xbe\xfa\xd2\xd5\x56\xef\x86\x56\xc1\x3c\x53\x50\x24\x9a\x42\xbb\x4a\x66\xaf\x1f\x20\x88\xb5\xe2\x97\xaf\xba\x6a\x37\xc0\xd7\xae\x8d\x65\x7d\x20\x87\xb5\xfd\x7e\xb1\x1b\x36\x5c\x36\xd7\x7f\x98\x1c\xe1\x8f\xe3\xac\x6a\xe2\x0c\x93\xae\xa9\xf6\xb8\x64\xa5\xac\x97\x27\x1e\x94\x01\xd1\x83\x6d\x9f\x18\xae\xc6\xdc\x0e\x23\xe1\x65\x4d\x5d\x33\x01\x3d\x82\xbf\x34\x59\x2f\xba\x48\x1d\xd9\x49\xd4\xf3\x67\x1b\x53\xf5\xa2\x1d\x2b\x59\x7f\xde\x9f\x0c\xd6\x75\xbf\xc6\x28\x1b\x6d\x3b\x6c\x5e\xe3\x89\x77\x82\x00\x4f\x63\x62\x41\x16\xb4\x56\x71\xe7\x41\x76\x93\xee\x72\xbe\xe0\x2a\xdc\xd2\xb2\xf3\xc2\x66\x73\x35\x34\x15\x68\x74\xd5\x68\x4b\xb3\x63\xaa\x45\x74\x66\x3e\x67\xbe\x2e\xb1\xbf\x3f\x2b\x82\xee\xcb\x70\xda\x9b\x1b\x5f\x64\x3b\xe7\xfe\x08\x36\x77\xee\x8f\xf8\x56\xcf\x9b\xdf\x4b\x42\x8a\x9d\xbb\xac\xaf\x0e\x77\x94\xbb\xde\xaf\x96\x2d\xb7\x05\xb1\x9d\xf2\xb0\xe7\x6b\x01\x9e\xc4\x0b\x9e\x90\xf2\x7b\x69\xdf\xe8\x67\xe6\x68\x56\x56\xb2\xa6\xf5\x92\xe4\xd6\x22\x18\x28\xba\xbf\x56\x7c\xa6\x53\x7d\xe6\xc1\x55\x36\x61\x55\x39\xaf\xf7\x90\xf5\x1b\x5d\x7e\x86\xe5\xbc\x29\xd3\x8c\xe8\xdf\x41\x85\x6b\x5b\x3d\xdb\x85\xd5\x20\x20\xdf\xd6\x80\x66\xc3\x25\xd3\x71\x33\xb9\x6a\xf7\x1d\xe5\x9a\x6e\xd1\xd7\x83\x95\x6e\x55\x46\x5e\x8f\xf2\xa5\x09\x99\x33\x73\x30\x0e\x18\xce\xad\x17\x3d\x8b\xae\xe8\xc8\x7b\x76\x64\x01\x1d\x1b\x99\xee\x2d\xb0\xed\x27\x39\x6b\x92\x54\x1c\x83\xff\x17\x7b\x63\x64\x8f\xc4\xb2\xd2\x12\x94\x3d\x5b\x83\x69\x4a\x0a\x99\x75\x82\xa5\x1c\x8b\x0c\xdb\x48\x21\x3e\x87\x2b\xe2\xef\x99\x73\x68\x9a\x53\x35\x73\x43\xc1\x08\xac\xb1\x85\xc2\xb8\x0f\x9e\xd1\x49\xd0\xb4\x8a\xb0\x51\x58\xf2\x27\x79\x0b\x75\xb9\x3f\xf1\xb2\x29\x49\xa3\xcc\x4c\xa1\xb9\x60\xe7\x99\x20\x54\x3f\xd1\x7b\xd7\x88\x03\x2a\xfb\x70\x01\x40\xfb\x3e\x0e\xf3\x97\x1b\xb7\xbf\x61\x13\xb9\x37\x7b\x40\xea\xb2\xd3\xde\x54\x03\xb2\xba\x9d\xa5\x95\x36\xe5\x94\xd0\x40\x97\x34\xd2\x95\x7f\x94\xef\xef\xb0\x76\x5f\x04\x2f\xba\x17\x26\xe2\xa6\xd8\x42\xf5\xfe\x60\x1a\x61\xe3\xfd\xd6\xb0\x7b\x33\x72\x37\x8a\xd5\xa3\x59\xc3\xf3\x74\xb4\xfe\x62\x79\x7e\x14\xa7\x4f\xe3\xef\x49\x5c\x7d\x67\x5e\xee\x23\x1d\xa3\x79\xe2\xc1\xa5\x0f\x8e\xec\x31\xc5\x6e\x51\xf9\x36\x50\x72\x70\xde\x93\x25\xa1\x2e\xb2\xce\x13\x0f\x1b\x9e\x74\x74\x56\x54\xf3\x4e\x94\x24\xe0\xad\x6b\x05\x33\x08\xd5\x30\xd6\x6c\x99\xd9\x72\x48\xbc\xd7\x05\x03\xa7\x87\xf8\x0a\xd9\x4a\x23\xf3\x3f\x31\x2d\x07\x9d\x4b\x75\xc2\xa6\xb2\x6d\x31\x8c\x2a\xb0\x3a\xb1\x76\xaf\x82\x69\x48\xb7\xc2\xcb\x1f\x74\x8d\x43\x18\x53\x29\x17\xe6\xea\xfc\x4d\x90\x0f\xae\x99\x23\x9f\xbe\x22\xf4\xb8\x6b\xad\xe2\xc1\x16\xcf\x84\x08\xc6\x72\x4c\xf6\x2a\xda\xf9\xd5\x8d\x50\x27\x64\x72\xec\x36\x12\x68\x87\x30\xd2\x7b\xe1\x54\x92\xc0\x66\xde\x81\x05\x49\x4b\x2c\x14\x55\xcb\x92\x28\x41\x2b\x35\x97\x1a\x6c\x15\xb4\xa2\x19\xd7\x4b\xf3\xac\xae\x69\x76\x07\xed\xc8\x03\x25\xa2\x70\xa6\x27\x24\x3b\xb6\xf1\xe4\xbd\x93\xe7\xaa\x43\x0b\xf5\xbc\x96\xcd\x6c\x0e\x39\x53\xe1\x4a\xc5\x59\x41\x95\x3b\x8c\x8d\xb0\xad\x06\xac\x48\xbe\x14\xb4\xe4\x59\x8c\x33\x0f\x62\x23\x15\x97\xd6\xcf\x85\xf3\x81\xde\x7d\xd7\xbe\xe6\x3a\x3a\xd8\xce\x0b\xca\x4b\x72\xa4\x18\x23\xfe\x92\xe0\x5f\x6e\xc2\x6a\x2e\x9a\x38\x6b\x46\x6c\xfd\x2c\xeb\x99\x73\x15\x0e\x6d\x69\x05\xf3\x4b\xcb\x5f\x02\x59\x80\xee\x4a\x1a\xa1\xcb\x06\xd5\x6d\x9c\xf2\xb1\x47\xbf\x8d\x7f\x1e\xfc\x86\xac\x21\x70\xce\x75\x44\x61\x22\x97\x6d\x28\x0f\x39\xbb\xbe\x42\xe3\xed\xc2\x75\x3f\x32\xf7\xcf\xd6\xaa\x0f\x6e\x47\x21\xc5\x0c\xe3\x82\x85\x65\x39\xee\x66\x1b\x06\x28\xa0\x43\xf4\x82\xe7\x0d\x2d\x90\xb5\xfd\x6d\xd8\x90\x6d\x16\x78\x7e\x73\x85\xa0\xf9\x6c\xae\x47\xf7\x0c\x0c\xb8\x28\xbd\xb4\x41\xdf\x6e\xb2\x3c\xec\xa4\xeb\x04\x54\x72\x05\x2c\x54\x5b\x63\x20\x3a\x03\xcc\x72\xef\xe9\x12\xea\xb9\xe2\xad\xec\x45\x16\x0d\x6f\xad\xad\x2e\x8e\xe0\x3d\x7e\x74\x90\x03\xce\xed\xcc\x77\xdc\x6d\x14\x03\x5b\xfc\xb0\x32\xb2\xac\x90\x0a\xac\xaf\xd7\x20\x48\xa7\x8f\x80\xff\x39\x1c\xe8\xa3\xa8\xc1\x33\xa3\xcd\x0c\x29\xf0\x7b\xd6\x42\x7e\xa6\xd1\x77\x70\x27\x6f\x59\x59\x15\x54\xa7\x05\x32\x1d\x7c\xd7\x71\x61\x74\x1c\xfa\x86\xb8\x52\x91\x8f\x68\x61\xae\xf2\xf5\xc7\xf3\xf0\xea\x65\x4b\x16\x7b\x5b\xe1\xba\xe0\x73\xe1\x1b\xfd\x19\xf1\x3e\x99\x1a\x12\x74\x8d\xb2\x72\xc2\x72\xe0\x6a\x76\xe6\x60\x83\xba\x17\xac\x76\xb7\xe3\xfa\xe3\xf9\x09\xe1\x63\x36\x8e\xf2\xa7\x5f\x7f\x3c\xf7\xa0\x1c\xbb\xd6\x72\x86\x89\x2f\x3e\xc1\x09\x88\x09\x2c\x65\xa0\xd1\x58\x3b\xda\x99\x78\xd8\x7f\xff\xa3\xd9\x04\xf3\xf6\x9f\x46\x7f\xb4\x64\x18\xfe\xf5\x77\x23\x1d\x44\x54\x50\xfc\xfb\xca\x5b\xdd\xcc\x09\xdf\xfb\xf3\xef\xd7\xb6\x7b\x9c\xed\x2d\xf7\xf7\x20\x58\x88\x35\x21\x4c\x68\xa3\x8b\x5e\x4b\x88\x65\xe4\x39\x62\x3d\xcc\xbd\x66\xff\x70\xee\x27\x38\xc6\xb0\x81\xcf\x32\xa7\x8c\x6a\x26\x40\x42\xb2\xe9\xf9\xe0\x21\x00\xf0\x40\xba\x28\xec\xcf\x51\xcc\xd5\xb2\xf5\x5a\x4e\x88\x96\x12\x78\x00\xf2\xa7\x33\x41\xd8\x27\xae\xa0\x70\x13\xee\x35\x1c\x17\xd5\x71\xa7\xe4\x04\x53\x33\x2d\x83\x41\xbe\xc0\x97\x59\x27\xac\xfd\xd7\x42\xea\x5f\xfb\xeb\x11\x4b\x04\x40\xaa\x94\x84\x2e\x24\x77\xad\x0f\x0d\x29\x16\xe0\x59\x69\x1b\xec\x4d\x96\xa4\xe4\x4a\xd3\xbb\x88\xb4\xed\x1b\x23\x54\x76\xa3\x6a\xf0\xf4\x05\x81\x36\x2a\x2c\x27\x8d\xd0\xbc\x80\xbf\xfa\xef\x44\xa1\x7e\x57\xe0\xbc\x9a\x12\xd5\x64\x46\xb2\xaa\x6a\x36\x72\xe2\xad\x7d\x0a\x18\x59\x0c\x15\x70\xbb\xd5\xee\xe5\x89\xbf\x0c\x73\x8a\xf6\x97\x2a\x07\xd0\x51\x7e\x51\x2a\xec\xf5\x5e\xad\xb3\x09\xfb\x20\x45\xd6\x8a\xb6\x80\x0c\x11\x35\xbb\xde\x81\xb4\x5b\xb8\x70\x3b\x34\x35\xd9\x34\x4b\xc1\x32\xa6\x14\xad\x97\x27\xd0\x0e\x93\x6b\x52\x06\x63\xb1\x88\x5d\xf4\xb4\x29\x50\xd4\x2f\xa9\x80\xa6\x93\xa4\x66\x99\x14\x4a\xd7\x4d\x06\xa7\x47\xc9\xa4\x96\x77\x4c\xc4\x26\x0f\x11\x83\xe5\xfd\x8c\x89\x96\x43\x41\x7c\x8f\x24\xd9\x9c\x8a\x19\x53\xd1\x55\x35\x4a\x9a\x03\xee\x7d\xe3\xd5\x43\xb7\x9f\xe6\x84\xe8\xd4\x68\x5e\x5c\xc3\x51\x4d\x8c\x4c\xe9\x5c\x98\x31\x53\x75\x96\xdb\x93\xd6\x23\x68\xb6\x94\x17\x83\x42\x00\x49\x73\x2c\xc5\xba\x94\x46\xa0\x34\x84\xec\x07\x09\x2e\xa4\x92\x69\x9a\x53\x4d\x93\xf3\x29\xde\x52\xdf\x11\xd3\x86\x68\xc1\xe1\x75\x42\xb7\xe2\x9c\x6f\x20\x3a\x5a\x7e\x92\xc9\x8a\x77\xeb\x8b\x00\xfd\x9b\xbb\xf3\x8a\xb5\xfa\x73\x3d\x26\xef\xa4\x0d\x01\xc0\x54\x0a\xf0\x10\xd2\xa2\x90\xf7\x2c\x87\x69\xba\x2f\x22\x23\x88\xa0\x2b\xb0\xfe\x06\xb4\xc3\x96\x99\xc4\x84\xeb\x24\x79\x17\xcd\xe1\x26\x9f\xc4\x6d\x1b\x4d\x94\xb5\x81\xfc\xb0\x7f\x9b\xf4\x9c\xb8\x18\x23\x03\x94\x09\xcd\x6b\xd6\x2d\x2a\x63\x0f\xa8\x11\x78\x41\xdb\xa3\x8a\x82\x69\x8e\x13\xce\x7b\xc6\xb4\x6a\xa3\xb7\x91\xcf\x1b\xe2\x6f\xa5\x3d\x90\xaf\xa2\x20\x82\x40\xee\x8e\xd8\x9a\xff\x36\xab\xab\x21\x65\xdd\x0d\xb0\xbf\x22\x3f\x37\x12\xcc\xde\x4f\x38\xdd\xc1\x8b\x6d\x68\xdf\xca\x3c\xde\x23\xbc\xd2\xc9\xb5\x05\xd0\x26\x84\x61\xd2\xa1\x8a\xb2\x5f\xf7\x67\x02\x51\x35\xaa\x6b\xb6\xb1\xcc\x66\x4e\x17\xd6\xcd\x13\x0d\x31\xdd\x45\xd0\x2a\x6e\x23\xdf\x7f\x0d\xa6\x35\x82\x69\x8d\x5e\xc6\x3a\xd3\xe2\xa3\x92\xfd\x64\xe3\xa2\x93\xfb\x1f\x48\xf0\x56\x1a\x32\x7c\x93\xe4\x64\x5c\x6d\x82\xe9\x79\xaa\x8d\x82\xf2\x91\x7a\x91\x2d\x25\xdd\x60\xdc\xd0\xce\x57\xe4\xd7\x3d\x69\xd4\x6a\x35\xde\x2c\x16\x1f\x30\x61\xc6\x91\xb3\xa7\x8d\xed\x51\xba\x3a\x85\x2b\x60\x47\xd1\x10\xbf\x66\x9a\x1e\xaf\xcc\x11\xa4\xef\xcd\xd6\x9f\x68\xb8\x7d\x88\x59\xa3\xb4\x2c\xbd\xd7\xf6\xd4\x66\x56\x46\x65\x71\xbb\xc1\x8d\xa0\x5f\x62\x7a\x11\xd5\xd4\x25\x08\x19\x52\x8d\x06\xe0\x63\x72\x25\x88\xac\xf3\x04\x77\xb8\xcd\xcc\xd9\x78\x28\x68\xfd\x40\x11\x95\x56\x86\xe0\xd4\x9c\xea\xf8\x6b\x69\xad\xa8\x64\x66\xd4\x66\x17\xa2\xc9\x04\x9d\x14\x2c\x27\x47\xfd\x4f\x5e\x78\xac\x8d\x06\x2f\x6b\x72\x26\x96\x08\xa6\x7d\xfd\xd8\xa6\xb8\xb6\x2a\x77\xc2\x6e\x18\xd5\xab\xad\x51\x00\x64\xae\x96\x45\xc1\x6a\xb8\x0a\xd6\x1e\x9a\x10\x8b\xde\x75\x54\xc1\x91\xe1\xe9\x9f\x38\x3b\x7a\x6b\x53\x10\xec\x3e\x1a\xa6\x53\x92\xa8\xc2\xa2\xd8\x2e\x32\x0b\x30\xc3\x05\x5a\xbb\xef\xc6\x07\x1a\xb4\xf3\x73\x69\xc2\x9b\x67\x1f\x8f\xaf\xa8\x3f\xfa\x40\xaa\x5e\x48\x69\xb7\x62\x5b\x6c\x52\x98\x1b\xce\xdd\x37\xa5\xbc\x68\x5c\xe5\x62\x10\xc3\x6c\xd2\x21\x85\xbe\x56\xd0\xaa\x38\x3e\x16\xfa\xca\xb5\x0e\x31\x48\x7b\x02\xdd\x8e\x0b\x2a\x80\xf0\xd9\x83\x07\x8b\x62\x54\xe3\x34\x37\x5c\x8c\x06\x98\x11\xdd\xb4\x27\x6c\x4e\x17\x5c\x7a\xab\xcc\x2e\x98\x5a\x1a\xb9\x19\xa4\xa7\xc8\xf0\xb4\x1d\x02\xd4\x52\x43\xd4\xa0\xd6\x19\x8f\x48\x44\x73\x0f\x47\x99\x22\x70\xa4\xc7\xb3\x41\xf2\x02\x44\xf7\xc6\xbf\xb1\xda\x30\xed\xfa\x0a\x00\x38\x83\xd2\x0c\xfe\x11\x5b\x27\xa3\x3b\x7c\xb4\xce\x84\x19\x6e\xd0\xd6\x7e\x84\xab\xe6\xbe\x93\x04\xd2\xdd\xae\x7e\xc0\x76\x7b\x63\xbf\x81\x86\x6c\xf1\x41\xb0\x38\x30\x3c\x1b\x29\x4a\xcd\x20\xa9\x00\x56\x3d\x86\x56\xd3\x54\x2c\x23\xab\x8b\x76\x87\x9e\xf3\x3a\x1f\x55\xb4\xd6\x4b\xc7\x52\xba\x3b\xeb\x8b\x13\x24\x00\xdd\x29\x86\x2b\xa6\xdb\x63\x77\xf4\x70\x01\xb6\xd3\xe2\x81\x0b\xcc\x49\x8a\xc8\x74\x63\x15\x03\x1e\x7b\xd5\xb1\x65\x0e\xdc\xe8\xd7\xea\xb0\xe6\xc9\x6e\x21\x9a\x2f\x7e\xd5\x3e\x5e\x72\x37\x01\xf8\xbd\x0f\x57\xee\xb8\xec\x3b\x81\x2b\xd1\x53\x6f\xe3\x9e\x87\xb4\x1c\xd4\x5e\xa2\x81\x3e\x50\xcb\xf1\x73\x7a\x44\xae\xb1\x0b\xad\xc6\x58\x9d\x9d\xf1\xf4\xf0\x0d\xc6\xfa\xe0\x8f\x13\xbb\xe5\x36\x7c\x29\x09\x51\xdb\x30\xad\x4c\x96\x55\xa3\x59\xe7\x18\xad\xe9\x27\x51\x3b\x25\x49\x1a\x6a\xcf\xb9\x76\x8a\x2d\x57\x47\x76\x2a\x23\x3f\x95\x91\x8f\x56\x0a\xb6\x33\xeb\x8e\x1d\x0e\x93\xec\x5c\x72\xa1\x3b\xbe\xd8\x58\xa4\x95\x85\xa6\xc5\x20\x93\x07\xc4\x21\x93\xdd\x63\x91\xc9\xfe\xe2\x91\x89\xcf\x95\xd8\xfd\xea\xbd\x77\x99\x1c\x2b\x97\x2f\x91\x5a\x92\xc0\xe5\xdb\x45\x4c\x20\x46\xba\xf2\xf3\xe3\x8a\xc8\x92\x6b\xcd\x9c\x93\xcd\x5f\xa2\xd8\xc4\x13\x1c\x5c\xf7\xe2\xf0\x2d\xe9\x81\xf8\x07\xf4\x9a\xb1\x4f\xae\x5b\x4d\x12\xdc\x8e\x28\x07\x42\xd6\x3d\x57\xe0\xd0\xa1\xa2\x55\xfd\x81\x2c\x8c\xe2\x6a\x06\xf6\x87\xad\xe2\x9d\x18\x53\xfb\x4c\x8e\x9e\xc9\x51\xc4\xd8\x0b\x39\xc2\x34\x86\xf8\xdc\x9b\xbe\xae\x86\xee\x23\xf2\x63\xc3\xea\x25\x91\x0b\xd6\x09\xa3\x82\x5e\x3b\x8a\xa7\xd8\xc5\x0c\x81\x98\x70\x91\x73\x31\x8b\x25\x38\x4f\x24\x29\x95\x54\x67\xf3\xcb\x4f\x46\x32\x85\x54\xe8\x9d\x09\xf7\x2a\xa0\xb6\x8a\x47\xd2\xd1\xcb\xa9\xdd\x79\x77\x7c\x8e\x52\x83\xa5\x72\x6c\xcb\xff\xb6\xbf\xa4\xdd\x00\xa3\x83\xbe\xbb\xd8\x45\x39\x4c\xb1\xc9\x93\x74\xbb\x3c\xd9\x86\x80\x9b\xb6\x21\x09\x2a\xc1\x83\xf0\x70\xfa\x2d\xb2\x63\xfb\x9b\xf4\x07\xf4\x41\x38\xb1\xae\x55\xdb\xa0\xcd\x81\xc6\x98\x88\xb4\x73\xe9\xf7\x8b\x88\xab\xf1\xb5\xf2\xfe\x6e\xb4\x3f\xdd\x26\x85\x23\xae\x0a\x7f\xff\x0d\xb7\x4d\x69\xac\x65\x47\x96\x94\x50\xad\xbf\x3b\x7a\x28\x88\xbd\x2e\x30\xfa\x13\x70\x31\x75\xcd\x38\x7c\xd6\x82\x47\x41\xc8\x24\x01\x4a\x9a\x76\xc8\x64\x57\xa3\x05\x0e\x77\x00\x0f\xdc\x16\x8f\xee\xdd\x10\xfc\x1d\xf6\xe5\x8e\x2d\x0f\x95\x4d\x02\x97\x42\xcd\x79\xe5\x9a\xc2\x81\xc8\xba\xcb\x2d\xc0\xf1\x11\x1c\xc5\x6e\x9a\x18\x66\x70\x25\x4e\xc8\x3b\xa9\xcd\xff\x5d\x42\xec\xce\x0e\x70\xcd\xdd\xbc\x90\x4c\xbd\x93\x1a\x60\x3c\xe9\xe1\xe1\x76\x3c\xf0\xe8\x6c\x45\x0b\x0e\xf6\x7c\x8c\xc7\x4b\x4a\xa3\x75\xc3\x56\x61\xb7\x47\xe4\xdc\x1b\x1e\x31\x22\x1a\xc4\xac\x0f\xf0\xb5\xb9\x33\xf2\x7d\x72\x94\x9d\x66\xb2\xe5\x15\xc7\x84\x11\x21\xc5\x08\x9b\x1b\xef\x67\x9e\x88\x3e\x66\xae\x5d\x5c\xe8\x4e\x79\x17\xd4\xf2\x8b\xf4\x55\x67\x6d\x99\x8f\x54\xbe\xeb\x06\x58\x82\xab\x82\x66\x2c\x77\x21\x32\xd0\xfb\x85\x6a\x36\xe3\x19\x29\x59\x1d\xc8\x67\xd8\x3c\x2a\x23\xe5\xec\x8a\xf8\xbb\xad\x65\x07\x49\xa2\xfb\xd1\xc4\xdb\x06\x62\xdc\x1b\x08\x9d\x7a\x98\x28\x88\x30\x50\xf8\x28\x69\x65\x48\xda\x7f\x1b\xa9\x01\x70\xe4\x7f\x12\xf5\x2b\x5e\xab\x31\x39\x23\x8a\x8b\x59\xc1\xba\x70\x9c\x7b\xa1\xf3\xc9\x24\xd0\x66\x66\x46\xc5\xfe\xb1\xe1\x0b\x5a\x30\xcc\x20\xa0\xc2\xb7\x6c\x90\xd3\x35\xc1\x36\x4d\x58\xc2\xb6\x59\x86\x95\xfa\xc0\xc2\x83\x3b\xb6\x3c\x38\xe9\x5d\xc5\x54\x57\xcd\xc1\x95\x38\x68\xab\xcc\xf4\x28\x85\x13\xed\xd2\xa4\x6e\x51\x2c\xc9\x01\xc0\x39\x58\x97\xb1\x1f\x22\x37\x7f\x06\x75\x3c\x19\xef\xad\x81\xfb\xbc\xa0\x4a\xa5\x94\xab\xd8\x5e\xca\xf9\xa6\x03\x31\x3e\x25\xd7\x0d\x1b\xd0\x9b\x41\x60\xdc\xae\x69\xcb\x1b\xac\xf5\x90\xa2\x95\x1a\x8c\x94\xb0\x8f\x0b\xdb\xcf\x37\xb6\xaa\xd7\x2a\x77\xf6\xaf\xfb\x2c\xc1\xfb\x4e\xe2\x7a\x6a\x40\x43\xc7\x17\xb8\xb2\xa3\x1f\x21\x55\x38\x01\x62\xa7\xfc\x3f\x57\x60\x3d\xe3\x2e\xd7\x50\x48\x4d\xb8\xc8\x8a\x26\x87\xc0\xc3\x68\x90\x30\x15\xb0\xd1\xa5\x19\x04\x92\x8f\x63\x67\x84\xfe\xe8\x5f\x77\x5a\x80\xb5\x60\xb4\x7e\xb7\x94\xb8\xa0\x4d\xa1\x9f\x50\x75\x00\x83\xed\xb9\xb2\xa7\xb3\xcf\xdd\x98\x0e\xc6\xad\xf6\x3b\x3c\x9c\xf7\x53\x6a\x5f\xf3\x49\xcd\xc8\xf9\x9c\x0a\xc1\x8a\x4e\x79\x8c\x50\x84\x95\xe1\x77\xb6\x13\x3d\x8a\xf3\xb6\xc7\xfc\x61\xbf\xc9\xbc\xa3\xdd\xc2\x95\x65\x19\x04\xda\x86\xe1\xef\xa1\x63\xc9\xbf\x6e\x57\x78\xdf\x89\x23\x08\x38\xb1\x1f\x7c\x4c\x2e\x4e\xaf\x1f\x3c\x96\xd0\x9f\xcb\x7b\x92\x4b\x08\xfd\xa9\x21\x7a\x08\x1b\x36\x2a\x2b\xb4\x04\x41\x76\xfa\x6e\x40\x3c\x72\x26\xcb\xaa\x96\x25\x57\x2e\x3f\xc5\x22\xd3\xde\x2a\x52\x14\x4d\xb0\x30\xe7\xb6\x4a\x8c\xaf\xcf\x89\xa6\xf5\x8c\x69\x03\x84\x88\xa6\x9c\xb0\xc8\x4a\x19\xfb\xae\x3a\xfc\xd3\x6e\x83\xbf\xbf\x4e\xf5\x78\x1c\xdf\x7d\xf7\x2e\xad\x04\xf3\xc6\x33\xbd\x97\x75\x91\xdf\xf3\x1c\xc3\x36\x14\x39\x32\x60\x8f\xe3\xe6\xba\xc7\x1a\xcb\xd1\x88\x7c\x7f\xcf\xf3\x87\x2c\xdb\x45\x15\x9a\x65\x13\x58\xb7\x6d\x8d\xce\x59\x1d\x96\xac\x8f\xe0\xf3\xc7\xe4\x92\x63\x6e\xa3\xf9\x17\x16\x17\x2c\x27\x5c\xd8\xd4\xf2\x69\xe7\x80\x82\x10\x0d\xb7\x30\xf7\xca\x69\xc8\x8a\x69\xcc\x9a\x82\x90\x47\xa9\xe7\x44\xf1\xb2\x29\x34\x15\x4c\x36\xaa\x58\x46\xa2\xd1\x53\x1f\xcd\xb4\x60\x9f\x10\xdb\xe3\xf9\xb2\x7f\xa5\xcf\x9f\x67\x4c\xb0\xda\x17\x11\x88\x8b\x22\x72\x0e\xd5\x36\x42\x32\x3f\xf5\xcc\xda\xa7\x0f\xb2\x4f\x2c\xb3\xd1\xb0\x55\xd1\xcc\xf8\x60\x42\xcd\xcf\xa0\x4b\x58\xdb\xb3\x28\xa6\x9a\x93\x2f\x2b\x14\xd7\x27\xf7\xf3\x34\xed\xfa\xa2\x85\x91\xdb\xcd\x9d\xb7\x72\x56\x31\x91\x43\xa9\xe2\xf6\x4e\x04\x61\xe3\x76\xec\xed\x14\x6c\xb9\xdc\x5d\x29\xeb\xe5\x27\x5d\x53\x43\x06\x4b\x43\xd0\x5c\xed\x5d\x3e\x25\x54\xc4\x92\xac\xcf\xdd\xd4\x85\x3c\x4b\x18\x7e\xa8\x9d\x1a\xb6\x75\x36\xa2\xd7\xb0\x6d\x35\xeb\x38\x8c\xdb\x49\xed\xda\x62\x9a\xc0\x75\xdb\xb5\x21\xed\xb7\x17\xc8\xb5\x53\x5b\x6f\x8b\x96\x38\xcb\x6e\x81\x9d\x36\x2f\x62\x63\x7b\xb4\x20\xe4\x50\xfb\x34\xb5\xde\x9d\x29\xbc\x03\xfd\x55\xef\xf1\x4e\x3e\xf7\x52\xfb\x32\x7b\xa9\x4d\xa1\xae\x41\x7c\x5d\xce\xd7\xf8\xfc\x8a\xb5\xc4\xfe\x68\xa5\x31\x27\x54\x85\x8c\x1a\xdb\xac\x23\xf6\xb6\x75\x58\x1e\xb4\x78\xc0\x8f\x0c\x02\xb5\x39\x56\x44\x99\x53\x6c\x13\x24\x1a\x21\x86\x89\xfa\xbe\xdb\x5d\x51\x4d\x15\xd3\x31\xb6\xb7\xf5\x00\x79\x27\x77\x21\x0c\xec\xd4\x06\x49\x48\x2e\x2d\x3e\x78\xf4\xa3\x3f\x59\x09\x4e\xf4\x20\x19\xd9\xcc\x9d\x94\x2b\xfb\xc9\x7c\x30\x53\x84\x81\x9a\xc2\x99\xd4\x2c\x8b\xc8\xaf\x8a\xe6\xa6\x76\x76\x1f\x3e\x5c\x5d\x24\xed\x95\x79\x61\x65\xaf\x2c\xde\x40\x61\x44\xfe\x63\xd3\xd5\xda\x82\x6b\x93\xd3\x0e\x1e\x5b\x78\xfb\x58\xe2\x2c\x63\xad\xd9\xf3\x82\xab\xbb\xf8\x0a\xb8\x7f\x39\xbf\xec\xbf\xda\xbf\x74\x7f\x39\xbf\x24\xf6\xd7\x04\xe5\x67\xb3\x75\x72\x9b\x79\x72\x10\xa4\xab\x28\xdd\x31\x4f\x3e\xb4\xc8\xea\x2c\x63\xad\xe3\x22\xe7\xea\x6e\x0f\x95\x75\xe3\x94\xaf\x2a\x7f\x37\x9c\x3f\xf6\x94\x76\x53\x57\xd2\xad\x53\xd7\x71\x29\x9b\x20\x0e\xdf\xdb\x12\x68\x56\xcd\xb9\xe5\xd5\x2b\x72\x29\x54\x53\xb3\x36\x0a\x67\xda\xff\x54\x10\xa6\x91\x58\xa2\x95\x1e\x28\x1e\x14\xc1\xe0\xfb\x1d\x93\xa3\xed\xb0\xe1\xc9\x4e\xfb\x76\xd8\x7d\x63\x63\x70\x02\x51\x86\xdf\x55\xc3\x6e\x10\xea\xa3\x1b\x7e\x2b\x5a\x6b\xd0\x98\x12\x4b\x11\x43\x07\x3e\xfb\xaa\x5b\xdc\x0a\xd2\x02\x52\x86\x75\x2f\x8f\xb4\x57\x53\x17\x56\x7f\x42\x74\xbf\x5e\xae\x7b\xc8\xa0\x61\x64\x27\x38\xc3\x06\x3b\x88\x09\x69\x87\x76\x82\xa7\x39\x5b\x9c\xaa\x9c\xbe\x3c\x81\x69\xc6\x96\x23\xd0\xbd\x35\x53\x45\x0e\x5e\x1e\x8c\xc9\x0d\x2f\x79\x41\xeb\x62\xd9\xcb\x4a\xf6\xcf\x45\x99\x4d\xdc\x84\xc0\xc1\xff\xe2\x80\x1c\xc9\x1a\x66\x96\x51\x41\x0a\x46\x17\xcc\xa5\xf7\x1a\x32\x14\x9e\x28\x28\x29\xc7\x4f\x4b\x91\xc9\xa3\x59\xf5\x91\x3c\xa7\xa1\xe7\x07\x14\x02\xba\xc6\xac\xeb\x8b\xd6\x97\xc7\x85\x61\xa1\x61\x75\xfb\x83\xe5\x71\x56\x98\x40\x12\x68\x76\xc2\x41\xf8\x4c\x5b\xfc\x68\x96\x8a\x28\xfb\x42\x84\xe2\xbb\xd9\xfe\xb0\x6e\xfe\x48\xca\x5c\x7c\xc2\x0d\x0e\xd9\x40\x66\x5c\xbf\x67\xd5\xe0\x9c\x57\x04\x3a\x7c\x61\xc5\x92\xcd\x35\x94\x1a\x50\x5c\xcb\x7a\x49\xa8\x26\x14\x09\x47\xd6\x14\x74\xf8\x02\xd5\x0c\xed\xd8\x63\x72\x71\x79\xfd\xfe\xf2\xfc\xec\xf6\xf2\xe2\x15\x71\x5f\xe1\x5d\x69\x7d\x4c\x6e\x3b\x75\x23\x07\xa1\x76\x32\x99\xb0\xd0\x5f\x3b\xc7\x13\x4b\x80\xa9\x68\xab\xb1\x43\xb5\xa5\x80\xa5\xe8\x4a\x70\xdd\x36\x73\xc1\x10\xf4\x42\x0a\x9b\xdb\x65\x20\x5b\xfb\xfb\x8c\x63\x28\xa1\xc0\x0f\x05\x24\x5a\xb6\x32\x0b\xb8\xe1\xd8\xe2\xc1\x2f\x61\xd0\x86\xb1\x57\x09\xb2\x3d\xc4\x7d\x68\x90\xae\xcb\x42\xd2\xd5\xbd\x45\x77\x9d\x7f\xd9\xf2\x3f\xd7\x13\xcb\xed\x4a\x58\x19\xaa\x7b\x0d\xa6\xc6\xe3\xc3\x31\x24\xbf\x1d\x8e\x0f\x9d\x40\x58\xac\x74\x75\x0b\xc2\x6c\x27\xd5\x2d\x28\xda\xc7\xfe\x31\x21\xdf\xba\x5c\xb5\xb0\x2d\x84\x4f\xb7\x34\x98\xc3\x62\x28\x9d\x56\x5e\xfd\xaf\x84\x01\x0b\x5b\xff\x7f\xd2\x9d\xb4\xad\x50\x3a\xe3\x0b\x26\x70\x63\xf7\x47\xa6\xdd\xd4\x92\x4e\xfb\x7d\x4b\x35\x3e\xbc\x7f\xb3\xbf\xc9\x20\x8d\x48\x9a\xca\xb9\x2c\x4b\xac\x65\x38\xf7\x85\xde\xda\xe2\x11\x9e\x4e\xed\x45\xa1\xc6\x8a\x8e\xd3\xc1\x0b\xb4\x42\x77\xdd\x2b\x2b\x0a\xb4\xff\xd9\x26\x8a\x06\x1c\xea\x4e\xf3\x49\xef\x29\x63\xcb\xaa\x2a\x57\x5e\xca\x32\xa6\x53\xbf\x96\xd3\xf7\x97\x67\x17\x6f\x2f\xc7\x65\xfe\x64\xe4\x8a\x89\xbc\x92\x7c\x38\x85\x2a\xd8\xd5\x37\x96\x9c\xf9\x8f\xa5\x49\x22\x97\xee\xb5\x6e\x18\x9a\x83\x85\x82\x5d\x54\xcd\xab\x9c\x69\xca\x0b\xd5\x39\x71\x2d\x2b\x59\xc8\xd9\xe6\xb6\x30\x09\xc7\xf5\x4b\xac\x36\x34\xa2\x23\x83\x07\xfb\xd3\xc7\xc2\x7d\x16\xfb\x3b\xe5\xfa\x2a\x9a\x0d\x6a\x57\xe9\xf5\x10\x68\x61\x18\x53\x66\xe0\x0b\xdb\x88\x47\x10\x60\xfd\xee\x04\xf7\xc2\x69\xb2\x60\x81\x00\x12\x61\x4b\xe9\x76\x6a\xc3\x76\xba\xc8\xb6\x92\x6d\x8c\xba\xbb\x26\xf9\x3e\xd1\xa6\x87\x84\x5a\x43\xe1\x42\xed\x88\xfb\xbb\xfd\x57\xfb\x46\x9f\xb8\x56\x35\x1b\xf9\x7a\x75\xd0\xa8\x33\x10\xe6\xde\xb2\x5a\x6b\xb6\xee\x19\x24\x9d\xf9\x12\x9f\x2a\x96\x29\x71\x93\xad\x2c\xe8\xed\xc3\x10\x3e\x02\x85\x83\x5d\xc1\x69\x6b\xc5\x22\x74\x16\x4c\x2b\x95\xb5\xf5\xe6\x54\x35\x5f\xf0\x82\xcd\xa0\xdb\x00\x17\x33\xd7\x47\xb6\x53\xd7\x15\xfa\xa9\xb1\xa0\xef\xad\xef\xfd\x78\x6b\xfe\xd5\xe9\x20\x04\x18\xfc\xee\xdb\x5b\xe8\xde\x01\xe1\x15\x11\xb7\x79\x77\x7d\xd4\x4c\x26\xd8\xcd\x7d\x34\x1a\x81\xb5\xeb\xe8\x1f\x46\x8e\xcf\x8b\x63\xf2\x1d\xb3\xf3\x93\xd0\xb5\xa4\x86\x86\xbc\x73\xe9\xdb\x23\x18\xb0\x91\x18\x00\x97\x0d\x4b\x9c\x59\x08\xa7\x06\x8a\x11\x61\x91\x55\xc3\x7e\xb9\xe7\x79\xc0\x19\x47\xb1\x98\x33\xfa\xd7\x9f\x4e\x1f\xd8\x13\xeb\xdc\x91\x17\x38\xcf\xc8\xa6\x5b\x35\x26\x57\x71\xc5\xe5\x2b\xcb\x55\x28\x51\xcb\xb2\xe0\xe2\xae\xad\x35\x38\x95\x06\xc3\x6d\x6f\x10\x71\x17\xe3\x5e\x47\x5d\x8f\x16\x1d\x7e\xb4\x07\x2c\xdd\x1b\xaf\xd1\xc9\x66\xfb\xdb\x65\xc5\x80\x76\x78\x12\x68\x43\xd5\xba\x26\x8e\x83\xb0\xd9\xfa\x4b\xda\x09\xae\x32\xc5\xe3\x89\xff\xd5\xcd\xf9\xcd\x55\x8f\xf2\x0b\x82\xbf\xf5\x5c\x53\x0f\x08\x9c\xdf\x57\xe4\x7c\x0a\xab\x85\x4d\xf8\x0c\x32\x39\xff\x71\x48\x05\x19\x91\xa2\x19\xfe\x3b\x86\x94\x5e\xcb\x5a\x0f\xf6\x80\x8f\x25\x3d\xd9\x9c\x56\x67\x8d\x9e\x5f\x70\x95\xc9\x05\x4b\x54\x4f\xef\xe7\xd8\xdb\xc3\xd5\xbb\xe4\x0e\x2d\x10\x16\x39\xff\xeb\xd9\x35\xa1\x8d\x39\x4b\x6d\x8b\x84\xef\x45\x82\xe9\xce\xfc\x06\x93\xf6\xf6\x30\x6f\x0b\xe9\x51\x67\xfd\xec\x3a\xfc\x97\x71\x1d\x02\x05\xf9\x57\x75\x17\x72\xc1\x35\xa7\x5a\x46\x35\xf7\xee\xdb\x89\xb0\x70\x35\x5e\xa9\x2b\x07\x06\xe2\x5e\xc0\xf5\xd7\x83\x1c\x85\x60\xde\xc8\x04\x8a\x19\x6c\xfb\x95\x30\x6a\x12\xcd\xd8\x4a\x54\xfc\x49\x54\x5d\x64\x9c\x1b\xf7\x30\xfe\x68\x73\x20\x2a\xa0\xaa\x7f\x7a\xd5\xeb\x0e\x14\xee\x5f\x48\xfa\x3d\x0c\x9d\x71\xac\xed\x29\xb7\x37\x2b\x22\xff\x31\x8d\xce\x59\x63\x31\xae\xf7\xff\x36\xb4\xc0\x7d\x7c\xb7\x4f\xcb\x66\xff\x3c\x92\xa6\xe7\x70\xc4\x9d\xc3\x3b\x67\xed\x31\xca\x04\xc8\x19\xf0\x44\x58\xea\xac\xa9\x50\xe6\xf0\xfa\x9e\xa7\x43\xeb\x58\x3e\x24\x47\x3a\xab\x22\x3b\x85\x3d\x42\x0e\x15\x2e\xd3\x9e\xc5\x1b\x9f\x3b\x15\x37\x9f\xbd\x7b\x59\x01\xc7\xd3\x8c\x74\xbd\x05\xa0\xe8\x41\xde\x70\xa5\x5d\x43\x32\xf8\x21\xa2\xd4\x04\xd6\xf7\x07\xf9\xf1\xda\xa8\xd8\xbc\xfa\x4f\x9a\xe7\xf5\x2b\xe4\xc1\xb6\xb6\x35\xfc\xb7\x8a\xac\x1a\x0c\xb1\xb1\x2e\x7e\xe0\x48\x2f\x2b\x9e\x81\xca\x7f\x7b\x7e\x4d\xb0\x15\xe5\x1f\x7e\xf7\x02\xe4\xc9\x7f\xfb\xed\xef\x5e\x44\xa2\xc0\xe7\x48\x67\xda\xc9\x0a\x96\x14\x25\x1e\xe3\x12\x09\x79\x71\xf7\x26\x06\xed\x16\x57\x0e\x82\x19\x46\x94\x03\x95\x45\xbc\xb4\xc4\xdb\x1c\xb2\xe7\x2d\xc1\xc5\xee\x20\xde\x3d\xc7\x40\x6f\x1d\x5f\x7e\x0c\x34\xf1\xe9\x92\x48\xbf\x1e\x4a\xff\x90\xf4\x5d\x3b\xd2\x67\x49\x5b\x18\xed\xa2\x49\x5f\x8f\xb4\x05\xe1\xee\x8b\xf4\x05\x76\x31\x84\xb1\x7d\x4c\x45\x6a\x62\xb4\xfb\x8e\x8f\x1a\x72\xb2\x2e\xde\xdd\xfc\xe7\x9b\xb3\xaf\x2f\xdf\xc0\xfc\x30\x92\x77\x70\x7e\x06\x3d\xad\xa8\xbc\x4b\x0c\x6a\x3c\xba\x87\xed\x00\xa1\x2d\x4a\xf1\x5a\xbe\x7b\x7d\xb3\x62\x58\x31\xbf\x38\x57\x65\xdf\x1d\x39\x4c\x4f\xb7\xb8\x2a\x1f\xaa\xe3\x88\x69\xc4\x8e\x3c\x8d\x31\x75\x04\x11\xff\x7b\x49\x9e\xdc\xd1\xde\xda\xa9\xd6\xdb\x53\x78\xcd\x99\xe1\xdc\xc2\x91\x66\x8f\x7b\x1e\xe4\x33\x3b\xde\xcc\x4e\xe0\xee\xc4\xf8\xc7\x9e\xd4\xe5\xf6\x28\xbb\x1c\x27\xea\xd4\xa9\x99\xba\x87\x37\xf0\x8e\x73\xf6\x1a\x12\x80\x11\x8e\xb5\xe1\x1e\x86\x6f\x30\xa5\x62\xaa\xdb\xac\x60\xe7\x97\x82\x7d\xd5\xa6\x46\x59\xf1\x54\x73\x63\x9f\xad\x6e\xef\xe3\x0e\x4d\x1d\xf6\x1a\xf5\x33\x12\xb7\xf5\xf0\x73\xb1\x42\xd4\x9a\x04\x54\x45\xb3\x80\x2c\xbc\xbf\x8a\x4e\xed\x4f\xf8\x0b\x94\xd0\x79\x3a\xa2\x0c\x9f\xdb\x53\xda\x84\x87\x95\x76\x19\xce\xdd\x6b\xab\xa9\xeb\x5b\xce\x2b\x46\xd1\x59\x3f\x4f\x42\x95\xef\x7d\xdb\x28\x5f\xb1\x28\x2e\xc7\xfd\xf3\x1e\x38\x79\x74\xaa\xff\x5d\x62\x02\x72\x70\xbb\x2e\x5c\xf6\xfb\xfe\xd4\xca\x6a\x2e\xb5\x14\x3b\x26\x62\x5d\x6f\x78\xb9\x1f\xec\x80\x4f\x9c\xfb\x06\x6f\xc3\x02\x46\xdb\xe6\x1f\xa2\xc8\xbd\xdb\xcb\x88\xbb\x8e\xe7\x49\xe1\x1c\x60\x2a\xec\x38\xb7\xf6\xdd\x27\x93\xc5\xf2\xab\x8b\x3d\xdc\xf8\x9f\x4f\x49\x87\x7d\xd7\x97\xda\xd7\x75\x37\x07\x99\xb4\xff\x57\x17\x56\xce\x75\x79\x95\xca\xa2\x3e\x69\x71\xbf\x83\xdf\xc1\x45\x45\xe4\x54\xc5\xc9\x0c\xb2\xd6\xf7\xb2\x4e\x2d\x2e\x73\xdd\x7b\x6d\x25\x7e\xc9\xfe\x2d\x26\xbc\x39\xea\x06\x3f\xf5\x2d\xc5\x79\x7f\xb6\x9b\x7a\x03\xc1\x11\x2b\x3d\xaf\xa6\x6b\xf7\x37\x88\x22\xa8\xef\x6e\xba\xde\x03\xd7\x37\x08\x75\xf0\x7a\xe3\xf5\xdd\x78\x6d\x23\x35\x17\x7f\xad\x1f\xe5\xda\xee\xc4\xa5\x03\x45\x47\xe2\xf3\x7a\x76\x2a\x3a\xb2\x37\x85\xc9\x61\x75\xd2\xda\x3f\xda\x97\xac\x31\xc9\x9c\x67\x4b\xc0\xa8\x27\x03\xc1\xa5\x47\x65\x3a\xc4\x11\xac\x5a\x62\x8f\xf7\x68\x5a\x75\xa5\x59\xa9\xb0\xd3\x50\x51\x98\xfd\x95\xa2\xdb\xcf\xc8\x96\xfc\x38\x21\xd8\x62\xa7\xa4\x55\xa0\x50\xb1\x21\x55\xb9\xbc\x17\xf7\xb4\xce\xc9\xd9\xf5\x90\x1f\x6d\xaf\x64\xc9\x4e\x78\x0f\x54\xc9\x9a\x3f\x63\xea\xcd\xf6\x76\x12\x2a\xcc\x4e\xb8\x56\x6d\x2b\x6a\xa6\xbb\x56\x05\x43\xba\x63\x9b\xc8\x02\x39\x32\xa4\xc7\xce\xa6\x23\x89\x08\x22\x33\x4d\x0b\x2c\xcf\x4c\x26\x4c\xdf\x33\x26\xc8\x8b\x17\x2f\x5e\x44\x58\x82\x73\xf2\xe2\xf7\xbf\xff\x3d\xb4\x10\x26\x39\xcb\x78\xb9\x0e\x08\x9e\xfa\x5f\x2f\x5f\x8e\xc9\x7f\x9c\xbd\x0d\xa5\x7f\x60\xa3\xf4\x4a\x2b\x2c\x17\x87\x33\x03\x1c\xe8\x02\x57\x27\xe4\xdf\x6f\xbe\x7d\xe7\x8e\x32\x6c\x55\xe9\xbf\x0d\xe8\x59\xba\xed\x1d\x93\x8b\x36\x40\xb3\x63\xa4\x0d\x02\x85\xa8\x43\x5a\x33\x88\xf7\xa4\xd3\x29\x5c\x14\x24\xef\x5c\x39\x12\xe3\x2a\xf2\xf0\xd9\x3c\x4c\xee\xb1\x0f\xa9\xb9\x1a\x05\x44\xa5\x72\xb3\x05\x60\x48\x77\x45\xa8\x30\x70\x17\xbe\x15\x5d\x9b\x13\x96\x7a\x42\x0a\x7e\xc7\xc8\x54\x41\x07\xd2\xb6\x28\x77\xcd\x94\xd1\x61\x6c\xd3\xf3\x38\x87\xa5\xdf\x3a\xb3\xc8\xcf\xe3\x01\x8e\xec\x75\xd9\xbb\x50\x05\x57\xd8\xb2\xc2\x66\x1b\x20\x6d\x33\xdb\xfa\xd4\x1e\xd5\xbe\x74\xe7\xe7\x81\xa7\x6b\x8b\x37\x79\xd2\x4b\x68\x21\xa3\x4a\x29\x77\xd0\xa5\x95\x36\x5c\x80\xd5\xb2\x8a\xb8\x26\x49\xb5\xd0\xd3\x7a\xbe\x20\xbd\x7f\x4b\x23\xfb\x12\xf7\x5d\x57\x9d\xf2\x58\x74\x22\x1b\xed\x42\x53\x10\x62\x4a\x73\x6a\x2d\xdd\xc6\x46\xbd\x90\x5c\x1c\x3e\xbd\x11\x4e\x62\xdf\x84\x3e\xb3\xed\x09\x6e\x27\x84\xd1\x6c\x4e\xee\xd8\x72\x04\x74\x2e\x1a\x26\xb6\x2e\x70\x26\xa5\x0b\xaa\xa9\xed\x02\xd0\xf7\xd0\xa6\x35\xb0\x3d\xf7\xc7\xe3\xf2\x28\x5b\x8c\xf6\x59\xb0\x91\x39\x99\xed\xa0\xca\xca\xd6\xb6\x63\x81\xe8\x98\xd4\x5c\x63\x26\xdb\x15\x3e\x01\xaa\x05\x60\x9b\x05\x5e\xad\xe5\x6b\x1a\xca\xc1\x72\xf3\x81\x94\x7e\x05\x03\xeb\x6e\xc3\xc1\x0c\x13\x49\xea\xd5\x80\xce\xc6\xce\x8c\x7a\x4d\xe5\xad\x1a\x13\x15\x39\xdf\x81\xe9\x9a\x28\x75\xc2\xd4\xe6\x3c\x9b\xbb\x76\xdb\x16\x6a\xca\x8e\x22\x2e\x79\x24\xe8\xe5\xbd\x2a\xa6\x9b\x2a\x2e\x24\xad\x1d\x10\x6b\x68\x56\xce\x94\x22\x1c\x7c\x58\x25\xad\xef\x98\x2b\xd0\x48\x8b\x31\xb9\x36\x9b\x99\x00\xd3\xd5\xa9\xc5\xee\x46\x0b\x0c\xda\x36\xf4\xb7\x93\x84\x9c\xd8\xf5\xfc\x70\x3c\x3e\x44\xc9\x60\x43\x72\x72\x34\x9c\x5d\x1a\xb1\x24\x37\x60\xe9\x4b\x9b\xb4\x52\xd8\x7a\xc6\xe8\x45\x06\x1d\xc0\x99\x10\xcc\xaf\x59\x1d\x56\x7e\xa2\xd1\x46\xe7\x76\xec\xd8\x89\x63\x97\xd6\x68\xa9\x8d\xd1\x82\x8e\xdd\xd5\xb1\x6b\x43\xb4\x1d\xda\xa1\xf5\x83\x25\x2d\x1d\x6c\xf9\x5c\x6a\x17\xa0\x9d\x9b\x5f\x95\x09\x0d\x35\x36\xce\xbd\x53\x71\xb3\xec\xe9\x3e\x89\x40\xc9\x16\x5d\x09\xc4\x72\xc3\x3b\x50\xf9\x49\x86\x3a\xac\x2c\x19\xda\x91\x0c\x32\xa8\x3c\x25\x43\xec\x29\x5b\x5b\x94\xa9\x64\xa0\x83\xca\x97\xfb\x6b\x32\xd4\xcd\xca\xd8\xd5\x14\xa8\x6f\xcb\x81\xd3\x4f\xbf\xe5\x34\x1d\xdd\xdb\xb3\x63\x83\x51\xe9\xad\xb1\x5a\x2d\x6e\xbb\x96\x96\x0c\x74\x8b\x56\xd7\xd1\xda\x92\x41\x46\x68\x79\xe9\xd3\x04\x9d\xa2\xaf\xf5\xa5\x74\x3c\x26\x89\x6a\xe0\xea\x88\x57\x0b\x57\x47\x4c\x90\xcc\xea\x58\xa3\xa7\x5e\x3a\xa8\xda\x84\xc5\xe4\x3d\x84\x23\xd5\x12\x3a\x79\x69\x4f\xa4\xc7\xe4\xad\x95\x36\x76\x38\x16\x6a\xb4\x21\x25\x8b\x46\xfb\xd4\xf9\xbe\xe8\xb2\xd3\xcd\x81\x45\xba\xbe\x62\x58\x52\xc5\x81\x05\x71\x26\x19\xa8\xaf\x48\x62\x65\x8b\x34\x49\xc8\x4e\x2c\x9d\x29\xc5\x06\xa6\xe2\x48\x0b\x4f\x4d\x98\xfd\x67\x08\x64\xc5\x11\x1f\xce\x9a\x00\x14\x02\x5f\xa3\x83\x5a\x71\xec\x70\x76\x4e\xa2\xdf\xf1\xfc\x6e\xb0\x46\x9e\xcf\x90\xeb\x69\x22\x09\xab\x95\x35\x31\xe4\x0e\x94\x2c\xa7\x2a\xa4\x36\xa1\x8f\x77\x19\xd8\x85\x58\x5b\xf7\xd9\xf5\xd5\xde\x2c\x25\x1d\x98\x91\xf3\xce\xa9\xa6\xff\x6a\xb6\x12\x70\x4c\xf8\x6e\xdf\xe6\x7a\x5f\xb4\xfb\x12\xd9\xa7\xa0\x1d\x86\x9e\x7f\xc1\xea\xdc\xda\xd2\x5e\x1b\xfe\x13\x19\x52\xb6\x36\x95\x5e\x79\x7a\xeb\x73\x68\x05\x95\xb6\xa4\x7d\x12\x54\x17\xa8\x04\x14\xe9\x4b\x55\x13\x9f\x48\xed\x83\x3d\x88\xc8\x24\x59\x1d\xab\x61\xad\x76\x89\xe4\x06\x7a\x58\xa3\xad\x2c\x6d\x77\x71\x48\x17\xcc\x9f\xbf\xc2\xa6\x9b\x54\x08\xa9\xb1\x03\xf4\x09\xb6\xd9\x4e\xee\xc6\x8e\x2c\x19\x44\xd2\x4e\xc0\x5a\xdd\x71\x8d\xef\x28\x54\xee\xd0\x4e\x7d\xd7\x86\xea\x06\x25\x60\x47\xaf\x53\xed\x22\x0f\xe9\x91\x4e\x3a\xdc\x7a\x97\x0e\xbb\x7d\x27\x33\xc2\x71\x47\xac\xb2\x39\x2b\x77\xe9\x0b\x8e\x17\xf8\xb5\xdb\x0c\x43\x59\xef\x6b\xae\x35\xc3\x0a\xbb\xac\x2e\x77\xe9\xb0\x6c\x50\xef\xc4\xa9\x6d\x58\x97\x62\xf1\xf2\x60\x97\xf6\xe2\x0f\x68\xe2\x4d\xda\x33\x7e\xf0\x76\x77\x8b\x9c\xa0\x51\x3d\x22\x98\x64\xd3\xc0\xb6\xf4\x3e\xee\xd3\x1b\x6a\xcf\xae\xaf\xc8\x02\xcf\xf4\x49\xb7\xe9\xa7\x63\xee\x39\xd9\xad\x2d\xf9\xb3\xb9\xe7\xd9\xdc\xf3\x6c\xee\xf9\x79\x99\x7b\x3a\x22\x94\x63\x6a\x3b\x59\x7b\xfa\x26\xa3\x6e\x65\x6f\x6b\x07\xda\x85\x1a\xd9\x58\x9f\x4e\x9d\x5c\x43\xa2\x9c\x05\x28\xb1\x3b\x3b\xb1\x5d\x68\x5c\xe9\xd9\xc3\xc3\xf1\xf8\xf0\xd0\xd9\x91\xac\xb2\xdb\xe8\xe9\xe8\x0f\xc9\x60\x99\xc8\x64\x0e\xa5\x9c\x61\xbd\xb5\xd2\xa0\xcc\xb4\x06\x15\xdc\x9b\x64\xb8\xb0\x97\xa5\x5b\x7b\xd7\xb7\x06\x73\xdf\x0d\x45\x77\xe0\x7c\x2e\x9a\xed\xf5\x5e\x84\xf6\x56\x54\xf7\x45\xa8\x12\x5a\x7e\xbb\xd1\xab\x1f\x68\x65\xf6\x36\xea\xae\xe0\x25\x4f\xd4\xf9\x88\x65\x2e\x86\xec\x33\xa5\x15\x39\x42\x20\xe3\xac\x6a\x4e\x2c\xc0\x71\xc9\x4a\x59\x2f\xd3\xa9\x96\x03\x6a\x80\xf5\xbe\x62\x21\x1e\xa7\x4f\xb5\x66\x24\x6b\xea\x9a\x09\x5d\x2c\x7f\x6a\x1a\x45\x54\x63\x9c\xf5\xf1\x10\x85\xc2\xe3\x4a\x4a\xdf\xf5\xee\x58\x49\x6f\xf2\x45\xd3\xc1\xec\xea\xf7\x62\x27\x49\x77\xea\x9b\x5f\xa8\x13\x6f\x0a\x84\x5f\x99\x58\xec\x04\x71\x41\xeb\x60\xf2\xd1\xa6\xf1\x20\x1d\x22\xe7\x0b\xae\x64\x30\x69\x72\xe3\xab\xeb\xd6\x4c\x6e\x8b\xd0\xcb\x46\x57\x4d\xba\x30\x4b\x3c\x5f\x75\x64\xd8\x75\x45\xf2\x54\x22\xfd\x1a\x93\x36\xba\x15\x55\xb5\x97\xe1\xfa\x55\xeb\xa3\xa2\x5a\xb3\x5a\xbc\x22\xff\xef\xe8\x6f\xbf\xf9\xe7\xe8\xf8\xcf\x47\x47\xdf\xbf\x18\xfd\xef\x1f\x7e\x73\xf4\xb7\x31\xfc\xc7\xaf\x8f\xff\x7c\xfc\x4f\xf7\x8f\xdf\x1c\x1f\x1f\x1d\x7d\xff\xcd\xdb\xbf\xdc\x5e\x5f\xfe\xc0\x8f\xff\xf9\xbd\x68\xca\x3b\xfc\xd7\x3f\x8f\xbe\x67\x97\x3f\x44\x02\x39\x3e\xfe\xf3\xaf\x76\x98\x2c\x15\xcb\x6f\x93\x09\x3e\xc1\xa2\x77\x0f\x10\x89\xba\x10\x76\x44\x47\x42\x3e\x8d\x5a\x27\xc4\x88\x0b\x3d\x92\xf5\x08\x81\xbd\x22\xba\x4e\x8a\x17\xc3\xe1\x50\xe7\xe1\xf4\xa3\x15\xbb\x76\xa4\x85\x38\x40\x11\x34\xec\xf4\x09\x2e\x3b\x46\xb2\xef\xcd\x46\x6f\x9b\x6b\x3e\x87\x32\x7e\x81\xa1\x8c\xb6\x5a\xcf\x73\x1c\xe3\xcf\x36\x8e\xf1\xc6\x76\xad\xdd\x18\xc4\x88\xa1\x89\x09\x40\x23\x82\x18\x53\x4d\x56\x11\x41\x8c\xe0\x78\x4f\xba\x48\xcf\x41\x8c\xcf\x41\x8c\xcf\x41\x8c\x69\x73\x7f\x0e\x62\x7c\xb6\x6a\x3f\x5b\xb5\x9f\xad\xda\x6b\xe3\x39\x88\x71\xe3\x78\x0e\x62\x1c\x1a\xcf\x41\x8c\xcf\x41\x8c\x9d\x20\x46\xab\x88\x26\x29\x1b\x36\x82\xf1\xc9\x02\x18\x95\x41\x83\x8c\x9d\x65\x99\x6c\x84\xbe\x95\x77\x2c\x32\x66\x25\xca\x48\xb2\x06\x3b\x72\x1d\x4f\x12\xd0\x98\x26\xc4\x27\x88\xe3\xe9\x82\x38\x6d\x72\xce\x44\x8a\x69\xae\xb7\xfd\x67\xf6\x75\x67\x51\x30\x2c\x4f\xe4\x2c\xf7\x70\x13\x10\xd0\x92\x20\x6d\x4e\x6b\x4c\xce\x48\xcd\x32\x5e\x71\x43\x98\xa1\xfc\x19\xfc\x9e\xaa\xee\xfa\x1e\xc7\x5c\x2b\x56\x4c\x6d\xff\x57\xd1\xd6\xcb\xa8\x5b\xd9\x2b\x5d\xdb\x77\x8b\xec\x4d\x1d\xe5\x10\xe9\xda\x7e\x26\x40\x55\x73\xd9\x14\x39\xa9\xd9\x3f\x9c\x68\x64\xf7\xe2\xb6\xfb\xad\x3c\xb6\x42\x64\x3b\xac\x11\xa6\xb3\x68\x3b\x61\x5a\xf1\xd8\x5a\x9e\x1e\x56\x3a\x81\x63\x9f\x2a\x5e\xc3\x15\xbd\x61\x99\x14\xf9\xae\xa6\xbf\xcb\x55\x38\x0e\xeb\xac\x57\x30\xe9\x08\xf3\x06\x41\x41\xa2\x3f\x2d\x78\xce\xf5\xd2\xc7\xba\x21\xf9\x30\x0a\x45\xb0\x6b\x6f\x7f\x38\xe4\x55\xed\xf1\x11\x5a\x55\xb5\xa4\xd9\x9c\xa9\xce\x4e\xa4\xf0\x21\x90\xa0\xb0\xf4\x92\xaf\x49\x50\x34\x33\x2e\x50\xca\x07\xe8\x46\x64\x8b\x28\x76\xd3\x8e\x5a\x6a\x17\x9c\xbb\xb2\xdc\x2e\xd6\xd9\xcf\xa6\x1a\x01\xd1\x14\xa4\xeb\x25\x94\x16\x94\xdd\x8f\xe1\x9e\x44\x14\x08\xeb\xaf\xdf\xbe\xa6\x88\x2c\x72\x57\x2f\xfa\x0f\x2f\x8c\xd2\x9b\x59\x0a\x91\xe6\xb8\x86\x7a\xc1\x5a\x92\xc2\x88\xba\xb2\x76\x55\xa9\x37\x7c\x26\x01\xe8\x6f\xbf\x22\x73\xd9\xd4\x6a\xdc\x2d\x4e\xf4\x12\x7e\x43\x63\x1b\xb2\xd6\x14\x43\xa5\x26\x05\xa3\x4a\x93\x97\x2f\x48\xc9\x45\x63\x24\xaa\xc4\xab\x9a\xaa\x85\x74\xf4\x8f\xdf\x7d\x15\xf9\x56\x9a\xe6\xb1\x1e\xf7\x68\xef\x71\x85\x5d\x17\xad\x02\x92\x14\xfc\x02\x6d\x61\x00\x7b\xb1\x97\x6a\x3f\x8a\xc6\xb1\xf3\x44\x65\xc6\x62\x83\xd0\x72\xcf\xf4\xf1\xc7\x46\x4e\x96\x3a\xbe\xb0\xdb\xff\xc5\xe7\xfb\x15\xdd\xdc\x8f\x6b\x15\xb4\x07\xe7\xba\xde\xec\xb7\x2d\xa0\x3d\xf0\xe2\x9e\x3b\x8b\xcf\xb8\xd2\x83\x8d\xab\x47\x61\x57\x49\xac\xb0\x33\xab\x65\x13\xac\x26\xd2\xdb\x6e\xb0\x27\x38\xfd\xd5\x52\x5c\x9a\x65\x4c\xc1\x85\x76\xe5\x3c\x23\x7a\x80\x08\x89\x5f\x0f\x3c\xf8\x19\x1b\x67\x38\x24\x8a\x74\x4c\x3d\x66\x21\xeb\xa8\x4d\x8a\xd1\x2f\x1c\x7a\x25\xee\x12\xbe\xd4\xbf\x63\x8a\x8b\x19\xb4\x7a\x25\x65\x53\x68\x5e\x45\xe4\xf2\xb8\x1d\xf5\x00\x2d\x7b\xed\x3a\x9b\x68\xc7\xfb\x40\xc3\x5b\x64\x2e\x35\x36\x4f\x00\xa7\xe5\x91\x9b\x0b\x61\x42\x43\x31\x2a\xc8\x8e\x60\x15\xad\xa9\x3b\x96\x20\xcc\x4c\x96\x25\x55\xc7\xd6\xef\x45\x21\xb2\x0c\xa9\xb0\x61\xa8\x35\x2d\xfc\x36\x76\xe3\x6c\xf6\x85\xc8\x9a\x09\x2a\x82\x4e\xf1\xbe\x71\x0a\x5e\x21\xf2\x5e\xb8\x36\x60\xd8\xb9\x3e\x11\x83\xad\xe8\xfe\x35\xcd\xee\x98\xc8\xc9\x07\xe5\xf0\x38\x5f\x0a\x5a\xda\xb6\x12\x55\x2d\xb1\xc3\x3b\xcb\x1d\xfc\x20\x60\x1f\x89\x84\x46\x6d\xac\xec\xe5\x8a\x38\xa2\xbc\xb6\xaf\xdd\x6b\x54\x62\x8d\xf5\x0f\xca\x08\x33\xc3\xf4\x4c\xc5\x30\x5c\xc5\x6a\xbe\xc8\x98\x93\x14\xcd\x44\xf6\xb5\xa8\x45\xb0\xd6\xe9\xda\xb2\x6c\x9d\x53\xde\xb9\x4d\xc0\xde\xbc\xf3\x1e\xba\x4c\xd0\xc2\x90\xa8\xb0\x6c\xec\x5a\x9a\xf5\x11\xca\x9c\xa0\xd8\x57\x0b\xb1\x7a\x12\x5f\x20\xf1\xf0\xfd\xd7\x17\x7d\x62\xf4\x9e\xe6\x52\x91\xaf\x0b\x99\xdd\x91\x0b\x06\x22\x7b\x19\xd4\x4f\x56\x3b\x6b\x44\x35\xfa\x1f\x84\x18\x6a\x36\x5a\x4f\xf2\xcf\xd1\x6a\xb4\xa4\xb3\xa1\x4b\x3a\x22\xa5\x14\x5c\xcb\x7a\x1f\xa5\x1a\x9f\x1b\x5b\xfe\xcb\x34\xb6\xac\x27\x61\xab\xc1\x4f\xb5\xad\xa5\xb9\x12\x89\x1d\xa0\xe7\x8c\xd4\x40\x66\xe0\x65\xd7\xcb\x28\xbe\xd3\x70\xef\xf2\xff\x72\x2e\xef\x47\x5a\x8e\x1a\xc5\x46\x3c\x18\x6b\x17\xbd\xae\x3b\xb6\x84\x60\xc4\xa4\x95\x7d\x83\x2f\xf5\x54\x4d\x2d\xc1\xe2\x0d\xbf\x1b\x21\xe7\xfd\xd7\x17\x86\x53\xc6\x57\xf4\xe7\x8a\x9c\x32\x9d\x9d\x66\xac\x9a\x9f\xda\x69\x7d\x71\xdb\xe5\xe8\x5e\xda\x7e\x9d\x91\x4c\x16\x85\xad\x37\x29\xa7\xe4\x9c\x55\x73\x0f\x2a\xc9\x3d\xf4\xe8\x7b\xf0\x39\x5a\x18\x56\x52\xa6\xb5\x55\xeb\x5c\x2d\xf3\xae\xbd\x59\x1d\x44\xaa\x27\x96\x98\x45\x88\xb0\x5f\x0a\x6a\x3d\x42\x57\xa5\xe8\xba\xdd\xdb\x4a\x73\x6f\xe8\xe4\xf8\x45\x61\xeb\xe3\x75\x8c\x3c\xbc\x71\xaf\x41\x1c\x63\xc7\xad\x9b\xd4\x00\xd2\x7d\xbe\x47\x12\xc9\xd5\x14\xb5\xa2\x9c\xe5\x44\x2e\x58\x5d\xf3\x9c\x29\x47\x8a\x93\x28\xa6\xe0\xc5\xd3\xd2\xc8\xe7\x5e\x96\x5b\xc7\x4f\xa3\x97\x65\xb2\xbe\xdb\x21\xb6\xe6\xdd\x75\x62\x4b\xf3\x92\x47\xa4\xc1\x7f\x41\x9c\x5c\x65\xb4\x60\x57\xdf\x46\xab\x8f\x37\xf8\x7c\x5f\x83\x74\x3f\x76\x5a\xf6\x3c\xa0\x1d\xc8\x37\x1e\x4f\x89\x90\xf9\xb0\x67\x62\xaf\xba\xde\x8c\x6a\x76\x3f\xc8\xf2\x47\x2d\x09\x1d\x7e\x2a\xd4\x58\xe7\xb9\xf9\xcf\xaa\x02\xd7\xb9\x45\xd8\x57\x64\x5f\xc2\x84\x3d\xd5\x34\xa3\xa0\x5b\x62\xdb\x27\x10\x03\x60\x2c\xa2\x9f\x5d\x5f\x91\xbf\x20\xdc\xfd\x75\x19\xaa\xa5\x46\xb9\xf8\x42\x96\x94\x27\x36\xa9\xef\xb4\x74\xeb\x4e\xf4\xda\x03\x25\x08\x35\x78\x2c\x9d\xce\xfb\x53\x3e\x6b\x8c\x1e\x6d\x75\xdb\xe7\xc6\x2c\x81\xa5\x3f\x9e\x08\xd6\x4a\x60\x1d\x1b\xa4\xcb\x81\xf1\x52\x55\x70\xe9\x0e\x2b\x80\x79\xf9\x70\x12\xa2\x98\x50\x1c\x7c\xa3\x9d\xb0\x27\x10\xcd\xf4\x3c\xc2\x1b\xe5\x93\x5b\x50\x8c\x3b\x21\x6f\xe4\x8c\x0b\x47\x1d\xa4\x0d\x27\x98\x52\x5e\xc4\x6d\xe3\xb3\x5c\xb5\x75\xfc\x34\xe4\x2a\xa5\x8a\x4b\x41\x27\x45\x38\x12\xad\xcf\xb8\x0a\x0a\x51\x1d\x0c\xde\x3d\xcd\xb9\x32\xff\x4f\x6e\x6e\xde\x80\x57\xa9\x11\xb1\x7a\x06\xf8\x5d\x2c\x79\xf6\xc5\x9c\x90\x68\xec\xef\x1e\x23\x4d\x4c\xee\xaa\x73\x25\x72\xb3\x0c\xa6\x7a\x81\x95\x16\x1a\xf6\x2d\x8a\x75\x39\xd9\xb8\xae\x09\x23\xb7\x73\x9e\xdd\x5d\x77\x9c\x4b\xb2\x36\xbf\x89\xce\x4f\x9e\xc1\xc6\x5c\xe7\xd5\x77\xf7\x45\xf8\xed\x32\xaf\x53\x8d\x1c\xb7\x1d\x8e\x76\x63\xb7\xca\x00\x21\x54\x29\x99\xf1\x78\xef\x24\x98\xe8\x5a\x96\x98\x03\x4b\xdc\xdf\xf2\x40\x0a\x7a\x10\xdf\x76\x88\x60\x05\x38\xaa\x3a\x7c\x38\xc6\x07\x69\x77\x69\x6f\x4b\x42\x54\x4c\xee\x37\x7b\xdb\xeb\x30\xeb\x5c\x83\xe8\x30\xf3\x0e\xb1\x08\x61\xa4\x2b\xca\x38\x99\xd6\x36\x10\x5f\x39\xfa\x6e\xa7\xd9\xf0\xcd\x81\x14\xef\xbd\x6c\x52\x38\x0d\x7b\x93\x2d\x65\x25\x1a\x00\x7f\xb3\x6e\x34\xb8\xd4\x95\xac\x9a\x82\x06\xdc\xc3\xdd\xe6\xba\x0f\xf5\x57\xe0\x1c\xf6\xe0\x56\x7b\xec\xb6\x64\x5b\x13\xdc\x36\x24\xac\x05\x11\xa1\xed\x60\x16\xdd\xa1\x2c\x08\x73\x35\x9f\x6d\x0f\xf9\x69\x31\xf9\x68\xab\xf9\x65\x41\xa0\x1b\xf3\xcf\xb6\x75\x28\x4b\x88\xba\x79\xf1\xbb\xaf\xbe\xda\xd6\xd3\x6c\x73\xcf\xb2\xf0\x96\x6e\xef\x69\xf6\x80\x44\xb2\x70\xe2\xd8\x7a\x22\x58\x14\xc5\xda\xd0\xd3\x2c\x31\xf1\xeb\x71\x9a\x96\x45\x39\x2b\x12\xaa\x22\xb8\x5a\x07\x51\x9b\x32\x54\x0b\x61\x6b\x85\x83\x08\x96\xd7\xab\x80\x10\x53\xd7\x20\xc2\x81\x0a\x75\x0f\xf6\x5a\xcd\x20\xa1\x86\x41\xaf\x32\x41\x10\xf0\x50\xe5\x82\xad\xf5\x08\xe2\x55\x3a\x80\x15\x55\x85\x20\x08\x33\xba\x81\x52\x74\x3c\x73\x54\xc5\x81\x7e\x1d\x81\x38\xdd\x21\x26\xbb\xee\x71\x9b\xf2\x0d\x54\x12\xf0\xd5\x01\x22\x54\xb6\xd8\xfa\x01\x49\xa9\x46\xf1\x69\x46\x71\x15\x02\x22\x13\x91\xd2\x92\x90\xa2\x6b\x00\xec\x25\xf3\x3f\x31\x7b\x25\x3e\xcb\x3f\x49\xf4\x89\x82\x48\x02\x19\xfd\x3b\x48\x3c\x38\x52\xe5\x9e\x48\xb0\x2f\x92\xa4\x9f\x48\xa0\x83\x39\xf8\xab\x32\x50\xec\xfa\x37\x67\xde\x6f\xc9\xa4\x8f\x04\xda\xcb\xb7\x0f\x88\x3d\x91\x20\x07\x1b\xba\xae\x0a\x3f\x91\x30\x63\xda\xba\xb6\x38\x1b\x09\x34\x3e\x43\x3e\x3d\x23\x25\x35\x1b\x3e\x3e\x13\x25\x2a\xf3\x3d\xb1\x0c\xeb\xf6\x7c\xf7\xf5\xfc\xf5\x48\x90\x6f\x37\xb0\xcb\xed\x59\xeb\xb1\x27\xd6\x96\xea\xd9\x29\x57\x3d\x9a\x8c\xc6\xe6\x36\xc7\x67\x34\xfb\x4e\x2b\xc1\x89\xa6\x25\x32\xa7\x7a\x06\x92\x4d\x2d\x3d\x3b\xb5\xb5\x24\xb8\xf3\xc4\x48\x5c\xdf\xed\x20\x46\x7b\x6b\xd4\x53\xd8\x12\x48\xb4\x79\x05\x41\xcb\x41\x9e\xdf\x3f\x65\x7c\xe3\xdb\x9b\x15\x17\xb5\xff\xd9\x69\x0a\xd6\xfb\x3c\xec\xa2\x7e\x74\xcf\xf4\xb3\x23\x38\x35\x92\x37\x26\xc9\xb3\x1b\xc9\xfb\xec\xb5\x1c\x5e\xfa\x53\x78\x2d\x55\xaf\x86\xac\xb3\x77\x02\xb5\x89\x72\x5c\xca\x89\xed\xf0\x83\x44\xdb\xdf\xe5\xb3\xeb\x2b\x92\xd5\x0c\x12\xd0\x69\xa1\xc6\x64\x87\xca\x47\xce\x3f\x64\xa5\x3e\x27\x71\x51\xad\x59\x59\xe9\x58\x04\x7a\x76\x5a\x6e\x1d\x3f\x0d\xa7\xe5\x8e\x9e\x8e\x8f\xfe\x35\x67\x2f\x9a\x37\x25\x15\x23\x73\xcb\xc1\x7d\x69\xdd\x20\x71\xae\x8e\x15\x26\x35\x26\x2e\x17\x09\x76\x1b\x0c\xa7\x90\x12\xd9\x08\xfe\x63\x84\x62\xe6\xeb\x08\x7a\x11\xe0\x11\x1c\x43\x00\x77\xc7\x3d\xc3\x26\x4c\x2b\xd4\x21\x93\x55\xf4\x8e\x59\x66\x6e\x17\xea\xf7\xcf\x11\x82\x4e\xa7\xa7\xae\x15\x2c\x06\x34\x8a\x50\xd7\x90\xc8\xdc\x42\xe9\xeb\x63\xa8\x90\xd1\xa2\x90\xf7\x11\xa6\xf1\x39\xeb\x09\x10\x06\x2f\xcc\x5a\x6d\x2d\x83\x09\x23\x25\xaf\x6b\x59\x5b\x87\x56\x84\x59\xb5\x45\x17\x08\xda\x31\x7a\x21\xab\x51\x0d\xaa\x6d\x0c\xc7\x0d\xd3\x9d\xed\x8e\x11\x00\xa9\xc0\xc4\x34\xf3\xdf\x2e\x20\x17\xbb\xf8\x59\x3a\x39\x61\x73\xba\xe0\xb2\xa9\x01\x7a\x0c\xc8\x03\xfb\xaa\x61\xdd\x64\x29\x1b\xef\x00\x68\x20\x47\xc5\xef\xae\x4a\x5e\xf8\x98\xbc\x6b\x5f\x06\x55\x36\x97\xce\x72\x39\x62\x9f\xb8\xd2\xe9\x7b\xe9\x8e\xd8\xb5\xbb\xd8\xc7\x8d\x59\xa8\xca\x30\xf0\x8f\xc1\x5c\xc4\xfe\x3d\xe9\xbe\xd5\x17\x67\x17\x37\xf0\xa7\x87\x08\xb3\xb6\x06\x87\x42\x11\xce\x26\x09\x3d\x5c\xa0\x8d\x0b\xb5\xc4\x79\x07\xba\x98\x3d\xcb\xc6\x3f\x15\xd9\xd8\x07\x76\x14\x3c\x5b\x5e\x5d\xa4\x49\x89\x3e\xa0\xc3\xbc\x4c\xbe\xa6\x8a\xe5\xe4\x2d\x15\x74\x86\x86\x88\xa3\x9b\xeb\xaf\xdf\x86\x3b\x72\x54\xb5\x04\xa3\xca\xd5\xc5\x86\xd0\x00\xcf\x5a\xf1\x23\xef\xf6\x95\x78\xbb\xb6\xf6\x64\xf9\x61\xcf\xab\xdf\x5b\x4a\x31\xf1\x3c\x3e\xa6\x0d\xdd\x7a\xe9\x15\x0c\xd3\x70\x95\xa1\xd4\x2a\xc1\x5a\x94\xf9\xdd\xee\xd3\xe4\x42\x69\x5a\x14\xd7\x05\x15\x67\x55\x55\xcb\xc5\x26\x4b\x50\xbf\xa0\x98\x7d\xcc\x09\x69\x18\x01\xe9\x7e\xac\x70\xf3\x21\xfa\x4a\x90\xab\x16\xfa\xa6\xad\xbc\xd2\xde\x04\x24\x05\x08\xdb\x07\x67\x8d\x96\x25\xd5\x3c\x3b\x20\xb2\x26\x07\x6f\xa9\x68\x68\xb1\x21\x82\x79\x60\x49\x9b\xc5\xfd\x81\x17\xb6\xb5\x3e\x08\xbe\x32\x20\xb3\x0d\xbd\xab\x69\x6d\xa8\xd8\xf9\xcd\xc7\xe8\xf7\x94\xa6\xba\x59\xa1\xdd\x5b\xb9\xc8\x66\xbe\x31\x22\x05\x55\xfa\x43\x95\xd3\x55\x67\xe8\x76\xe6\x90\x51\x4d\x0b\x39\xfb\x2b\xa3\xc5\x26\xcc\xed\xe1\xc5\x79\xf7\x59\x67\x0c\x45\x14\xb9\x69\x26\xfe\xc1\x43\x45\x8c\x42\xb4\xbd\x1e\x54\xcd\x0a\xb6\xa0\x42\x3b\x80\x37\xd8\xd3\xe4\xd0\xee\xc1\xd8\x60\x0d\x6f\x9d\x35\x39\xd3\xac\x2e\xb9\xe8\x7f\xe5\x06\x9e\x3d\x97\x22\xe7\x7a\x4b\xf8\x0a\x18\x93\x11\x46\xff\x4b\xdb\x90\x6d\xb3\x83\x72\xab\x4b\xb2\x4f\x9b\x3a\x73\xeb\x6f\x14\x3e\x36\xb1\x12\xfb\x1c\x7f\x94\xd3\x2d\x3e\xc9\xde\x4c\xd7\xf6\x96\xdc\x09\x79\xaf\xb0\xca\xe2\xa6\xfb\x16\x90\x3b\x86\xe4\x8d\x91\xc3\x05\xfc\xf4\xe6\xac\x8d\x91\x9d\xff\x26\x1b\xcc\x76\xf4\xc3\x11\x92\x50\x56\x3f\xbf\x8d\x8e\x6e\xc2\x49\xff\x12\x16\xa2\xf0\xd1\x12\xe8\x09\xee\x3d\xb4\x8d\xe2\x47\x88\x6c\x31\x32\x56\x5c\xf7\xd7\x3e\xbd\x6d\xbb\x82\xae\x99\x23\x82\x32\x66\x80\x35\x45\x35\x47\xed\x9b\x45\xae\x6c\xe0\x7c\x6d\x95\x2d\x4a\x2a\xce\xb0\xc0\x22\x15\x76\x83\x80\xab\x30\x3a\x2c\x43\xe3\x0b\x86\xab\x19\x55\x1c\xde\x3b\xb1\xb1\x49\xe8\xec\xb0\xf1\x7b\xce\xad\x42\xb1\x08\xe0\x20\xcc\x7f\xbf\xf9\xf6\xdd\xe9\x5f\xa4\x0d\x8e\xb1\x05\x54\x0c\xdd\x00\x09\xe0\x84\xa8\x26\x9b\x13\xaa\xcc\x92\x0c\xa2\x1b\x2a\xc1\xc6\x25\x15\x7c\xca\x94\x1e\xfb\x4e\x5a\xea\xfb\xdf\xfe\x30\xcc\xfa\x5f\xcb\x9a\xd8\x3c\xb3\x13\x57\x99\xce\xae\xbd\xc5\x2e\xae\x70\x83\x3c\xdc\x41\x90\xde\xc2\x50\xc9\xdc\x6e\xc4\x3d\x6c\x80\xa6\x77\x86\x3f\xe2\x06\x34\x0c\x9c\x89\xaf\xc8\x81\x11\x3d\x3b\x53\xfe\x6f\xc3\xf6\xfe\x67\xb8\x38\xc3\xd1\x3d\x08\x0e\x07\xe6\xd1\x03\x9c\xa8\xcf\x7d\xe8\x86\xce\x7a\xa8\x20\x7b\x0c\x82\xd4\x35\x9f\xcd\x18\x08\xcf\x73\x46\xa0\xe8\xc2\xb1\xad\xd6\x27\x64\x07\x90\x8b\x1e\x8a\x33\x1c\xac\x2e\xee\xfb\xdf\xfe\x70\x40\x8e\x5a\x68\x20\x8b\x72\x91\xb3\x4f\xe4\xb7\xe8\xa2\xe1\xca\xec\xdb\xf1\xf0\xa9\x81\x8d\x41\x2d\x85\xa6\x9f\xcc\x5c\xb2\xb9\x54\x4c\xa0\x19\x48\x4b\x32\xa7\x0b\x46\x94\x2c\x19\xb9\x67\x45\x31\xb2\x4e\x29\x32\x9c\xc6\x06\x78\xec\x8e\x1c\x8a\x45\x91\x8a\xd6\xba\x77\x1d\xc6\xd6\x6e\x07\xb3\x34\xa8\x37\x1b\x56\xa2\x6d\xc8\xd0\x94\x0b\xeb\x91\xb7\x71\x05\x06\xa7\xa1\x10\x08\x22\x9a\x96\x24\x9b\x53\x31\x63\xd6\x49\x35\xac\xd8\x35\xba\xa9\xd9\xa0\x13\x38\x8a\x62\xdc\x71\x91\x50\x20\xe7\x1b\x2e\x56\x63\xd4\x36\xdb\x50\x67\x5c\xbb\x74\x4d\x9b\xa0\xa0\x97\xa7\xe6\xbc\x6b\x3e\x69\xb4\xac\xd5\x69\xce\x16\xac\x38\x55\x7c\x36\xa2\x75\x36\xe7\x9a\x65\x66\x41\xa7\xb4\xe2\xa3\x4c\x0a\x83\x77\x50\xd5\xac\xcc\x7f\x69\xd6\xa1\x46\x66\xa2\x83\x9d\xe2\xa2\x96\x1b\x32\x1d\x7f\x56\x93\xf1\x5e\x56\x17\xb4\x39\xae\x2f\x11\xed\x77\x4f\xb0\x4e\x30\x46\x9d\x3e\x78\x99\xae\x11\x59\x2a\xe7\x3d\xb4\xfd\xfa\xb2\x55\x08\xe6\xea\x61\x55\x36\xb8\x99\x9e\xe2\x87\x6e\x75\x49\x73\x64\x17\x54\x2c\x1f\xfd\x1a\x98\x8d\x86\x36\x9a\xd9\x72\x04\x20\x64\x31\xa2\x22\x37\xff\x8d\x99\xc5\xd9\xf2\xc1\x3b\xdb\xf0\x04\x62\xf0\xe1\xea\xe2\x69\x2e\x47\xc3\x1f\x78\xf3\xad\x14\x1b\x25\x62\xa2\x18\x0f\xa1\xa1\xba\x6e\x98\x13\x06\xfa\x82\x3a\x57\x0e\xe6\xff\xd9\x2e\x8b\x81\x4f\xd3\x57\xa5\x1e\x16\x44\x87\x3c\x8d\x1d\x39\x3b\x6a\x05\x6f\xda\xe7\xbb\x96\x51\x88\xcb\xa5\x4a\xdb\x42\xbc\xae\x72\x55\x6f\x61\xb8\xf8\xad\x4b\x42\xf6\xb4\x8d\xd5\x47\x60\x98\x8b\x2d\x32\x93\x1b\x6d\xa8\x7f\x9a\x79\x05\x2f\xa4\x9c\xfa\x07\x51\x05\x28\xb8\xf2\x15\x68\x8d\x1a\xa8\x34\xa1\x0b\xca\x0b\xf0\x33\xc9\x89\x62\xf5\x82\x6e\x53\x1c\xb1\x88\x3d\x5d\xd5\x6a\x6d\xcf\x5a\x14\x37\x1f\x5d\x87\x74\xeb\x59\x3f\xb1\xfe\x62\x36\x6e\x6c\x77\x81\x98\x57\xb4\xb2\x96\x2d\x6b\x78\xa0\x06\x89\x0a\xfc\xc6\x3f\x6d\x29\x82\x16\x52\xa9\x0c\x7e\xfe\x95\xd1\x5a\x4f\x18\xd5\xb7\x7c\x3b\xaf\x5e\x43\xf8\xde\x5b\xce\x94\xd5\xa2\xfb\x3d\x23\x33\xa9\x8d\x08\xd7\xc0\xcd\xd8\x8a\xe2\x20\x97\x63\x99\x4b\x8f\x8c\x8f\x87\xef\xed\xaa\x6f\x6b\x0a\x99\xc6\x52\x24\x2d\xbb\xff\xda\xfa\xba\xad\xf4\x3f\xb8\x0e\x23\xf4\x03\x14\x28\xa2\x06\x96\x3b\x3c\x59\xf4\x79\x0d\x65\x8c\xec\x6d\x0b\x4a\xa6\xd4\x40\xe9\xb4\x7e\x00\x38\x3e\x8b\x17\x7f\xc5\xa5\x5c\xba\xbf\x61\x2e\xe9\x10\xaf\xcb\x99\xa6\xbc\xb0\xd6\x15\xbb\x65\x7e\x37\x87\xa9\xf5\xc0\x82\x6b\x46\xd5\x76\x91\x64\xb5\x4a\xb0\x92\x02\x97\x21\x05\x1b\xdd\xcb\x3a\x27\xe7\xb4\x64\xc5\x39\x55\xcc\x42\xea\x16\x1d\xc0\x53\x3c\xdc\xee\x4f\xdd\xd7\x22\x36\x59\x27\xb7\x2c\x02\x0d\x73\x0e\xf1\x2c\xde\xb4\x6a\x27\x4e\xf9\xc4\x99\x83\x6f\xeb\x66\xa0\xe7\xd4\x6b\xc3\x31\x4f\xc8\x07\x71\x27\xe4\xfd\xee\xb3\xd7\x03\x1e\xaf\x7e\x08\xea\xb2\xf2\x57\xc6\x15\x88\xec\x99\xdf\xfc\x02\x76\x98\x8b\x65\x1f\x1b\x8d\xc2\x7d\x56\xe6\x1f\x74\x73\x31\xff\xb9\x66\x0a\x34\x0a\x71\x2d\x67\x35\x53\x6a\xf3\xc2\x37\x95\x4c\x8f\x73\x14\xfc\x85\x09\x5b\x8f\x20\x30\xd5\xab\x4d\xef\xb8\x59\x3b\x7e\x39\x6b\xff\xb2\xb5\x97\x95\xfd\x78\x55\x6c\x10\x79\x86\x22\x96\x3b\x93\xde\x68\x32\xdc\x36\xdb\xcd\xa6\xc2\x0e\x7f\xed\x3c\xbb\x69\x6b\x8d\xb0\x34\x64\x01\x77\x6b\x3f\xbf\xf9\xb8\xed\x10\xb6\xf0\xd8\x61\x8e\x18\x32\x2f\x3e\xcc\xb0\x18\xb8\x49\x01\x63\xe2\xee\x66\xc4\xed\x11\x2c\xbb\x18\x10\x9d\x91\x70\x1b\xff\x79\x3c\xd3\xe1\x6e\x46\xc3\xe1\xb0\x8b\xc7\x31\x17\xee\x66\x28\x6c\x8d\x81\xdb\xc8\x5f\x9a\x89\x70\xa3\x19\x70\xdb\x8c\x63\x8c\x83\x9b\x0d\x80\x5b\x20\x86\xcd\x82\x5b\x4d\x7f\xdb\xb1\x75\xab\x41\x30\x60\xf4\xdb\x02\x71\x9b\x29\x70\xd8\xdc\x17\xb8\xc7\xdb\x4d\x7c\x3f\x05\xe3\x5e\x60\x71\xdb\x0d\x7a\x5f\xa0\x29\x2f\x62\x2d\x03\xe6\xbb\x2f\xd4\x70\x17\x58\x54\x94\xb1\xee\x51\xcc\x74\x3f\x19\x03\x5d\x60\x07\xb7\x1a\xe5\xbe\x38\x73\x5c\x58\xdc\x64\x79\x58\x20\xbe\xea\x3c\xda\x15\x89\xad\x90\x05\x01\x5e\xf6\x09\x17\x4e\xd6\x15\xc7\x76\x91\x82\x8d\x20\x1a\x98\xd5\xa1\x9d\x56\xb4\x1c\xe9\x04\xe1\x8d\xdc\xd3\x69\x75\xbd\x89\x93\x8b\xcb\xeb\xf7\x97\xe7\x67\xb7\x97\x17\xab\xd2\xeb\xfa\x7e\x0f\x4a\x95\xdb\xed\x36\xa3\x8e\x4c\xb9\xe1\x8f\x86\x10\x6f\xf8\x59\x6c\x8a\x90\x1d\x91\xa6\xd9\xe0\xbf\x7d\x98\x44\xbb\x33\x2f\xdb\x99\x4f\x84\x6e\x5f\xdc\xf5\x33\xb7\x0f\x30\x03\x63\x26\x8d\xf4\x34\x97\x45\xae\x6c\x3c\x3a\xb9\xba\xf0\x99\xb5\x5c\x64\x45\x93\x6f\x37\x4d\x7c\xf8\x70\x75\xa1\xc6\x84\x7c\xcd\x32\xda\x28\xb0\x5d\xe5\x52\x1c\x6a\xf2\xed\xbb\x37\xff\x01\x79\x21\xf0\x84\x15\x12\xb9\xed\xb8\xc1\xe9\x40\x3b\x11\x5c\x1d\xc0\x44\xc1\x06\x66\x99\xd1\xca\xd0\x32\x85\x3d\x24\x35\x48\x29\x73\x56\x54\x86\x6e\xde\x31\xe2\x3b\x1c\x6c\x9b\xe7\xd5\x85\x82\x77\x30\x02\xdf\x86\x17\xcf\x98\xc6\xdc\xdb\xed\x11\xc2\x03\x3b\x3e\x68\xeb\x7e\x80\x95\xbb\x7b\xcf\x36\xcc\xc9\xda\x2d\xee\xa9\xb2\xf6\xc1\x0d\x33\x1f\xc4\x93\x90\x95\x6b\x9b\x59\x68\x8b\x41\x08\x89\x38\xfc\x6b\xcd\x10\x60\x26\xd9\xda\x78\x36\x52\x17\x2d\x21\x67\x33\xca\x82\xbd\x2d\xa4\x6d\x53\xaf\xb4\x35\xcb\x0f\x5b\xdd\xfa\xde\x27\x7d\xc5\xcd\xa1\xcd\x5f\x9b\x05\xb4\xc7\xcc\x5f\x81\xf7\x05\x7f\xc0\x38\xd0\xee\x2f\xcd\xc4\x89\x06\x9e\xc8\x58\x9b\x15\xf9\xef\xff\xf9\xc5\xff\x1f\x00\x00\xff\xff\x6a\xfe\x5c\x76\x3a\xfc\x01\x00") +var _operatorsCoreosCom_subscriptionsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\xdc\xb8\x95\x28\xfe\x7f\x3e\x05\x4a\x49\x95\xa4\x44\xdd\xb2\xb3\x73\x93\x5c\xdf\x54\x52\x1a\x49\x4e\xb4\x63\x7b\x74\x2d\xd9\x53\xfb\x9b\xcc\xdd\xa0\x49\x74\x37\x22\x12\xe0\x10\x60\xcb\xbd\x9b\xfd\xee\xbf\xc2\x39\x00\x48\xf6\x83\x00\x5a\x2d\xd9\x93\x11\xfe\x48\xc6\x2d\xf2\x10\x8f\x83\xf3\x7e\xd0\x8a\x7f\x64\xb5\xe2\x52\xbc\x22\xb4\xe2\xec\x93\x66\xc2\xfc\x4b\x8d\xef\xfe\xa0\xc6\x5c\x9e\x2e\x5e\xfe\xe2\x8e\x8b\xfc\x15\x39\x6f\x94\x96\xe5\x7b\xa6\x64\x53\x67\xec\x82\x4d\xb9\xe0\x9a\x4b\xf1\x8b\x92\x69\x9a\x53\x4d\x5f\xfd\x82\x10\x2a\x84\xd4\xd4\xfc\xac\xcc\x3f\x09\xc9\xa4\xd0\xb5\x2c\x0a\x56\x8f\x66\x4c\x8c\xef\x9a\x09\x9b\x34\xbc\xc8\x59\x0d\xc0\xdd\xa7\x17\x2f\xc6\x5f\x8d\x5f\xfe\x82\x90\xac\x66\xf0\xfa\x2d\x2f\x99\xd2\xb4\xac\x5e\x11\xd1\x14\xc5\x2f\x08\x11\xb4\x64\xaf\x88\x6a\x26\x2a\xab\x79\x05\x9f\x18\xcb\x8a\xd5\x54\xcb\x5a\x8d\x33\x59\x33\x69\xfe\xaf\xfc\x85\xaa\x58\x66\x3e\x3e\xab\x65\x53\xbd\x22\x1b\x9f\x41\x70\x6e\x8e\x54\xb3\x99\xac\xb9\xfb\xf7\x88\xc8\xa2\x84\xff\xc2\x95\xdf\x74\xbe\x09\x3f\x17\x5c\xe9\x6f\xd6\xfe\xf4\x86\x2b\x0d\x7f\xae\x8a\xa6\xa6\xc5\xca\x5c\xe1\x2f\x6a\x2e\x6b\xfd\xae\xfd\xf2\xc8\x3c\xd3\xfe\x97\x7d\x88\x8b\x59\x53\xd0\xba\x0f\xe0\x17\x84\xa8\x4c\x56\xec\x15\x81\xf7\x2b\x9a\xb1\xfc\x17\x84\xd8\x1d\x04\x78\x23\x42\xf3\x1c\xce\x84\x16\xd7\x35\x17\x9a\xd5\xe7\xb2\x68\x4a\xe1\xbf\x96\x33\x0f\xef\x15\xb9\x9d\x33\x52\xd1\xec\x8e\xce\x98\xfb\xd2\x84\xe5\x44\x4b\x78\x98\x90\x7f\x28\x29\xae\xa9\x9e\xbf\x22\x63\xb3\xa5\x63\xb3\x63\xf6\x4f\x78\x16\xd7\xf8\xb2\xfd\x4d\x2f\xcd\xe4\x94\xae\xb9\x98\x6d\xfb\x5c\x46\x35\x2d\xe4\x8c\x20\x0e\x91\xa9\xac\x89\x9e\x33\x62\xc0\xf3\x29\x67\xb9\x9b\xcf\x96\x19\xe0\x6b\xbd\x39\xdc\x74\x7f\x8a\x9a\xc2\x9c\x0a\xc1\x0a\x22\xa7\xa4\xa9\x72\xaa\x99\x22\x5a\xb6\xeb\xdf\xbe\x7c\xfb\x62\xef\xeb\xe7\xbd\xdf\xd6\x3e\x8f\x0f\x2d\x5e\xd2\xa2\x9a\xd3\x97\x78\xb8\xd9\x9c\x95\xf4\x95\x7d\x43\x56\x4c\x9c\x5d\x5f\x7d\xfc\xb7\x9b\xde\xcf\xa4\x3f\xed\x2e\x92\x91\x3b\xc6\x2a\xd5\x22\x35\x69\x2a\x33\x7f\xb3\x10\x32\x59\x12\x5d\xd3\xec\x8e\x8b\x19\x2c\x73\x06\x6b\xf3\x30\x09\x39\xc7\xed\x57\x63\xff\x1b\x4e\x59\x4e\xfe\xc1\x32\xed\x7f\xac\xd9\x8f\x0d\xaf\x59\xde\x4e\x67\x44\xdc\x25\xef\xfc\x64\x76\xc5\xff\xb3\xaa\xcd\x94\xb4\xbf\x43\x38\x3a\xd4\xa5\xf3\xeb\xca\xf2\x0e\xcd\x0e\xe0\x53\x24\x37\x64\xc5\x4c\x7b\xce\x1c\x6a\xb3\xdc\x6e\x9a\x39\x32\x3d\xe7\x8a\xd4\xac\xaa\x99\x62\x02\x09\x4d\x0f\x30\x31\x0f\x51\x61\x57\x34\x26\x37\xac\x36\x60\xcc\xc5\x6b\x8a\xdc\x50\xa3\x05\xab\x35\xa9\x59\x26\x67\x82\xff\x97\x87\x0d\x48\x60\x3e\x5a\x18\x8c\xd0\x2b\x30\xe1\x2a\x09\x5a\x90\x05\x2d\x1a\x76\x42\xa8\xc8\x49\x49\x97\xa4\x66\xe6\x2b\xa4\x11\x1d\x78\xf0\x88\x1a\x93\xb7\xb2\x66\x84\x8b\xa9\x7c\x45\xe6\x5a\x57\xea\xd5\xe9\xe9\x8c\x6b\x47\x55\x33\x59\x96\x8d\xe0\x7a\x79\x0a\x04\x92\x4f\x1a\x73\x98\xa7\x39\x5b\xb0\xe2\x54\xf1\xd9\x88\xd6\xd9\x9c\x6b\x96\xe9\xa6\x66\xa7\xb4\xe2\x23\x98\xba\x40\xb2\x57\xe6\xbf\xac\x2d\x1d\x56\x87\xbd\xb9\xae\xa1\x20\x0e\xa0\x63\x03\x27\x60\x88\x19\xe1\x8a\x50\xfb\x2a\xae\xa2\xdd\x68\xf3\x93\xd9\x9d\xf7\x97\x37\xb7\xc4\x7d\x1a\x0e\x63\x75\xf7\x61\xdf\xdb\x17\x55\x7b\x04\x66\xc3\xb8\x98\xb2\x1a\x0f\x71\x5a\xcb\x12\x60\x32\x91\x57\x92\x0b\x0d\xff\xc8\x0a\xce\xc4\xea\xf6\xab\x66\x52\x72\xad\x00\x2f\x99\xd2\xe6\xac\xc6\xe4\x1c\x58\x0d\x99\x30\x7b\x8d\xf3\x31\xb9\x12\xe4\x9c\x96\xac\x38\xa7\x8a\x3d\xfa\x01\x98\x9d\x56\x23\xb3\xb1\x71\x47\xd0\xe5\x92\xab\x0f\xaf\xdc\x3f\x42\x1c\x0b\xdb\x72\x5e\x5d\x82\x70\x53\xb1\xcc\x5f\x1b\x2a\xc8\x59\x55\x15\x3c\x83\x9b\x41\xf4\x9c\x6a\x92\x51\x61\x76\x89\x0b\xa5\x69\x51\x00\xd3\x08\x7e\x7f\x13\x0d\x20\x70\xe9\x3b\x4c\xc0\xfd\xd4\xa3\xca\xfd\x1f\x3d\xab\xea\xfd\x75\x33\xad\x30\xc3\xd2\xd8\xd5\x9f\xb7\x6e\x2a\x41\x09\x63\xca\x67\xeb\xaf\x6c\xdd\xb1\x73\x78\x01\x24\x13\xca\x85\xb2\x00\x9a\x1a\xf7\xac\xe5\x45\x53\x59\xaf\x01\x25\xe6\x8a\x74\x60\x8d\xb7\xcc\x74\xc3\x8e\x0e\xaf\xdc\x0c\x26\x16\x9b\x7e\x5e\x59\xca\xa5\x58\xe0\x55\x35\x52\x88\x21\x77\x4c\x2c\x78\x2d\x45\xc9\x84\x26\x0b\x5a\x73\x3a\x29\x2c\x53\x63\x9a\xf0\x55\xfa\xe8\xe7\x69\x6e\x1b\x6e\x01\xab\x37\x5d\xa7\x8d\xef\xe1\xea\x68\x5d\xd3\xe5\xc6\xbf\x73\xcd\xca\x8d\x6b\xdb\xb4\x8c\x8f\xb4\xee\x50\x0a\x83\xbc\x9b\x96\x42\xec\x03\x5b\x80\x1a\xea\x4c\x28\x39\xf7\x4b\xd9\xb6\xde\xa1\x73\xc1\xb1\x19\xe7\xdb\xb1\x01\xfb\xdb\x31\x7c\xb4\x38\x40\x1e\xd8\xfa\xd7\x95\x0d\x32\x77\x07\x59\x1e\xdb\xb8\x2f\x63\xf2\xb6\x51\x70\x62\x74\x00\x24\x21\xe7\xff\x79\x75\x71\xf9\xee\xf6\xea\xf5\xd5\xe5\xfb\x6d\x9b\x43\x86\xaf\x58\x3b\x80\x2f\x44\x2f\xe1\xf0\xa3\x3b\xc3\x9a\x4d\x59\xcd\x44\xc6\x14\xf9\xd5\xd1\xc7\xb3\xf7\xff\xf9\xee\xec\xed\xe5\x31\xa1\x35\x23\xec\x53\x45\x45\xbe\x42\x97\x56\x47\xa3\x1c\x0b\xaa\x6a\xb6\xe0\xb2\x51\x96\xe6\xe5\x5b\xd0\x9f\x1b\xea\xb7\xed\xac\x70\x78\xec\x07\x7e\x4e\xc5\x92\x28\x56\x2f\x78\xb6\x79\xbb\xd5\x98\x5c\x4d\x03\x5b\xed\x51\x36\xf3\xb7\xc9\x30\xcb\x62\xc1\xf2\x13\x98\xbc\xdf\x06\x3b\x3f\xc2\x45\xd5\x6c\xc7\x6c\x33\x2c\x43\xbe\xe7\x45\x01\xb7\x53\xa0\x64\x97\x8f\x41\x9a\xed\x6e\xa6\x5a\x0a\x4d\x3f\x59\x7a\x3f\x08\x93\xa9\x8c\x56\x2c\x27\xf7\x5c\xcf\x09\x25\xb9\x6c\xcc\xa4\x7f\xf5\xab\x13\xc2\xd9\x2b\xf2\xab\x0e\xd0\x31\xb9\xb4\xcf\xb6\x27\x38\x08\x1a\xe6\x29\xd8\x82\xd5\x66\xb6\xee\x6c\x4f\x48\xcd\x66\xb4\xce\x0b\xa6\x94\xc1\xe9\xfb\x39\xd3\x73\x86\xc2\xbf\xdb\xb4\xe1\x19\x7f\xe2\x86\xf1\xcb\x9a\x08\xa9\xc7\xe4\x82\x4d\x69\x53\x80\x24\x40\x0e\x0e\xc6\x87\x7b\x41\xeb\xd7\xb5\x2c\xa3\x51\xfb\xa6\xaf\xc1\x6c\xc2\x98\x43\x85\x70\x87\x2e\x1d\xe9\x12\x5e\xc5\x72\xc2\xa7\x56\xf6\xe2\xca\x2c\x95\xb0\xb2\xd2\xcb\xf0\xb5\x1d\xa4\x6b\x24\x92\x3c\x11\xcf\x4d\xdf\xd2\xea\x1b\xb6\x7c\xcf\xa6\xc3\x0f\xaf\xee\x09\x2b\x58\x66\x08\x39\xb9\x63\x4b\x10\xc4\xc9\xb9\x03\x37\xbc\x09\xd1\xcb\x20\x11\x64\xda\x8d\x91\x99\x46\xe0\x99\xd8\x6d\x31\xe3\x8e\x2d\xc3\x0f\x91\x75\x8d\xd3\x6c\x06\x70\x63\xb3\x3b\xa1\x7d\x20\xb1\x28\xeb\x46\x88\xa7\x6c\x9c\xd6\x61\x97\xb9\xd8\x9b\xad\x37\x8a\xcc\x77\xcd\x84\xd5\x82\x69\x06\x52\x73\x2e\x33\x65\x04\xe6\x8c\x55\x5a\x9d\xca\x85\xa1\x97\xec\xfe\xf4\x5e\xd6\x46\xe9\x1c\x19\x7a\x32\xc2\x33\x54\xa7\x60\x60\x39\xfd\x25\xfc\x5f\xc4\xfc\x08\xb9\xfd\xf6\xe2\xdb\x57\xe4\x2c\xcf\x89\x04\xe2\xd0\x28\x36\x6d\x0a\x32\xe5\xac\xc8\xd5\xb8\xa3\x4b\x9e\x80\x3e\x73\x12\x05\xb4\xe1\xf9\x9f\x87\xc8\x83\x1b\x49\x7b\x2e\x2b\x34\xb2\x24\xef\xfb\x0d\x08\x97\xcb\x1e\xfd\xf3\x57\xc4\x50\x37\xae\xe3\xf6\xca\xe0\x54\x69\xd9\xbf\x65\x84\xd1\x8b\x9c\x48\x59\x30\xba\x4d\x2e\xc4\x01\x9b\x9e\x7a\xff\x0f\x5b\x02\x00\xef\x3b\x04\xab\x64\xfe\x8a\xa8\xa6\xaa\x64\xad\x95\x57\x84\xc0\x9e\x14\x3e\xc4\xde\xe3\xa0\x4b\x9c\x90\xbf\xfb\x1f\x0b\x3a\x61\x85\xfa\xfe\xf0\xf0\x8f\xdf\x5c\xfe\xc7\x9f\x0e\x0f\x7f\xf8\x7b\x18\x62\xfb\x76\xc7\x5a\xd9\x03\x41\xd0\xde\x25\x73\x50\x60\xc2\x10\xd1\x38\x85\xc2\xc3\x59\x96\xc9\x46\x80\x91\xef\x84\x28\x4d\x75\xa3\xc6\x73\xa9\xf4\xd5\xb5\xff\x67\x25\xf3\xab\xeb\x08\xa8\x9d\xa7\xd5\x20\x8f\x23\x8f\x45\x40\xe1\x18\xaf\xa9\x9e\xef\x91\x8c\x6e\xb3\x09\x6d\x1e\x3d\x04\x73\x56\x22\x8b\x57\xd6\x2c\x64\xfe\xf3\x75\xe4\x44\x71\x70\x45\xee\x6b\xae\x35\x13\x20\x87\xb1\xba\x34\x52\xc9\x89\xb9\x49\xad\x58\xb1\x78\x79\xb0\x77\x62\xed\xf7\x33\x79\xe9\xe6\x25\xb7\x6e\xbc\x5c\x9e\xa5\xc4\xc8\xba\x6e\xb4\xda\xed\xd9\xf5\x95\xb3\xb0\xed\x75\x99\xce\x3a\xf4\xfa\x81\x14\xc4\x5b\x99\xec\xa2\xbd\xb4\xfe\x8a\x48\x51\x84\xf8\x7a\x3b\x0f\x45\x0a\x0e\xd6\x23\x23\xe4\x7b\x0b\xd2\x11\xfe\x38\xce\xaa\xe6\xc4\x3e\x30\x2e\x59\x29\xeb\x65\xf8\x5e\xda\xc7\x59\x35\x67\x25\xab\x69\x31\x52\x5a\xd6\x74\xc6\x4e\x3c\x78\x04\xeb\xff\x85\x80\xc3\x17\xa3\x33\xc1\x75\xe8\xa8\x2c\x65\x4d\x6d\x58\x75\xb1\x74\xf4\x94\xe5\x9f\x87\x32\xb8\xed\xdd\x23\x61\xf0\x27\xfc\x6e\x27\x91\xc6\x5b\x00\xac\xd9\xdd\xad\x05\x64\xf4\x85\x2c\x9a\x92\xa9\x38\x99\xc1\xb1\x77\x78\x93\x89\x85\x91\xe8\xd5\xde\x85\x88\x9c\x2f\xb8\x92\xf5\x8e\x32\x04\xb7\x46\x72\xd9\xe8\xaa\xd1\x66\xa6\x25\xd5\xf6\xae\x44\x2d\x92\x7d\xaa\xa4\x02\xbd\xce\xde\x93\x15\xf2\xf7\xf2\x20\x02\x4c\x45\xb5\x66\xb5\x78\x45\xfe\xdf\xd1\xdf\x7e\xf3\xcf\xd1\xf1\x9f\x8f\x8e\xbe\x7f\x31\xfa\xdf\x3f\xfc\xe6\xe8\x6f\x63\xf8\x8f\x5f\x1f\xff\xf9\xf8\x9f\xee\x1f\xbf\x39\x3e\x3e\x3a\xfa\xfe\x9b\xb7\x7f\xb9\xbd\xbe\xfc\x81\x1f\xff\xf3\x7b\xd1\x94\x77\xf8\xaf\x7f\x1e\x7d\xcf\x2e\x7f\x88\x04\x72\x7c\xfc\xe7\x5f\x45\x4c\x8e\x8a\xe5\xb7\x41\xf2\x43\x00\x9b\xf1\xe0\xb8\xd0\x6c\xc6\x36\x19\xfd\xb6\xbd\x11\x79\xd4\x84\x7c\x1a\xb5\x82\xf4\x88\x0b\x3d\x92\xf5\x08\x5f\x7e\x45\x74\xdd\x84\x8f\xcc\x1d\x53\xfa\xbd\x78\xef\xee\x74\xc7\x70\xef\x58\xc7\x5e\x91\x5a\xb1\xac\x66\x7a\x3f\x7a\x23\xc2\x72\x56\x92\x4a\xe6\x87\x61\xb9\x58\x6c\x34\x36\x6f\x5b\xd0\xbf\xac\xaa\xe9\x84\x23\xdc\xc1\x56\x4a\x98\xd6\xb2\x1c\x13\x30\x1a\x46\x11\x88\x09\x23\x94\x2c\x68\xc1\x73\x07\xeb\x8e\x0d\x5a\x22\xdc\x78\x56\x5f\x7f\x4e\xea\xeb\x0d\xe2\x06\xea\xae\x11\xd7\x00\xc7\xfe\x75\x57\x26\x16\xdb\x0d\x78\xab\x9e\x07\xf3\x64\xdf\x89\xe2\x84\x45\x2d\x49\x25\xab\xa6\xa0\xba\x67\xd4\xdb\x32\xc1\x55\x7b\x73\xd7\xa3\x62\xef\x63\x6b\xa8\x36\xe8\x05\xbe\x8a\x41\xc9\xc9\xed\x0c\xed\x1b\xee\xc9\x59\x51\x10\x2e\xf0\x3e\x02\x58\x67\x11\xae\x19\xca\x81\x84\x6e\xc3\x53\x2a\x08\x5b\x30\xa1\xcd\xb9\xad\x4c\xd3\x6c\x82\xd2\xb4\xd6\x5c\xcc\xc6\xe4\x3b\xf3\x77\xa4\xc2\xd6\xe0\xba\xd5\x7d\x54\x36\x85\xe6\x55\xc1\x88\x97\x1e\xd0\x96\x5b\x34\x8c\x50\xa5\x64\xc6\xa9\x76\x16\x66\xf4\xab\x2b\x3d\xbc\x70\x58\x8f\xa6\x77\x60\xe2\xcf\x58\xce\x44\xc6\xc6\xe4\x23\xb8\xd3\xfd\x1e\x4e\x96\x66\x35\x97\x62\xe1\x6d\xd7\x0d\xba\x3b\xb7\x41\x35\x6b\xd9\x0c\xf9\xaa\x2c\x1b\x0d\x8e\x94\xc7\xf7\x74\x19\x7c\xb3\x16\xe3\x8e\xc3\x0b\xc8\xb4\x57\x72\x28\xf8\xeb\xe4\x74\xeb\x5d\xf0\x86\xa2\x6d\xe7\x1c\xc1\xd8\x62\x98\x90\x37\x01\x07\xf8\xf8\x1a\xf7\x69\x2d\x59\x7d\xae\xf3\x74\xd6\xeb\x18\x6e\xf2\x65\x73\x92\x54\x2e\x12\xc5\x21\xa2\xb9\x43\x2c\x67\x48\x30\x6a\xa6\x51\xfa\x38\x0b\x65\x55\xb3\x29\xff\x14\x8d\x9b\x67\xa2\x55\xe9\x78\xce\x84\x36\xea\x53\x0d\xa4\xbe\x66\x15\x13\x60\x4b\x61\x34\x9b\x07\xd9\x97\xa5\xf2\xad\x57\xa3\xf5\xc1\xee\xd7\xcf\x8a\x12\x57\xea\x05\xbc\xd9\x24\xf3\x3d\xdf\xbe\x9f\xdd\xed\xb3\x78\xb0\xdf\xab\x27\x64\xce\x50\x53\xdb\x66\xb4\x58\x39\xdb\xce\xf3\x36\xb6\xcc\xfd\xeb\x7e\xce\xb3\xb9\x9f\x9e\xd1\x7f\xb7\x04\xdb\x10\x1b\xa8\x52\x49\xb8\xa3\x53\xae\x89\x34\x12\x8a\x99\xcb\x98\xdc\x6c\x80\x57\x52\x9d\xcd\xed\x13\x87\x5b\x95\x46\x74\x1b\x78\xef\xad\x05\x3f\x41\x93\x72\xde\x14\x2c\x27\x2e\x7c\x0a\x3f\xd5\xa2\xe4\x16\x88\x31\x88\xda\x0b\x34\x3a\xa5\x4a\xf1\x99\x18\x55\x32\x1f\x99\x6f\x9c\x6e\x46\xa3\xe0\x15\xed\x86\xfc\x86\xae\x69\x00\x13\xbd\x29\x28\xe6\x78\xdf\x7b\xfb\x6a\x47\xa2\xc9\x64\x59\x35\x9a\x75\x8c\xaf\x4e\x83\xde\x32\xa3\xc9\x12\xa3\x01\x3b\x72\x73\x2b\x97\xa5\x12\x82\xfe\xfe\x96\x54\xd0\x19\x1b\xd9\x29\x8d\xfc\x94\x46\xfe\x5b\xbb\x6e\x79\x98\x1e\xa2\x89\x78\xfb\x3d\xee\x6f\xe5\x1b\x34\x50\xe3\x8f\x13\x6b\xd8\x2b\xe9\x27\x5e\x36\x25\xa1\xa5\x6c\x04\xa8\x28\x76\x25\x03\xd7\xb8\xdd\x76\x5a\x14\xf2\x9e\xe5\x9f\x6b\x0b\xa3\xb6\x91\x24\x62\x2f\xf9\x52\x0d\x8e\x41\x43\x63\xbc\x81\x31\xda\xb0\xb8\xa3\x41\xd1\xf9\x17\x62\x51\xf3\xbd\x73\x98\xac\x20\x27\x17\x0f\x40\x4e\x47\x13\x20\xa2\xca\x7f\x81\x2b\x22\x4b\xae\xb5\xb5\xd8\xd3\x96\x26\x0c\x99\x4a\xb8\xee\x99\xad\xed\x55\xe2\x53\x24\xde\x5c\x11\xf6\xc9\x28\x88\x1c\x5c\x26\xce\xf9\x75\x82\xec\xfd\x9e\xab\xa1\x09\x6b\x69\x74\x4d\x5e\x56\x05\x2b\x5d\xb0\xf9\xc8\x29\xa2\x18\xd9\xf3\x7c\xbd\x9e\xaf\x97\x1b\x2a\x5e\x36\xea\x8a\x45\x68\x1c\x99\xb0\xa2\x15\x8f\x0c\xfa\x57\x32\x57\x56\x26\x71\x48\xb3\x2d\x26\x97\x90\xcb\x4f\x5c\x41\x8c\xfe\x7b\x06\xd6\x90\x1b\xa6\x15\xb9\x9f\x4b\xc5\x10\x0e\xad\x99\x85\x8e\x26\x14\x60\xb9\xd6\x7e\x34\x20\x75\x49\x08\x29\x9f\x4e\xfb\xef\xe5\xac\x2a\xe4\xb2\x04\x49\xfd\x4a\x77\xa5\x2e\x2b\x4a\x6d\x83\xc8\xca\xaa\xa0\x9a\x1d\x2a\x2b\x7e\x0d\xd9\x5d\x1e\xc4\x7d\x61\x36\x97\x9f\x8c\x54\xa2\xda\x4c\xb4\x4d\xa3\x77\x2a\xab\xaf\xf5\x0d\x84\xfd\x33\x1a\xa4\x73\x40\xdd\x4a\xcc\x7e\xb8\x05\xcd\xa6\xfd\x05\xce\xe2\xec\xdd\xc5\xf6\xc3\x0c\x9b\x9e\x48\xc8\xfc\xb4\xb6\xb4\xb3\x55\x14\xeb\x4c\xa9\x2f\x9b\x0f\x2a\x09\x98\x4f\xe0\xe2\xe6\x31\xd3\xe5\x04\x0d\x86\x27\x36\x88\xd6\x67\x26\xe1\xc3\x35\x83\x84\x9a\x00\x54\x74\x5c\x18\x00\x36\x7b\xe6\xe1\x3a\x6b\x8c\xe7\x26\xe4\xb5\x19\xf9\xc5\xec\x41\x39\x8e\x70\xe9\xf4\x8e\xcc\xec\x48\x8f\x3c\x40\x18\xa1\xd9\x53\xf4\xee\x44\x1c\x17\x81\x68\x9b\xaa\x00\x5f\xb1\x8c\x8b\xc0\x8c\x52\x53\x71\x53\x92\x96\xe3\xd1\xa2\x1b\xf0\x6f\xd6\x74\xa8\x10\x49\xcc\x8d\x9b\xf3\x2a\xb8\x20\xc3\x95\xad\xa5\xd4\xe7\x5a\x7d\x04\xab\x78\x9b\x13\x67\xee\xd8\x95\x38\x21\xef\xa4\xbe\x12\x61\x47\xcb\x25\xda\xba\x0d\xfe\x5d\x48\xa6\xde\x49\x0d\xbf\xec\x6d\xc3\x70\x9a\x49\xdb\x85\xaf\xc0\xd5\x14\x48\x09\xc0\x49\xd1\x49\xce\x82\x78\xf4\xf0\x6e\x19\x32\xee\xb6\x9e\x2b\x72\x25\x88\xac\xed\xbe\xb4\x16\x7b\x65\x3f\x51\xc6\xf8\x06\x27\x8c\x08\x29\x46\x18\x98\x6c\x24\xb8\xd5\x6f\x5c\xfa\x58\xed\xee\x6e\x86\x8f\x61\xe3\x74\x20\x8a\x1c\x3f\x75\x6b\xb8\x0f\xfe\x05\x93\x00\x0b\x9b\x03\x1b\xd8\xd7\x06\x36\x0d\x52\xdb\xa8\x66\x33\x9e\x91\x92\xd5\x33\x66\x84\x9d\x6c\x1e\x77\xc8\xc3\xb4\x18\x47\x90\x22\x77\x01\x0e\x62\x0d\x30\xa2\x37\xc0\x23\x53\x58\x17\xbe\x81\xe4\xbc\xa4\x95\x41\x98\xff\x36\x94\x19\xf6\xf4\x7f\x48\x45\x79\xad\xc6\xe4\x6c\x60\x86\x8a\x8b\x59\xc1\x7a\x6f\x59\x8b\x67\xf7\x03\x06\xb6\x11\xac\x7f\x6c\xf8\x82\x16\x43\x99\x39\x4e\x86\x66\x28\x41\x9b\x19\xad\x32\xd9\x13\x2b\xa7\x18\xea\x86\x71\x6d\x5c\x91\x83\x3b\xb6\x3c\x18\x42\x98\x55\x94\x3b\xb8\x12\x07\xc8\x81\xd6\x90\xc8\xb3\xab\x40\xd4\xd8\x01\xbc\x75\xf0\x10\x8e\xbd\x67\x61\x3c\x80\x29\x5a\x16\xac\xee\xa6\xda\xaf\x8e\xbe\x79\xb8\x7d\x1a\x16\xe4\xc3\x2a\xba\x70\x1e\xdb\x13\x76\xeb\x6c\x6d\xe6\x26\xb7\x33\x02\x94\xd5\x9a\x66\x73\x48\x3f\x77\x33\x1a\x10\x1b\xa8\x58\x12\x73\xaa\x1a\x39\x22\x20\x95\x55\x4d\x75\x0d\x6e\xc9\x3f\x7a\x1c\x3e\x61\x20\xc1\xfe\x09\x73\x88\xb6\x1f\xa1\xc3\x72\x43\x2c\x3c\x6e\xfd\xd1\xfd\xd7\x9f\x1e\x90\x57\x16\x23\x22\xe0\x24\xa3\x05\xba\x4b\x78\x9c\x70\x91\x83\xf3\xd3\x2e\x1d\x76\x04\x21\x99\x7d\x2c\xc3\x04\xee\xd2\x90\x56\x52\x32\x2a\x94\x33\x9d\x82\xaf\xb4\x05\xa4\xac\x5b\xb8\xa3\x3c\x5b\xe3\x52\x04\xcf\x03\x54\x7b\x27\x6f\xac\x55\xf5\x84\x5c\x83\x95\xbf\xfd\x05\xee\xec\x3b\x79\xf9\x89\x65\x8d\x1e\xcc\x94\x89\xe2\xb6\x01\x21\xab\xb7\x85\xdf\xb4\x02\x16\xae\xb7\x27\x60\xb5\xb7\xc2\x89\x50\xc3\x32\xac\x1c\x0f\xee\xe5\x1d\x5b\x2a\xcf\x2c\xad\x68\x07\x6c\x6d\x98\x2d\x7a\x3c\x74\xac\x10\x79\xeb\xff\x71\x46\xd3\x72\xc2\x05\x4e\x12\x3f\xeb\x0e\x7d\x10\xa8\x99\x95\x3b\x1e\x23\xb3\x17\x05\x4e\xef\xa1\x9b\x1f\x23\x17\xf6\x4e\xe0\xdb\x48\x99\xb0\x5f\xc4\x60\xc3\xec\x1c\xcd\xdf\x2c\x09\x76\xc4\xbb\xcb\x1f\x1b\x5a\xb4\xe9\x63\x81\x23\x75\x8f\x5b\x00\x3d\x9e\x67\xfe\x7c\xcf\x8b\x3c\xa3\xb5\x8d\x30\x05\x5a\x33\x08\x51\x49\xc4\x2f\x0a\x44\x30\xa3\xc2\x53\xba\x16\x53\x14\x86\x02\x54\xb4\xd6\x3c\x6b\x0a\x3a\x2c\xe1\xdb\xca\x25\x11\x09\x62\x81\xb3\x6b\xd1\xfd\x86\x65\x52\xe4\xf1\xaa\xe5\xed\xea\x9b\xab\x11\x0e\x15\xab\xb9\xcc\x87\x02\x1b\x60\x02\xbc\x64\xab\x17\xef\xa8\xef\x27\x92\x53\x47\xdb\x3c\xc1\x08\xdc\x1e\x67\xe4\xb3\x15\x07\x9c\x78\xc1\x67\x42\xd6\x2c\x3f\x6e\x19\x4d\x4b\x05\x86\xc9\xe5\xd7\x4b\x67\x6d\x3c\x21\x5c\xbb\x1c\x3d\xc5\xf4\x89\xf3\x41\xd9\x6b\x68\x8f\xd5\x83\x1d\x84\x3a\x95\x35\x24\x4c\x1e\xe5\x12\x73\xfe\x16\x3c\xd3\xc7\x63\xf2\xff\xb1\x5a\x02\xda\x0a\x36\xa3\x9a\x2f\xbc\x64\x73\xcf\x8b\x62\x10\x22\x78\xd5\x18\xc5\xa8\x20\xf2\x82\x1c\x01\x48\xc2\xcb\x92\xe5\x9c\x6a\x56\x2c\x8f\xd1\x9e\xc3\x88\x5a\x2a\xcd\xca\x30\x02\x85\x8d\x6b\x18\x83\x0c\x4f\xfe\xee\xab\xad\xcf\xa5\x65\x10\x7f\x74\xb9\x90\x2d\x99\xc6\x18\xa3\x15\x54\xb1\x12\x40\x90\x46\x6f\x55\x57\xba\xf1\x4b\xb6\x58\x88\xd3\x3c\x62\x91\xec\x1f\x06\x4f\x29\xa9\x19\x54\xef\xb1\x37\xee\x01\x37\x13\x63\xd6\xdf\xca\x46\x6c\xb3\xd7\xf7\xb6\xea\x8d\x35\x54\x7d\xec\xbc\xd6\x56\x01\x58\x89\x4e\x7b\x64\x41\xaf\x33\x87\x8e\xe7\x80\x12\x70\x17\x80\x80\x65\x88\x1c\x3e\x65\xe3\xe2\xb6\xcb\x7a\xa1\x69\xef\x29\xb7\x1f\xe6\x36\x90\x42\xf4\xe0\xec\x7f\xff\x81\x68\xec\x87\xa4\x1f\x1b\x36\xd8\x0f\xdb\xa3\xda\x12\x1c\xc0\x5a\xd8\xc7\x61\xd6\xe3\x51\x1a\x66\xc1\x72\x1b\x09\x0c\xf4\xc6\x82\x25\x87\xaf\x0e\x1f\xcc\x48\x70\x91\xb5\xac\xe8\x0c\x6e\x66\xf4\x5a\x57\x5f\x24\x39\xd3\xac\x2e\xa1\xac\xc9\x5c\xde\xe3\xdf\x81\xa1\x0f\x2e\xb4\xb2\x10\x58\xde\x56\x98\x99\x4b\x05\xfc\xba\x9f\xf0\x0f\x74\x00\x42\x26\xee\x03\xba\x3d\xad\x65\x23\x72\x2b\x07\x7b\x82\xff\x76\x65\xc2\xef\xa4\x00\x4a\xd5\x28\x4c\xce\x5f\xab\x8d\xd3\x1f\x9e\x1b\x4d\x98\xa6\xe6\x82\xbe\x1c\xbf\x7c\xf1\xe0\xed\x4f\xaa\x30\x01\x06\x95\x15\xfb\xbd\x8b\xc8\x71\xb7\xf3\xc1\x33\xaa\x19\xcd\xbf\x15\x45\xbc\x5c\xfe\x16\x11\x14\x5e\x1c\x19\xa5\x1d\xbc\x79\x75\x03\xf9\x55\x34\x1f\xdd\xd7\x5c\xb3\x28\x07\x1e\x21\x47\x53\x5a\x28\x46\x64\x4d\x1a\xe1\x15\x98\xe3\x7e\xfd\x00\x78\x24\xbc\xcc\x50\x4c\x9a\x6a\x26\x0f\xba\xdb\x78\x89\x11\x69\xdb\xab\xed\x51\x36\x90\xff\x60\xdf\xde\x70\xcd\xfb\xa5\x12\xc8\x11\x3e\x69\x24\x6c\x29\xf5\xf1\xc3\x03\xd5\x70\xd9\x97\x9f\xaa\x78\xb9\xff\xd2\x56\x85\x20\x55\x68\x0f\x82\x62\x7f\x67\x7f\x06\xf6\xe0\x6b\x36\xa7\x0b\xa6\x88\xe2\x25\x2f\x68\x1d\xc8\x1e\xd4\x92\xdc\xe0\xaa\xc8\xa4\xd1\x9b\x6b\xd2\x6c\xae\x67\x12\xa0\x22\x6d\x3d\x8c\x4e\x3d\x93\xee\x0a\x3a\x9f\x8a\x57\x52\x36\x1c\xaa\x9b\xbf\x39\x15\xa0\x75\x6e\x3d\x66\x0e\x65\xa3\x1b\x5a\x04\xf6\x80\x7d\xca\x8a\x46\xf1\xc5\x43\xee\xbf\xcd\xb9\x4b\x16\x5d\x56\xa5\x96\x4a\xe6\x37\x15\xcb\x9e\x46\x66\xe9\xeb\xa2\x86\x9c\xe6\x0e\xb1\x20\x76\x1f\xcd\x57\x74\xbb\x40\x5f\xd2\x25\xc4\x83\x66\x19\x53\xca\x45\xac\x2f\xbb\x11\xf7\x7e\x55\x5f\x72\xa9\x22\x7a\xaf\x2e\x0b\xaa\x34\xcf\xbe\x2e\x64\x76\x77\xa3\x65\x9d\x50\xf7\xe7\xec\xbb\x9b\xb5\xb7\x57\x4a\x3d\x9d\x7d\x77\x43\x2e\xb8\xba\x1b\x44\xc3\x4e\xa9\x39\x8c\xe6\xe8\x9a\x09\x29\xb9\x6b\x26\xac\x60\xfa\xf0\x50\x21\x8f\x2f\x69\x36\xe7\x62\x98\x25\x58\xd6\x2f\x7c\x02\xa4\x2d\xfc\x67\xce\x23\x35\x9c\xc3\xa6\xe6\x9e\x5a\x4c\xff\x25\xbd\x57\x0c\x97\x3d\x31\xcb\x36\x7f\x66\xe1\xda\x34\x7b\xf2\x65\xe2\x24\xae\x2e\xf6\xe0\xab\x9c\xaa\x5b\x33\xb3\x14\x87\xd5\xe1\x6b\x5e\x30\xd4\x25\x61\x59\x2e\xaa\xd7\xde\x1d\x38\xbf\xa5\x6c\x82\xee\x91\x7b\x8a\xb6\x15\xa0\xdd\x63\x72\xcb\xab\x57\xe4\x52\xa8\xa6\x66\xad\x6d\x6e\xda\xff\x54\x10\x26\x57\x6d\xb6\xb4\x53\x7b\x01\x5f\x50\x0d\x34\x94\xd8\x6a\xc1\xe4\xf2\x13\x2d\xab\x22\x26\x45\xef\x80\x7d\xd2\x5f\x1d\x9c\x90\x83\x4f\x53\x65\xfe\x4f\xe8\xa9\x3a\x18\x93\xab\xd2\x87\x1b\x41\xb1\xc3\x9a\xb9\xd0\x52\x7c\x21\x3c\xd9\x69\x57\x56\x79\x14\x94\x0c\xce\x01\xc3\xa0\x8d\xd4\x9d\x4b\x72\x8f\x35\xb7\x0c\xfb\x63\x75\x2d\x6b\x9f\xeb\xd4\x39\x86\x40\x9c\x39\x8e\x4c\x96\x55\x2d\x4b\xee\x59\x9f\xbd\xae\x7b\x8b\x9f\x06\xa3\x59\x48\xe9\x20\x6b\x98\x8b\x75\x70\xed\xab\xa4\x2f\x8a\x38\xbc\x05\xbc\x0c\xfb\xf6\x3c\xde\x5e\x4d\x5d\x30\x1b\x1a\x16\xac\xd5\x08\x2c\x19\xf6\x21\x83\x89\x11\x9a\x1b\xb1\x52\x7d\x07\x37\xc9\x6b\x9f\xd1\x4e\x4e\x73\xb6\x38\x55\x39\x7d\x79\x02\xd3\x44\xc4\x09\xe7\xe0\xe9\xde\x9a\xa9\x22\x07\x2f\x0f\xc6\xe4\xc6\xc9\x47\x27\xdd\x3d\xf0\xcf\x05\xa1\x4e\x65\xed\x27\x04\x6e\xb9\x17\x07\xe4\x48\xd6\x30\xb3\x8c\x0a\x52\x30\xba\xb0\xae\x27\xa4\x44\xe1\x89\x82\x05\xe6\x38\xb2\xc6\x41\x5c\x02\x77\xc7\x4e\xf5\x6f\xbf\x0d\xb0\x9f\xb0\xee\x42\xd6\x6b\x58\xd8\x88\xfc\x03\xa3\xb4\x1c\x80\x8a\x21\x0d\x0f\x33\x9c\xc7\x88\x35\x50\x48\xd5\x42\x0e\xae\xdf\x6d\x94\xc1\xcb\x55\xcb\x0e\x7e\x60\x0d\xd9\x82\x30\x3b\xc8\x78\x00\xda\xcf\xc1\x93\x73\x3e\x92\x54\x8d\xc8\xb1\xb6\xb4\x73\xf8\x20\xf8\x8f\x0d\x23\x57\x17\xbe\x0e\x11\xab\x15\x57\xda\x50\xb2\x9c\xab\xbb\xd8\x1a\x16\x90\xf6\x63\xc4\x95\xa3\xb3\x92\xfe\x97\x14\xe4\xf2\xeb\x1b\x3b\xa5\xe3\xcf\xb8\x71\x01\x82\x48\xff\xab\xa9\x99\x11\xb0\xe2\x83\xc4\xdc\x1b\xab\x92\x9a\xf9\x9d\x5c\x50\x4d\x41\x60\x43\xea\x35\x6c\x13\x15\x2d\x8f\x35\x58\x3f\xe1\x22\xb7\x44\xaf\x23\x6d\x3d\x95\x60\x64\xce\xfa\xdd\x76\x69\xb8\x7d\xe8\xc3\xfb\xab\x3d\x08\x4f\x19\x70\xb5\xd9\x5b\x99\x27\x4a\x50\x7f\x35\xdb\x75\x8e\x6f\x93\xd2\xbc\x4e\xde\x49\xc1\x4e\x80\x58\x10\x43\x2d\xf0\x3f\x83\xe8\xfa\x5d\xcd\x35\x8b\x24\x99\x11\x6c\xd5\xed\x5f\xd2\x6a\x6e\x3b\xb6\x24\x60\x80\x06\x7d\xe0\xd6\x59\x06\x3b\x29\xe4\x84\xd8\xdb\xb0\xcf\x99\x7e\x78\x7f\x95\x3c\xd1\x0f\xef\xaf\x9e\x6e\x92\x3b\x08\xd7\xab\xb2\x75\x2b\x67\xb4\xe9\x87\xad\x34\x16\x66\xfe\x06\x46\xbc\x44\x3c\x76\xb2\x6e\x58\x26\x4e\x93\x85\x09\x0f\x07\xb0\x75\x65\xe1\x7d\x9d\xc0\x7a\x35\xf4\xf5\xd1\xbf\x9a\x97\x9f\x2a\x0c\x82\xb6\x0e\xb8\x9b\x39\x85\x8a\x2a\x3e\x0b\xde\x20\x4a\x98\xef\x72\x75\xa7\x0c\x17\x72\x28\x45\x28\x16\x8b\x23\xe4\x82\x61\x20\x47\xfe\xca\x05\x61\x45\x43\xdc\x0c\xf0\x2d\xe4\x16\xe4\xaf\x90\x0f\x10\x4c\x35\xc8\x49\xaf\x84\xff\x20\xd4\x23\x34\xbd\x0a\xff\x2a\x5d\x50\x5e\xd0\x09\x2f\xb8\x5e\x1a\x39\xe6\x78\xec\x33\x2f\x62\x04\x63\x05\x5b\xb6\x37\xa2\xb4\x93\x68\xb6\x66\xf6\x25\x47\x06\xce\x29\x98\x94\x8f\xc7\xf1\x52\xd9\x9c\xd5\x0c\x03\xe8\x51\xb4\xeb\x8a\x74\x66\x6f\xe0\x06\xad\x48\x6c\x71\xe8\x1b\x12\x87\xe0\x38\x0d\x3d\x48\x63\xeb\xe6\x8d\x8d\x6c\x1d\xfe\x70\x83\xa5\x0b\x07\x27\x68\x33\x7d\xbe\x28\xce\x8e\x59\xd2\x41\xde\x0e\xa8\x17\x78\x2a\x96\xbb\xff\x5c\xf1\x8e\xf8\xa4\xf4\x64\x51\xc0\x4c\x52\x58\x51\xc0\x55\x25\xea\x25\x12\x00\x26\x06\xd7\x7e\x63\x49\x9c\x2d\xb0\x89\xd2\x85\xc1\xc1\x6f\x82\x35\x67\xe2\x4b\x58\x39\x4c\x49\x4b\xc1\x9e\x43\x98\xdb\x30\x82\x45\xcf\x23\x63\xd5\x7c\x1a\x1f\x7f\x73\xce\xaa\xf9\xeb\x9b\xbe\xd9\xda\xfc\x46\x5e\xdf\xac\xdf\xd9\x80\x3f\x85\x6a\xdc\x01\x85\x86\xee\x43\x45\x0a\x3e\x65\x9a\x0f\x2e\x6c\xaf\x37\xba\x94\x82\x6b\x59\x0f\x71\x94\xd8\x9b\xea\x40\xa5\x71\xfa\xb6\x5a\xda\x5b\xfb\x3e\x06\x54\x67\xb2\x28\x58\xa6\xb1\xfa\x68\x10\x57\xe1\x00\xdc\x04\x36\xa9\x88\xcc\xda\x72\x7c\x97\x2d\x54\x07\x4f\xf1\xf0\x4f\xdf\x5f\x9e\x5d\xbc\xbd\x1c\x97\xf9\x2f\xe7\xf2\x7e\xa4\xe5\xa8\x51\x6c\xc4\x83\xe5\xda\x3e\x47\xb0\x3a\x8e\x2a\xa2\xa6\x69\x7f\xa3\xbf\x75\xc5\x0e\xc8\x07\x85\x61\x4a\x60\x12\x74\xce\x5f\x29\xf5\x09\xa9\xa9\x9e\x47\xd4\xe3\xd3\x73\x6a\x2d\x92\x4d\x51\xe0\xde\xeb\x9a\xb1\x93\xae\xa1\x63\x20\x93\x32\x71\xa9\xbb\x19\x85\xda\xe5\x06\x98\x41\x70\xb5\x9e\xde\x3f\x06\x33\x20\x4f\x8d\xac\xf1\x7c\x27\x24\xf4\x90\x81\x3d\xbf\xf1\x10\x5c\x2c\x19\xb8\x9e\xb5\x8c\x2a\x58\x06\xf9\x23\x53\x59\x1b\x4c\xad\xfb\x58\xc5\x74\x06\xdb\x70\xda\x28\x56\x8f\x2d\x77\x7b\x1b\x63\x63\x7f\xba\x2d\x8e\x2e\xdd\x98\x5c\xad\x77\x75\x83\xdf\xb3\x29\xa6\xe6\xb8\x2e\x17\x28\x13\x06\xf7\x82\x36\x7a\xce\x84\x76\x6d\x8b\xec\x36\x6e\xdc\xf1\x60\x3f\x04\x1c\x4f\x8c\xc5\x51\xc5\x24\x53\x0a\x40\x3e\x97\x45\x1c\x1c\x7b\x2f\x8b\x68\xae\xef\x03\xf8\x97\xcf\xe4\xae\x69\x2e\x21\x04\x0c\xab\x10\x87\x57\xd3\x41\x6d\x9a\x97\x5c\x3c\x35\xe6\x86\x84\x51\x2e\xf2\xe1\x9d\x59\x29\xc2\x0c\xcf\xf7\xa5\x51\x84\xe1\xbc\x49\xce\x83\x3f\x38\x3b\xea\xb4\x4a\x2c\xc4\x63\xfd\xfc\x7d\x2f\xff\x46\xc4\x5e\xdd\xaa\x72\xa9\x7e\x2c\x46\x38\x83\x51\x95\xb7\x7b\xf5\x73\x75\xcb\x3f\xad\xe9\xf0\x27\xe0\x4c\xdf\x0b\xc6\x90\x67\x01\xd2\x8f\xc7\xdf\xe3\x78\x99\xf1\x01\x12\x0d\xf4\xa4\x54\x2e\xdd\x1c\x6b\xdc\x62\x73\x4b\x6b\xb7\x88\xa9\xb4\x5b\xd1\x9a\x96\x4c\xb3\x1a\xc3\x82\x6d\x10\xb2\xb0\xf9\x79\xdf\x56\x4c\xdc\x68\x9a\xdd\xed\xb3\x84\xff\xb3\x94\xf1\xe5\x4a\x19\xbb\xf9\xb1\x5d\xf8\x61\xee\x71\xc8\x16\xb1\x5c\xc6\x46\xff\x13\xf4\x61\xe3\x85\xfb\x02\xa8\xa0\xaf\x30\x1b\x6f\xe5\xf2\xf5\x44\xfb\xa2\x45\x5b\x71\x16\x8d\x57\xb2\x29\x86\x25\x0b\x5f\xdc\x19\x52\xc2\x82\x7b\xb7\xe7\x0a\x99\x56\xda\x4b\xf7\x0d\xb7\x74\xa9\x94\x39\x23\x13\xae\x5b\x8a\xa2\x98\x26\x15\xab\x4b\x8e\x19\xf5\x41\x4c\x90\x02\xbb\xac\xb3\x1c\x39\xbf\xe1\xe2\x76\x62\x1d\xa9\x40\x10\x99\x69\xd7\xf2\x38\x08\x73\xc2\xf4\x3d\x63\x82\xbc\x78\xf1\xe2\x05\x48\x6f\x2f\x7e\xff\xfb\xdf\x13\x28\xe3\x95\xb3\x8c\x97\x0e\x50\xfb\x60\x58\x29\x14\x39\xf9\x5f\x2f\x5f\x8e\xc9\x7f\x9c\xbd\x7d\x03\xf1\xb4\x95\x56\x64\x22\xf5\xdc\xce\xcc\x3c\xd0\x03\x1e\xd1\xde\xe3\xdf\x6f\xbe\x7d\xe7\x04\x37\xb5\xf2\x36\x28\x9c\x7e\x7b\x23\x03\xb0\x09\x7a\xb7\x5e\xfc\xee\xab\xaf\xc6\xe4\x82\xd7\x50\x95\x85\x43\x8e\x9e\x0f\x6b\xaf\x5c\xe8\xb5\x90\xda\xd7\x53\x0a\x6f\xa9\xad\xb7\x64\x19\xb1\xad\x7f\x51\xf2\xd9\x5c\x63\x3f\x5f\xc0\xfe\x82\x67\x1a\x6b\x61\xcb\x28\x5b\x19\xd6\x18\x55\x36\x11\xd5\xa6\x8a\xdb\x60\x3e\x58\xfc\x09\x29\xf8\x1d\x23\x53\xf5\x97\x5a\x36\x15\x14\x55\x88\x30\xc0\x41\xc9\x47\xa3\xc7\xd8\x6e\xc3\x48\x85\x5b\x5c\x55\x4c\x7f\xa6\x18\xae\x28\x4b\x67\xef\xb2\x5d\xf5\x84\xc6\x13\x5f\x19\x78\x84\x18\x5c\x51\x5e\x6f\xaf\x8b\xde\x59\xce\xdc\x06\xcd\xf4\x7a\xa1\x79\xdb\x48\xde\xa1\x69\xc3\xa5\xb8\xda\x51\xd5\xf2\x1f\xe8\x87\xe6\xc2\xba\xdb\x9c\x56\xa5\xac\x1c\x6f\xcb\x69\x80\xbf\x25\x90\x81\x44\x56\x6a\x2f\x19\xb9\xc6\xd6\x83\xea\x64\x54\x5f\x4d\xbb\xa9\xff\x31\xd6\x9c\x82\x2b\x33\xc5\x5e\x91\xfa\x0d\x33\xef\x36\xfd\xd7\xf3\x88\xbb\x6b\xe6\xd8\x88\x35\xe8\xb6\x7b\xa6\xe5\x0a\xd8\xa5\xd5\xa6\xd8\x07\x41\xb6\x73\xc0\x94\x1b\x9b\xd0\x6b\x61\xad\x95\x7b\x8e\x5b\xbf\xcb\x43\x61\xba\xb1\x47\x0b\x71\xb3\x66\xee\x4c\x29\x9b\x37\x5c\xd2\xfa\xce\x28\xb7\x96\xae\x87\xc5\xea\x6b\xb3\x49\x3e\x17\x1a\xd3\xe3\x17\xcc\xb7\xa2\xef\xe6\xf1\x99\x39\x1f\x8e\x83\xf7\x0d\xad\xf6\x86\x48\x43\x07\x00\xa4\x22\xe6\xbd\x27\xaf\x89\xd3\xcf\xff\xa2\x55\xa7\x11\xbd\x6d\x9e\x49\x7b\xb9\x42\xe1\x10\x06\x77\x0a\xe1\x7d\x4d\x10\xad\xe3\xfb\xc1\xc4\x75\x84\x31\x4f\x55\x31\x3d\xeb\x52\x64\xfa\xe8\xe6\x31\xdb\x3b\x95\xda\xcb\x1a\xd3\xeb\x25\xb1\xf3\x08\xc1\xb8\xb6\xf4\xd9\x85\x04\xa0\x28\x88\xa4\x2b\x26\xa1\x5b\x14\xca\x02\xf4\x7a\x69\xa7\xc9\x3d\x38\x52\xa5\x9f\x48\xb0\x2f\x92\x64\xa0\x48\xa0\xae\x6a\x5f\x94\x24\x14\xbb\x7e\x90\x97\xae\xa6\x98\x1c\xdb\xe3\x16\x8e\x1a\x76\x24\xdf\x48\xa0\xbe\xe3\xb5\xcf\xa7\xdd\x2e\xfc\x44\x82\x44\xa9\x24\x52\x04\x8a\x84\xd9\x15\x94\xc2\x82\x50\x24\xd0\x18\x71\x09\x47\x6a\xe7\xb2\x14\xd1\x09\x47\x8c\x6b\x17\xc7\x1a\x3d\xf1\x5c\xaa\xea\x75\xaf\x2c\x58\xa8\xa2\x4b\x3b\x4a\xd0\xed\x1c\x69\x1a\x93\xb7\x96\xd7\xe1\x55\xa5\x13\x25\x8b\x46\xe3\x07\xe2\xe8\x15\xf1\x20\xba\xec\x12\x26\xe8\xca\x94\x01\x0f\x74\x8f\xc5\x9e\x58\xcb\x42\x41\xb8\x41\xee\x15\xc3\x4d\x71\x44\x93\xd1\xe7\x26\x0b\x0f\xdb\xbf\x47\x68\x71\xd2\xf6\xbe\x0a\x2f\xfe\x31\xda\xa1\x64\x8a\xc7\x1b\x52\x6e\xae\xc8\x51\xdb\x2a\xd3\x05\x55\x5d\x09\xcd\xea\x29\xcd\xd8\x71\xc7\xc0\x32\x38\x39\xdf\xa0\xd4\xc7\x9e\xba\x1c\xcd\x39\x15\x79\x81\xce\x81\x8c\xd5\x70\xc5\xd8\x27\xcd\x6a\x11\xe0\x51\x66\x6a\x79\xcd\x17\xac\x56\xe4\xe8\x6b\x66\x34\x27\x46\x75\x53\x0f\xdb\xb4\xf7\x9b\x2a\x00\x9f\xdf\x87\xa1\x07\x00\xa5\x05\x09\xc2\x2b\x4e\xfb\x12\x9d\x4b\xdb\x6e\xcc\x70\xea\xb1\x1b\x78\x00\xaa\x6b\xe2\x1a\x1b\x74\x05\xbe\x04\x24\x6a\x29\x9b\xda\xfa\x1b\x6d\x0f\x8c\x20\xd0\x4c\xd6\xb5\xe1\x94\x30\x31\xaa\x48\xcd\x66\x46\x13\xab\x41\xa5\xc3\x4c\xf6\xa2\x31\x3f\xec\x2d\x4c\x7b\xaf\x81\xf2\x9d\x30\x76\xeb\x65\x0a\x3b\xa5\x9c\x17\x6a\x6a\x95\x42\xb9\xe0\xb9\x13\x6b\x20\x0e\xc1\x4a\x75\x5c\x91\x8a\x2a\x15\x61\xd3\xb1\xaa\x6f\xa7\x41\x5a\xe7\x6c\x51\x05\x05\xb1\xc7\xd7\x3e\x89\x52\xe0\x9d\x0f\xb9\x9b\x17\x2b\xa1\x6c\x5d\x30\x52\x22\x9e\xed\xc8\x9c\x5d\x37\x93\x82\xab\xf9\xcd\x4e\xae\x95\x77\x1b\x00\x60\x68\x5d\x37\x5c\x24\x6a\xbd\xdb\xdc\x31\x44\x31\xa1\x38\x08\x1c\x86\xb1\x19\x31\x27\x26\x6b\xd1\x68\x3c\x54\x29\x77\x38\xdd\xdb\x26\x21\x69\xb5\x60\xb6\x94\x97\xf9\x53\x67\x1d\x1f\xe3\x2c\xef\x58\xe2\x30\x67\x1f\x44\xd5\x7d\x8f\x64\xb4\x28\x94\x95\x6c\x7d\x35\x18\xc7\x9e\xe2\xcc\x21\xae\xda\x00\x62\x23\x37\x88\xea\x5b\xa7\xae\xf4\x59\x88\xb9\xe3\x1b\x37\x56\x91\x52\x62\xf6\xb5\x20\x52\xb8\xdd\x87\x2a\x90\xf6\xbf\x23\xd4\x66\x5f\x2d\x83\xd6\xcc\x5e\x96\x38\xd4\x7c\xf6\x79\x6d\x1d\x3f\x0d\x9f\xd7\x4e\xde\xee\xb6\xc7\x35\xed\xd4\x01\xea\x75\xcf\x18\xe8\x18\xd5\x99\xa5\x57\x40\x37\xd4\xfc\x49\x72\x9b\xa7\x26\xab\x9e\x69\x5d\xf3\x49\xa3\x13\xeb\x7e\x7f\x5c\x79\x19\x84\x2b\xa3\x9f\x03\x41\x1a\x59\xdd\x3a\x4b\xb0\x18\x59\x35\xd7\x5f\xbb\x75\x32\xe7\x65\x83\x20\x54\x10\x1b\xf0\xa5\x43\x45\x72\x99\x35\xbe\x31\x0a\xc8\x11\x6d\x60\x48\xb8\x8e\x3f\x49\xbb\xe2\xa9\xc5\x93\xbb\x1f\x08\x60\x69\x2e\xef\xc5\x3d\xad\xf3\xb3\xeb\xc1\xcc\xc1\xbe\xb0\xd6\xbe\xd3\xf5\x48\x3a\x50\xc4\xfc\x4e\x27\xb2\xd1\x41\xba\xeb\x0a\xca\xb8\xba\x45\xff\x42\x0e\x4a\x2d\x0d\x4d\xea\xf8\x1b\x83\xe7\x35\xe0\x8f\x24\xdb\x2c\x80\x31\xfc\x7d\xc5\x45\x1a\x76\x81\x46\x38\x3c\x57\x4c\x85\x11\x46\xc0\xb0\xe7\xa0\x0f\x28\xca\xfc\x17\x61\x5c\xef\xb9\x48\xf7\x64\xf8\xeb\xbb\x48\xa3\x5c\xa0\x61\x89\x66\xc5\x45\x1a\x76\x81\x46\x68\x2d\x6b\x2e\xd2\x08\xfb\x5f\x84\x8b\x6b\xc5\x45\xba\x07\xcb\xdf\x4f\xca\x45\x6a\xde\xe8\xf7\xc7\xe9\x91\xbe\xc8\x98\x14\xb3\xe3\x9f\xd5\xd7\xd4\x21\xe3\xc8\x79\x57\xf3\x24\x53\xf4\x08\xa0\x34\x48\x56\x5a\x7c\xea\x68\x27\xae\xd3\x24\x08\x68\x9f\xcf\x2f\xf5\x08\x1e\x27\x58\x51\x84\x42\x88\x63\x5b\xc2\x15\x76\xc5\x42\x47\x76\xeb\x31\x8f\xf5\xec\xc8\xfc\x15\xb4\x78\x20\x54\x08\x89\x32\x89\x3a\xb1\x9d\xa6\x4e\xac\xd5\x42\xe4\xf0\x1f\xaa\xa2\x11\x45\x3f\x70\x40\xeb\x2c\x27\xd6\x24\xd9\xe4\x23\x8f\x8e\x24\x1d\x1f\x81\x23\x84\xfd\x19\x28\x55\xdb\x1f\x69\x67\x49\xa0\x69\x90\x53\x1d\x62\xdf\x58\x15\x63\xf1\x6d\xa7\x31\xa9\x6c\xce\x4a\x0a\xff\xf9\x3a\x69\xea\x38\xb8\x22\x46\x48\xd7\x0c\xab\x33\xb1\xba\x54\x44\x4e\x4f\x7a\x8d\xff\x0e\x16\x2f\x0f\x62\x1d\x00\xc9\x4e\x4b\xe2\x70\x3c\x54\xe1\xb3\x3f\xd6\xeb\x7d\x7a\x17\x88\xc1\xef\xb6\x4d\x73\x04\x23\xeb\xcc\xbd\x17\x3b\x01\xd4\x16\x77\xfb\xd1\x96\xff\x65\xfa\x6c\x4f\xbc\x2d\xfd\xd9\x67\xfb\xec\xb3\x7d\xf6\xd9\x76\xc7\x8e\x3e\xdb\x0e\x33\x06\x72\xc5\x95\x8b\xed\x43\x3f\x6e\xec\x8d\x35\xef\x76\x1d\x18\xd6\xe5\x0b\xcd\x2c\x51\xed\x1a\xfb\xea\xe3\xd1\xd7\xb5\x75\xf6\xca\xba\x1f\xea\x74\x38\x1e\x1f\x1e\xa2\x0b\x38\x4e\x79\xf3\x20\x1b\x3d\x1d\xfd\x81\x30\x91\xc9\x1c\x11\xd6\xcc\xb5\x56\x1a\x84\xc9\xd6\xde\x97\xbe\xfa\xd2\xd5\x56\xef\x86\x56\xc1\x3c\x53\x50\x24\x9a\x42\xbb\x4a\x66\xaf\x1f\x20\x88\xb5\xe2\x97\xaf\xba\x6a\x37\xc0\xd7\xae\x8d\x65\x7d\x20\x87\xb5\xfd\x7e\xb1\x1b\x36\x5c\x36\xd7\x7f\x98\x1c\xe1\x8f\xe3\xac\x6a\xe2\x0c\x93\xae\xa9\xf6\xb8\x64\xa5\xac\x97\x27\x1e\x94\x01\xd1\x83\x6d\x9f\x18\xae\xc6\xdc\x0e\x23\xe1\x65\x4d\x5d\x33\x01\x3d\x82\xbf\x34\x59\x2f\xba\x48\x1d\xd9\x49\xd4\xf3\x67\x1b\x53\xf5\xa2\x1d\x2b\x59\x7f\xde\x9f\x0c\xd6\x75\xbf\xc6\x28\x1b\x6d\x3b\x6c\x5e\xe3\x89\x77\x82\x00\x4f\x63\x62\x41\x16\xb4\x56\x71\xe7\x41\x76\x93\xee\x72\xbe\xe0\x2a\xdc\xd2\xb2\xf3\xc2\x66\x73\x35\x34\x15\x68\x74\xd5\x68\x4b\xb3\x63\xaa\x45\x74\x66\x3e\x67\xbe\x2e\xb1\xbf\x3f\x2b\x82\xee\xcb\x70\xda\x9b\x1b\x5f\x64\x3b\xe7\xfe\x08\x36\x77\xee\x8f\xf8\x56\xcf\x9b\xdf\x4b\x42\x8a\x9d\xbb\xac\xaf\x0e\x77\x94\xbb\xde\xaf\x96\x2d\xb7\x05\xb1\x9d\xf2\xb0\xe7\x6b\x01\x9e\xc4\x0b\x9e\x90\xf2\x7b\x69\xdf\xe8\x67\xe6\x68\x56\x56\xb2\xa6\xf5\x92\xe4\xd6\x22\x18\x28\xba\xbf\x56\x7c\xa6\x53\x7d\xe6\xc1\x55\x36\x61\x55\x39\xaf\xf7\x90\xf5\x1b\x5d\x7e\x86\xe5\xbc\x29\xd3\x8c\xe8\xdf\x41\x85\x6b\x5b\x3d\xdb\x85\xd5\x20\x20\xdf\xd6\x80\x66\xc3\x25\xd3\x71\x33\xb9\x6a\xf7\x1d\xe5\x9a\x6e\xd1\xd7\x83\x95\x6e\x55\x46\x5e\x8f\xf2\xa5\x09\x99\x33\x73\x30\x0e\x18\xce\xad\x17\x3d\x8b\xae\xe8\xc8\x7b\x76\x64\x01\x1d\x1b\x99\xee\x2d\xb0\xed\x27\x39\x6b\x92\x54\x1c\x83\xff\x17\x7b\x63\x64\x8f\xc4\xb2\xd2\x12\x94\x3d\x5b\x83\x69\x4a\x0a\x99\x75\x82\xa5\x1c\x8b\x0c\xdb\x48\x21\x3e\x87\x2b\xe2\xef\x99\x73\x68\x9a\x53\x35\x73\x43\xc1\x08\xac\xb1\x85\xc2\xb8\x0f\x9e\xd1\x49\xd0\xb4\x8a\xb0\x51\x58\xf2\x27\x79\x0b\x75\xb9\x3f\xf1\xb2\x29\x49\xa3\xcc\x4c\xa1\xb9\x60\xe7\x99\x20\x54\x3f\xd1\x7b\xd7\x88\x03\x2a\xfb\x70\x01\x40\xfb\x3e\x0e\xf3\x97\x1b\xb7\xbf\x61\x13\xb9\x37\x7b\x40\xea\xb2\xd3\xde\x54\x03\xb2\xba\x9d\xa5\x95\x36\xe5\x94\xd0\x40\x97\x34\xd2\x95\x7f\x94\xef\xef\xb0\x76\x5f\x04\x2f\xba\x17\x26\xe2\xa6\xd8\x42\xf5\xfe\x60\x1a\x61\xe3\xfd\xd6\xb0\x7b\x33\x72\x37\x8a\xd5\xa3\x59\xc3\xf3\x74\xb4\xfe\x62\x79\x7e\x14\xa7\x4f\xe3\xef\x49\x5c\x7d\x67\x5e\xee\x23\x1d\xa3\x79\xe2\xc1\xa5\x0f\x8e\xec\x31\xc5\x6e\x51\xf9\x36\x50\x72\x70\xde\x93\x25\xa1\x2e\xb2\xce\x13\x0f\x1b\x9e\x74\x74\x56\x54\xf3\x4e\x94\x24\xe0\xad\x6b\x05\x33\x08\xd5\x30\xd6\x6c\x99\xd9\x72\x48\xbc\xd7\x05\x03\xa7\x87\xf8\x0a\xd9\x4a\x23\xf3\x3f\x31\x2d\x07\x9d\x4b\x75\xc2\xa6\xb2\x6d\x31\x8c\x2a\xb0\x3a\xb1\x76\xaf\x82\x69\x48\xb7\xc2\xcb\x1f\x74\x8d\x43\x18\x53\x29\x17\xe6\xea\xfc\x4d\x90\x0f\xae\x99\x23\x9f\xbe\x22\xf4\xb8\x6b\xad\xe2\xc1\x16\xcf\x84\x08\xc6\x72\x4c\xf6\x2a\xda\xf9\xd5\x8d\x50\x27\x64\x72\xec\x36\x12\x68\x87\x30\xd2\x7b\xe1\x54\x92\xc0\x66\xde\x81\x05\x49\x4b\x2c\x14\x55\xcb\x92\x28\x41\x2b\x35\x97\x1a\x6c\x15\xb4\xa2\x19\xd7\x4b\xf3\xac\xae\x69\x76\x07\xed\xc8\x03\x25\xa2\x70\xa6\x27\x24\x3b\xb6\xf1\xe4\xbd\x93\xe7\xaa\x43\x0b\xf5\xbc\x96\xcd\x6c\x0e\x39\x53\xe1\x4a\xc5\x59\x41\x95\x3b\x8c\x8d\xb0\xad\x06\xac\x48\xbe\x14\xb4\xe4\x59\x8c\x33\x0f\x62\x23\x15\x97\xd6\xcf\x85\xf3\x81\xde\x7d\xd7\xbe\xe6\x3a\x3a\xd8\xce\x0b\xca\x4b\x72\xa4\x18\x23\xfe\x92\xe0\x5f\x6e\xc2\x6a\x2e\x9a\x38\x6b\x46\x6c\xfd\x2c\xeb\x99\x73\x15\x0e\x6d\x69\x05\xf3\x4b\xcb\x5f\x02\x59\x80\xee\x4a\x1a\xa1\xcb\x06\xd5\x6d\x9c\xf2\xb1\x47\xbf\x8d\x7f\x1e\xfc\x86\xac\x21\x70\xce\x75\x44\x61\x22\x97\x6d\x28\x0f\x39\xbb\xbe\x42\xe3\xed\xc2\x75\x3f\x32\xf7\xcf\xd6\xaa\x0f\x6e\x47\x21\xc5\x0c\xe3\x82\x85\x65\x39\xee\x66\x1b\x06\x28\xa0\x43\xf4\x82\xe7\x0d\x2d\x90\xb5\xfd\x6d\xd8\x90\x6d\x16\x78\x7e\x73\x85\xa0\xf9\x6c\xae\x47\xf7\x0c\x0c\xb8\x28\xbd\xb4\x41\xdf\x6e\xb2\x3c\xec\xa4\xeb\x04\x54\x72\x05\x2c\x54\x5b\x63\x20\x3a\x03\xcc\x72\xef\xe9\x12\xea\xb9\xe2\xad\xec\x45\x16\x0d\x6f\xad\xad\x2e\x8e\xe0\x3d\x7e\x74\x90\x03\xce\xed\xcc\x77\xdc\x6d\x14\x03\x5b\xfc\xb0\x32\xb2\xac\x90\x0a\xac\xaf\xd7\x20\x48\xa7\x8f\x80\xff\x39\x1c\xe8\xa3\xa8\xc1\x33\xa3\xcd\x0c\x29\xf0\x7b\xd6\x42\x7e\xa6\xd1\x77\x70\x27\x6f\x59\x59\x15\x54\xa7\x05\x32\x1d\x7c\xd7\x71\x61\x74\x1c\xfa\x86\xb8\x52\x91\x8f\x68\x61\xae\xf2\xf5\xc7\xf3\xf0\xea\x65\x4b\x16\x7b\x5b\xe1\xba\xe0\x73\xe1\x1b\xfd\x19\xf1\x3e\x99\x1a\x12\x74\x8d\xb2\x72\xc2\x72\xe0\x6a\x76\xe6\x60\x83\xba\x17\xac\x76\xb7\xe3\xfa\xe3\xf9\x09\xe1\x63\x36\x8e\xf2\xa7\x5f\x7f\x3c\xf7\xa0\x1c\xbb\xd6\x72\x86\x89\x2f\x3e\xc1\x09\x88\x09\x2c\x65\xa0\xd1\x58\x3b\xda\x99\x78\xd8\x7f\xff\xa3\xd9\x04\xf3\xf6\x9f\x46\x7f\xb4\x64\x18\xfe\xf5\x77\x23\x1d\x44\x54\x50\xfc\xfb\xca\x5b\xdd\xcc\x09\xdf\xfb\xf3\xef\xd7\xb6\x7b\x9c\xed\x2d\xf7\xf7\x20\x58\x88\x35\x21\x4c\x68\xa3\x8b\x5e\x4b\x88\x65\xe4\x39\x62\x3d\xcc\xbd\x66\xff\x70\xee\x27\x38\xc6\xb0\x81\xcf\x32\xa7\x8c\x6a\x26\x40\x42\xb2\xe9\xf9\xe0\x21\x00\xf0\x40\xba\x28\xec\xcf\x51\xcc\xd5\xb2\xf5\x5a\x4e\x88\x96\x12\x78\x00\xf2\xa7\x33\x41\xd8\x27\xae\xa0\x70\x13\xee\x35\x1c\x17\xd5\x71\xa7\xe4\x04\x53\x33\x2d\x83\x41\xbe\xc0\x97\x59\x27\xac\xfd\xd7\x42\xea\x5f\xfb\xeb\x11\x4b\x04\x40\xaa\x94\x84\x2e\x24\x77\xad\x0f\x0d\x29\x16\xe0\x59\x69\x1b\xec\x4d\x96\xa4\xe4\x4a\xd3\xbb\x88\xb4\xed\x1b\x23\x54\x76\xa3\x6a\xf0\xf4\x05\x81\x36\x2a\x2c\x27\x8d\xd0\xbc\x80\xbf\xfa\xef\x44\xa1\x7e\x57\xe0\xbc\x9a\x12\xd5\x64\x46\xb2\xaa\x6a\x36\x72\xe2\xad\x7d\x0a\x18\x59\x0c\x15\x70\xbb\xd5\xee\xe5\x89\xbf\x0c\x73\x8a\xf6\x97\x2a\x07\xd0\x51\x7e\x51\x2a\xec\xf5\x5e\xad\xb3\x09\xfb\x20\x45\xd6\x8a\xb6\x80\x0c\x11\x35\xbb\xde\x81\xb4\x5b\xb8\x70\x3b\x34\x35\xd9\x34\x4b\xc1\x32\xa6\x14\xad\x97\x27\xd0\x0e\x93\x6b\x52\x06\x63\xb1\x88\x5d\xf4\xb4\x29\x50\xd4\x2f\xa9\x80\xa6\x93\xa4\x66\x99\x14\x4a\xd7\x4d\x06\xa7\x47\xc9\xa4\x96\x77\x4c\xc4\x26\x0f\x11\x83\xe5\xfd\x8c\x89\x96\x43\x41\x7c\x8f\x24\xd9\x9c\x8a\x19\x53\xd1\x55\x35\x4a\x9a\x03\xee\x7d\xe3\xd5\x43\xb7\x9f\xe6\x84\xe8\xd4\x68\x5e\x5c\xc3\x51\x4d\x8c\x4c\xe9\x5c\x98\x31\x53\x75\x96\xdb\x93\xd6\x23\x68\xb6\x94\x17\x83\x42\x00\x49\x73\x2c\xc5\xba\x94\x46\xa0\x34\x84\xec\x07\x09\x2e\xa4\x92\x69\x9a\x53\x4d\x93\xf3\x29\xde\x52\xdf\x11\xd3\x86\x68\xc1\xe1\x75\x42\xb7\xe2\x9c\x6f\x20\x3a\x5a\x7e\x92\xc9\x8a\x77\xeb\x8b\x00\xfd\x9b\xbb\xf3\x8a\xb5\xfa\x73\x3d\x26\xef\xa4\x0d\x01\xc0\x54\x0a\xf0\x10\xd2\xa2\x90\xf7\x2c\x87\x69\xba\x2f\x22\x23\x88\xa0\x2b\xb0\xfe\x06\xb4\xc3\x96\x99\xc4\x84\xeb\x24\x79\x17\xcd\xe1\x26\x9f\xc4\x6d\x1b\x4d\x94\xb5\x81\xfc\xb0\x7f\x9b\xf4\x9c\xb8\x18\x23\x03\x94\x09\xcd\x6b\xd6\x2d\x2a\x63\x0f\xa8\x11\x78\x41\xdb\xa3\x8a\x82\x69\x8e\x13\xce\x7b\xc6\xb4\x6a\xa3\xb7\x91\xcf\x1b\xe2\x6f\xa5\x3d\x90\xaf\xa2\x20\x82\x40\xee\x8e\xd8\x9a\xff\x36\xab\xab\x21\x65\xdd\x0d\xb0\xbf\x22\x3f\x37\x12\xcc\xde\x4f\x38\xdd\xc1\x8b\x6d\x68\xdf\xca\x3c\xde\x23\xbc\xd2\xc9\xb5\x05\xd0\x26\x84\x61\xd2\xa1\x8a\xb2\x5f\xf7\x67\x02\x51\x35\xaa\x6b\xb6\xb1\xcc\x66\x4e\x17\xd6\xcd\x13\x0d\x31\xdd\x45\xd0\x2a\x6e\x23\xdf\x7f\x0d\xa6\x35\x82\x69\x8d\x5e\xc6\x3a\xd3\xe2\xa3\x92\xfd\x64\xe3\xa2\x93\xfb\x1f\x48\xf0\x56\x1a\x32\x7c\x93\xe4\x64\x5c\x6d\x82\xe9\x79\xaa\x8d\x82\xf2\x91\x7a\x91\x2d\x25\xdd\x60\xdc\xd0\xce\x57\xe4\xd7\x3d\x69\xd4\x6a\x35\xde\x2c\x16\x1f\x30\x61\xc6\x91\xb3\xa7\x8d\xed\x51\xba\x3a\x85\x7d\xb0\xc7\xe4\xd7\xd1\x20\x57\x45\xe5\xa3\xcd\x66\x9f\x1d\x21\x66\x8d\xd2\xb2\x5c\xed\x5f\x6c\x44\xf6\x32\x98\x59\xdf\x1d\xd0\x91\xcc\xa6\x04\x19\xe2\x8c\x26\xdf\x63\x72\x25\x88\xac\x73\x4c\x51\x6d\x14\xb3\xdf\x8b\x06\xdb\xce\x0b\x2c\x1d\xfd\xd9\xad\x7e\x34\x36\x3e\x07\x65\xfd\x33\xb1\xc4\xfd\xbb\xf0\x18\xe9\x0c\xab\x64\x66\x34\xe9\x32\x3e\x42\x0b\xc4\x48\x26\xe8\xa4\x68\x93\x58\x5b\xa5\xda\x28\xb8\x35\xb8\x1c\x63\xaa\x0b\x74\x87\x21\x64\xb5\x2c\x0a\x56\x03\xb2\x5b\x8b\xe7\x4a\x64\x6d\x54\xab\x2c\x37\x70\x3b\x4f\x9c\xa5\xbc\xb5\x1a\x08\x76\xef\xd5\x1b\x1a\x93\xad\xe4\x46\x6b\xd3\xd4\xe0\x3d\x70\xa1\xd4\xbd\xf9\xd9\xef\x46\xc6\x2a\xed\x10\xad\x94\x1a\xaf\x04\x85\xaf\x78\x44\x56\x92\x7b\x38\x4a\x2f\xc5\x91\x1e\xdc\x04\x91\xec\x10\xea\x19\xff\xc6\x6a\xf7\xac\xeb\x2b\x00\xe0\xac\x0b\x33\xf8\x47\x6c\xd1\x84\xee\xf0\x77\x6e\xc2\x0c\x85\x68\x0b\x01\x02\x66\xbb\xef\x24\x81\xb4\xaa\xfa\x4a\xf4\x6e\x8b\x22\xdf\x40\x77\xae\x94\xfb\x46\xf0\xce\xb9\x8a\x0e\xb2\x66\x10\x61\x0e\xab\x1e\x43\xdf\x61\x2a\x96\x91\xa5\x26\xbb\x43\xcf\x79\x9d\x8f\x2a\x5a\xeb\x25\xd2\x9c\x93\xde\xce\xfa\x4c\xf5\x04\xa0\x3b\x05\xf4\xc4\xb4\xfe\xeb\x8e\x1e\x2e\xc0\x76\x5a\x3c\x70\x51\x1a\x49\xe1\x79\x6e\xac\x62\xc0\x63\xaf\x3a\x36\xe7\xdd\x8d\x7e\xe1\x06\x6b\xab\xea\x56\x25\xf9\xe2\x57\xed\x83\xe7\x76\x93\x86\xde\xfb\xd8\xd5\x8e\xff\xb6\x13\xc5\x90\xcc\x68\x87\x45\x5e\x14\x65\xa3\x81\x3e\x50\xe4\xf5\x73\x7a\x44\xae\xb1\x0b\xad\xc6\xc0\x8d\x9d\xf1\xf4\xf0\x0d\x06\x7e\xe0\x8f\x13\xbb\xe5\x36\x96\x25\x09\x51\xdb\x98\x9d\x4c\x96\x55\xa3\x59\xe7\x18\xad\x1d\x20\x51\x55\x21\x49\xea\x4a\xcf\xd3\x72\x8a\xfd\x37\x47\x76\x2a\x23\x3f\x95\x91\x0f\x5d\x09\xf6\xb6\xea\x8e\x1d\x0e\x93\xec\x9c\x7f\xdf\x1d\x5f\x6c\x60\xca\xca\x42\xd3\x02\x52\xc9\x03\x82\x52\xc9\xee\x81\xa9\x64\x7f\xc1\xa9\xc4\x07\xce\xef\x7e\xf5\xde\xbb\xb0\xfe\x95\xcb\x97\x48\x2d\x49\xe0\xf2\xed\x22\x26\x10\x23\x5d\xf9\xf9\x71\xe5\x5a\xe5\x5b\x8f\x8b\xbf\x44\xf1\x5a\x0e\x01\x75\xbe\x17\x94\x6d\x49\x0f\x38\xc3\xd1\x85\xc2\x3e\xb9\xd6\x25\x49\x70\x3b\xa2\x1c\x08\x59\xf7\x5c\x81\x75\x9f\x8a\x56\x3f\x03\xb2\x30\x8a\x2b\x20\xd7\x1f\xb6\xa4\x73\x62\x80\xe5\x33\x39\x7a\x26\x47\x11\x63\x2f\xe4\x08\x63\xda\xe3\x13\x31\xfa\xba\x1a\xfa\x12\xc8\x8f\x0d\xab\x97\x44\x2e\x58\x27\xa6\x06\x1a\xaf\x28\x9e\x27\xec\x87\x21\x10\x13\x2e\x72\x2e\x66\xb1\x04\xe7\x89\x24\xa5\x92\xea\x6c\x7e\xf9\xc9\x48\xa6\x90\x17\xbb\x33\xe1\x5e\x05\xd4\x96\x74\x48\x3a\x7a\x39\xb5\x3b\xef\x8e\xcf\x51\x6a\x30\x76\x8d\x6d\x2d\xd8\xf6\x97\xb4\x1b\x60\x74\xd0\x77\x17\xbb\x28\x87\x29\x06\x5a\x92\x6e\xa4\x25\xdb\x10\x70\xd3\x36\x24\x41\x25\x78\x10\x1e\x4e\xbf\x5f\x72\x6c\xb3\x8b\xfe\x80\xa2\xf8\x27\xd6\xcf\x66\xbb\x75\x39\xd0\xe8\x20\x4f\x3b\x97\x7e\xf3\x80\xb8\x82\x4f\x2b\xef\xef\x46\xfb\xd3\x6d\x52\x38\xe2\x4a\xb2\xf7\xdf\x70\xdb\x94\xc6\x5a\x76\x64\x49\x09\xa5\xdb\xbb\xa3\x87\x82\xd8\xf8\x00\x43\x01\x01\x17\x53\xd7\x8c\xc3\x87\xb0\x7b\x14\x84\xb4\x02\xa0\xa4\x69\x87\x4c\x76\x35\x5a\xe0\x70\x07\xf0\xc0\x6d\xf1\xe8\xde\x8d\xc7\xde\x61\x5f\xee\xd8\xf2\x50\xd9\x8c\x60\x29\xd4\x9c\x57\xae\x43\x18\x88\xac\xbb\xdc\x02\x1c\x1f\xc1\x6b\xe8\xa6\x89\x3e\xe7\x2b\x71\x42\xde\x49\x6d\xfe\xef\x12\x02\x39\x76\x80\x6b\xee\xe6\x85\x64\xea\x9d\xd4\x00\xe3\x49\x0f\x0f\xb7\xe3\x81\x47\x67\xcb\x1b\x18\x82\x28\x6c\x70\x56\x52\x4e\xa5\x1b\xb6\x24\xb7\x3d\x22\xe7\x4d\xf0\x88\x11\xd1\x2d\x64\x7d\x80\x1b\xc6\x9d\x91\x6f\x9a\xa2\xec\x34\x93\x2d\xaf\x38\x26\x8c\x08\x29\x46\xd8\xe9\x76\x3f\xf3\x44\xf4\x31\x73\xed\xe2\x42\x77\xca\xbb\xa0\x96\x5f\xa4\x2f\x41\x6a\x6b\x3e\xa4\xf2\x5d\x37\xc0\x12\x5c\x15\x34\x63\xb9\x8b\x97\x80\x46\x20\x54\xb3\x19\xcf\x48\xc9\xea\x40\x70\xfb\xe6\x51\x19\x29\x67\x57\xc4\xdf\x6d\x2d\x3b\x48\x12\xdd\x8f\x26\xde\x36\x10\xe3\xde\x40\x1c\xcd\xc3\x44\x41\x84\x81\xc2\x47\x49\x2b\x43\xd2\xfe\xdb\x48\x0d\x80\x23\xff\x93\xa8\x5f\xf1\x5a\x8d\xc9\x19\x51\x5c\xcc\x0a\xd6\x85\xe3\xdc\x0b\x9d\x4f\x26\x81\x36\x33\x33\x2a\xf6\x8f\x0d\x5f\xd0\x82\x61\x38\x39\x15\xbe\x7e\xbf\x9c\xae\x09\xb6\x69\xc2\x12\xf6\x50\x32\xac\xd4\x47\x99\x1d\xdc\xb1\xe5\xc1\x49\xef\x2a\xa6\xba\x6a\x0e\xae\xc4\x41\x5b\x72\xa4\x47\x29\x9c\x68\x97\x26\x75\x8b\x62\x49\x0e\x00\xce\xc1\xba\x8c\xfd\x10\xb9\xf9\x33\xa8\xe3\xc9\x78\x6f\x0d\xdc\xe7\x05\x55\x2a\xa5\x76\xc1\xf6\xba\xbe\x37\x1d\x88\xf1\xf9\x99\x6e\xd8\xe8\xce\x0c\xa2\xa4\x76\xcd\x61\xdd\x60\xad\x87\x7c\x9d\xd4\xc8\x94\x84\x7d\x5c\xd8\xe6\xae\xb1\x25\x9e\x56\xb9\xb3\x7f\xdd\xa7\x8c\xdd\x77\xb2\x98\xa3\xb7\xaf\x4d\xe2\xf2\xc5\x23\xfa\x3b\xfa\x11\xf2\x46\x13\x20\x76\x6a\xc1\x73\x05\xd6\x33\xee\x12\xcf\x84\xd4\x84\x8b\xac\x68\x72\x88\x42\x8b\x8f\x1b\x80\x68\x30\x55\xb1\x2c\xcd\x20\x90\x7c\x1c\x3b\x23\xf4\x47\xff\xba\xd3\x02\xac\x05\xa3\xf5\xbb\xc5\x47\x73\xc8\x8d\x71\x80\x90\x82\x8e\x91\xd7\x5c\xd9\xd3\xd9\xe7\x6e\x4c\x07\x83\x18\xfb\xe5\xfe\xcf\xfb\xf9\x95\xaf\xf9\xa4\x66\xe4\x7c\x4e\x85\x60\x45\x3f\xf8\x66\x70\x86\x86\xdf\xd9\xb6\xe4\x28\xce\xdb\x86\xe3\x87\xfd\x8e\xe3\x8e\x76\x0b\x57\xa3\x63\x10\x68\x1b\x93\xbd\x87\xf6\x15\xff\xba\x2d\xc2\x7d\x5b\x86\x20\xe0\xc4\xe6\xe0\x31\x89\x19\xbd\xe6\xe0\x58\x4f\x7d\x2e\xef\x49\x2e\xc9\x3d\x74\x14\x5c\x18\x71\x02\xba\xf7\x29\x2b\xb4\x04\x41\x76\x9a\x30\x40\x70\x6a\x26\xcb\xaa\x96\x25\x57\x2e\x59\xc1\x22\xd3\xde\xca\x13\x14\x4d\xb0\x4a\xe3\xb6\xb2\x7c\xaf\xcf\x89\xa6\xf5\x8c\x69\x03\x84\x88\xa6\x9c\xb0\xc8\xb2\x09\xfb\x2e\x41\xfb\xd3\xee\x89\xbe\xbf\xb6\xe5\x78\x1c\xdf\x7d\xf7\x2e\xad\x1e\xef\xc6\x33\xbd\x97\x75\x91\xdf\xf3\x1c\xc3\x36\x14\x39\x32\x60\x8f\xe3\xe6\xba\xc7\x82\xbb\xd1\x88\x7c\x7f\xcf\xf3\x87\x2c\xdb\x8a\x10\xb0\x6c\x02\xeb\xb6\x7d\xb2\x39\xab\xc3\x92\xf5\x11\x7c\xfe\x98\x5c\x72\x4c\x74\x33\xff\xc2\x4a\x73\xe5\x84\x0b\x9b\x67\x3c\xed\x1c\x50\x10\xa2\xe1\x16\xe6\x5e\x39\x0d\x59\x31\x8d\x29\x34\x90\x05\x22\xf5\x9c\x28\x5e\x36\x85\xa6\x82\xc9\x46\x15\xcb\x48\x34\x7a\xea\xa3\x99\x16\xec\x13\x62\x7b\x3c\x5f\xf6\xaf\xf4\xf9\xf3\x8c\x09\x56\xfb\x8c\xf2\xb8\x28\x22\xe7\x50\x6d\xc3\x3e\xf3\x53\xcf\xac\x7d\x2e\x19\xfb\xc4\x32\x0c\xb0\x24\x55\xd1\xcc\xf8\x60\x76\xc5\xcf\xa0\x65\x54\xdb\xc0\x26\xa6\xb4\x8f\xaf\x31\x13\xd7\x34\xf5\xf3\x74\x70\xfa\xa2\x85\x91\xdb\xcd\x6d\x98\x72\x56\x31\x91\x43\xdd\xda\xf6\x4e\x04\x61\xe3\x76\xec\xed\x14\x6c\xed\xd4\x5d\x29\xeb\xe5\x27\x5d\x53\x43\x06\x4b\x43\xd0\x5c\x21\x56\x3e\x25\x54\xc4\x92\xac\xcf\xdd\xe1\x83\x3c\x4b\x18\x7e\xa8\x9d\xba\x77\x75\x36\xa2\xd7\xbd\x6b\x35\x05\x35\x8c\xdb\x49\xbd\xbb\x62\x3a\x82\x75\x7b\x77\x21\xed\xb7\x17\xc8\xf5\xd6\x5a\xef\x91\x95\x38\xcb\x6e\xb5\x15\x6f\x90\xdf\xdc\x2b\x2b\x08\x39\xd4\x4b\x4b\xad\xb7\xea\x09\xef\x40\x7f\xd5\x7b\xbc\x93\xcf\x8d\xb5\xbe\xcc\xc6\x5a\x53\x48\x72\x8f\x2f\xd2\xf8\x1a\x9f\x5f\xb1\x96\xd8\x1f\xad\x34\xe6\x84\xaa\x90\x51\x63\x9b\x75\xc4\xde\xb6\x0e\xcb\x83\x7a\xff\xf8\x91\x41\xa0\x36\x1d\x87\x28\x73\x8a\x6d\x82\x44\x23\xc4\x30\x51\xdf\x77\xef\x23\xaa\xa9\x62\x3a\xc6\xf6\xb6\x1e\x20\xef\xe4\x2e\x84\x81\x6d\xbb\x72\x42\x95\xcf\x91\x0e\x1e\xfd\xe8\x4f\x56\x82\x13\x3d\x48\x46\x36\x73\x27\xe5\x6a\x40\x32\x1f\xcc\x14\x61\xa0\xa6\x70\x26\x35\xcb\x22\x4a\x20\x44\x73\x53\x3b\xbb\x0f\x1f\xae\x2e\x92\xf6\xca\xbc\xb0\xb2\x57\x16\x6f\xa0\x4a\x1e\xff\xb1\xe9\x6a\x6d\xc1\xb5\xc9\x69\x07\x8f\x2d\xbc\x7d\x2c\x71\x96\xb1\xd6\xec\x79\xc1\xd5\x5d\x7c\x39\xd4\xbf\x9c\x5f\xf6\x5f\xed\x5f\xba\xbf\x9c\x5f\x12\xfb\x6b\x82\xf2\xb3\xd9\x3a\xb9\xcd\x3c\x39\x08\xd2\x95\x17\xee\x98\x27\x1f\x5a\x71\x73\x96\xb1\xd6\x71\x91\x73\x75\xb7\x87\x32\xab\x71\xca\x57\x95\xbf\x1b\xce\x1f\x7b\x4a\xbb\xa9\xab\xef\xd5\x29\xf2\xb7\x94\x4d\x10\x87\xef\x6d\x3d\x2c\xab\xe6\xdc\xf2\xea\x15\xb9\x14\xaa\xa9\x59\x1b\x85\x33\xed\x7f\x2a\x08\xd3\x48\x2c\xd1\x4a\x0f\x54\x92\x89\x60\xf0\xfd\xf6\xb9\xd1\x76\xd8\xf0\x64\xa7\x7d\x3b\xec\xbe\xb1\x31\x38\x81\x28\xc3\xef\xaa\x61\x37\x08\xf5\xd1\x0d\xbf\x15\xad\x35\x68\x4c\x89\x75\x69\xa1\x1d\x9b\x7d\xd5\x2d\x6e\x05\x69\x01\x29\xc3\xba\x97\x47\xda\xab\xa9\x0b\xab\x3f\x21\xba\x5f\x3c\xd5\x3d\x64\xd0\x30\xb2\x2d\x98\x61\x83\x1d\xc4\x84\xb4\x43\x3b\xc1\xd3\x9c\x2d\x4e\x55\x4e\x5f\x9e\xc0\x34\x63\x73\xd3\x75\x6f\xcd\x54\x91\x83\x97\x07\x63\x72\xc3\x4b\x5e\xd0\xba\x58\xf6\xba\x9e\xf8\xe7\xa2\xcc\x26\x6e\x42\xe0\xe0\x7f\x71\x40\x8e\x64\x0d\x33\xcb\xa8\x20\x05\xa3\x0b\xe6\x72\x96\x0d\x19\x0a\x4f\x14\x94\x94\xe3\xa7\xa5\xc8\xe4\xd1\xac\xfa\x48\x9e\xd3\xd0\xf3\x03\x0a\x01\x5d\x63\xd6\xf5\x45\xeb\xcb\xe3\xc2\xb0\xd0\xb0\xba\xfd\xc1\xf2\x38\x2b\x4c\x20\x09\x34\x3b\xe1\x20\x7c\xa6\x2d\x7e\x34\x4b\x45\x94\x7d\x21\x42\xf1\xdd\x6c\x7f\x58\x37\x7f\x24\x65\x2e\x3e\xe1\x06\x87\x6c\x20\x33\xae\xdf\xb3\x6a\x70\xce\x2b\x02\x1d\xbe\xb0\x62\xc9\xe6\xda\xfc\x20\x15\xd7\xb2\x5e\x12\xaa\x09\x45\xc2\x91\x35\x05\x1d\xbe\x40\x35\x43\x3b\xf6\x98\x5c\x5c\x5e\xbf\xbf\x3c\x3f\xbb\xbd\xbc\x78\x45\xdc\x57\x78\x57\x5a\x1f\x93\xdb\x4e\x11\xc1\x41\xa8\x9d\x4c\x26\xac\xfa\xd6\xce\xf1\xc4\x12\x60\x2a\xda\xd2\xdc\x50\x7a\x27\x60\x29\xba\x12\x5c\xb7\x9d\x3d\x30\x04\xbd\x90\xc2\xe6\x76\x19\xc8\xd6\xfe\x3e\xe3\x18\x4a\x28\xf0\x43\x01\x89\x96\xad\xcc\x02\x6e\x38\xd6\xfb\xf7\x4b\x18\xb4\x61\xec\x55\x82\x6c\x0f\x71\x1f\x1a\xa4\x2b\xb9\x9f\x74\x75\x6f\xd1\x5d\xe7\x5f\xb6\xfc\xcf\x35\x48\x72\xbb\x12\x56\x86\xea\x5e\xb7\xa1\xf1\xf8\x70\x0c\xc9\x6f\x87\xe3\x43\x27\x10\x16\x2b\x2d\xbe\x82\x30\xdb\x49\x75\xab\x4b\xf6\xb1\x7f\x4c\xc8\xb7\x2e\x57\x2d\x6c\x0b\xe1\xd3\x2d\xdd\xc6\xb0\x6e\x46\xa7\xaf\x53\xff\x2b\x61\xc0\xc2\x16\x83\x9f\x74\x27\x6d\xcb\x55\xce\xf8\x82\x09\xdc\xd8\xfd\x91\x69\x37\xb5\xa4\xd3\x7e\xdf\x52\x8d\x0f\xef\xdf\xec\x6f\x32\x48\x23\x92\xa6\x72\x2e\xcb\x12\x0b\xdb\xcd\x7d\xd5\xaf\xb6\x78\x84\xa7\x53\x7b\x51\xa8\xb1\xbc\xdf\x74\xf0\x02\xad\xd0\x5d\xf7\xca\x8a\x02\xed\x7f\xb6\x89\xa2\x01\x87\xba\xd3\x7c\xd2\x1b\x8c\xd8\x1a\x9b\xca\xd5\x1a\xb2\x8c\xe9\xd4\xaf\xe5\xf4\xfd\xe5\xd9\xc5\xdb\xcb\x71\x99\x3f\x19\xb9\x62\x22\xaf\x24\x1f\x4e\xa1\x0a\xb6\x78\x8d\x25\x67\xfe\x63\x69\x92\xc8\xa5\x7b\xad\x1b\x86\xe6\x60\xa1\x60\x17\x8c\xc8\x42\xa8\x9a\xf2\x42\x75\x4e\x5c\xcb\x4a\x16\x72\xb6\xb9\x47\x48\xc2\x71\xfd\x12\xcb\xf3\x8c\xe8\xc8\xe0\xc1\xfe\xf4\xb1\x70\xd3\xbd\xfe\x4e\xb9\x26\x7b\x66\x83\xda\x55\x7a\x3d\x04\xfa\xd9\xc5\x94\x19\xf8\xc2\x36\xe2\x11\x04\x58\xbf\x3b\xc1\xbd\x70\x9a\x2c\x58\x20\x80\x44\xd8\xba\xaa\x9d\x42\xa1\x9d\x96\xa2\xad\x64\x1b\xa3\xee\xae\x49\xbe\x4f\xb4\xe9\x21\xa1\xd6\x50\xb8\x50\x6f\xda\xfe\x6e\xff\xd5\xbe\xd1\x27\xae\x55\xcd\x46\xbe\x86\x19\x74\x6d\x0c\x84\xb9\xb7\xac\xd6\x9a\xad\x7b\x06\x49\x67\xbe\xc4\xa7\x8a\x65\x4a\xdc\x64\x2b\x0b\x7a\xfb\x30\x84\x8f\x40\x15\x59\x57\x7d\xd8\x5a\xb1\x08\x9d\x05\xd3\x4a\x65\x6d\xbd\x39\x55\xcd\x17\xbc\x60\x33\x28\x3d\xcf\xc5\xcc\x35\x15\xed\x14\xf9\x84\xe6\x5a\x2c\xe8\x7b\xeb\x7b\x3f\xde\x9a\x7f\x75\xda\xc9\x00\x06\xbf\xfb\xf6\x16\x5a\x39\x40\x78\x45\xc4\x6d\xde\x5d\x1f\x35\x93\x09\xb6\xf6\x1e\x8d\x46\x60\xed\x3a\xfa\x87\x91\xe3\xf3\xe2\x98\x7c\xc7\xec\xfc\x24\xb4\xb0\xa8\xa1\x3b\xeb\x5c\xfa\x5a\xf9\x06\x6c\x24\x06\xc0\x65\xc3\x42\xae\x16\xc2\xa9\x81\x62\x44\x58\x64\xd5\xb0\x5f\xee\x79\x1e\x70\xc6\x51\xac\xec\x8b\xfe\xf5\xa7\xd3\x07\xf6\xc4\x3a\x77\xe4\x05\xce\x33\xb2\xe9\x56\x8d\xc9\x55\x5c\xa5\xf1\xca\x72\x15\x4a\xd4\xb2\x2c\xb8\xb8\x6b\xcb\xd2\x4d\xa5\xc1\x70\xdb\x28\x42\xdc\xc5\xb8\xd7\x51\xd7\xa3\x45\x87\x1f\xed\x01\x4b\xf7\xc6\x6b\x74\xb2\xd9\xfe\x76\x59\x31\xa0\x1d\x9e\x04\xda\x50\xb5\xae\x89\xe3\x20\x6c\xb6\xfe\x92\x76\x82\xab\x4c\xf1\x78\xe2\x7f\x75\x73\x7e\x73\xd5\xa3\xfc\x82\xe0\x6f\x3d\xd7\xd4\x03\x02\xe7\xf7\x15\x39\x9f\xc2\x6a\x61\x13\x3e\x83\x4c\xce\x7f\x1c\x52\x41\x46\xa4\x68\x86\xff\x8e\x21\xa5\xd7\xb2\xd6\x83\x25\x2c\x63\x49\x4f\x36\xa7\xd5\x59\xa3\xe7\x17\x5c\x65\x72\xc1\x12\xd5\xd3\xfb\x39\x36\x7a\x70\x35\x31\xb9\x43\x0b\x84\x45\xce\xff\x7a\x76\x4d\x68\x63\xce\x52\xdb\x8a\xd1\x7b\x91\x60\xba\x33\xbf\xc1\xa4\xbd\x3d\xcc\xdb\x42\x7a\xd4\x59\x3f\xbb\x0e\xff\x65\x5c\x87\x40\x41\xfe\x55\xdd\x85\x5c\x70\xcd\xa9\x96\x51\x9d\x9e\xfb\x76\x22\x2c\x66\x8c\x57\xea\xca\x81\x81\xb8\x17\x70\xfd\xf5\x20\x47\x21\x98\x37\x32\x81\x62\x06\xdb\x7e\x25\x8c\x9a\x44\x33\xb6\x12\x15\x7f\x42\x04\xbb\x0f\x03\x85\xb9\x71\x0f\xe3\x8f\x36\x07\xa2\x02\xaa\xfa\xa7\x57\xbd\x56\x31\xe1\x66\x76\xa4\xdf\xd0\xce\x19\xc7\xda\x06\x63\x7b\xb3\x22\xf2\x1f\xd3\xe8\x9c\x35\x16\xe3\x7a\xff\x6f\x43\x0b\xdc\xc7\x77\xfb\xb4\x6c\xf6\xcf\x23\x69\x7a\x0e\x47\xdc\x39\xbc\x73\xd6\x1e\xa3\x4c\x80\x9c\x01\x4f\x84\xa5\xce\x9a\x0a\x65\x0e\xaf\xef\x79\x3a\xb4\x8e\xe5\x43\x72\xa4\xb3\x2a\xb2\x6d\xd4\x23\xe4\x50\xe1\x32\xed\x59\xbc\xf1\xb9\x53\x71\xf3\xd9\xbb\x97\x15\x70\x3c\xcd\x48\xd7\x5b\x00\x8a\x1e\xe4\x0d\x57\xda\x75\xa7\x82\x1f\x22\x4a\x4d\x60\xb1\x77\x90\x1f\xaf\x8d\x8a\xcd\xab\xff\xa4\x79\x5e\xbf\x42\x1e\x6c\x0b\x76\xc3\x7f\xab\xc8\xaa\xc1\x10\x1b\xeb\xe2\x07\x8e\xf4\xb2\xe2\x19\xa8\xfc\xb7\xe7\xd7\x04\xfb\x12\xfe\xe1\x77\x2f\x40\x9e\xfc\xb7\xdf\xfe\xee\x45\x24\x0a\x7c\x8e\x74\xa6\x9d\xac\x60\x49\x51\xe2\x31\x2e\x91\x90\x17\x77\x6f\x62\xd0\x6e\x71\xe5\x20\x98\x61\x44\x39\x50\x59\xc4\x4b\x4b\xbc\xcd\x21\x7b\xde\x12\x5c\xec\x0e\xe2\xdd\x73\x0c\xf4\xd6\xf1\xe5\xc7\x40\x13\x9f\x2e\x89\xf4\xeb\xa1\xf4\x0f\x49\xdf\xb5\x23\x7d\x96\xb4\x85\xd1\x2e\x9a\xf4\xf5\x48\x5b\x10\xee\xbe\x48\x5f\x60\x17\x43\x18\xdb\xc7\x54\xa4\x26\x46\xbb\xef\xf8\xa8\x21\x27\xeb\xe2\xdd\xcd\x7f\xbe\x39\xfb\xfa\xf2\x0d\xcc\x0f\x23\x79\x07\xe7\x67\xd0\xd3\x8a\xca\xbb\xc4\xa0\xc6\xa3\x7b\xd8\x0e\x10\xda\xa2\x14\xaf\xe5\xbb\xd7\x37\x2b\x86\x15\xf3\x8b\x73\x55\xf6\xdd\x91\xc3\xf4\x74\x8b\xab\xf2\xa1\x3a\x8e\x98\x46\xec\xc8\xd3\x18\x53\x47\x10\xf1\xbf\x97\xe4\xc9\x1d\xed\xad\x9d\x6a\xbd\x3d\x85\xd7\x9c\x19\xce\x2d\x1c\x69\xf6\xb8\xe7\x41\x3e\xb3\xe3\xcd\xec\x04\xee\x4e\x8c\x7f\xec\x49\x5d\x6e\x8f\xb2\xcb\x71\xa2\x4e\x9d\x9a\xa9\x7b\x78\x03\xef\x38\x67\xaf\x21\x01\x18\xe1\x58\x1b\xee\x61\xf8\x06\x53\x2a\xa6\xba\xcd\x0a\x76\x7e\x29\xd8\x57\x6d\x6a\x9e\x14\x4f\x35\x37\xf6\x5e\xea\x36\xc2\xed\xd0\xd4\x61\xaf\x51\x3f\x23\x71\x5b\x43\x37\x17\x2b\x44\xad\x49\x40\x55\x34\x0b\xc8\xc2\xfb\xab\xe8\xd4\xfe\x84\xbf\x40\x09\x9d\xa7\x23\xca\xf0\xb9\x3d\xa5\x4d\x78\x58\x69\x97\xe1\xdc\xbd\xb6\x9a\xba\xbe\xe5\xbc\x62\x14\x9d\xf5\xf3\x24\x54\xf9\x46\xa8\x8d\xf2\x15\x8b\xe2\x72\xdc\x3f\xef\x81\x93\x47\xa7\xfa\xdf\x25\x26\x20\x07\xb7\xeb\xc2\x65\xbf\xef\x4f\xad\xac\xe6\x52\x4b\xb1\x63\x22\xd6\xf5\x86\x97\xfb\xc1\x0e\xf8\xc4\xb9\xef\x05\x36\x2c\x60\xb4\x3d\xdf\x21\x8a\xdc\xbb\xbd\x8c\xb8\xeb\x78\x9e\x14\xce\x01\xa6\xc2\x8e\x73\x6b\xdf\x7d\x32\x59\x2c\xbf\xba\xd8\xc3\x8d\xff\xf9\x94\x74\xd8\x77\x7d\xa9\x7d\x5d\x77\x73\x90\x49\xfb\x7f\x75\x61\xe5\x5c\x97\x57\xa9\x2c\xea\x93\x16\xf7\x3b\xf8\x1d\x5c\x54\x44\x4e\x55\x9c\xcc\x20\x6b\x7d\x2f\xeb\xd4\xe2\x32\xd7\xbd\xd7\x56\xe2\x97\xec\xdf\x62\xc2\x9b\xa3\x6e\xf0\x53\xdf\x52\x9c\xf7\x67\xbb\xa9\x37\x10\x1c\xb1\xd2\xf3\x6a\xba\x76\x7f\x83\x28\x82\xfa\xee\xa6\xeb\x3d\x70\x7d\x83\x50\x07\xaf\x37\x5e\xdf\x8d\xd7\x36\x52\x73\xf1\xd7\xfa\x51\xae\xed\x4e\x5c\x3a\x50\x74\x24\x3e\xaf\x67\xa7\xa2\x23\x7b\x53\x98\x1c\x56\x27\xad\xfd\xa3\x7d\xc9\x1a\x93\xcc\x79\xb6\x04\x8c\x7a\x32\x10\x5c\x7a\x54\xa6\x43\x1c\xc1\xaa\x25\x36\xfc\x8e\xa6\x55\x57\x9a\x95\x0a\x3b\x0d\x15\x85\xd9\x5f\x29\xba\xfd\x8c\x6c\xc9\x8f\x13\x82\x2d\x76\x4a\x5a\x05\x0a\x15\x1b\x52\x95\xcb\x7b\x71\x4f\xeb\x9c\x9c\x5d\x0f\xf9\xd1\xf6\x5d\x1c\x01\x31\x31\xa6\x4e\x6c\xbf\xd3\xbb\xcc\x19\x99\x70\xad\xda\x7e\xc2\x4c\x77\xad\x01\x86\xe4\x5a\x3f\x6b\xf0\x28\x81\x8c\x18\x92\x61\x67\xd3\x91\x20\x04\x91\x99\xa6\x05\x96\x55\x26\x13\xa6\xef\x19\x13\xe4\xc5\x8b\x17\x2f\x22\x2c\xb8\x39\x79\xf1\xfb\xdf\xff\x1e\xba\xc9\x92\x9c\x65\xbc\x5c\x07\x04\x4f\xfd\xaf\x97\x2f\xc7\xe4\x3f\xce\xde\x86\xd2\x36\xb0\xdb\x75\xa5\x15\x96\x79\xc3\x99\xc1\xd9\x75\x81\xab\x13\xf2\xef\x37\xdf\xbe\x73\x9c\x21\x6c\x0d\xe9\xbf\x0d\x68\x55\xba\xed\x1d\x93\x8b\x36\xb0\xb2\x63\x5c\x0d\x02\x85\x68\x41\x5a\x33\x88\xd3\xa4\xd3\x29\x20\x38\x92\x65\xae\x1c\x69\x70\x95\x74\xf8\x6c\x1e\x26\xd3\xd8\x3f\xd4\xa0\x74\x01\xd1\xa4\xdc\x6c\x01\x18\xc0\x5d\xf1\x28\x0c\xb8\x85\x6f\x45\xd7\xd4\x84\xa5\x9e\x90\x82\xdf\x31\x32\x55\xd0\x39\xb4\x2d\xa6\x5d\x33\x65\x74\x0f\xdb\xb9\x3a\xce\xd1\xe8\xb7\xce\x2c\xf2\xf3\x78\x6e\x23\x7b\x54\xf6\x2e\x54\xc1\x15\xb6\x9a\xb0\x59\x02\x48\x93\xcc\xb6\x3e\xb5\x27\xb4\x2f\x95\xf9\x79\xe0\xe9\xda\xa2\x4b\x9e\x64\x12\x5a\xc8\xa8\x12\xc8\x1d\x74\x69\xa5\x04\x17\x18\xb5\xac\x22\xae\x49\x52\x0d\xf3\xb4\x5e\x2d\x48\xa7\xdf\xd2\xc8\x7e\xc2\x7d\x97\x53\xa7\xac\x15\x9d\xc8\x46\xbb\x90\x12\x84\x98\xd2\x6f\x5a\x4b\xb7\xb1\x51\x2f\x24\x17\x75\x4f\x6f\x60\x93\xd8\xef\xa0\xcf\x24\x7b\x02\xd7\x09\x61\x34\x9b\x93\x3b\xb6\x1c\x01\x9d\x8b\x86\x89\x2d\x07\x9c\x29\xe8\x82\x6a\x6a\xab\xf7\xf7\x3d\xab\x69\x8d\x67\xcf\xfd\xf1\xb8\xfc\xc7\x16\xa3\x7d\xf6\x6a\x64\x2e\x65\x3b\xa8\xb2\x32\xb1\xed\x34\x20\x3a\xa6\x30\xd7\x50\xc9\x36\xfe\x4e\x80\x6a\x01\xd8\x26\x7f\x57\x6b\x79\x96\x86\x72\xb0\xdc\x7c\x20\xa5\xcf\xc0\xc0\xba\xdb\x30\x2e\xc3\x44\x92\x7a\x2c\xa0\x93\xb0\x33\x23\xfc\x0e\x54\x46\x85\x88\x3a\xc5\x44\x5c\xc4\x7b\x07\xa6\x6b\x7e\xd4\x09\x2f\x9b\xf3\x6c\xee\xda\x64\x5b\xa8\x29\x3b\x8a\xb8\xe4\x91\xa0\x97\xaf\xaa\x98\x6e\xaa\xb8\x50\xb2\x76\x40\x8c\xa0\x59\x39\x53\x8a\x70\xf0\x3d\x95\xb4\xbe\x63\xae\xb0\x22\x2d\xc6\xe4\xda\x6c\x66\x02\x4c\x57\x5f\x16\xbb\x12\x2d\x30\xd8\xda\xd0\xdf\x4e\xf2\x70\x62\xb7\xf2\xc3\xf1\xf8\x10\x25\x83\x0d\x49\xc5\xd1\x70\x76\x69\xa0\x92\xdc\x38\xa5\x2f\x6d\xd2\x4a\x61\xcb\x18\xa3\xcf\x18\x74\x00\x27\x40\x30\x2f\x66\x75\x58\xf9\x89\x46\x1b\x8b\xdb\xb1\x63\x07\x8d\x5d\x5a\x9a\xa5\x36\x34\x0b\x3a\x64\x57\xc7\xae\x8d\xcc\x76\x68\x63\xd6\x0f\x72\xb4\x74\xb0\xe5\x73\xa9\xdd\x7b\x76\x6e\x5a\x55\x26\x34\xc2\xd8\x38\xf7\x4e\xa5\xcc\xb2\xa7\xfb\x24\x02\x25\x5b\x74\x25\x10\xcb\x0d\xef\x40\xe5\x27\x19\xea\xb0\xb2\x64\x68\x47\x32\xc8\xa0\xf2\x94\x0c\xb1\xa7\x6c\x6d\x51\xa6\x92\x81\x0e\x2a\x5f\xee\xaf\xc9\x50\x37\x2b\x63\x57\x53\xa0\xbe\x2d\x07\x4e\x3f\xfd\x96\xd3\x74\x74\x6f\xcf\x8e\x0d\x46\xa5\xb7\xb4\x6a\xb5\xb8\xed\x5a\x5a\x32\xd0\x2d\x5a\x5d\x47\x6b\x4b\x06\x19\xa1\xe5\xa5\x4f\x13\x74\x8a\xbe\xd6\x97\xd2\xa9\x98\x24\xaa\x81\xab\x23\x5e\x2d\x5c\x1d\x31\xc1\x2d\xab\x63\x8d\x9e\x7a\xe9\xa0\x6a\x13\x0d\x93\xf7\x10\x8e\x54\x4b\xe8\xc0\xa5\x3d\x91\x1e\x93\xb7\x56\xda\xd8\xe1\x58\xa8\xd1\x86\x94\x2c\x1a\xed\x53\xde\xfb\xa2\xcb\x4e\x37\x07\x16\xe9\xfa\x81\x61\x29\x14\x07\x16\xc4\x99\x64\xa0\xbe\x92\x88\x95\x2d\xd2\x24\x21\x3b\xb1\x74\xa6\x14\x1b\x50\x8a\x23\x2d\xac\x34\x61\xf6\x9f\x21\x00\x15\x47\x7c\x18\x6a\x02\x50\x08\x58\x8d\x0e\x46\xc5\xb1\xc3\xd9\x39\x89\x7e\xc7\xf3\xbb\xc1\xda\x76\x3e\xb3\xad\xa7\x89\x24\xac\x56\xd6\xc4\x90\x3b\x50\xb2\x9c\xaa\x90\xda\x3c\x3e\xde\xd4\x6f\x17\x62\x6d\xd4\x67\xd7\x57\x7b\xb3\x94\x74\x60\x46\xce\x3b\xa7\x9a\xfe\xab\xd9\x4a\xc0\xa1\xe0\xbb\x74\x9b\xeb\x7d\xd1\xee\x4b\x64\x7f\x81\x76\x18\x7a\xfe\x05\xab\x73\x6b\x4b\x7b\x6d\xf8\x4f\x64\x28\xd8\xda\x54\x7a\x65\xe5\xad\xcf\xa1\x15\x54\xda\x52\xf4\x49\x50\x5d\x80\x11\x50\xa4\x2f\x55\x4d\x7c\x22\xb5\x0f\xf6\x20\x22\x03\x64\x75\xac\x86\xa3\xda\x25\x92\x1b\xe8\x3d\x8d\xb6\xb2\xb4\xdd\xc5\x21\x5d\x10\x7e\xfe\x0a\x9b\x65\x52\x21\xa4\xc6\xce\xcd\x27\xd8\x1e\x3b\xb9\x8b\x3a\xb2\x64\x10\x49\x3b\x81\x66\x75\xc7\xa5\xbd\xa3\x50\xb9\x43\x1b\xf4\x5d\x1b\xa1\x1b\x94\x80\x1d\xbd\x4e\xb5\x8b\x3c\xa4\xb7\x39\xe9\x70\xeb\x5d\x3a\xe3\xf6\x9d\xc3\x08\xc7\x1d\xb1\xca\xe6\xac\xdc\xa5\x9f\x37\x5e\xe0\xd7\x6e\x33\x0c\x65\xbd\xaf\xb9\xd6\x0c\x2b\xe3\xb2\xba\xdc\xa5\x33\xb2\x41\xbd\x13\xa7\xb6\x61\x3d\x89\xc5\xcb\x83\x5d\xda\x82\x3f\xa0\xf9\x36\x69\xcf\xf8\xc1\xdb\xdd\x2d\x4e\x82\x46\xf5\x88\x20\x90\x4d\x03\xdb\xc9\xfb\x78\x4d\x6f\xa8\x3d\xbb\xbe\x22\x0b\x3c\xd3\x27\xdd\xa6\x9f\x8e\xb9\xe7\x64\xb7\x76\xe2\xcf\xe6\x9e\x67\x73\xcf\xb3\xb9\xe7\xe7\x65\xee\xe9\x88\x50\x8e\xa9\xed\x64\xed\xe9\x9b\x8c\xba\x15\xb9\xad\x1d\x68\x17\x6a\x64\x63\x7d\x3a\xf5\x6d\x0d\x89\x72\x16\xa0\xc4\xae\xea\xc4\x76\x8f\x71\x25\x63\x0f\x0f\xc7\xe3\xc3\x43\x67\x47\xb2\xca\x6e\xa3\xa7\xa3\x3f\x24\x83\x65\x22\x93\x39\x94\x60\x86\xf5\xd6\x4a\x83\x32\xd3\x1a\x54\x70\x6f\x92\xe1\xc2\x5e\x96\x6e\xed\x5d\xdf\x1a\xcc\x7d\x37\x14\xdd\x81\xf3\xb9\x28\xb4\xd7\x7b\x11\xda\x5b\x51\xdd\x17\x8f\x4a\x68\xd5\xed\x46\xaf\xee\x9f\x95\xd9\xdb\x68\xb9\x82\x97\x3c\x51\xe7\x23\x96\xb9\x18\xb2\xcf\x94\x56\xe4\x08\x81\x8c\xb3\xaa\x39\xb1\x00\xc7\x25\x2b\x65\xbd\x4c\xa7\x5a\x0e\xa8\x01\xd6\xfb\x8a\x85\x78\x9c\x3e\xd5\x9a\x91\xac\xa9\x6b\x26\x74\xb1\xfc\xa9\x69\x14\x51\x0d\x6d\xd6\xc7\x43\x14\x0a\x8f\x2b\x29\xfd\xd2\xbb\x63\x25\x2d\xc9\x17\x3b\x07\xb3\xab\xdf\x8b\x9d\x24\xdd\xa9\x6f\x5a\xa1\x4e\xbc\x29\x10\x7e\x65\x62\xb1\x13\xc4\x05\xad\x83\x49\x43\x9b\xc6\x83\x74\x88\x9c\x2f\xb8\x92\xc1\x64\xc7\x8d\xaf\xae\x5b\x33\xb9\x2d\x1e\x2f\x1b\x5d\x35\xe9\xc2\x2c\xf1\x7c\xd5\x91\x61\xd7\xcd\xc8\x53\x89\xf4\x6b\x4c\xda\xe8\x56\x54\xd5\x5e\x86\xeb\x4e\xad\x8f\x8a\x6a\xcd\x6a\xf1\x8a\xfc\xbf\xa3\xbf\xfd\xe6\x9f\xa3\xe3\x3f\x1f\x1d\x7d\xff\x62\xf4\xbf\x7f\xf8\xcd\xd1\xdf\xc6\xf0\x1f\xbf\x3e\xfe\xf3\xf1\x3f\xdd\x3f\x7e\x73\x7c\x7c\x74\xf4\xfd\x37\x6f\xff\x72\x7b\x7d\xf9\x03\x3f\xfe\xe7\xf7\xa2\x29\xef\xf0\x5f\xff\x3c\xfa\x9e\x5d\xfe\x10\x09\xe4\xf8\xf8\xcf\xbf\xda\x61\xb2\x54\x2c\xbf\x4d\x26\xf8\x04\x8b\xd5\x3d\x40\x24\xea\x42\xd8\x11\x1d\x09\xf9\x34\x6a\x9d\x10\x23\x2e\xf4\x48\xd6\x23\x04\xf6\x8a\xe8\x3a\x29\x5e\x0c\x87\x43\x9d\x87\xd3\x8f\x56\xec\xda\x91\x16\xe2\x00\x45\xd0\xb0\xd3\x27\xb8\xec\x18\x81\xbe\x37\x1b\xbd\x6d\x8a\xf9\x1c\xca\xf8\x05\x86\x32\xda\x2a\x3b\xcf\x71\x8c\x3f\xdb\x38\xc6\x1b\xdb\x6d\x76\x63\x10\x23\x86\x26\x26\x00\x8d\x08\x62\x4c\x35\x59\x45\x04\x31\x82\xe3\x3d\xe9\x22\x3d\x07\x31\x3e\x07\x31\x3e\x07\x31\xa6\xcd\xfd\x39\x88\xf1\xd9\xaa\xfd\x6c\xd5\x7e\xb6\x6a\xaf\x8d\xe7\x20\xc6\x8d\xe3\x39\x88\x71\x68\x3c\x07\x31\x3e\x07\x31\x76\x82\x18\xad\x22\x9a\xa4\x6c\xd8\x08\xc6\x27\x0b\x60\x54\x06\x0d\x32\x76\x96\x65\xb2\x11\xfa\x56\xde\xb1\xc8\x98\x95\x28\x23\xc9\x1a\xec\xc8\x75\x3c\x49\x40\x63\x9a\x10\x9f\x20\x8e\xa7\x0b\xe2\xb4\xc9\x39\x13\x29\xa6\xb9\xde\xf6\x9f\xd9\xd7\x9d\x45\xc1\xb0\x3c\x91\xb3\xdc\xc3\x4d\x40\x40\x4b\x82\xb4\x39\xad\x31\x39\x23\x35\xcb\x78\xc5\x0d\x61\x86\xb2\x65\xf0\x7b\xaa\xba\xeb\x7b\x13\x73\xad\x58\x31\xb5\x7d\x5b\x45\x5b\xe7\xa2\x6e\x65\xaf\x74\x6d\xdf\x2d\xb2\x37\x75\x94\x43\xa4\x6b\xd7\x99\x00\x55\xcd\x65\x53\xe4\xa4\x66\xff\x70\xa2\x91\xdd\x8b\xdb\xee\xb7\xf2\xd8\xca\x8e\xed\xb0\x46\x98\xce\xa2\xed\x84\x69\xc5\x63\x6b\x70\x7a\x58\xe9\x04\x8e\x7d\xaa\x78\x0d\x57\xf4\x86\x65\x52\xe4\xbb\x9a\xfe\x2e\x57\xe1\x38\xac\xb3\x5e\xc1\xa4\x23\xcc\x1b\x04\x05\x89\xfe\xb4\xe0\x39\xd7\x4b\x1f\xeb\x86\xe4\xc3\x28\x14\xc1\x6e\xbb\xfd\xe1\x90\x57\xb5\xc7\x47\x68\x55\xd5\x92\x66\x73\xa6\x3a\x3b\x91\xc2\x87\x40\x82\xc2\x92\x49\xbe\x26\x41\xd1\xcc\xb8\x40\x29\x1f\xa0\x1b\x91\x2d\xa2\x48\x4d\x3b\x6a\xa9\x5d\x70\xee\xca\x72\xbb\x58\x67\x3f\x9b\x6a\x04\x44\x53\x90\xae\x97\x50\x12\x50\x76\x3f\x86\x7b\x12\x51\xd8\xab\xbf\x7e\xfb\x9a\x22\xb2\xc8\x5d\x9d\xe7\x3f\xbc\x30\x4a\x6f\x66\x29\x44\x9a\xe3\x1a\xea\xfc\x6a\x49\x0a\x23\xea\xca\xda\x55\x93\xde\xf0\x99\x04\xa0\xbf\xfd\x8a\xcc\x65\x53\xab\x71\xb7\xa8\xd0\x4b\xf8\x0d\x8d\x6d\xc8\x5a\x53\x0c\x95\x9a\x14\x8c\x2a\x4d\x5e\xbe\x20\x25\x17\x8d\x91\xa8\x12\xaf\x6a\xaa\x16\xd2\xd1\x3f\x7e\xf7\x55\xe4\x5b\x69\x9a\xc7\x7a\xdc\xa3\xbd\xc7\x15\x76\x4b\xb4\x0a\x48\x52\xf0\x0b\xb4\x73\x01\xec\xc5\x1e\xa8\xfd\x28\x1a\xc7\xce\x13\x95\x19\x8b\x0d\x42\xcb\x3d\xd3\xc7\x1f\x1b\x39\x59\xea\xf8\x82\x6c\xff\x17\x9f\xef\x57\x62\x73\x3f\xae\x55\xbe\x1e\x9c\xeb\x7a\x93\xde\xb6\xf0\xf5\xc0\x8b\x7b\xee\x08\x3e\xe3\x4a\x0f\x36\x9c\x1e\x85\x5d\x25\xb1\xc2\xce\xac\x96\x4d\xb0\x9a\x48\x6f\xbb\xc1\x9e\xe0\xf4\x57\x4b\x71\x69\x96\x31\x05\x17\xda\x95\xe1\x8c\xe8\xdd\x21\x24\x7e\x3d\xf0\xe0\x67\x6c\x78\xe1\x90\x28\xd2\x31\xf5\x98\x05\xa8\xa3\x36\x29\x46\xbf\x70\xe8\x95\xb8\x4b\xf8\x52\xff\x8e\x29\x2e\x66\xd0\xa2\x95\x94\x4d\xa1\x79\x15\x91\xcb\xe3\x76\xd4\x03\xb4\xec\xb5\xeb\x6c\xa2\x1d\xef\x03\x0d\x6f\x91\xb9\xd4\xd8\xf4\x00\x9c\x96\x47\x6e\x2e\x84\x09\x0d\xc5\xa8\x20\x3b\x82\x55\xb4\xa6\xee\x58\x82\x30\x33\x59\x96\x54\x1d\x5b\xbf\x17\x85\xc8\x32\xa4\xc2\x86\xa1\xd6\xb4\xf0\xdb\xd8\x8d\xb3\xd9\x17\x22\x6b\x26\xa8\x08\x3a\xc5\xfb\xc6\x29\x78\x85\xc8\x7b\xe1\xda\x77\x61\xc7\xf9\x44\x0c\xb6\xa2\xfb\xd7\x34\xbb\x63\x22\x27\x1f\x94\xc3\xe3\x7c\x29\x68\x69\xdb\x41\x54\xb5\xc4\xce\xec\x2c\x77\xf0\x83\x80\x7d\x24\x12\x1a\xb5\xb1\xb2\x97\x2b\xbe\x88\xf2\xda\xbe\x76\xaf\x51\x89\xb5\xd1\x3f\x28\x23\xcc\x0c\xd3\x33\x15\xc3\x70\x15\xab\xf9\x22\x63\x4e\x52\x34\x13\xd9\xd7\xa2\x16\xc1\x1a\xa5\x6b\xcb\xb2\xf5\x49\x79\xe7\x36\x01\x7b\xf3\xce\x7b\xe8\x0e\x41\x0b\x43\xa2\xc2\xb2\xb1\x6b\x45\xd6\x47\x28\x73\x82\x62\x5f\xad\xbf\xea\x49\x7c\x61\xc3\xc3\xf7\x5f\x5f\xf4\x89\xd1\x7b\x9a\x4b\x45\xbe\x2e\x64\x76\x47\x2e\x18\x88\xec\x65\x50\x3f\x59\xed\x88\x11\xd5\xa0\x7f\x10\x62\xa8\x49\x68\x3d\xc9\x3f\x47\x8b\xd0\x92\xce\x86\x2e\xe9\x88\x94\x52\x70\x2d\xeb\x21\x1a\xf6\x88\x85\x5f\x9f\x1b\x52\x7e\x99\x0d\x29\xeb\x49\xd8\x6a\xf0\x53\x6d\x47\x69\xae\x44\x62\xe7\xe6\x39\x23\x35\x90\x19\x78\xd9\xf5\x20\x8a\xef\x10\xdc\xbb\xfc\xbf\x9c\xcb\xfb\x91\x96\xa3\x46\xb1\x11\x0f\xc6\xda\x45\xaf\xeb\x8e\x2d\x21\x18\x31\x69\x65\xdf\xe0\x4b\x3d\x55\x53\x4b\xb0\x78\xc3\xef\x46\xc8\x79\xff\xf5\x85\xe1\x94\xf1\x95\xf8\xb9\x22\xa7\x4c\x67\xa7\x19\xab\xe6\xa7\x76\x5a\x5f\xdc\x76\x39\xba\x97\xb6\x5f\x67\x24\x93\x45\x61\xeb\x4d\xca\x29\x39\x67\xd5\xdc\x83\x4a\x72\x0f\x3d\xfa\x1e\x7c\x8e\xd6\x83\x95\x94\x69\xed\xd0\x3a\x57\xcb\xbc\x6b\x6f\x56\x07\x91\xea\x89\x25\x66\x11\x22\xec\x97\x82\x5a\x8f\xd0\x0d\x29\xba\xde\xf6\xb6\x92\xda\x1b\x3a\x30\x7e\x51\xd8\xfa\x78\x9d\x1e\x0f\x6f\xdc\x6b\x10\xc7\xd8\x71\xeb\x26\x35\x6e\x74\x9f\xef\x91\x44\x72\x35\x45\xad\x28\x67\x39\x91\x0b\x56\xd7\x3c\x67\xca\x91\xe2\x24\x8a\x29\x78\xf1\xb4\x34\xf2\xb9\x07\xe5\xd6\xf1\xd3\xe8\x41\x99\xac\xef\x76\x88\xad\x79\x77\x9d\xd8\xd2\xbc\xe4\x11\x69\xf0\x5f\x10\x27\x57\x19\x2d\xd8\xd5\xb7\xd1\xea\xe3\x0d\x3e\xdf\xd7\x20\xdd\x8f\x9d\x56\x3b\x0f\x68\xe3\xf1\x8d\xc7\x53\x22\x64\x3e\xec\x99\xd8\xab\xae\x37\xa3\x9a\xdd\x0f\xb2\xfc\x51\x4b\x42\x87\x9f\x0a\x35\xc4\x79\x6e\xda\xb3\xaa\xc0\x75\x6e\x11\xf6\x03\xd9\x97\x30\x61\x4f\x35\xcd\x28\xe8\x96\xd8\xf6\xf7\xc3\x00\x18\x8b\xe8\x67\xd7\x57\xe4\x2f\x08\x77\x7f\xdd\x81\x6a\xa9\x51\x2e\xbe\x90\x25\xe5\x89\xcd\xe5\x3b\xad\xd8\xba\x13\xbd\xf6\x40\x09\x42\x0d\x1e\x4b\xa7\x63\xfe\x94\xcf\x1a\xa3\x47\x5b\xdd\xf6\xb9\xa1\x4a\x60\xe9\x8f\x27\x82\xb5\x12\x58\xc7\x06\xe9\x72\x60\xbc\x54\x15\x5c\xba\xc3\x0a\x60\x5e\x3e\x9c\x84\x28\x26\x14\x07\xdf\x68\x27\xec\x09\x44\x33\x3d\x8f\xf0\x46\xf9\xe4\x16\x14\xe3\x4e\xc8\x1b\x39\xe3\xc2\x51\x07\x69\xc3\x09\xa6\x94\x17\x71\xdb\xf8\x2c\x57\x6d\x1d\x3f\x0d\xb9\x4a\xa9\xe2\x52\xd0\x49\x11\x8e\x44\xeb\x33\xae\x82\x42\x54\x07\x83\x77\x4f\x73\xae\xcc\xff\x93\x9b\x9b\x37\xe0\x55\x6a\x44\xac\x9e\x01\x7e\x17\x4b\x9e\x7d\x31\x27\x24\x1a\xfb\xbb\xc7\x48\x13\x93\xbb\xea\x5c\x89\xdc\x2c\x83\xa9\x5e\x60\xa5\x85\x86\xfd\x86\x62\x5d\x4e\x36\xae\x6b\xc2\xc8\xed\x9c\x67\x77\xd7\x1d\xe7\x92\xac\xcd\x6f\xa2\xf3\x93\x67\xb0\x31\xd7\x79\xf5\xdd\x7d\x11\x7e\xbb\xcc\xeb\x54\x23\xc7\x6d\x87\xa3\xdd\xd8\xad\x32\x40\x08\x55\x4a\x66\x3c\xde\x3b\x09\x26\xba\x96\x25\xe6\xc0\x12\xf7\xb7\x3c\x90\x82\x1e\xc4\xb7\x1d\x22\x58\x01\x8e\xaa\x0e\x1f\x8e\xf1\x41\xda\x5d\xda\xdb\x92\x10\x15\x93\xfb\xc4\xde\xf6\x3a\xc3\x3a\xd7\x20\x3a\xcc\xbc\x43\x2c\x42\x18\xe9\x8a\x32\x4e\xa6\xb5\x8d\xbf\x57\x8e\xbe\xdb\x21\x36\x7c\x73\x20\xc5\x7b\x2f\x9b\x14\x4e\xc3\xde\x64\x4b\x59\x89\x06\xc0\xdf\xac\x1b\x0d\x2e\x75\x25\xab\xa6\xa0\x01\xf7\x70\xb7\x29\xee\x43\xfd\x15\x38\x87\x3d\xb8\xd5\x1e\xbb\x2d\xd9\xd6\x04\xb7\x0d\x09\x6b\x41\x44\x68\x3b\x98\x45\x77\x28\x0b\xc2\x5c\xcd\x67\xdb\x43\x7e\x5a\x4c\x3e\xda\x6a\x7e\x59\x10\xe8\xc6\xfc\xb3\x6d\x1d\xca\x12\xa2\x6e\x5e\xfc\xee\xab\xaf\xb6\xf5\x34\xdb\xdc\xb3\x2c\xbc\xa5\xdb\x7b\x9a\x3d\x20\x91\x2c\x9c\x38\xb6\x9e\x08\x16\x45\xb1\x36\xf4\x34\x4b\x4c\xfc\x7a\x9c\xa6\x65\x51\xce\x8a\x84\xaa\x08\xae\xd6\x41\xd4\xa6\x0c\xd5\x42\xd8\x5a\xe1\x20\x82\xe5\xf5\x2a\x20\xc4\xd4\x35\x88\x70\xa0\x42\xdd\x83\xbd\x56\x33\x48\xa8\x61\xd0\xab\x4c\x10\x04\x3c\x54\xb9\x60\x6b\x3d\x82\x78\x95\x0e\x60\x45\x55\x21\x08\xc2\x8c\x6e\xa0\x14\x1d\xcf\x1c\x55\x71\xa0\x5f\x47\x20\x4e\x77\x88\xc9\xae\x7b\xdc\xa6\x7c\x03\x95\x04\x7c\x75\x80\x08\x95\x2d\xb6\x7e\x40\x52\xaa\x51\x7c\x9a\x51\x5c\x85\x80\xc8\x44\xa4\xb4\x24\xa4\xe8\x1a\x00\x7b\xc9\xfc\x4f\xcc\x5e\x89\xcf\xf2\x4f\x12\x7d\xa2\x20\x92\x40\x46\xff\x0e\x12\x0f\x8e\x54\xb9\x27\x12\xec\x8b\x24\xe9\x27\x12\xe8\x60\x0e\xfe\xaa\x0c\x14\xbb\xfe\xcd\x99\xf7\x5b\x32\xe9\x23\x81\xf6\xf2\xed\x03\x62\x4f\x24\xc8\xc1\x86\xae\xab\xc2\x4f\x24\xcc\x98\xb6\xae\x2d\xce\x46\x02\x8d\xcf\x90\x4f\xcf\x48\x49\xcd\x86\x8f\xcf\x44\x89\xca\x7c\x4f\x2c\xc3\xba\x3d\xdf\x7d\x3d\x7f\x3d\x12\xe4\xdb\x0d\xec\x72\x7b\xd6\x7a\xec\x89\xb5\xa5\x7a\x76\xca\x55\x8f\x26\xa3\xb1\xb9\xcd\xf1\x19\xcd\xbe\xd3\x4a\x70\xa2\x69\x89\xcc\xa9\x9e\x81\x64\x53\x4b\xcf\x4e\x6d\x2d\x09\xee\x3c\x31\x12\xd7\x77\x3b\x88\xd1\xde\x1a\xf5\x14\xb6\x04\x12\x6d\x5e\x41\xd0\x72\x90\xe7\xf7\x4f\x19\xdf\xf8\xf6\x66\xc5\x45\xed\x7f\x76\x9a\x82\xf5\x3e\x0f\xbb\xa8\x1f\xdd\x33\xfd\xec\x08\x4e\x8d\xe4\x8d\x49\xf2\xec\x46\xf2\x3e\x7b\x2d\x87\x97\xfe\x14\x5e\x4b\xd5\xab\x21\xeb\xec\x9d\x40\x6d\xa2\x1c\x97\x72\x62\x3b\xfc\x20\xd1\xf6\x77\xf9\xec\xfa\x8a\x64\x35\x83\x04\x74\x5a\xa8\x31\xd9\xa1\xf2\x91\xf3\x0f\x59\xa9\xcf\x49\x5c\x54\x6b\x56\x56\x3a\x16\x81\x9e\x9d\x96\x5b\xc7\x4f\xc3\x69\xb9\xa3\xa7\xe3\xa3\x7f\xcd\xd9\x8b\xe6\x4d\x49\xc5\xc8\xdc\x72\x70\x5f\x5a\x37\x48\x9c\xab\x63\x85\x49\x8d\x89\xcb\x45\x82\xdd\x06\xc3\x29\xa4\x44\x36\x82\xff\x18\xa1\x98\xf9\x3a\x82\x5e\x04\x78\x04\xc7\x10\xc0\xdd\x71\xcf\xb0\x09\xd3\x0a\x75\xc8\x64\x15\xbd\x63\x96\x99\xdb\x85\xfa\xfd\x73\x84\xa0\xd3\xe9\xa9\x6b\x05\x8b\x01\x8d\x22\xd4\x35\x24\x32\xb7\x50\xfa\xfa\x18\x2a\x64\xb4\x28\xe4\x7d\x84\x69\x7c\xce\x7a\x02\x84\xc1\x0b\xb3\x56\x5b\xcb\x60\xc2\x48\xc9\xeb\x5a\xd6\xd6\xa1\x15\x61\x56\x6d\xd1\x05\x82\x76\x8c\x5e\xc8\x6a\x54\x83\x6a\x1b\xc3\x71\xc3\x74\x67\xbb\x63\x04\x40\x2a\x30\x31\xcd\xfc\xb7\x0b\xc8\xc5\x2e\x7e\x96\x4e\x4e\xd8\x9c\x2e\xb8\x6c\x6a\x80\x1e\x03\xf2\xc0\xbe\x6a\x58\x37\x59\xca\xc6\x3b\x00\x1a\xc8\x51\xf1\xbb\xab\x92\x17\x3e\x26\xef\xda\x97\x41\x95\xcd\xa5\xb3\x5c\x8e\xd8\x27\xae\x74\xfa\x5e\xba\x23\x76\xed\x2e\xf6\x71\x63\x16\xaa\x32\x0c\xfc\x63\x30\x17\xb1\x7f\x4f\xba\x6f\xf5\xc5\xd9\xc5\x0d\xfc\xe9\x21\xc2\xac\xad\xc1\xa1\x50\x84\xb3\x49\x42\x0f\x17\x68\xe3\x42\x2d\x71\xde\x81\x2e\x66\xcf\xb2\xf1\x4f\x45\x36\xf6\x81\x1d\x05\xcf\x96\x57\x17\x69\x52\xa2\x0f\xe8\x30\x2f\x93\xaf\xa9\x62\x39\x79\x4b\x05\x9d\xa1\x21\xe2\xe8\xe6\xfa\xeb\xb7\xe1\x8e\x1c\x55\x2d\xc1\xa8\x72\x75\xb1\x21\x34\xc0\xb3\x56\xfc\xc8\xbb\x7d\x25\xde\xae\xad\x3d\x59\x7e\xd8\xf3\xea\xf7\x96\x52\x4c\x3c\x8f\x8f\x69\x43\xb7\x5e\x7a\x05\xc3\x34\x5c\x65\x28\xb5\x4a\xb0\x16\x65\x7e\xb7\xfb\x34\xb9\x50\x9a\x16\xc5\x75\x41\xc5\x59\x55\xd5\x72\xb1\xc9\x12\xd4\x2f\x28\x66\x1f\x73\x42\x1a\x46\x40\xba\x1f\x2b\xdc\x7c\x88\xbe\x12\xe4\xaa\x85\xbe\x69\x2b\xaf\xb4\x37\x01\x49\x01\xc2\xf6\xc1\x59\xa3\x65\x49\x35\xcf\x0e\x88\xac\xc9\xc1\x5b\x2a\x1a\x5a\x6c\x88\x60\x1e\x58\xd2\x66\x71\x7f\xe0\x85\x6d\xad\x0f\x82\xaf\x0c\xc8\x6c\x43\xef\x6a\x5a\x1b\x2a\x76\x7e\xf3\x31\xfa\x3d\xa5\xa9\x6e\x56\x68\xf7\x56\x2e\xb2\x99\x6f\x8c\x48\x41\x95\xfe\x50\xe5\x74\xd5\x19\xba\x9d\x39\x64\x54\xd3\x42\xce\xfe\xca\x68\xb1\x09\x73\x7b\x78\x71\xde\x7d\xd6\x19\x43\x11\x45\x6e\x9a\x89\x7f\xf0\x50\x11\xa3\x10\x6d\xaf\x07\x55\xb3\x82\x2d\xa8\xd0\x0e\xe0\x0d\xf6\x34\x39\xb4\x7b\x30\x36\x58\xc3\x5b\x67\x4d\xce\x34\xab\x4b\x2e\xfa\x5f\xb9\x81\x67\xcf\xa5\xc8\xb9\xde\x12\xbe\x02\xc6\x64\x84\xd1\xff\xd2\x36\x64\xdb\xec\xa0\xdc\xea\x92\xec\xd3\xa6\xce\xdc\xfa\x1b\x85\x8f\x4d\xac\xc4\x3e\xc7\x1f\xe5\x74\x8b\x4f\xb2\x37\xd3\xb5\xbd\x25\x77\x42\xde\x2b\xac\xb2\xb8\xe9\xbe\x05\xe4\x8e\x21\x79\x63\xe4\x70\x01\x3f\xbd\x39\x6b\x63\x64\xe7\xbf\xc9\x06\xb3\x1d\xfd\x70\x84\x24\x94\xd5\xcf\x6f\xa3\xa3\x9b\x70\xd2\xbf\x84\x85\x28\x7c\xb4\x04\x7a\x82\x7b\x0f\x6d\xa3\xf8\x11\x22\x5b\x8c\x8c\x15\xd7\xfd\xb5\x4f\x6f\xdb\xae\xa0\x6b\xe6\x88\xa0\x8c\x19\x60\x4d\x51\xcd\x51\xfb\x66\x91\x2b\x1b\x38\x5f\x5b\x65\x8b\x92\x8a\x33\x2c\xb0\x48\x85\xdd\x20\xe0\x2a\x8c\x0e\xcb\xd0\xf8\x82\xe1\x6a\x46\x15\x87\xf7\x4e\x6c\x6c\x12\x3a\x3b\x6c\xfc\x9e\x73\xab\x50\x2c\x02\x38\x08\xf3\xdf\x6f\xbe\x7d\x77\xfa\x17\x69\x83\x63\x6c\x01\x15\x43\x37\x40\x02\x38\x21\xaa\xc9\xe6\x84\x2a\xb3\x24\x83\xe8\x86\x4a\xb0\x71\x49\x05\x9f\x32\xa5\xc7\xbe\x93\x96\xfa\xfe\xb7\x3f\x0c\xb3\xfe\xd7\xb2\x26\x36\xcf\xec\xc4\x55\xa6\xb3\x6b\x6f\xb1\x8b\x2b\xdc\x20\x0f\x77\x10\xa4\xb7\x30\x54\x32\xb7\x1b\x71\x0f\x1b\xa0\xe9\x9d\xe1\x8f\xb8\x01\x0d\x03\x67\xe2\x2b\x72\x60\x44\xcf\xce\x94\xff\xdb\xb0\xbd\xff\x19\x2e\xce\x70\x74\x0f\x82\xc3\x81\x79\xf4\x00\x27\xea\x73\x1f\xba\xa1\xb3\x1e\x2a\xc8\x1e\x83\x20\x75\xcd\x67\x33\x06\xc2\xf3\x9c\x11\x28\xba\x70\x6c\xab\xf5\x09\xd9\x01\xe4\xa2\x87\xe2\x0c\x07\xab\x8b\xfb\xfe\xb7\x3f\x1c\x90\xa3\x16\x1a\xc8\xa2\x5c\xe4\xec\x13\xf9\x2d\xba\x68\xb8\x32\xfb\x76\x3c\x7c\x6a\x60\x63\x50\x4b\xa1\xe9\x27\x33\x97\x6c\x2e\x15\x13\x68\x06\xd2\x92\xcc\xe9\x82\x11\x25\x4b\x46\xee\x59\x51\x8c\xac\x53\x8a\x0c\xa7\xb1\x01\x1e\xbb\x23\x87\x62\x51\xa4\xa2\xb5\xee\x5d\x87\xb1\xb5\xdb\xc1\x2c\x0d\xea\xcd\x86\x95\x68\x1b\x32\x34\xe5\xc2\x7a\xe4\x6d\x5c\x81\xc1\x69\x28\x04\x82\x88\xa6\x25\xc9\xe6\x54\xcc\x98\x75\x52\x0d\x2b\x76\x8d\x6e\x6a\x36\xe8\x04\x8e\xa2\x18\x77\x5c\x24\x14\xc8\xf9\x86\x8b\xd5\x18\xb5\xcd\x36\xd4\x19\xd7\x2e\x5d\xd3\x26\x28\xe8\xe5\xa9\x39\xef\x9a\x4f\x1a\x2d\x6b\x75\x9a\xb3\x05\x2b\x4e\x15\x9f\x8d\x68\x9d\xcd\xb9\x66\x99\x59\xd0\x29\xad\xf8\x28\x93\xc2\xe0\x1d\x54\x35\x2b\xf3\x5f\x9a\x75\xa8\x91\x99\xe8\x60\xa7\xb8\xa8\xe5\x86\x4c\xc7\x9f\xd5\x64\xbc\x97\xd5\x05\x6d\x8e\xeb\x4b\x44\xfb\xdd\x13\xac\x13\x8c\x51\xa7\x0f\x5e\xa6\x6b\x44\x96\xca\x79\x0f\x6d\xbf\xbe\x6c\x15\x82\xb9\x7a\x58\x95\x0d\x6e\xa6\xa7\xf8\xa1\x5b\x5d\xd2\x1c\xd9\x05\x15\xcb\x47\xbf\x06\x66\xa3\xa1\x8d\x66\xb6\x1c\x01\x08\x59\x8c\xa8\xc8\xcd\x7f\x63\x66\x71\xb6\x7c\xf0\xce\x36\x3c\x81\x18\x7c\xb8\xba\x78\x9a\xcb\xd1\xf0\x07\xde\x7c\x2b\xc5\x46\x89\x98\x28\xc6\x43\x68\xa8\xae\x1b\xe6\x84\x81\xbe\xa0\xce\x95\x83\xf9\x7f\xb6\xcb\x62\xe0\xd3\xf4\x55\xa9\x87\x05\xd1\x21\x4f\x63\x47\xce\x8e\x5a\xc1\x9b\xf6\xf9\xae\x65\x14\xe2\x72\xa9\xd2\xb6\x10\xaf\xab\x5c\xd5\x5b\x18\x2e\x7e\xeb\x92\x90\x3d\x6d\x63\xf5\x11\x18\xe6\x62\x8b\xcc\xe4\x46\x1b\xea\x9f\x66\x5e\xc1\x0b\x29\xa7\xfe\x41\x54\x01\x0a\xae\x7c\x05\x5a\xa3\x06\x2a\x4d\xe8\x82\xf2\x02\xfc\x4c\x72\xa2\x58\xbd\xa0\xdb\x14\x47\x2c\x62\x4f\x57\xb5\x5a\xdb\xb3\x16\xc5\xcd\x47\xd7\x21\xdd\x7a\xd6\x4f\xac\xbf\x98\x8d\x1b\xdb\x5d\x20\xe6\x15\xad\xac\x65\xcb\x1a\x1e\xa8\x41\xa2\x02\xbf\xf1\x4f\x5b\x8a\xa0\x85\x54\x2a\x83\x9f\x7f\x65\xb4\xd6\x13\x46\xf5\x2d\xdf\xce\xab\xd7\x10\xbe\xf7\x96\x33\x65\xb5\xe8\x7e\xcf\xc8\x4c\x6a\x23\xc2\x35\x70\x33\xb6\xa2\x38\xc8\xe5\x58\xe6\xd2\x23\xe3\xe3\xe1\x7b\xbb\xea\xdb\x9a\x42\xa6\xb1\x14\x49\xcb\xee\xbf\xb6\xbe\x6e\x2b\xfd\x0f\xae\xc3\x08\xfd\x00\x05\x8a\xa8\x81\xe5\x0e\x4f\x16\x7d\x5e\x43\x19\x23\x7b\xdb\x82\x92\x29\x35\x50\x3a\xad\x1f\x00\x8e\xcf\xe2\xc5\x5f\x71\x29\x97\xee\x6f\x98\x4b\x3a\xc4\xeb\x72\xa6\x29\x2f\xac\x75\xc5\x6e\x99\xdf\xcd\x61\x6a\x3d\xb0\xe0\x9a\x51\xb5\x5d\x24\x59\xad\x12\xac\xa4\xc0\x65\x48\xc1\x46\xf7\xb2\xce\xc9\x39\x2d\x59\x71\x4e\x15\xb3\x90\xba\x45\x07\xf0\x14\x0f\xb7\xfb\x53\xf7\xb5\x88\x4d\xd6\xc9\x2d\x8b\x40\xc3\x9c\x43\x3c\x8b\x37\xad\xda\x89\x53\x3e\x71\xe6\xe0\xdb\xba\x19\xe8\x39\xf5\xda\x70\xcc\x13\xf2\x41\xdc\x09\x79\xbf\xfb\xec\xf5\x80\xc7\xab\x1f\x82\xba\xac\xfc\x95\x71\x05\x22\x7b\xe6\x37\xbf\x80\x1d\xe6\x62\xd9\xc7\x46\xa3\x70\x9f\x95\xf9\x07\xdd\x5c\xcc\x7f\xae\x99\x02\x8d\x42\x5c\xcb\x59\xcd\x94\xda\xbc\xf0\x4d\x25\xd3\xe3\x1c\x05\x7f\x61\xc2\xd6\x23\x08\x4c\xf5\x6a\xd3\x3b\x6e\xd6\x8e\x5f\xce\xda\xbf\x6c\xed\x65\x65\x3f\x5e\x15\x1b\x44\x9e\xa1\x88\xe5\xce\xa4\x37\x9a\x0c\xb7\xcd\x76\xb3\xa9\xb0\xc3\x5f\x3b\xcf\x6e\xda\x5a\x23\x2c\x0d\x59\xc0\xdd\xda\xcf\x6f\x3e\x6e\x3b\x84\x2d\x3c\x76\x98\x23\x86\xcc\x8b\x0f\x33\x2c\x06\x6e\x52\xc0\x98\xb8\xbb\x19\x71\x7b\x04\xcb\x2e\x06\x44\x67\x24\xdc\xc6\x7f\x1e\xcf\x74\xb8\x9b\xd1\x70\x38\xec\xe2\x71\xcc\x85\xbb\x19\x0a\x5b\x63\xe0\x36\xf2\x97\x66\x22\xdc\x68\x06\xdc\x36\xe3\x18\xe3\xe0\x66\x03\xe0\x16\x88\x61\xb3\xe0\x56\xd3\xdf\x76\x6c\xdd\x6a\x10\x0c\x18\xfd\xb6\x40\xdc\x66\x0a\x1c\x36\xf7\x05\xee\xf1\x76\x13\xdf\x4f\xc1\xb8\x17\x58\xdc\x76\x83\xde\x17\x68\xca\x8b\x58\xcb\x80\xf9\xee\x0b\x35\xdc\x05\x16\x15\x65\xac\x7b\x14\x33\xdd\x4f\xc6\x40\x17\xd8\xc1\xad\x46\xb9\x2f\xce\x1c\x17\x16\x37\x59\x1e\x16\x88\xaf\x3a\x8f\x76\x45\x62\x2b\x64\x41\x80\x97\x7d\xc2\x85\x93\x75\xc5\xb1\x5d\xa4\x60\x23\x88\x06\x66\x75\x68\xa7\x15\x2d\x47\x3a\x41\x78\x23\xf7\x74\x5a\x5d\x6f\xe2\xe4\xe2\xf2\xfa\xfd\xe5\xf9\xd9\xed\xe5\xc5\xaa\xf4\xba\xbe\xdf\x83\x52\xe5\x76\xbb\xcd\xa8\x23\x53\x6e\xf8\xa3\x21\xc4\x1b\x7e\x16\x9b\x22\x64\x47\xa4\x69\x36\xf8\x6f\x1f\x26\xd1\xee\xcc\xcb\x76\xe6\x13\xa1\xdb\x17\x77\xfd\xcc\xed\x03\xcc\xc0\x98\x49\x23\x3d\xcd\x65\x91\x2b\x1b\x8f\x4e\xae\x2e\x7c\x66\x2d\x17\x59\xd1\xe4\xdb\x4d\x13\x1f\x3e\x5c\x5d\xa8\x31\x21\x5f\xb3\x8c\x36\x0a\x6c\x57\xb9\x14\x87\x9a\x7c\xfb\xee\xcd\x7f\x40\x5e\x08\x3c\x61\x85\x44\x6e\x3b\x6e\x70\x3a\xd0\x4e\x04\x57\x07\x30\x51\xb0\x81\x59\x66\xb4\x32\xb4\x4c\x61\x0f\x49\x0d\x52\xca\x9c\x15\x95\xa1\x9b\x77\x8c\xf8\x0e\x07\xdb\xe6\x79\x75\xa1\xe0\x1d\x8c\xc0\xb7\xe1\xc5\x33\xa6\x31\xf7\x76\x7b\x84\xf0\xc0\x8e\x0f\xda\xba\x1f\x60\xe5\xee\xde\xb3\x0d\x73\xb2\x76\x8b\x7b\xaa\xac\x7d\x70\xc3\xcc\x07\xf1\x24\x64\xe5\xda\x66\x16\xda\x62\x10\x42\x22\x0e\xff\x5a\x33\x04\x98\x49\xb6\x36\x9e\x8d\xd4\x45\x4b\xc8\xd9\x8c\xb2\x60\x6f\x0b\x69\xdb\xd4\x2b\x6d\xcd\xf2\xc3\x56\xb7\xbe\xf7\x49\x5f\x71\x73\x68\xf3\xd7\x66\x01\xed\x31\xf3\x57\xe0\x7d\xc1\x1f\x30\x0e\xb4\xfb\x4b\x33\x71\xa2\x81\x27\x32\xd6\x66\x45\xfe\xfb\x7f\x7e\xf1\xff\x07\x00\x00\xff\xff\xa4\xcc\x5d\xeb\xff\xf9\x01\x00") func operatorsCoreosCom_subscriptionsYamlBytes() ([]byte, error) { return bindataRead( @@ -219,7 +219,7 @@ func operatorsCoreosCom_subscriptionsYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "operators.coreos.com_subscriptions.yaml", size: 130106, mode: os.FileMode(420), modTime: time.Unix(1607724221, 0)} + info := bindataFileInfo{name: "operators.coreos.com_subscriptions.yaml", size: 129535, mode: os.FileMode(436), modTime: time.Unix(1607975193, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/go.mod b/go.mod index d86d79e94..e1092ef34 100644 --- a/go.mod +++ b/go.mod @@ -3,17 +3,17 @@ module github.com/operator-framework/api go 1.15 require ( - github.com/blang/semver v3.5.0+incompatible + github.com/blang/semver/v4 v4.0.0 github.com/ghodss/yaml v1.0.0 github.com/go-bindata/go-bindata/v3 v3.1.3 github.com/mikefarah/yq/v2 v2.4.1 github.com/sirupsen/logrus v1.6.0 - github.com/spf13/cobra v1.0.0 - github.com/stretchr/testify v1.5.1 - k8s.io/api v0.19.3 - k8s.io/apiextensions-apiserver v0.19.3 - k8s.io/apimachinery v0.19.3 - k8s.io/client-go v0.19.3 + github.com/spf13/cobra v1.1.1 + github.com/stretchr/testify v1.6.1 + k8s.io/api v0.20.0 + k8s.io/apiextensions-apiserver v0.20.0 + k8s.io/apimachinery v0.20.0 + k8s.io/client-go v0.20.0 sigs.k8s.io/controller-runtime v0.7.0 sigs.k8s.io/controller-tools v0.4.1 ) diff --git a/go.sum b/go.sum index f25cedd9c..d8830a1c3 100644 --- a/go.sum +++ b/go.sum @@ -5,25 +5,46 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -45,7 +66,10 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZq github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf h1:eg0MeVzsP1G42dRafH3vf+al2vQIJU0YHX+1Tw87oco= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= @@ -56,8 +80,13 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/blang/semver v3.5.0+incompatible h1:CGxCgetQ64DKk7rdZ++Vfnb1+ogGNnB17OJKJXD2Cfs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -70,6 +99,7 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= @@ -111,6 +141,7 @@ github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= @@ -124,7 +155,9 @@ github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7a github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-bindata/go-bindata/v3 v3.1.3 h1:F0nVttLC3ws0ojc7p60veTurcOm//D4QBODNM7EGrCI= github.com/go-bindata/go-bindata/v3 v3.1.3/go.mod h1:1/zrpXsLD8YDIbhZRqXzm1Ghc7NhEvIN9+Z6R5/xH4I= +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= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -217,9 +250,13 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -228,6 +265,7 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 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= @@ -236,6 +274,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -244,6 +284,7 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= @@ -254,11 +295,15 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= @@ -268,8 +313,10 @@ github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3i github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -277,12 +324,29 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -303,6 +367,7 @@ github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= @@ -322,6 +387,7 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -335,6 +401,7 @@ github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -343,11 +410,18 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0j github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mikefarah/yaml/v2 v2.4.0 h1:eYqfooY0BnvKTJxr7+ABJs13n3dg9n347GScDaU2Lww= github.com/mikefarah/yaml/v2 v2.4.0/go.mod h1:ahVqZF4n1W4NqwvVnZzC4es67xsW9uR/RRf2RRxieJU= github.com/mikefarah/yq/v2 v2.4.1 h1:tajDonaFK6WqitSZExB6fKlWQy/yCkptqxh2AXEe3N4= github.com/mikefarah/yq/v2 v2.4.1/go.mod h1:i8SYf1XdgUvY2OFwSqGAtWOOgimD2McJ6iutoxRm4k0= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= @@ -381,6 +455,7 @@ github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs= github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= @@ -393,6 +468,7 @@ 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -415,11 +491,15 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -427,6 +507,8 @@ github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= @@ -438,6 +520,8 @@ github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4= +github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -447,6 +531,7 @@ 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= 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.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -460,6 +545,9 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -477,6 +565,7 @@ go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2 h1:jxcFYjlkl8xaERsgLo+RNquI0epW6zuy/ZRQs6jnrFA= @@ -484,6 +573,7 @@ go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qL go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -498,6 +588,7 @@ go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -513,11 +604,18 @@ golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -529,11 +627,15 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -542,7 +644,9 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -556,22 +660,31 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/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-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 h1:pE8b58s1HRDMi8RDc79m0HISf9D4TzseP40cEA6IGfs= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -581,9 +694,11 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -600,24 +715,34 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5 h1:LfCXLvNmTYH9kEmVgqbnsWfruoXZIrh4YBgqVHtDvw0= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -625,6 +750,8 @@ golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= @@ -643,6 +770,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -662,10 +790,24 @@ golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191030203535-5e247c9ad0a0 h1:s5lp4ug7qHzUccgyFdjsX7OZDzHXRaePrF3B3vmUiuM= golang.org/x/tools v0.0.0-20191030203535-5e247c9ad0a0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f h1:kDxGY2VmgABOe55qheT/TFqUMtcTHnomIPS1iv3G4Ms= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8= golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200616195046-dc31b401abb5 h1:UaoXseXAWUJUcuJ2E2oczJdLxAJXL0lOmVaBl7kuk+I= @@ -675,12 +817,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= @@ -701,9 +850,20 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -716,6 +876,8 @@ google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= +google.golang.org/grpc v1.27.1/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= @@ -726,6 +888,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= @@ -742,6 +906,7 @@ gopkg.in/imdario/mergo.v0 v0.3.7 h1:QDotlIZtaO/p+Um0ok18HRTpq5i5/SAk/qprsor+9c8= gopkg.in/imdario/mergo.v0 v0.3.7/go.mod h1:9qPP6AGrlC1G2PTNXko614FwGZvorN7MiBU0Eppok+U= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 h1:6D+BvnJ/j6e222UW8s2qTSe3wGBtvo0MbVQG/c5k8RE= @@ -762,6 +927,7 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 h1:B0J02caTR6tpSJozBJyiAzT6CtBzjclw4pgm9gg8Ys0= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= @@ -772,43 +938,45 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.18.2 h1:wG5g5ZmSVgm5B+eHMIbI9EGATS2L8Z72rda19RIEgY8= k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI= -k8s.io/api v0.19.3 h1:GN6ntFnv44Vptj/b+OnMW7FmzkpDoIDLZRvKX3XH9aU= -k8s.io/api v0.19.3/go.mod h1:VF+5FT1B74Pw3KxMdKyinLo+zynBaMBiAfGMuldcNDs= +k8s.io/api v0.20.0 h1:WwrYoZNM1W1aQEbyl8HNG+oWGzLpZQBlcerS9BQw9yI= +k8s.io/api v0.20.0/go.mod h1:HyLC5l5eoS/ygQYl1BXBgFzWNlkHiAuyNAbevIn+FKg= k8s.io/apiextensions-apiserver v0.18.2 h1:I4v3/jAuQC+89L3Z7dDgAiN4EOjN6sbm6iBqQwHTah8= k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= k8s.io/apiextensions-apiserver v0.19.2/go.mod h1:EYNjpqIAvNZe+svXVx9j4uBaVhTB4C94HkY3w058qcg= -k8s.io/apiextensions-apiserver v0.19.3 h1:WZxBypSHW4SdXHbdPTS/Jy7L2la6Niggs8BuU5o+avo= -k8s.io/apiextensions-apiserver v0.19.3/go.mod h1:igVEkrE9TzInc1tYE7qSqxaLg/rEAp6B5+k9Q7+IC8Q= +k8s.io/apiextensions-apiserver v0.20.0 h1:HmeP9mLET/HlIQ5gjP+1c20tgJrlshY5nUyIand3AVg= +k8s.io/apiextensions-apiserver v0.20.0/go.mod h1:ZH+C33L2Bh1LY1+HphoRmN1IQVLTShVcTojivK3N9xg= k8s.io/apimachinery v0.18.2 h1:44CmtbmkzVDAhCpRVSiP2R5PPrC2RtlIv/MoB8xpdRA= k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.19.3 h1:bpIQXlKjB4cB/oNpnNnV+BybGPR7iP5oYpsOTEJ4hgc= -k8s.io/apimachinery v0.19.3/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.20.0 h1:jjzbTJRXk0unNS71L7h3lxGDH/2HPxMPaQY+MjECKL8= +k8s.io/apimachinery v0.20.0/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apiserver v0.18.2 h1:fwKxdTWwwYhxvtjo0UUfX+/fsitsNtfErPNegH2x9ic= k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA= -k8s.io/apiserver v0.19.3 h1:H7KUbLD74rh8NOPMLBJPSEG3Djqcv6Zxn5Ud0AL5u/k= -k8s.io/apiserver v0.19.3/go.mod h1:bx6dMm+H6ifgKFpCQT/SAhPwhzoeIMlHIaibomUDec0= +k8s.io/apiserver v0.20.0 h1:0MwO4xCoqZwhoLbFyyBSJdu55CScp4V4sAgX6z4oPBY= +k8s.io/apiserver v0.20.0/go.mod h1:6gRIWiOkvGvQt12WTYmsiYoUyYW0FXSiMdNl4m+sxY8= k8s.io/client-go v0.18.2 h1:aLB0iaD4nmwh7arT2wIn+lMnAq7OswjaejkQ8p9bBYE= k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA= -k8s.io/client-go v0.19.3 h1:ctqR1nQ52NUs6LpI0w+a5U+xjYwflFwA13OJKcicMxg= -k8s.io/client-go v0.19.3/go.mod h1:+eEMktZM+MG0KO+PTkci8xnbCZHvj9TqR6Q1XDUIJOM= +k8s.io/client-go v0.20.0 h1:Xlax8PKbZsjX4gFvNtt4F5MoJ1V5prDvCuoq9B7iax0= +k8s.io/client-go v0.20.0/go.mod h1:4KWh/g+Ocd8KkCwKF8vUNnmqgv+EVnQDK4MBF4oB5tY= k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= -k8s.io/code-generator v0.19.3/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= +k8s.io/code-generator v0.20.0/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg= k8s.io/component-base v0.18.2 h1:SJweNZAGcUvsypLGNPNGeJ9UgPZQ6+bW+gEHe8uyh/Y= k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo= -k8s.io/component-base v0.19.3 h1:c+DzDNAQFlaoyX+yv8YuWi8xmlQvvY5DnJGbaz5U74o= -k8s.io/component-base v0.19.3/go.mod h1:WhLWSIefQn8W8jxSLl5WNiR6z8oyMe/8Zywg7alOkRc= +k8s.io/component-base v0.20.0 h1:BXGL8iitIQD+0NgW49UsM7MraNUUGDU3FBmrfUAtmVQ= +k8s.io/component-base v0.20.0/go.mod h1:wKPj+RHnAr8LW2EIBIK7AxOHPde4gme2lzXwVSoRXeA= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0 h1:0VPpR+sizsiivjIfIAQH/rl8tan6jvWkS7lU+0di3lE= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= @@ -817,21 +985,31 @@ k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c h1:/KUFqjjqAcY4Us6luF5RDNZ16KJtb49HfR3ZHB9qYXM= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 h1:d4vVOjXm687F1iLSP2q3lyPPuyvTUt3aVoBpi2DqRsU= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQWhovSofhqR73A6g= k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= 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= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7 h1:uuHDyjllyzRyCIvvn0OBjiRB0SgBZGqHNYAmjR7fO50= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9 h1:rusRLrDhjBp6aYtl9sGEvQJr6faoHoDLd0YcUBTZguI= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14 h1:TihvEz9MPj2u0KWds6E2OBUXfwaL4qRJ33c7HGiJpqk= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/controller-runtime v0.7.0 h1:bU20IBBEPccWz5+zXpLnpVsgBYxqclaHu1pVDl/gEt8= sigs.k8s.io/controller-runtime v0.7.0/go.mod h1:pJ3YBrJiAqMAZKi6UVGuE98ZrroV1p+pIhoHsMm9wdU= sigs.k8s.io/controller-tools v0.4.1 h1:VkuV0MxlRPmRu5iTgBZU4UxUX2LiR99n3sdQGRxZF4w= @@ -841,6 +1019,8 @@ sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJ sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= diff --git a/pkg/lib/version/version.go b/pkg/lib/version/version.go index 713c5779b..a0ffb9fcb 100644 --- a/pkg/lib/version/version.go +++ b/pkg/lib/version/version.go @@ -3,7 +3,7 @@ package version import ( "encoding/json" - "github.com/blang/semver" + semver "github.com/blang/semver/v4" ) // +k8s:openapi-gen=true diff --git a/pkg/lib/version/version_test.go b/pkg/lib/version/version_test.go index e6c14f7b4..8f7472a7e 100644 --- a/pkg/lib/version/version_test.go +++ b/pkg/lib/version/version_test.go @@ -4,7 +4,7 @@ import ( "encoding/json" "testing" - "github.com/blang/semver" + semver "github.com/blang/semver/v4" "github.com/stretchr/testify/require" ) diff --git a/pkg/validation/internal/crd.go b/pkg/validation/internal/crd.go index 220c0166c..8f0e4fd01 100644 --- a/pkg/validation/internal/crd.go +++ b/pkg/validation/internal/crd.go @@ -11,7 +11,6 @@ import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation" - "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -40,7 +39,7 @@ func validateV1Beta1CRD(crd *v1beta1.CustomResourceDefinition) (result errors.Ma internalCRD := &apiextensions.CustomResourceDefinition{} v1beta1.SetDefaults_CustomResourceDefinition(crd) v1beta1.SetDefaults_CustomResourceDefinitionSpec(&crd.Spec) - err := scheme.Converter().Convert(crd, internalCRD, conversion.SourceToDest, nil) + err := scheme.Converter().Convert(crd, internalCRD, nil) if err != nil { result.Add(errors.ErrInvalidParse("error converting crd", err)) return result @@ -55,7 +54,7 @@ func validateV1CRD(crd *v1.CustomResourceDefinition) (result errors.ManifestResu internalCRD := &apiextensions.CustomResourceDefinition{} v1.SetDefaults_CustomResourceDefinition(crd) v1.SetDefaults_CustomResourceDefinitionSpec(&crd.Spec) - err := scheme.Converter().Convert(crd, internalCRD, conversion.SourceToDest, nil) + err := scheme.Converter().Convert(crd, internalCRD, nil) if err != nil { result.Add(errors.ErrInvalidParse("error converting crd", err)) return result diff --git a/pkg/validation/internal/operatorhub.go b/pkg/validation/internal/operatorhub.go index 8558ce673..83c8fad8d 100644 --- a/pkg/validation/internal/operatorhub.go +++ b/pkg/validation/internal/operatorhub.go @@ -10,7 +10,7 @@ import ( "path/filepath" "strings" - "github.com/blang/semver" + semver "github.com/blang/semver/v4" "github.com/operator-framework/api/pkg/manifests" "github.com/operator-framework/api/pkg/operators/v1alpha1" "github.com/operator-framework/api/pkg/validation/errors" diff --git a/tools.go b/tools.go index 0fcf931eb..d45747d17 100644 --- a/tools.go +++ b/tools.go @@ -8,5 +8,5 @@ import ( // Manipulate YAML. _ "github.com/mikefarah/yq/v2" // Generate embedded files. - _ "github.com/go-bindata/go-bindata/v3" + _ "github.com/go-bindata/go-bindata/v3/go-bindata" ) diff --git a/vendor/github.com/blang/semver/.travis.yml b/vendor/github.com/blang/semver/.travis.yml new file mode 100644 index 000000000..102fb9a69 --- /dev/null +++ b/vendor/github.com/blang/semver/.travis.yml @@ -0,0 +1,21 @@ +language: go +matrix: + include: + - go: 1.4.3 + - go: 1.5.4 + - go: 1.6.3 + - go: 1.7 + - go: tip + allow_failures: + - go: tip +install: +- go get golang.org/x/tools/cmd/cover +- go get github.com/mattn/goveralls +script: +- echo "Test and track coverage" ; $HOME/gopath/bin/goveralls -package "." -service=travis-ci + -repotoken $COVERALLS_TOKEN +- echo "Build examples" ; cd examples && go build +- echo "Check if gofmt'd" ; diff -u <(echo -n) <(gofmt -d -s .) +env: + global: + secure: HroGEAUQpVq9zX1b1VIkraLiywhGbzvNnTZq2TMxgK7JHP8xqNplAeF1izrR2i4QLL9nsY+9WtYss4QuPvEtZcVHUobw6XnL6radF7jS1LgfYZ9Y7oF+zogZ2I5QUMRLGA7rcxQ05s7mKq3XZQfeqaNts4bms/eZRefWuaFZbkw= diff --git a/vendor/github.com/blang/semver/README.md b/vendor/github.com/blang/semver/README.md index 4399639e2..08b2e4a3d 100644 --- a/vendor/github.com/blang/semver/README.md +++ b/vendor/github.com/blang/semver/README.md @@ -1,4 +1,4 @@ -semver for golang [![Build Status](https://drone.io/github.com/blang/semver/status.png)](https://drone.io/github.com/blang/semver/latest) [![GoDoc](https://godoc.org/github.com/blang/semver?status.png)](https://godoc.org/github.com/blang/semver) [![Coverage Status](https://img.shields.io/coveralls/blang/semver.svg)](https://coveralls.io/r/blang/semver?branch=master) +semver for golang [![Build Status](https://travis-ci.org/blang/semver.svg?branch=master)](https://travis-ci.org/blang/semver) [![GoDoc](https://godoc.org/github.com/blang/semver?status.png)](https://godoc.org/github.com/blang/semver) [![Coverage Status](https://img.shields.io/coveralls/blang/semver.svg)](https://coveralls.io/r/blang/semver?branch=master) ====== semver is a [Semantic Versioning](http://semver.org/) library written in golang. It fully covers spec version `2.0.0`. @@ -41,6 +41,7 @@ Features - Compare Helper Methods - InPlace manipulation - Ranges `>=1.0.0 <2.0.0 || >=3.0.0 !3.0.1-beta.1` +- Wildcards `>=1.x`, `<=2.5.x` - Sortable (implements sort.Interface) - database/sql compatible (sql.Scanner/Valuer) - encoding/json compatible (json.Marshaler/Unmarshaler) @@ -59,6 +60,8 @@ A condition is composed of an operator and a version. The supported operators ar - `1.0.0`, `=1.0.0`, `==1.0.0` Equal to `1.0.0` - `!1.0.0`, `!=1.0.0` Not equal to `1.0.0`. Excludes version `1.0.0`. +Note that spaces between the operator and the version will be gracefully tolerated. + A `Range` can link multiple `Ranges` separated by space: Ranges can be linked by logical AND: diff --git a/vendor/github.com/blang/semver/package.json b/vendor/github.com/blang/semver/package.json index 568be8d94..1cf8ebdd9 100644 --- a/vendor/github.com/blang/semver/package.json +++ b/vendor/github.com/blang/semver/package.json @@ -12,6 +12,6 @@ "license": "MIT", "name": "semver", "releaseCmd": "git commit -a -m \"gx publish $VERSION\"", - "version": "3.4.0" + "version": "3.5.1" } diff --git a/vendor/github.com/go-stack/stack/LICENSE.md b/vendor/github.com/blang/semver/v4/LICENSE similarity index 85% rename from vendor/github.com/go-stack/stack/LICENSE.md rename to vendor/github.com/blang/semver/v4/LICENSE index 2abf98ea8..5ba5c86fc 100644 --- a/vendor/github.com/go-stack/stack/LICENSE.md +++ b/vendor/github.com/blang/semver/v4/LICENSE @@ -1,6 +1,6 @@ -The MIT License (MIT) +The MIT License -Copyright (c) 2014 Chris Hines +Copyright (c) 2014 Benedikt Lang Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,13 +9,14 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/vendor/github.com/blang/semver/v4/go.mod b/vendor/github.com/blang/semver/v4/go.mod new file mode 100644 index 000000000..06d262218 --- /dev/null +++ b/vendor/github.com/blang/semver/v4/go.mod @@ -0,0 +1,3 @@ +module github.com/blang/semver/v4 + +go 1.14 diff --git a/vendor/github.com/blang/semver/v4/json.go b/vendor/github.com/blang/semver/v4/json.go new file mode 100644 index 000000000..a74bf7c44 --- /dev/null +++ b/vendor/github.com/blang/semver/v4/json.go @@ -0,0 +1,23 @@ +package semver + +import ( + "encoding/json" +) + +// MarshalJSON implements the encoding/json.Marshaler interface. +func (v Version) MarshalJSON() ([]byte, error) { + return json.Marshal(v.String()) +} + +// UnmarshalJSON implements the encoding/json.Unmarshaler interface. +func (v *Version) UnmarshalJSON(data []byte) (err error) { + var versionString string + + if err = json.Unmarshal(data, &versionString); err != nil { + return + } + + *v, err = Parse(versionString) + + return +} diff --git a/vendor/github.com/blang/semver/v4/range.go b/vendor/github.com/blang/semver/v4/range.go new file mode 100644 index 000000000..95f7139b9 --- /dev/null +++ b/vendor/github.com/blang/semver/v4/range.go @@ -0,0 +1,416 @@ +package semver + +import ( + "fmt" + "strconv" + "strings" + "unicode" +) + +type wildcardType int + +const ( + noneWildcard wildcardType = iota + majorWildcard wildcardType = 1 + minorWildcard wildcardType = 2 + patchWildcard wildcardType = 3 +) + +func wildcardTypefromInt(i int) wildcardType { + switch i { + case 1: + return majorWildcard + case 2: + return minorWildcard + case 3: + return patchWildcard + default: + return noneWildcard + } +} + +type comparator func(Version, Version) bool + +var ( + compEQ comparator = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == 0 + } + compNE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) != 0 + } + compGT = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == 1 + } + compGE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) >= 0 + } + compLT = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) == -1 + } + compLE = func(v1 Version, v2 Version) bool { + return v1.Compare(v2) <= 0 + } +) + +type versionRange struct { + v Version + c comparator +} + +// rangeFunc creates a Range from the given versionRange. +func (vr *versionRange) rangeFunc() Range { + return Range(func(v Version) bool { + return vr.c(v, vr.v) + }) +} + +// Range represents a range of versions. +// A Range can be used to check if a Version satisfies it: +// +// range, err := semver.ParseRange(">1.0.0 <2.0.0") +// range(semver.MustParse("1.1.1") // returns true +type Range func(Version) bool + +// OR combines the existing Range with another Range using logical OR. +func (rf Range) OR(f Range) Range { + return Range(func(v Version) bool { + return rf(v) || f(v) + }) +} + +// AND combines the existing Range with another Range using logical AND. +func (rf Range) AND(f Range) Range { + return Range(func(v Version) bool { + return rf(v) && f(v) + }) +} + +// ParseRange parses a range and returns a Range. +// If the range could not be parsed an error is returned. +// +// Valid ranges are: +// - "<1.0.0" +// - "<=1.0.0" +// - ">1.0.0" +// - ">=1.0.0" +// - "1.0.0", "=1.0.0", "==1.0.0" +// - "!1.0.0", "!=1.0.0" +// +// A Range can consist of multiple ranges separated by space: +// Ranges can be linked by logical AND: +// - ">1.0.0 <2.0.0" would match between both ranges, so "1.1.1" and "1.8.7" but not "1.0.0" or "2.0.0" +// - ">1.0.0 <3.0.0 !2.0.3-beta.2" would match every version between 1.0.0 and 3.0.0 except 2.0.3-beta.2 +// +// Ranges can also be linked by logical OR: +// - "<2.0.0 || >=3.0.0" would match "1.x.x" and "3.x.x" but not "2.x.x" +// +// AND has a higher precedence than OR. It's not possible to use brackets. +// +// Ranges can be combined by both AND and OR +// +// - `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1` +func ParseRange(s string) (Range, error) { + parts := splitAndTrim(s) + orParts, err := splitORParts(parts) + if err != nil { + return nil, err + } + expandedParts, err := expandWildcardVersion(orParts) + if err != nil { + return nil, err + } + var orFn Range + for _, p := range expandedParts { + var andFn Range + for _, ap := range p { + opStr, vStr, err := splitComparatorVersion(ap) + if err != nil { + return nil, err + } + vr, err := buildVersionRange(opStr, vStr) + if err != nil { + return nil, fmt.Errorf("Could not parse Range %q: %s", ap, err) + } + rf := vr.rangeFunc() + + // Set function + if andFn == nil { + andFn = rf + } else { // Combine with existing function + andFn = andFn.AND(rf) + } + } + if orFn == nil { + orFn = andFn + } else { + orFn = orFn.OR(andFn) + } + + } + return orFn, nil +} + +// splitORParts splits the already cleaned parts by '||'. +// Checks for invalid positions of the operator and returns an +// error if found. +func splitORParts(parts []string) ([][]string, error) { + var ORparts [][]string + last := 0 + for i, p := range parts { + if p == "||" { + if i == 0 { + return nil, fmt.Errorf("First element in range is '||'") + } + ORparts = append(ORparts, parts[last:i]) + last = i + 1 + } + } + if last == len(parts) { + return nil, fmt.Errorf("Last element in range is '||'") + } + ORparts = append(ORparts, parts[last:]) + return ORparts, nil +} + +// buildVersionRange takes a slice of 2: operator and version +// and builds a versionRange, otherwise an error. +func buildVersionRange(opStr, vStr string) (*versionRange, error) { + c := parseComparator(opStr) + if c == nil { + return nil, fmt.Errorf("Could not parse comparator %q in %q", opStr, strings.Join([]string{opStr, vStr}, "")) + } + v, err := Parse(vStr) + if err != nil { + return nil, fmt.Errorf("Could not parse version %q in %q: %s", vStr, strings.Join([]string{opStr, vStr}, ""), err) + } + + return &versionRange{ + v: v, + c: c, + }, nil + +} + +// inArray checks if a byte is contained in an array of bytes +func inArray(s byte, list []byte) bool { + for _, el := range list { + if el == s { + return true + } + } + return false +} + +// splitAndTrim splits a range string by spaces and cleans whitespaces +func splitAndTrim(s string) (result []string) { + last := 0 + var lastChar byte + excludeFromSplit := []byte{'>', '<', '='} + for i := 0; i < len(s); i++ { + if s[i] == ' ' && !inArray(lastChar, excludeFromSplit) { + if last < i-1 { + result = append(result, s[last:i]) + } + last = i + 1 + } else if s[i] != ' ' { + lastChar = s[i] + } + } + if last < len(s)-1 { + result = append(result, s[last:]) + } + + for i, v := range result { + result[i] = strings.Replace(v, " ", "", -1) + } + + // parts := strings.Split(s, " ") + // for _, x := range parts { + // if s := strings.TrimSpace(x); len(s) != 0 { + // result = append(result, s) + // } + // } + return +} + +// splitComparatorVersion splits the comparator from the version. +// Input must be free of leading or trailing spaces. +func splitComparatorVersion(s string) (string, string, error) { + i := strings.IndexFunc(s, unicode.IsDigit) + if i == -1 { + return "", "", fmt.Errorf("Could not get version from string: %q", s) + } + return strings.TrimSpace(s[0:i]), s[i:], nil +} + +// getWildcardType will return the type of wildcard that the +// passed version contains +func getWildcardType(vStr string) wildcardType { + parts := strings.Split(vStr, ".") + nparts := len(parts) + wildcard := parts[nparts-1] + + possibleWildcardType := wildcardTypefromInt(nparts) + if wildcard == "x" { + return possibleWildcardType + } + + return noneWildcard +} + +// createVersionFromWildcard will convert a wildcard version +// into a regular version, replacing 'x's with '0's, handling +// special cases like '1.x.x' and '1.x' +func createVersionFromWildcard(vStr string) string { + // handle 1.x.x + vStr2 := strings.Replace(vStr, ".x.x", ".x", 1) + vStr2 = strings.Replace(vStr2, ".x", ".0", 1) + parts := strings.Split(vStr2, ".") + + // handle 1.x + if len(parts) == 2 { + return vStr2 + ".0" + } + + return vStr2 +} + +// incrementMajorVersion will increment the major version +// of the passed version +func incrementMajorVersion(vStr string) (string, error) { + parts := strings.Split(vStr, ".") + i, err := strconv.Atoi(parts[0]) + if err != nil { + return "", err + } + parts[0] = strconv.Itoa(i + 1) + + return strings.Join(parts, "."), nil +} + +// incrementMajorVersion will increment the minor version +// of the passed version +func incrementMinorVersion(vStr string) (string, error) { + parts := strings.Split(vStr, ".") + i, err := strconv.Atoi(parts[1]) + if err != nil { + return "", err + } + parts[1] = strconv.Itoa(i + 1) + + return strings.Join(parts, "."), nil +} + +// expandWildcardVersion will expand wildcards inside versions +// following these rules: +// +// * when dealing with patch wildcards: +// >= 1.2.x will become >= 1.2.0 +// <= 1.2.x will become < 1.3.0 +// > 1.2.x will become >= 1.3.0 +// < 1.2.x will become < 1.2.0 +// != 1.2.x will become < 1.2.0 >= 1.3.0 +// +// * when dealing with minor wildcards: +// >= 1.x will become >= 1.0.0 +// <= 1.x will become < 2.0.0 +// > 1.x will become >= 2.0.0 +// < 1.0 will become < 1.0.0 +// != 1.x will become < 1.0.0 >= 2.0.0 +// +// * when dealing with wildcards without +// version operator: +// 1.2.x will become >= 1.2.0 < 1.3.0 +// 1.x will become >= 1.0.0 < 2.0.0 +func expandWildcardVersion(parts [][]string) ([][]string, error) { + var expandedParts [][]string + for _, p := range parts { + var newParts []string + for _, ap := range p { + if strings.Contains(ap, "x") { + opStr, vStr, err := splitComparatorVersion(ap) + if err != nil { + return nil, err + } + + versionWildcardType := getWildcardType(vStr) + flatVersion := createVersionFromWildcard(vStr) + + var resultOperator string + var shouldIncrementVersion bool + switch opStr { + case ">": + resultOperator = ">=" + shouldIncrementVersion = true + case ">=": + resultOperator = ">=" + case "<": + resultOperator = "<" + case "<=": + resultOperator = "<" + shouldIncrementVersion = true + case "", "=", "==": + newParts = append(newParts, ">="+flatVersion) + resultOperator = "<" + shouldIncrementVersion = true + case "!=", "!": + newParts = append(newParts, "<"+flatVersion) + resultOperator = ">=" + shouldIncrementVersion = true + } + + var resultVersion string + if shouldIncrementVersion { + switch versionWildcardType { + case patchWildcard: + resultVersion, _ = incrementMinorVersion(flatVersion) + case minorWildcard: + resultVersion, _ = incrementMajorVersion(flatVersion) + } + } else { + resultVersion = flatVersion + } + + ap = resultOperator + resultVersion + } + newParts = append(newParts, ap) + } + expandedParts = append(expandedParts, newParts) + } + + return expandedParts, nil +} + +func parseComparator(s string) comparator { + switch s { + case "==": + fallthrough + case "": + fallthrough + case "=": + return compEQ + case ">": + return compGT + case ">=": + return compGE + case "<": + return compLT + case "<=": + return compLE + case "!": + fallthrough + case "!=": + return compNE + } + + return nil +} + +// MustParseRange is like ParseRange but panics if the range cannot be parsed. +func MustParseRange(s string) Range { + r, err := ParseRange(s) + if err != nil { + panic(`semver: ParseRange(` + s + `): ` + err.Error()) + } + return r +} diff --git a/vendor/github.com/blang/semver/v4/semver.go b/vendor/github.com/blang/semver/v4/semver.go new file mode 100644 index 000000000..307de610f --- /dev/null +++ b/vendor/github.com/blang/semver/v4/semver.go @@ -0,0 +1,476 @@ +package semver + +import ( + "errors" + "fmt" + "strconv" + "strings" +) + +const ( + numbers string = "0123456789" + alphas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-" + alphanum = alphas + numbers +) + +// SpecVersion is the latest fully supported spec version of semver +var SpecVersion = Version{ + Major: 2, + Minor: 0, + Patch: 0, +} + +// Version represents a semver compatible version +type Version struct { + Major uint64 + Minor uint64 + Patch uint64 + Pre []PRVersion + Build []string //No Precedence +} + +// Version to string +func (v Version) String() string { + b := make([]byte, 0, 5) + b = strconv.AppendUint(b, v.Major, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Minor, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Patch, 10) + + if len(v.Pre) > 0 { + b = append(b, '-') + b = append(b, v.Pre[0].String()...) + + for _, pre := range v.Pre[1:] { + b = append(b, '.') + b = append(b, pre.String()...) + } + } + + if len(v.Build) > 0 { + b = append(b, '+') + b = append(b, v.Build[0]...) + + for _, build := range v.Build[1:] { + b = append(b, '.') + b = append(b, build...) + } + } + + return string(b) +} + +// FinalizeVersion discards prerelease and build number and only returns +// major, minor and patch number. +func (v Version) FinalizeVersion() string { + b := make([]byte, 0, 5) + b = strconv.AppendUint(b, v.Major, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Minor, 10) + b = append(b, '.') + b = strconv.AppendUint(b, v.Patch, 10) + return string(b) +} + +// Equals checks if v is equal to o. +func (v Version) Equals(o Version) bool { + return (v.Compare(o) == 0) +} + +// EQ checks if v is equal to o. +func (v Version) EQ(o Version) bool { + return (v.Compare(o) == 0) +} + +// NE checks if v is not equal to o. +func (v Version) NE(o Version) bool { + return (v.Compare(o) != 0) +} + +// GT checks if v is greater than o. +func (v Version) GT(o Version) bool { + return (v.Compare(o) == 1) +} + +// GTE checks if v is greater than or equal to o. +func (v Version) GTE(o Version) bool { + return (v.Compare(o) >= 0) +} + +// GE checks if v is greater than or equal to o. +func (v Version) GE(o Version) bool { + return (v.Compare(o) >= 0) +} + +// LT checks if v is less than o. +func (v Version) LT(o Version) bool { + return (v.Compare(o) == -1) +} + +// LTE checks if v is less than or equal to o. +func (v Version) LTE(o Version) bool { + return (v.Compare(o) <= 0) +} + +// LE checks if v is less than or equal to o. +func (v Version) LE(o Version) bool { + return (v.Compare(o) <= 0) +} + +// Compare compares Versions v to o: +// -1 == v is less than o +// 0 == v is equal to o +// 1 == v is greater than o +func (v Version) Compare(o Version) int { + if v.Major != o.Major { + if v.Major > o.Major { + return 1 + } + return -1 + } + if v.Minor != o.Minor { + if v.Minor > o.Minor { + return 1 + } + return -1 + } + if v.Patch != o.Patch { + if v.Patch > o.Patch { + return 1 + } + return -1 + } + + // Quick comparison if a version has no prerelease versions + if len(v.Pre) == 0 && len(o.Pre) == 0 { + return 0 + } else if len(v.Pre) == 0 && len(o.Pre) > 0 { + return 1 + } else if len(v.Pre) > 0 && len(o.Pre) == 0 { + return -1 + } + + i := 0 + for ; i < len(v.Pre) && i < len(o.Pre); i++ { + if comp := v.Pre[i].Compare(o.Pre[i]); comp == 0 { + continue + } else if comp == 1 { + return 1 + } else { + return -1 + } + } + + // If all pr versions are the equal but one has further prversion, this one greater + if i == len(v.Pre) && i == len(o.Pre) { + return 0 + } else if i == len(v.Pre) && i < len(o.Pre) { + return -1 + } else { + return 1 + } + +} + +// IncrementPatch increments the patch version +func (v *Version) IncrementPatch() error { + v.Patch++ + return nil +} + +// IncrementMinor increments the minor version +func (v *Version) IncrementMinor() error { + v.Minor++ + v.Patch = 0 + return nil +} + +// IncrementMajor increments the major version +func (v *Version) IncrementMajor() error { + v.Major++ + v.Minor = 0 + v.Patch = 0 + return nil +} + +// Validate validates v and returns error in case +func (v Version) Validate() error { + // Major, Minor, Patch already validated using uint64 + + for _, pre := range v.Pre { + if !pre.IsNum { //Numeric prerelease versions already uint64 + if len(pre.VersionStr) == 0 { + return fmt.Errorf("Prerelease can not be empty %q", pre.VersionStr) + } + if !containsOnly(pre.VersionStr, alphanum) { + return fmt.Errorf("Invalid character(s) found in prerelease %q", pre.VersionStr) + } + } + } + + for _, build := range v.Build { + if len(build) == 0 { + return fmt.Errorf("Build meta data can not be empty %q", build) + } + if !containsOnly(build, alphanum) { + return fmt.Errorf("Invalid character(s) found in build meta data %q", build) + } + } + + return nil +} + +// New is an alias for Parse and returns a pointer, parses version string and returns a validated Version or error +func New(s string) (*Version, error) { + v, err := Parse(s) + vp := &v + return vp, err +} + +// Make is an alias for Parse, parses version string and returns a validated Version or error +func Make(s string) (Version, error) { + return Parse(s) +} + +// ParseTolerant allows for certain version specifications that do not strictly adhere to semver +// specs to be parsed by this library. It does so by normalizing versions before passing them to +// Parse(). It currently trims spaces, removes a "v" prefix, adds a 0 patch number to versions +// with only major and minor components specified, and removes leading 0s. +func ParseTolerant(s string) (Version, error) { + s = strings.TrimSpace(s) + s = strings.TrimPrefix(s, "v") + + // Split into major.minor.(patch+pr+meta) + parts := strings.SplitN(s, ".", 3) + // Remove leading zeros. + for i, p := range parts { + if len(p) > 1 { + p = strings.TrimLeft(p, "0") + if len(p) == 0 || !strings.ContainsAny(p[0:1], "0123456789") { + p = "0" + p + } + parts[i] = p + } + } + // Fill up shortened versions. + if len(parts) < 3 { + if strings.ContainsAny(parts[len(parts)-1], "+-") { + return Version{}, errors.New("Short version cannot contain PreRelease/Build meta data") + } + for len(parts) < 3 { + parts = append(parts, "0") + } + } + s = strings.Join(parts, ".") + + return Parse(s) +} + +// Parse parses version string and returns a validated Version or error +func Parse(s string) (Version, error) { + if len(s) == 0 { + return Version{}, errors.New("Version string empty") + } + + // Split into major.minor.(patch+pr+meta) + parts := strings.SplitN(s, ".", 3) + if len(parts) != 3 { + return Version{}, errors.New("No Major.Minor.Patch elements found") + } + + // Major + if !containsOnly(parts[0], numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in major number %q", parts[0]) + } + if hasLeadingZeroes(parts[0]) { + return Version{}, fmt.Errorf("Major number must not contain leading zeroes %q", parts[0]) + } + major, err := strconv.ParseUint(parts[0], 10, 64) + if err != nil { + return Version{}, err + } + + // Minor + if !containsOnly(parts[1], numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1]) + } + if hasLeadingZeroes(parts[1]) { + return Version{}, fmt.Errorf("Minor number must not contain leading zeroes %q", parts[1]) + } + minor, err := strconv.ParseUint(parts[1], 10, 64) + if err != nil { + return Version{}, err + } + + v := Version{} + v.Major = major + v.Minor = minor + + var build, prerelease []string + patchStr := parts[2] + + if buildIndex := strings.IndexRune(patchStr, '+'); buildIndex != -1 { + build = strings.Split(patchStr[buildIndex+1:], ".") + patchStr = patchStr[:buildIndex] + } + + if preIndex := strings.IndexRune(patchStr, '-'); preIndex != -1 { + prerelease = strings.Split(patchStr[preIndex+1:], ".") + patchStr = patchStr[:preIndex] + } + + if !containsOnly(patchStr, numbers) { + return Version{}, fmt.Errorf("Invalid character(s) found in patch number %q", patchStr) + } + if hasLeadingZeroes(patchStr) { + return Version{}, fmt.Errorf("Patch number must not contain leading zeroes %q", patchStr) + } + patch, err := strconv.ParseUint(patchStr, 10, 64) + if err != nil { + return Version{}, err + } + + v.Patch = patch + + // Prerelease + for _, prstr := range prerelease { + parsedPR, err := NewPRVersion(prstr) + if err != nil { + return Version{}, err + } + v.Pre = append(v.Pre, parsedPR) + } + + // Build meta data + for _, str := range build { + if len(str) == 0 { + return Version{}, errors.New("Build meta data is empty") + } + if !containsOnly(str, alphanum) { + return Version{}, fmt.Errorf("Invalid character(s) found in build meta data %q", str) + } + v.Build = append(v.Build, str) + } + + return v, nil +} + +// MustParse is like Parse but panics if the version cannot be parsed. +func MustParse(s string) Version { + v, err := Parse(s) + if err != nil { + panic(`semver: Parse(` + s + `): ` + err.Error()) + } + return v +} + +// PRVersion represents a PreRelease Version +type PRVersion struct { + VersionStr string + VersionNum uint64 + IsNum bool +} + +// NewPRVersion creates a new valid prerelease version +func NewPRVersion(s string) (PRVersion, error) { + if len(s) == 0 { + return PRVersion{}, errors.New("Prerelease is empty") + } + v := PRVersion{} + if containsOnly(s, numbers) { + if hasLeadingZeroes(s) { + return PRVersion{}, fmt.Errorf("Numeric PreRelease version must not contain leading zeroes %q", s) + } + num, err := strconv.ParseUint(s, 10, 64) + + // Might never be hit, but just in case + if err != nil { + return PRVersion{}, err + } + v.VersionNum = num + v.IsNum = true + } else if containsOnly(s, alphanum) { + v.VersionStr = s + v.IsNum = false + } else { + return PRVersion{}, fmt.Errorf("Invalid character(s) found in prerelease %q", s) + } + return v, nil +} + +// IsNumeric checks if prerelease-version is numeric +func (v PRVersion) IsNumeric() bool { + return v.IsNum +} + +// Compare compares two PreRelease Versions v and o: +// -1 == v is less than o +// 0 == v is equal to o +// 1 == v is greater than o +func (v PRVersion) Compare(o PRVersion) int { + if v.IsNum && !o.IsNum { + return -1 + } else if !v.IsNum && o.IsNum { + return 1 + } else if v.IsNum && o.IsNum { + if v.VersionNum == o.VersionNum { + return 0 + } else if v.VersionNum > o.VersionNum { + return 1 + } else { + return -1 + } + } else { // both are Alphas + if v.VersionStr == o.VersionStr { + return 0 + } else if v.VersionStr > o.VersionStr { + return 1 + } else { + return -1 + } + } +} + +// PreRelease version to string +func (v PRVersion) String() string { + if v.IsNum { + return strconv.FormatUint(v.VersionNum, 10) + } + return v.VersionStr +} + +func containsOnly(s string, set string) bool { + return strings.IndexFunc(s, func(r rune) bool { + return !strings.ContainsRune(set, r) + }) == -1 +} + +func hasLeadingZeroes(s string) bool { + return len(s) > 1 && s[0] == '0' +} + +// NewBuildVersion creates a new valid build version +func NewBuildVersion(s string) (string, error) { + if len(s) == 0 { + return "", errors.New("Buildversion is empty") + } + if !containsOnly(s, alphanum) { + return "", fmt.Errorf("Invalid character(s) found in build meta data %q", s) + } + return s, nil +} + +// FinalizeVersion returns the major, minor and patch number only and discards +// prerelease and build number. +func FinalizeVersion(s string) (string, error) { + v, err := Parse(s) + if err != nil { + return "", err + } + v.Pre = nil + v.Build = nil + + finalVer := v.String() + return finalVer, nil +} diff --git a/vendor/github.com/blang/semver/v4/sort.go b/vendor/github.com/blang/semver/v4/sort.go new file mode 100644 index 000000000..e18f88082 --- /dev/null +++ b/vendor/github.com/blang/semver/v4/sort.go @@ -0,0 +1,28 @@ +package semver + +import ( + "sort" +) + +// Versions represents multiple versions. +type Versions []Version + +// Len returns length of version collection +func (s Versions) Len() int { + return len(s) +} + +// Swap swaps two versions inside the collection by its indices +func (s Versions) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +// Less checks if version at index i is less than version at index j +func (s Versions) Less(i, j int) bool { + return s[i].LT(s[j]) +} + +// Sort sorts a slice of versions +func Sort(versions []Version) { + sort.Sort(Versions(versions)) +} diff --git a/vendor/github.com/blang/semver/v4/sql.go b/vendor/github.com/blang/semver/v4/sql.go new file mode 100644 index 000000000..db958134f --- /dev/null +++ b/vendor/github.com/blang/semver/v4/sql.go @@ -0,0 +1,30 @@ +package semver + +import ( + "database/sql/driver" + "fmt" +) + +// Scan implements the database/sql.Scanner interface. +func (v *Version) Scan(src interface{}) (err error) { + var str string + switch src := src.(type) { + case string: + str = src + case []byte: + str = string(src) + default: + return fmt.Errorf("version.Scan: cannot convert %T to string", src) + } + + if t, err := Parse(str); err == nil { + *v = t + } + + return +} + +// Value implements the database/sql/driver.Valuer interface. +func (v Version) Value() (driver.Value, error) { + return v.String(), nil +} diff --git a/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/.gitignore b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/.gitignore new file mode 100644 index 000000000..099edf6f9 --- /dev/null +++ b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/.gitignore @@ -0,0 +1 @@ +go-bindata diff --git a/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/AppendSliceValue.go b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/AppendSliceValue.go new file mode 100644 index 000000000..f5da49596 --- /dev/null +++ b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/AppendSliceValue.go @@ -0,0 +1,22 @@ +package main + +import "strings" + +// borrowed from https://github.com/hashicorp/serf/blob/master/command/agent/flag_slice_value.go + +// AppendSliceValue implements the flag.Value interface and allows multiple +// calls to the same variable to append a list. +type AppendSliceValue []string + +func (s *AppendSliceValue) String() string { + return strings.Join(*s, ",") +} + +func (s *AppendSliceValue) Set(value string) error { + if *s == nil { + *s = make([]string, 0, 1) + } + + *s = append(*s, value) + return nil +} diff --git a/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/main.go b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/main.go new file mode 100644 index 000000000..a422a9698 --- /dev/null +++ b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/main.go @@ -0,0 +1,108 @@ +// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication +// license. Its contents can be found at: +// http://creativecommons.org/publicdomain/zero/1.0/ + +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + "regexp" + "strings" + + "github.com/go-bindata/go-bindata/v3" +) + +func main() { + cfg := parseArgs() + err := bindata.Translate(cfg) + + if err != nil { + fmt.Fprintf(os.Stderr, "bindata: %v\n", err) + os.Exit(1) + } +} + +// parseArgs create s a new, filled configuration instance +// by reading and parsing command line options. +// +// This function exits the program with an error, if +// any of the command line options are incorrect. +func parseArgs() *bindata.Config { + var version bool + + c := bindata.NewConfig() + + flag.Usage = func() { + fmt.Printf("Usage: %s [options] \n\n", os.Args[0]) + flag.PrintDefaults() + } + + flag.BoolVar(&c.Debug, "debug", c.Debug, "Do not embed the assets, but provide the embedding API. Contents will still be loaded from disk.") + flag.BoolVar(&c.Dev, "dev", c.Dev, "Similar to debug, but does not emit absolute paths. Expects a rootDir variable to already exist in the generated code's package.") + flag.StringVar(&c.Tags, "tags", c.Tags, "Optional set of build tags to include.") + flag.StringVar(&c.Prefix, "prefix", c.Prefix, "Optional path prefix to strip off asset names.") + flag.StringVar(&c.Package, "pkg", c.Package, "Package name to use in the generated code.") + flag.BoolVar(&c.NoMemCopy, "nomemcopy", c.NoMemCopy, "Use a .rodata hack to get rid of unnecessary memcopies. Refer to the documentation to see what implications this carries.") + flag.BoolVar(&c.NoCompress, "nocompress", c.NoCompress, "Assets will *not* be GZIP compressed when this flag is specified.") + flag.BoolVar(&c.NoMetadata, "nometadata", c.NoMetadata, "Assets will not preserve size, mode, and modtime info.") + flag.BoolVar(&c.HttpFileSystem, "fs", c.HttpFileSystem, "Whether generate instance http.FileSystem interface code.") + flag.UintVar(&c.Mode, "mode", c.Mode, "Optional file mode override for all files.") + flag.Int64Var(&c.ModTime, "modtime", c.ModTime, "Optional modification unix timestamp override for all files.") + flag.StringVar(&c.Output, "o", c.Output, "Optional name of the output file to be generated.") + flag.BoolVar(&version, "version", false, "Displays version information.") + + ignore := make([]string, 0) + flag.Var((*AppendSliceValue)(&ignore), "ignore", "Regex pattern to ignore") + + flag.Parse() + + patterns := make([]*regexp.Regexp, 0) + for _, pattern := range ignore { + patterns = append(patterns, regexp.MustCompile(pattern)) + } + c.Ignore = patterns + + if version { + fmt.Printf("%s\n", Version()) + os.Exit(0) + } + + // Make sure we have input paths. + if flag.NArg() == 0 { + fmt.Fprintf(os.Stderr, "Missing \n\n") + flag.Usage() + os.Exit(1) + } + + // Create input configurations. + c.Input = make([]bindata.InputConfig, flag.NArg()) + for i := range c.Input { + c.Input[i] = parseInput(flag.Arg(i)) + } + + return c +} + +// parseRecursive determines whether the given path has a recrusive indicator and +// returns a new path with the recursive indicator chopped off if it does. +// +// ex: +// /path/to/foo/... -> (/path/to/foo, true) +// /path/to/bar -> (/path/to/bar, false) +func parseInput(path string) bindata.InputConfig { + if strings.HasSuffix(path, "/...") { + return bindata.InputConfig{ + Path: filepath.Clean(path[:len(path)-4]), + Recursive: true, + } + } else { + return bindata.InputConfig{ + Path: filepath.Clean(path), + Recursive: false, + } + } + +} diff --git a/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/version.go b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/version.go new file mode 100644 index 000000000..65b7312fc --- /dev/null +++ b/vendor/github.com/go-bindata/go-bindata/v3/go-bindata/version.go @@ -0,0 +1,31 @@ +// This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication +// license. Its contents can be found at: +// http://creativecommons.org/publicdomain/zero/1.0/ + +package main + +import ( + "fmt" + "runtime" +) + +const ( + AppName = "go-bindata" + AppVersionMajor = 3 + AppVersionMinor = 1 +) + +// revision part of the program version. +// This will be set automatically at build time like so: +// +// go build -ldflags "-X main.AppVersionRev `date -u +%s`" +var AppVersionRev string + +func Version() string { + if len(AppVersionRev) == 0 { + AppVersionRev = "3" + } + + return fmt.Sprintf("%s %d.%d.%s (Go runtime %s).\nCopyright (c) 2010-2013, Jim Teeuwen.", + AppName, AppVersionMajor, AppVersionMinor, AppVersionRev, runtime.Version()) +} diff --git a/vendor/github.com/go-openapi/analysis/.codecov.yml b/vendor/github.com/go-openapi/analysis/.codecov.yml deleted file mode 100644 index 841c4281e..000000000 --- a/vendor/github.com/go-openapi/analysis/.codecov.yml +++ /dev/null @@ -1,5 +0,0 @@ -coverage: - status: - patch: - default: - target: 80% diff --git a/vendor/github.com/go-openapi/analysis/.gitignore b/vendor/github.com/go-openapi/analysis/.gitignore deleted file mode 100644 index 87c3bd3e6..000000000 --- a/vendor/github.com/go-openapi/analysis/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -secrets.yml -coverage.out -coverage.txt -*.cov -.idea diff --git a/vendor/github.com/go-openapi/analysis/.golangci.yml b/vendor/github.com/go-openapi/analysis/.golangci.yml deleted file mode 100644 index 76af8ab1c..000000000 --- a/vendor/github.com/go-openapi/analysis/.golangci.yml +++ /dev/null @@ -1,27 +0,0 @@ -linters-settings: - govet: - check-shadowing: true - golint: - min-confidence: 0 - gocyclo: - min-complexity: 40 - maligned: - suggest-new: true - dupl: - threshold: 100 - goconst: - min-len: 2 - min-occurrences: 4 - -linters: - enable-all: true - disable: - - maligned - - lll - - gochecknoglobals - - gochecknoinits - # scopelint is useful, but also reports false positives - # that unfortunately can't be disabled. So we disable the - # linter rather than changing code that works. - # see: https://github.com/kyoh86/scopelint/issues/4 - - scopelint diff --git a/vendor/github.com/go-openapi/analysis/.travis.yml b/vendor/github.com/go-openapi/analysis/.travis.yml deleted file mode 100644 index 7ecf865c2..000000000 --- a/vendor/github.com/go-openapi/analysis/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -after_success: -- bash <(curl -s https://codecov.io/bash) -go: -- 1.11.x -- 1.12.x -install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on -language: go -notifications: - slack: - secure: Sf7kZf7ZGbnwWUMpffHwMu5A0cHkLK2MYY32LNTPj4+/3qC3Ghl7+9v4TSLOqOlCwdRNjOGblAq7s+GDJed6/xgRQl1JtCi1klzZNrYX4q01pgTPvvGcwbBkIYgeMaPeIRcK9OZnud7sRXdttozgTOpytps2U6Js32ip7uj5mHSg2ub0FwoSJwlS6dbezZ8+eDhoha0F/guY99BEwx8Bd+zROrT2TFGsSGOFGN6wFc7moCqTHO/YkWib13a2QNXqOxCCVBy/lt76Wp+JkeFppjHlzs/2lP3EAk13RIUAaesdEUHvIHrzCyNJEd3/+KO2DzsWOYfpktd+KBCvgaYOsoo7ubdT3IROeAegZdCgo/6xgCEsmFc9ZcqCfN5yNx2A+BZ2Vwmpws+bQ1E1+B5HDzzaiLcYfG4X2O210QVGVDLWsv1jqD+uPYeHY2WRfh5ZsIUFvaqgUEnwHwrK44/8REAhQavt1QAj5uJpsRd7CkRVPWRNK+yIky+wgbVUFEchRNmS55E7QWf+W4+4QZkQi7vUTMc9nbTUu2Es9NfvfudOpM2wZbn98fjpb/qq/nRv6Bk+ca+7XD5/IgNLMbWp2ouDdzbiHLCOfDUiHiDJhLfFZx9Bwo7ZwfzeOlbrQX66bx7xRKYmOe4DLrXhNcpbsMa8qbfxlZRCmYbubB/Y8h4= -script: -- gotestsum -f short-verbose -- -race -timeout=20m -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/analysis/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/analysis/CODE_OF_CONDUCT.md deleted file mode 100644 index 9322b065e..000000000 --- a/vendor/github.com/go-openapi/analysis/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at ivan+abuse@flanders.co.nz. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/analysis/README.md b/vendor/github.com/go-openapi/analysis/README.md deleted file mode 100644 index efafdf8fd..000000000 --- a/vendor/github.com/go-openapi/analysis/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# OpenAPI initiative analysis [![Build Status](https://travis-ci.org/go-openapi/analysis.svg?branch=master)](https://travis-ci.org/go-openapi/analysis) [![Build status](https://ci.appveyor.com/api/projects/status/x377t5o9ennm847o/branch/master?svg=true)](https://ci.appveyor.com/project/casualjim/go-openapi/analysis/branch/master) [![codecov](https://codecov.io/gh/go-openapi/analysis/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/analysis) -[![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) -[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/analysis/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/go-openapi/analysis?status.svg)](http://godoc.org/github.com/go-openapi/analysis) -[![GolangCI](https://golangci.com/badges/github.com/go-openapi/analysis.svg)](https://golangci.com) -[![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/analysis)](https://goreportcard.com/report/github.com/go-openapi/analysis) - - -A foundational library to analyze an OAI specification document for easier reasoning about the content. diff --git a/vendor/github.com/go-openapi/analysis/analyzer.go b/vendor/github.com/go-openapi/analysis/analyzer.go deleted file mode 100644 index 4d98718c4..000000000 --- a/vendor/github.com/go-openapi/analysis/analyzer.go +++ /dev/null @@ -1,970 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package analysis - -import ( - "fmt" - slashpath "path" - "strconv" - "strings" - - "github.com/go-openapi/jsonpointer" - "github.com/go-openapi/spec" - "github.com/go-openapi/swag" -) - -type referenceAnalysis struct { - schemas map[string]spec.Ref - responses map[string]spec.Ref - parameters map[string]spec.Ref - items map[string]spec.Ref - headerItems map[string]spec.Ref - parameterItems map[string]spec.Ref - allRefs map[string]spec.Ref - pathItems map[string]spec.Ref -} - -func (r *referenceAnalysis) addRef(key string, ref spec.Ref) { - r.allRefs["#"+key] = ref -} - -func (r *referenceAnalysis) addItemsRef(key string, items *spec.Items, location string) { - r.items["#"+key] = items.Ref - r.addRef(key, items.Ref) - if location == "header" { - // NOTE: in swagger 2.0, headers and parameters (but not body param schemas) are simple schemas - // and $ref are not supported here. However it is possible to analyze this. - r.headerItems["#"+key] = items.Ref - } else { - r.parameterItems["#"+key] = items.Ref - } -} - -func (r *referenceAnalysis) addSchemaRef(key string, ref SchemaRef) { - r.schemas["#"+key] = ref.Schema.Ref - r.addRef(key, ref.Schema.Ref) -} - -func (r *referenceAnalysis) addResponseRef(key string, resp *spec.Response) { - r.responses["#"+key] = resp.Ref - r.addRef(key, resp.Ref) -} - -func (r *referenceAnalysis) addParamRef(key string, param *spec.Parameter) { - r.parameters["#"+key] = param.Ref - r.addRef(key, param.Ref) -} - -func (r *referenceAnalysis) addPathItemRef(key string, pathItem *spec.PathItem) { - r.pathItems["#"+key] = pathItem.Ref - r.addRef(key, pathItem.Ref) -} - -type patternAnalysis struct { - parameters map[string]string - headers map[string]string - items map[string]string - schemas map[string]string - allPatterns map[string]string -} - -func (p *patternAnalysis) addPattern(key, pattern string) { - p.allPatterns["#"+key] = pattern -} - -func (p *patternAnalysis) addParameterPattern(key, pattern string) { - p.parameters["#"+key] = pattern - p.addPattern(key, pattern) -} - -func (p *patternAnalysis) addHeaderPattern(key, pattern string) { - p.headers["#"+key] = pattern - p.addPattern(key, pattern) -} - -func (p *patternAnalysis) addItemsPattern(key, pattern string) { - p.items["#"+key] = pattern - p.addPattern(key, pattern) -} - -func (p *patternAnalysis) addSchemaPattern(key, pattern string) { - p.schemas["#"+key] = pattern - p.addPattern(key, pattern) -} - -type enumAnalysis struct { - parameters map[string][]interface{} - headers map[string][]interface{} - items map[string][]interface{} - schemas map[string][]interface{} - allEnums map[string][]interface{} -} - -func (p *enumAnalysis) addEnum(key string, enum []interface{}) { - p.allEnums["#"+key] = enum -} - -func (p *enumAnalysis) addParameterEnum(key string, enum []interface{}) { - p.parameters["#"+key] = enum - p.addEnum(key, enum) -} - -func (p *enumAnalysis) addHeaderEnum(key string, enum []interface{}) { - p.headers["#"+key] = enum - p.addEnum(key, enum) -} - -func (p *enumAnalysis) addItemsEnum(key string, enum []interface{}) { - p.items["#"+key] = enum - p.addEnum(key, enum) -} - -func (p *enumAnalysis) addSchemaEnum(key string, enum []interface{}) { - p.schemas["#"+key] = enum - p.addEnum(key, enum) -} - -// New takes a swagger spec object and returns an analyzed spec document. -// The analyzed document contains a number of indices that make it easier to -// reason about semantics of a swagger specification for use in code generation -// or validation etc. -func New(doc *spec.Swagger) *Spec { - a := &Spec{ - spec: doc, - references: referenceAnalysis{}, - patterns: patternAnalysis{}, - enums: enumAnalysis{}, - } - a.reset() - a.initialize() - return a -} - -// Spec is an analyzed specification object. It takes a swagger spec object and turns it into a registry -// with a bunch of utility methods to act on the information in the spec. -type Spec struct { - spec *spec.Swagger - consumes map[string]struct{} - produces map[string]struct{} - authSchemes map[string]struct{} - operations map[string]map[string]*spec.Operation - references referenceAnalysis - patterns patternAnalysis - enums enumAnalysis - allSchemas map[string]SchemaRef - allOfs map[string]SchemaRef -} - -func (s *Spec) reset() { - s.consumes = make(map[string]struct{}, 150) - s.produces = make(map[string]struct{}, 150) - s.authSchemes = make(map[string]struct{}, 150) - s.operations = make(map[string]map[string]*spec.Operation, 150) - s.allSchemas = make(map[string]SchemaRef, 150) - s.allOfs = make(map[string]SchemaRef, 150) - s.references.schemas = make(map[string]spec.Ref, 150) - s.references.pathItems = make(map[string]spec.Ref, 150) - s.references.responses = make(map[string]spec.Ref, 150) - s.references.parameters = make(map[string]spec.Ref, 150) - s.references.items = make(map[string]spec.Ref, 150) - s.references.headerItems = make(map[string]spec.Ref, 150) - s.references.parameterItems = make(map[string]spec.Ref, 150) - s.references.allRefs = make(map[string]spec.Ref, 150) - s.patterns.parameters = make(map[string]string, 150) - s.patterns.headers = make(map[string]string, 150) - s.patterns.items = make(map[string]string, 150) - s.patterns.schemas = make(map[string]string, 150) - s.patterns.allPatterns = make(map[string]string, 150) - s.enums.parameters = make(map[string][]interface{}, 150) - s.enums.headers = make(map[string][]interface{}, 150) - s.enums.items = make(map[string][]interface{}, 150) - s.enums.schemas = make(map[string][]interface{}, 150) - s.enums.allEnums = make(map[string][]interface{}, 150) -} - -func (s *Spec) reload() { - s.reset() - s.initialize() -} - -func (s *Spec) initialize() { - for _, c := range s.spec.Consumes { - s.consumes[c] = struct{}{} - } - for _, c := range s.spec.Produces { - s.produces[c] = struct{}{} - } - for _, ss := range s.spec.Security { - for k := range ss { - s.authSchemes[k] = struct{}{} - } - } - for path, pathItem := range s.AllPaths() { - s.analyzeOperations(path, &pathItem) - } - - for name, parameter := range s.spec.Parameters { - refPref := slashpath.Join("/parameters", jsonpointer.Escape(name)) - if parameter.Items != nil { - s.analyzeItems("items", parameter.Items, refPref, "parameter") - } - if parameter.In == "body" && parameter.Schema != nil { - s.analyzeSchema("schema", *parameter.Schema, refPref) - } - if parameter.Pattern != "" { - s.patterns.addParameterPattern(refPref, parameter.Pattern) - } - if len(parameter.Enum) > 0 { - s.enums.addParameterEnum(refPref, parameter.Enum) - } - } - - for name, response := range s.spec.Responses { - refPref := slashpath.Join("/responses", jsonpointer.Escape(name)) - for k, v := range response.Headers { - hRefPref := slashpath.Join(refPref, "headers", k) - if v.Items != nil { - s.analyzeItems("items", v.Items, hRefPref, "header") - } - if v.Pattern != "" { - s.patterns.addHeaderPattern(hRefPref, v.Pattern) - } - if len(v.Enum) > 0 { - s.enums.addHeaderEnum(hRefPref, v.Enum) - } - } - if response.Schema != nil { - s.analyzeSchema("schema", *response.Schema, refPref) - } - } - - for name, schema := range s.spec.Definitions { - s.analyzeSchema(name, schema, "/definitions") - } - // TODO: after analyzing all things and flattening schemas etc - // resolve all the collected references to their final representations - // best put in a separate method because this could get expensive -} - -func (s *Spec) analyzeOperations(path string, pi *spec.PathItem) { - // TODO: resolve refs here? - // Currently, operations declared via pathItem $ref are known only after expansion - op := pi - if pi.Ref.String() != "" { - key := slashpath.Join("/paths", jsonpointer.Escape(path)) - s.references.addPathItemRef(key, pi) - } - s.analyzeOperation("GET", path, op.Get) - s.analyzeOperation("PUT", path, op.Put) - s.analyzeOperation("POST", path, op.Post) - s.analyzeOperation("PATCH", path, op.Patch) - s.analyzeOperation("DELETE", path, op.Delete) - s.analyzeOperation("HEAD", path, op.Head) - s.analyzeOperation("OPTIONS", path, op.Options) - for i, param := range op.Parameters { - refPref := slashpath.Join("/paths", jsonpointer.Escape(path), "parameters", strconv.Itoa(i)) - if param.Ref.String() != "" { - s.references.addParamRef(refPref, ¶m) - } - if param.Pattern != "" { - s.patterns.addParameterPattern(refPref, param.Pattern) - } - if len(param.Enum) > 0 { - s.enums.addParameterEnum(refPref, param.Enum) - } - if param.Items != nil { - s.analyzeItems("items", param.Items, refPref, "parameter") - } - if param.Schema != nil { - s.analyzeSchema("schema", *param.Schema, refPref) - } - } -} - -func (s *Spec) analyzeItems(name string, items *spec.Items, prefix, location string) { - if items == nil { - return - } - refPref := slashpath.Join(prefix, name) - s.analyzeItems(name, items.Items, refPref, location) - if items.Ref.String() != "" { - s.references.addItemsRef(refPref, items, location) - } - if items.Pattern != "" { - s.patterns.addItemsPattern(refPref, items.Pattern) - } - if len(items.Enum) > 0 { - s.enums.addItemsEnum(refPref, items.Enum) - } -} - -func (s *Spec) analyzeOperation(method, path string, op *spec.Operation) { - if op == nil { - return - } - - for _, c := range op.Consumes { - s.consumes[c] = struct{}{} - } - for _, c := range op.Produces { - s.produces[c] = struct{}{} - } - for _, ss := range op.Security { - for k := range ss { - s.authSchemes[k] = struct{}{} - } - } - if _, ok := s.operations[method]; !ok { - s.operations[method] = make(map[string]*spec.Operation) - } - s.operations[method][path] = op - prefix := slashpath.Join("/paths", jsonpointer.Escape(path), strings.ToLower(method)) - for i, param := range op.Parameters { - refPref := slashpath.Join(prefix, "parameters", strconv.Itoa(i)) - if param.Ref.String() != "" { - s.references.addParamRef(refPref, ¶m) - } - if param.Pattern != "" { - s.patterns.addParameterPattern(refPref, param.Pattern) - } - if len(param.Enum) > 0 { - s.enums.addParameterEnum(refPref, param.Enum) - } - s.analyzeItems("items", param.Items, refPref, "parameter") - if param.In == "body" && param.Schema != nil { - s.analyzeSchema("schema", *param.Schema, refPref) - } - } - if op.Responses != nil { - if op.Responses.Default != nil { - refPref := slashpath.Join(prefix, "responses", "default") - if op.Responses.Default.Ref.String() != "" { - s.references.addResponseRef(refPref, op.Responses.Default) - } - for k, v := range op.Responses.Default.Headers { - hRefPref := slashpath.Join(refPref, "headers", k) - s.analyzeItems("items", v.Items, hRefPref, "header") - if v.Pattern != "" { - s.patterns.addHeaderPattern(hRefPref, v.Pattern) - } - } - if op.Responses.Default.Schema != nil { - s.analyzeSchema("schema", *op.Responses.Default.Schema, refPref) - } - } - for k, res := range op.Responses.StatusCodeResponses { - refPref := slashpath.Join(prefix, "responses", strconv.Itoa(k)) - if res.Ref.String() != "" { - s.references.addResponseRef(refPref, &res) - } - for k, v := range res.Headers { - hRefPref := slashpath.Join(refPref, "headers", k) - s.analyzeItems("items", v.Items, hRefPref, "header") - if v.Pattern != "" { - s.patterns.addHeaderPattern(hRefPref, v.Pattern) - } - if len(v.Enum) > 0 { - s.enums.addHeaderEnum(hRefPref, v.Enum) - } - } - if res.Schema != nil { - s.analyzeSchema("schema", *res.Schema, refPref) - } - } - } -} - -func (s *Spec) analyzeSchema(name string, schema spec.Schema, prefix string) { - refURI := slashpath.Join(prefix, jsonpointer.Escape(name)) - schRef := SchemaRef{ - Name: name, - Schema: &schema, - Ref: spec.MustCreateRef("#" + refURI), - TopLevel: prefix == "/definitions", - } - - s.allSchemas["#"+refURI] = schRef - - if schema.Ref.String() != "" { - s.references.addSchemaRef(refURI, schRef) - } - if schema.Pattern != "" { - s.patterns.addSchemaPattern(refURI, schema.Pattern) - } - if len(schema.Enum) > 0 { - s.enums.addSchemaEnum(refURI, schema.Enum) - } - - for k, v := range schema.Definitions { - s.analyzeSchema(k, v, slashpath.Join(refURI, "definitions")) - } - for k, v := range schema.Properties { - s.analyzeSchema(k, v, slashpath.Join(refURI, "properties")) - } - for k, v := range schema.PatternProperties { - // NOTE: swagger 2.0 does not support PatternProperties. - // However it is possible to analyze this in a schema - s.analyzeSchema(k, v, slashpath.Join(refURI, "patternProperties")) - } - for i, v := range schema.AllOf { - s.analyzeSchema(strconv.Itoa(i), v, slashpath.Join(refURI, "allOf")) - } - if len(schema.AllOf) > 0 { - s.allOfs["#"+refURI] = schRef - } - for i, v := range schema.AnyOf { - // NOTE: swagger 2.0 does not support anyOf constructs. - // However it is possible to analyze this in a schema - s.analyzeSchema(strconv.Itoa(i), v, slashpath.Join(refURI, "anyOf")) - } - for i, v := range schema.OneOf { - // NOTE: swagger 2.0 does not support oneOf constructs. - // However it is possible to analyze this in a schema - s.analyzeSchema(strconv.Itoa(i), v, slashpath.Join(refURI, "oneOf")) - } - if schema.Not != nil { - // NOTE: swagger 2.0 does not support "not" constructs. - // However it is possible to analyze this in a schema - s.analyzeSchema("not", *schema.Not, refURI) - } - if schema.AdditionalProperties != nil && schema.AdditionalProperties.Schema != nil { - s.analyzeSchema("additionalProperties", *schema.AdditionalProperties.Schema, refURI) - } - if schema.AdditionalItems != nil && schema.AdditionalItems.Schema != nil { - // NOTE: swagger 2.0 does not support AdditionalItems. - // However it is possible to analyze this in a schema - s.analyzeSchema("additionalItems", *schema.AdditionalItems.Schema, refURI) - } - if schema.Items != nil { - if schema.Items.Schema != nil { - s.analyzeSchema("items", *schema.Items.Schema, refURI) - } - for i, sch := range schema.Items.Schemas { - s.analyzeSchema(strconv.Itoa(i), sch, slashpath.Join(refURI, "items")) - } - } -} - -// SecurityRequirement is a representation of a security requirement for an operation -type SecurityRequirement struct { - Name string - Scopes []string -} - -// SecurityRequirementsFor gets the security requirements for the operation -func (s *Spec) SecurityRequirementsFor(operation *spec.Operation) [][]SecurityRequirement { - if s.spec.Security == nil && operation.Security == nil { - return nil - } - - schemes := s.spec.Security - if operation.Security != nil { - schemes = operation.Security - } - - result := [][]SecurityRequirement{} - for _, scheme := range schemes { - if len(scheme) == 0 { - // append a zero object for anonymous - result = append(result, []SecurityRequirement{{}}) - continue - } - var reqs []SecurityRequirement - for k, v := range scheme { - if v == nil { - v = []string{} - } - reqs = append(reqs, SecurityRequirement{Name: k, Scopes: v}) - } - result = append(result, reqs) - } - return result -} - -// SecurityDefinitionsForRequirements gets the matching security definitions for a set of requirements -func (s *Spec) SecurityDefinitionsForRequirements(requirements []SecurityRequirement) map[string]spec.SecurityScheme { - result := make(map[string]spec.SecurityScheme) - - for _, v := range requirements { - if definition, ok := s.spec.SecurityDefinitions[v.Name]; ok { - if definition != nil { - result[v.Name] = *definition - } - } - } - return result -} - -// SecurityDefinitionsFor gets the matching security definitions for a set of requirements -func (s *Spec) SecurityDefinitionsFor(operation *spec.Operation) map[string]spec.SecurityScheme { - requirements := s.SecurityRequirementsFor(operation) - if len(requirements) == 0 { - return nil - } - - result := make(map[string]spec.SecurityScheme) - for _, reqs := range requirements { - for _, v := range reqs { - if v.Name == "" { - // optional requirement - continue - } - if _, ok := result[v.Name]; ok { - // duplicate requirement - continue - } - if definition, ok := s.spec.SecurityDefinitions[v.Name]; ok { - if definition != nil { - result[v.Name] = *definition - } - } - } - } - return result -} - -// ConsumesFor gets the mediatypes for the operation -func (s *Spec) ConsumesFor(operation *spec.Operation) []string { - - if len(operation.Consumes) == 0 { - cons := make(map[string]struct{}, len(s.spec.Consumes)) - for _, k := range s.spec.Consumes { - cons[k] = struct{}{} - } - return s.structMapKeys(cons) - } - - cons := make(map[string]struct{}, len(operation.Consumes)) - for _, c := range operation.Consumes { - cons[c] = struct{}{} - } - return s.structMapKeys(cons) -} - -// ProducesFor gets the mediatypes for the operation -func (s *Spec) ProducesFor(operation *spec.Operation) []string { - if len(operation.Produces) == 0 { - prod := make(map[string]struct{}, len(s.spec.Produces)) - for _, k := range s.spec.Produces { - prod[k] = struct{}{} - } - return s.structMapKeys(prod) - } - - prod := make(map[string]struct{}, len(operation.Produces)) - for _, c := range operation.Produces { - prod[c] = struct{}{} - } - return s.structMapKeys(prod) -} - -func mapKeyFromParam(param *spec.Parameter) string { - return fmt.Sprintf("%s#%s", param.In, fieldNameFromParam(param)) -} - -func fieldNameFromParam(param *spec.Parameter) string { - // TODO: this should be x-go-name - if nm, ok := param.Extensions.GetString("go-name"); ok { - return nm - } - return swag.ToGoName(param.Name) -} - -// ErrorOnParamFunc is a callback function to be invoked -// whenever an error is encountered while resolving references -// on parameters. -// -// This function takes as input the spec.Parameter which triggered the -// error and the error itself. -// -// If the callback function returns false, the calling function should bail. -// -// If it returns true, the calling function should continue evaluating parameters. -// A nil ErrorOnParamFunc must be evaluated as equivalent to panic(). -type ErrorOnParamFunc func(spec.Parameter, error) bool - -func (s *Spec) paramsAsMap(parameters []spec.Parameter, res map[string]spec.Parameter, callmeOnError ErrorOnParamFunc) { - for _, param := range parameters { - pr := param - if pr.Ref.String() != "" { - obj, _, err := pr.Ref.GetPointer().Get(s.spec) - if err != nil { - if callmeOnError != nil { - if callmeOnError(param, fmt.Errorf("invalid reference: %q", pr.Ref.String())) { - continue - } - break - } else { - panic(fmt.Sprintf("invalid reference: %q", pr.Ref.String())) - } - } - if objAsParam, ok := obj.(spec.Parameter); ok { - pr = objAsParam - } else { - if callmeOnError != nil { - if callmeOnError(param, fmt.Errorf("resolved reference is not a parameter: %q", pr.Ref.String())) { - continue - } - break - } else { - panic(fmt.Sprintf("resolved reference is not a parameter: %q", pr.Ref.String())) - } - } - } - res[mapKeyFromParam(&pr)] = pr - } -} - -// ParametersFor the specified operation id. -// -// Assumes parameters properly resolve references if any and that -// such references actually resolve to a parameter object. -// Otherwise, panics. -func (s *Spec) ParametersFor(operationID string) []spec.Parameter { - return s.SafeParametersFor(operationID, nil) -} - -// SafeParametersFor the specified operation id. -// -// Does not assume parameters properly resolve references or that -// such references actually resolve to a parameter object. -// -// Upon error, invoke a ErrorOnParamFunc callback with the erroneous -// parameters. If the callback is set to nil, panics upon errors. -func (s *Spec) SafeParametersFor(operationID string, callmeOnError ErrorOnParamFunc) []spec.Parameter { - gatherParams := func(pi *spec.PathItem, op *spec.Operation) []spec.Parameter { - bag := make(map[string]spec.Parameter) - s.paramsAsMap(pi.Parameters, bag, callmeOnError) - s.paramsAsMap(op.Parameters, bag, callmeOnError) - - var res []spec.Parameter - for _, v := range bag { - res = append(res, v) - } - return res - } - for _, pi := range s.spec.Paths.Paths { - if pi.Get != nil && pi.Get.ID == operationID { - return gatherParams(&pi, pi.Get) - } - if pi.Head != nil && pi.Head.ID == operationID { - return gatherParams(&pi, pi.Head) - } - if pi.Options != nil && pi.Options.ID == operationID { - return gatherParams(&pi, pi.Options) - } - if pi.Post != nil && pi.Post.ID == operationID { - return gatherParams(&pi, pi.Post) - } - if pi.Patch != nil && pi.Patch.ID == operationID { - return gatherParams(&pi, pi.Patch) - } - if pi.Put != nil && pi.Put.ID == operationID { - return gatherParams(&pi, pi.Put) - } - if pi.Delete != nil && pi.Delete.ID == operationID { - return gatherParams(&pi, pi.Delete) - } - } - return nil -} - -// ParamsFor the specified method and path. Aggregates them with the defaults etc, so it's all the params that -// apply for the method and path. -// -// Assumes parameters properly resolve references if any and that -// such references actually resolve to a parameter object. -// Otherwise, panics. -func (s *Spec) ParamsFor(method, path string) map[string]spec.Parameter { - return s.SafeParamsFor(method, path, nil) -} - -// SafeParamsFor the specified method and path. Aggregates them with the defaults etc, so it's all the params that -// apply for the method and path. -// -// Does not assume parameters properly resolve references or that -// such references actually resolve to a parameter object. -// -// Upon error, invoke a ErrorOnParamFunc callback with the erroneous -// parameters. If the callback is set to nil, panics upon errors. -func (s *Spec) SafeParamsFor(method, path string, callmeOnError ErrorOnParamFunc) map[string]spec.Parameter { - res := make(map[string]spec.Parameter) - if pi, ok := s.spec.Paths.Paths[path]; ok { - s.paramsAsMap(pi.Parameters, res, callmeOnError) - s.paramsAsMap(s.operations[strings.ToUpper(method)][path].Parameters, res, callmeOnError) - } - return res -} - -// OperationForName gets the operation for the given id -func (s *Spec) OperationForName(operationID string) (string, string, *spec.Operation, bool) { - for method, pathItem := range s.operations { - for path, op := range pathItem { - if operationID == op.ID { - return method, path, op, true - } - } - } - return "", "", nil, false -} - -// OperationFor the given method and path -func (s *Spec) OperationFor(method, path string) (*spec.Operation, bool) { - if mp, ok := s.operations[strings.ToUpper(method)]; ok { - op, fn := mp[path] - return op, fn - } - return nil, false -} - -// Operations gathers all the operations specified in the spec document -func (s *Spec) Operations() map[string]map[string]*spec.Operation { - return s.operations -} - -func (s *Spec) structMapKeys(mp map[string]struct{}) []string { - if len(mp) == 0 { - return nil - } - - result := make([]string, 0, len(mp)) - for k := range mp { - result = append(result, k) - } - return result -} - -// AllPaths returns all the paths in the swagger spec -func (s *Spec) AllPaths() map[string]spec.PathItem { - if s.spec == nil || s.spec.Paths == nil { - return nil - } - return s.spec.Paths.Paths -} - -// OperationIDs gets all the operation ids based on method an dpath -func (s *Spec) OperationIDs() []string { - if len(s.operations) == 0 { - return nil - } - result := make([]string, 0, len(s.operations)) - for method, v := range s.operations { - for p, o := range v { - if o.ID != "" { - result = append(result, o.ID) - } else { - result = append(result, fmt.Sprintf("%s %s", strings.ToUpper(method), p)) - } - } - } - return result -} - -// OperationMethodPaths gets all the operation ids based on method an dpath -func (s *Spec) OperationMethodPaths() []string { - if len(s.operations) == 0 { - return nil - } - result := make([]string, 0, len(s.operations)) - for method, v := range s.operations { - for p := range v { - result = append(result, fmt.Sprintf("%s %s", strings.ToUpper(method), p)) - } - } - return result -} - -// RequiredConsumes gets all the distinct consumes that are specified in the specification document -func (s *Spec) RequiredConsumes() []string { - return s.structMapKeys(s.consumes) -} - -// RequiredProduces gets all the distinct produces that are specified in the specification document -func (s *Spec) RequiredProduces() []string { - return s.structMapKeys(s.produces) -} - -// RequiredSecuritySchemes gets all the distinct security schemes that are specified in the swagger spec -func (s *Spec) RequiredSecuritySchemes() []string { - return s.structMapKeys(s.authSchemes) -} - -// SchemaRef is a reference to a schema -type SchemaRef struct { - Name string - Ref spec.Ref - Schema *spec.Schema - TopLevel bool -} - -// SchemasWithAllOf returns schema references to all schemas that are defined -// with an allOf key -func (s *Spec) SchemasWithAllOf() (result []SchemaRef) { - for _, v := range s.allOfs { - result = append(result, v) - } - return -} - -// AllDefinitions returns schema references for all the definitions that were discovered -func (s *Spec) AllDefinitions() (result []SchemaRef) { - for _, v := range s.allSchemas { - result = append(result, v) - } - return -} - -// AllDefinitionReferences returns json refs for all the discovered schemas -func (s *Spec) AllDefinitionReferences() (result []string) { - for _, v := range s.references.schemas { - result = append(result, v.String()) - } - return -} - -// AllParameterReferences returns json refs for all the discovered parameters -func (s *Spec) AllParameterReferences() (result []string) { - for _, v := range s.references.parameters { - result = append(result, v.String()) - } - return -} - -// AllResponseReferences returns json refs for all the discovered responses -func (s *Spec) AllResponseReferences() (result []string) { - for _, v := range s.references.responses { - result = append(result, v.String()) - } - return -} - -// AllPathItemReferences returns the references for all the items -func (s *Spec) AllPathItemReferences() (result []string) { - for _, v := range s.references.pathItems { - result = append(result, v.String()) - } - return -} - -// AllItemsReferences returns the references for all the items in simple schemas (parameters or headers). -// -// NOTE: since Swagger 2.0 forbids $ref in simple params, this should always yield an empty slice for a valid -// Swagger 2.0 spec. -func (s *Spec) AllItemsReferences() (result []string) { - for _, v := range s.references.items { - result = append(result, v.String()) - } - return -} - -// AllReferences returns all the references found in the document, with possible duplicates -func (s *Spec) AllReferences() (result []string) { - for _, v := range s.references.allRefs { - result = append(result, v.String()) - } - return -} - -// AllRefs returns all the unique references found in the document -func (s *Spec) AllRefs() (result []spec.Ref) { - set := make(map[string]struct{}) - for _, v := range s.references.allRefs { - a := v.String() - if a == "" { - continue - } - if _, ok := set[a]; !ok { - set[a] = struct{}{} - result = append(result, v) - } - } - return -} - -func cloneStringMap(source map[string]string) map[string]string { - res := make(map[string]string, len(source)) - for k, v := range source { - res[k] = v - } - return res -} - -func cloneEnumMap(source map[string][]interface{}) map[string][]interface{} { - res := make(map[string][]interface{}, len(source)) - for k, v := range source { - res[k] = v - } - return res -} - -// ParameterPatterns returns all the patterns found in parameters -// the map is cloned to avoid accidental changes -func (s *Spec) ParameterPatterns() map[string]string { - return cloneStringMap(s.patterns.parameters) -} - -// HeaderPatterns returns all the patterns found in response headers -// the map is cloned to avoid accidental changes -func (s *Spec) HeaderPatterns() map[string]string { - return cloneStringMap(s.patterns.headers) -} - -// ItemsPatterns returns all the patterns found in simple array items -// the map is cloned to avoid accidental changes -func (s *Spec) ItemsPatterns() map[string]string { - return cloneStringMap(s.patterns.items) -} - -// SchemaPatterns returns all the patterns found in schemas -// the map is cloned to avoid accidental changes -func (s *Spec) SchemaPatterns() map[string]string { - return cloneStringMap(s.patterns.schemas) -} - -// AllPatterns returns all the patterns found in the spec -// the map is cloned to avoid accidental changes -func (s *Spec) AllPatterns() map[string]string { - return cloneStringMap(s.patterns.allPatterns) -} - -// ParameterEnums returns all the enums found in parameters -// the map is cloned to avoid accidental changes -func (s *Spec) ParameterEnums() map[string][]interface{} { - return cloneEnumMap(s.enums.parameters) -} - -// HeaderEnums returns all the enums found in response headers -// the map is cloned to avoid accidental changes -func (s *Spec) HeaderEnums() map[string][]interface{} { - return cloneEnumMap(s.enums.headers) -} - -// ItemsEnums returns all the enums found in simple array items -// the map is cloned to avoid accidental changes -func (s *Spec) ItemsEnums() map[string][]interface{} { - return cloneEnumMap(s.enums.items) -} - -// SchemaEnums returns all the enums found in schemas -// the map is cloned to avoid accidental changes -func (s *Spec) SchemaEnums() map[string][]interface{} { - return cloneEnumMap(s.enums.schemas) -} - -// AllEnums returns all the enums found in the spec -// the map is cloned to avoid accidental changes -func (s *Spec) AllEnums() map[string][]interface{} { - return cloneEnumMap(s.enums.allEnums) -} diff --git a/vendor/github.com/go-openapi/analysis/appveyor.yml b/vendor/github.com/go-openapi/analysis/appveyor.yml deleted file mode 100644 index 3239d7441..000000000 --- a/vendor/github.com/go-openapi/analysis/appveyor.yml +++ /dev/null @@ -1,33 +0,0 @@ -version: "0.1.{build}" - -clone_folder: C:\go-openapi\analysis -shallow_clone: true # for startup speed -pull_requests: - do_not_increment_build_number: true - -#skip_tags: true -#skip_branch_with_pr: true - -# appveyor.yml -build: off - -environment: - GOPATH: c:\gopath - -stack: go 1.12 - -test_script: - - go test -v -timeout 20m ./... -#artifacts: -# - path: '%GOPATH%\bin\*.exe' -deploy: off - -notifications: - - provider: Slack - incoming_webhook: https://hooks.slack.com/services/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 - auth_token: - secure: Sf7kZf7ZGbnwWUMpffHwMu5A0cHkLK2MYY32LNTPj4+/3qC3Ghl7+9v4TSLOqOlCwdRNjOGblAq7s+GDJed6/xgRQl1JtCi1klzZNrYX4q01pgTPvvGcwbBkIYgeMaPeIRcK9OZnud7sRXdttozgTOpytps2U6Js32ip7uj5mHSg2ub0FwoSJwlS6dbezZ8+eDhoha0F/guY99BEwx8Bd+zROrT2TFGsSGOFGN6wFc7moCqTHO/YkWib13a2QNXqOxCCVBy/lt76Wp+JkeFppjHlzs/2lP3EAk13RIUAaesdEUHvIHrzCyNJEd3/+KO2DzsWOYfpktd+KBCvgaYOsoo7ubdT3IROeAegZdCgo/6xgCEsmFc9ZcqCfN5yNx2A+BZ2Vwmpws+bQ1E1+B5HDzzaiLcYfG4X2O210QVGVDLWsv1jqD+uPYeHY2WRfh5ZsIUFvaqgUEnwHwrK44/8REAhQavt1QAj5uJpsRd7CkRVPWRNK+yIky+wgbVUFEchRNmS55E7QWf+W4+4QZkQi7vUTMc9nbTUu2Es9NfvfudOpM2wZbn98fjpb/qq/nRv6Bk+ca+7XD5/IgNLMbWp2ouDdzbiHLCOfDUiHiDJhLfFZx9Bwo7ZwfzeOlbrQX66bx7xRKYmOe4DLrXhNcpbsMa8qbfxlZRCmYbubB/Y8h4= - channel: bots - on_build_success: false - on_build_failure: true - on_build_status_changed: true diff --git a/vendor/github.com/go-openapi/analysis/debug.go b/vendor/github.com/go-openapi/analysis/debug.go deleted file mode 100644 index 84cc4e54c..000000000 --- a/vendor/github.com/go-openapi/analysis/debug.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package analysis - -import ( - "fmt" - "log" - "os" - "path/filepath" - "runtime" -) - -var ( - // Debug is true when the SWAGGER_DEBUG env var is not empty. - // It enables a more verbose logging of the spec analyzer. - Debug = os.Getenv("SWAGGER_DEBUG") != "" - // analysisLogger is a debug logger for this package - analysisLogger *log.Logger -) - -func init() { - debugOptions() -} - -func debugOptions() { - analysisLogger = log.New(os.Stdout, "analysis:", log.LstdFlags) -} - -func debugLog(msg string, args ...interface{}) { - // A private, trivial trace logger, based on go-openapi/spec/expander.go:debugLog() - if Debug { - _, file1, pos1, _ := runtime.Caller(1) - analysisLogger.Printf("%s:%d: %s", filepath.Base(file1), pos1, fmt.Sprintf(msg, args...)) - } -} diff --git a/vendor/github.com/go-openapi/analysis/doc.go b/vendor/github.com/go-openapi/analysis/doc.go deleted file mode 100644 index d5294c095..000000000 --- a/vendor/github.com/go-openapi/analysis/doc.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/* -Package analysis provides methods to work with a Swagger specification document from -package go-openapi/spec. - -Analyzing a specification - -An analysed specification object (type Spec) provides methods to work with swagger definition. - -Flattening or expanding a specification - -Flattening a specification bundles all remote $ref in the main spec document. -Depending on flattening options, additional preprocessing may take place: - - full flattening: replacing all inline complex constructs by a named entry in #/definitions - - expand: replace all $ref's in the document by their expanded content - -Merging several specifications - -Mixin several specifications merges all Swagger constructs, and warns about found conflicts. - -Fixing a specification - -Unmarshalling a specification with golang json unmarshalling may lead to -some unwanted result on present but empty fields. - -Analyzing a Swagger schema - -Swagger schemas are analyzed to determine their complexity and qualify their content. -*/ -package analysis diff --git a/vendor/github.com/go-openapi/analysis/fixer.go b/vendor/github.com/go-openapi/analysis/fixer.go deleted file mode 100644 index bfe014ca5..000000000 --- a/vendor/github.com/go-openapi/analysis/fixer.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package analysis - -import "github.com/go-openapi/spec" - -// FixEmptyResponseDescriptions replaces empty ("") response -// descriptions in the input with "(empty)" to ensure that the -// resulting Swagger is stays valid. The problem appears to arise -// from reading in valid specs that have a explicit response -// description of "" (valid, response.description is required), but -// due to zero values being omitted upon re-serializing (omitempty) we -// lose them unless we stick some chars in there. -func FixEmptyResponseDescriptions(s *spec.Swagger) { - if s.Paths != nil { - for _, v := range s.Paths.Paths { - if v.Get != nil { - FixEmptyDescs(v.Get.Responses) - } - if v.Put != nil { - FixEmptyDescs(v.Put.Responses) - } - if v.Post != nil { - FixEmptyDescs(v.Post.Responses) - } - if v.Delete != nil { - FixEmptyDescs(v.Delete.Responses) - } - if v.Options != nil { - FixEmptyDescs(v.Options.Responses) - } - if v.Head != nil { - FixEmptyDescs(v.Head.Responses) - } - if v.Patch != nil { - FixEmptyDescs(v.Patch.Responses) - } - } - } - for k, v := range s.Responses { - FixEmptyDesc(&v) - s.Responses[k] = v - } -} - -// FixEmptyDescs adds "(empty)" as the description for any Response in -// the given Responses object that doesn't already have one. -func FixEmptyDescs(rs *spec.Responses) { - FixEmptyDesc(rs.Default) - for k, v := range rs.StatusCodeResponses { - FixEmptyDesc(&v) - rs.StatusCodeResponses[k] = v - } -} - -// FixEmptyDesc adds "(empty)" as the description to the given -// Response object if it doesn't already have one and isn't a -// ref. No-op on nil input. -func FixEmptyDesc(rs *spec.Response) { - if rs == nil || rs.Description != "" || rs.Ref.Ref.GetURL() != nil { - return - } - rs.Description = "(empty)" -} diff --git a/vendor/github.com/go-openapi/analysis/flatten.go b/vendor/github.com/go-openapi/analysis/flatten.go deleted file mode 100644 index ae1eef5d1..000000000 --- a/vendor/github.com/go-openapi/analysis/flatten.go +++ /dev/null @@ -1,1732 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package analysis - -import ( - "fmt" - "log" - "net/http" - "net/url" - "os" - slashpath "path" - "path/filepath" - "sort" - "strings" - - "strconv" - - "github.com/go-openapi/analysis/internal" - "github.com/go-openapi/jsonpointer" - swspec "github.com/go-openapi/spec" - "github.com/go-openapi/swag" -) - -// FlattenOpts configuration for flattening a swagger specification. -type FlattenOpts struct { - Spec *Spec // The analyzed spec to work with - flattenContext *context // Internal context to track flattening activity - - BasePath string - - // Flattening options - Expand bool // If Expand is true, we skip flattening the spec and expand it instead - Minimal bool - Verbose bool - RemoveUnused bool - - /* Extra keys */ - _ struct{} // require keys -} - -// ExpandOpts creates a spec.ExpandOptions to configure expanding a specification document. -func (f *FlattenOpts) ExpandOpts(skipSchemas bool) *swspec.ExpandOptions { - return &swspec.ExpandOptions{RelativeBase: f.BasePath, SkipSchemas: skipSchemas} -} - -// Swagger gets the swagger specification for this flatten operation -func (f *FlattenOpts) Swagger() *swspec.Swagger { - return f.Spec.spec -} - -// newRef stores information about refs created during the flattening process -type newRef struct { - key string - newName string - path string - isOAIGen bool - resolved bool - schema *swspec.Schema - parents []string -} - -// context stores intermediary results from flatten -type context struct { - newRefs map[string]*newRef - warnings []string - resolved map[string]string -} - -func newContext() *context { - return &context{ - newRefs: make(map[string]*newRef, 150), - warnings: make([]string, 0), - resolved: make(map[string]string, 50), - } -} - -// Flatten an analyzed spec and produce a self-contained spec bundle. -// -// There is a minimal and a full flattening mode. -// -// Minimally flattening a spec means: -// - Expanding parameters, responses, path items, parameter items and header items (references to schemas are left -// unscathed) -// - Importing external (http, file) references so they become internal to the document -// - Moving every JSON pointer to a $ref to a named definition (i.e. the reworked spec does not contain pointers -// like "$ref": "#/definitions/myObject/allOfs/1") -// -// A minimally flattened spec thus guarantees the following properties: -// - all $refs point to a local definition (i.e. '#/definitions/...') -// - definitions are unique -// -// NOTE: arbitrary JSON pointers (other than $refs to top level definitions) are rewritten as definitions if they -// represent a complex schema or express commonality in the spec. -// Otherwise, they are simply expanded. -// -// Minimal flattening is necessary and sufficient for codegen rendering using go-swagger. -// -// Fully flattening a spec means: -// - Moving every complex inline schema to be a definition with an auto-generated name in a depth-first fashion. -// -// By complex, we mean every JSON object with some properties. -// Arrays, when they do not define a tuple, -// or empty objects with or without additionalProperties, are not considered complex and remain inline. -// -// NOTE: rewritten schemas get a vendor extension x-go-gen-location so we know from which part of the spec definitions -// have been created. -// -// Available flattening options: -// - Minimal: stops flattening after minimal $ref processing, leaving schema constructs untouched -// - Expand: expand all $ref's in the document (inoperant if Minimal set to true) -// - Verbose: croaks about name conflicts detected -// - RemoveUnused: removes unused parameters, responses and definitions after expansion/flattening -// -// NOTE: expansion removes all $ref save circular $ref, which remain in place -// -// TODO: additional options -// - ProgagateNameExtensions: ensure that created entries properly follow naming rules when their parent have set a -// x-go-name extension -// - LiftAllOfs: -// - limit the flattening of allOf members when simple objects -// - merge allOf with validation only -// - merge allOf with extensions only -// - ... -// -func Flatten(opts FlattenOpts) error { - // Make sure opts.BasePath is an absolute path - if !filepath.IsAbs(opts.BasePath) { - cwd, _ := os.Getwd() - opts.BasePath = filepath.Join(cwd, opts.BasePath) - } - // make sure drive letter on windows is normalized to lower case - u, _ := url.Parse(opts.BasePath) - opts.BasePath = u.String() - - opts.flattenContext = newContext() - - // recursively expand responses, parameters, path items and items in simple schemas. - // This simplifies the spec and leaves $ref only into schema objects. - if err := swspec.ExpandSpec(opts.Swagger(), opts.ExpandOpts(!opts.Expand)); err != nil { - return err - } - - // strip current file from $ref's, so we can recognize them as proper definitions - // In particular, this works around for issue go-openapi/spec#76: leading absolute file in $ref is stripped - if err := normalizeRef(&opts); err != nil { - return err - } - - if opts.RemoveUnused { - // optionally removes shared parameters and responses already expanded (now unused) - // default parameters (i.e. under paths) remain. - opts.Swagger().Parameters = nil - opts.Swagger().Responses = nil - } - - opts.Spec.reload() // re-analyze - - // at this point there are no references left but in schemas - - for imported := false; !imported; { - // iteratively import remote references until none left. - // This inlining deals with name conflicts by introducing auto-generated names ("OAIGen") - var err error - if imported, err = importExternalReferences(&opts); err != nil { - return err - } - opts.Spec.reload() // re-analyze - } - - if !opts.Minimal && !opts.Expand { - // full flattening: rewrite inline schemas (schemas that aren't simple types or arrays or maps) - if err := nameInlinedSchemas(&opts); err != nil { - return err - } - - opts.Spec.reload() // re-analyze - } - - // rewrite JSON pointers other than $ref to named definitions - // and attempt to resolve conflicting names whenever possible. - if err := stripPointersAndOAIGen(&opts); err != nil { - return err - } - - if opts.RemoveUnused { - // remove unused definitions - expected := make(map[string]struct{}) - for k := range opts.Swagger().Definitions { - expected[slashpath.Join(definitionsPath, jsonpointer.Escape(k))] = struct{}{} - } - for _, k := range opts.Spec.AllDefinitionReferences() { - delete(expected, k) - } - for k := range expected { - debugLog("removing unused definition %s", slashpath.Base(k)) - if opts.Verbose { - log.Printf("info: removing unused definition: %s", slashpath.Base(k)) - } - delete(opts.Swagger().Definitions, slashpath.Base(k)) - } - opts.Spec.reload() // re-analyze - } - - // TODO: simplify known schema patterns to flat objects with properties - // examples: - // - lift simple allOf object, - // - empty allOf with validation only or extensions only - // - rework allOf arrays - // - rework allOf additionalProperties - - if opts.Verbose { - // issue notifications - croak(&opts) - } - return nil -} - -// isAnalyzedAsComplex determines if an analyzed schema is eligible to flattening (i.e. it is "complex"). -// -// Complex means the schema is any of: -// - a simple type (primitive) -// - an array of something (items are possibly complex ; if this is the case, items will generate a definition) -// - a map of something (additionalProperties are possibly complex ; if this is the case, additionalProperties will -// generate a definition) -func isAnalyzedAsComplex(asch *AnalyzedSchema) bool { - if !asch.IsSimpleSchema && !asch.IsArray && !asch.IsMap { - return true - } - return false -} - -// nameInlinedSchemas replaces every complex inline construct by a named definition. -func nameInlinedSchemas(opts *FlattenOpts) error { - debugLog("nameInlinedSchemas") - namer := &inlineSchemaNamer{ - Spec: opts.Swagger(), - Operations: opRefsByRef(gatherOperations(opts.Spec, nil)), - flattenContext: opts.flattenContext, - opts: opts, - } - depthFirst := sortDepthFirst(opts.Spec.allSchemas) - for _, key := range depthFirst { - sch := opts.Spec.allSchemas[key] - if sch.Schema != nil && sch.Schema.Ref.String() == "" && !sch.TopLevel { // inline schema - asch, err := Schema(SchemaOpts{Schema: sch.Schema, Root: opts.Swagger(), BasePath: opts.BasePath}) - if err != nil { - return fmt.Errorf("schema analysis [%s]: %v", key, err) - } - - if isAnalyzedAsComplex(asch) { // move complex schemas to definitions - if err := namer.Name(key, sch.Schema, asch); err != nil { - return err - } - } - } - } - return nil -} - -var depthGroupOrder = []string{ - "sharedParam", "sharedResponse", "sharedOpParam", "opParam", "codeResponse", "defaultResponse", "definition", -} - -func sortDepthFirst(data map[string]SchemaRef) []string { - // group by category (shared params, op param, statuscode response, default response, definitions) - // sort groups internally by number of parts in the key and lexical names - // flatten groups into a single list of keys - sorted := make([]string, 0, len(data)) - grouped := make(map[string]keys, len(data)) - for k := range data { - split := keyParts(k) - var pk string - if split.IsSharedOperationParam() { - pk = "sharedOpParam" - } - if split.IsOperationParam() { - pk = "opParam" - } - if split.IsStatusCodeResponse() { - pk = "codeResponse" - } - if split.IsDefaultResponse() { - pk = "defaultResponse" - } - if split.IsDefinition() { - pk = "definition" - } - if split.IsSharedParam() { - pk = "sharedParam" - } - if split.IsSharedResponse() { - pk = "sharedResponse" - } - grouped[pk] = append(grouped[pk], key{Segments: len(split), Key: k}) - } - - for _, pk := range depthGroupOrder { - res := grouped[pk] - sort.Sort(res) - for _, v := range res { - sorted = append(sorted, v.Key) - } - } - return sorted -} - -type key struct { - Segments int - Key string -} -type keys []key - -func (k keys) Len() int { return len(k) } -func (k keys) Swap(i, j int) { k[i], k[j] = k[j], k[i] } -func (k keys) Less(i, j int) bool { - return k[i].Segments > k[j].Segments || (k[i].Segments == k[j].Segments && k[i].Key < k[j].Key) -} - -type inlineSchemaNamer struct { - Spec *swspec.Swagger - Operations map[string]opRef - flattenContext *context - opts *FlattenOpts -} - -func opRefsByRef(oprefs map[string]opRef) map[string]opRef { - result := make(map[string]opRef, len(oprefs)) - for _, v := range oprefs { - result[v.Ref.String()] = v - } - return result -} - -func (isn *inlineSchemaNamer) Name(key string, schema *swspec.Schema, aschema *AnalyzedSchema) error { - debugLog("naming inlined schema at %s", key) - - parts := keyParts(key) - for _, name := range namesFromKey(parts, aschema, isn.Operations) { - if name != "" { - // create unique name - newName, isOAIGen := uniqifyName(isn.Spec.Definitions, swag.ToJSONName(name)) - - // clone schema - sch, err := cloneSchema(schema) - if err != nil { - return err - } - - // replace values on schema - if err := rewriteSchemaToRef(isn.Spec, key, - swspec.MustCreateRef(slashpath.Join(definitionsPath, newName))); err != nil { - return fmt.Errorf("error while creating definition %q from inline schema: %v", newName, err) - } - - // rewrite any dependent $ref pointing to this place, - // when not already pointing to a top-level definition. - // - // NOTE: this is important if such referers use arbitrary JSON pointers. - an := New(isn.Spec) - for k, v := range an.references.allRefs { - r, _, erd := deepestRef(isn.opts, v) - if erd != nil { - return fmt.Errorf("at %s, %v", k, erd) - } - if r.String() == key || - r.String() == slashpath.Join(definitionsPath, newName) && - slashpath.Dir(v.String()) != definitionsPath { - debugLog("found a $ref to a rewritten schema: %s points to %s", k, v.String()) - - // rewrite $ref to the new target - if err := updateRef(isn.Spec, k, - swspec.MustCreateRef(slashpath.Join(definitionsPath, newName))); err != nil { - return err - } - } - } - - // NOTE: this extension is currently not used by go-swagger (provided for information only) - sch.AddExtension("x-go-gen-location", genLocation(parts)) - - // save cloned schema to definitions - saveSchema(isn.Spec, newName, sch) - - // keep track of created refs - if isn.flattenContext != nil { - debugLog("track created ref: key=%s, newName=%s, isOAIGen=%t", key, newName, isOAIGen) - resolved := false - if _, ok := isn.flattenContext.newRefs[key]; ok { - resolved = isn.flattenContext.newRefs[key].resolved - } - isn.flattenContext.newRefs[key] = &newRef{ - key: key, - newName: newName, - path: slashpath.Join(definitionsPath, newName), - isOAIGen: isOAIGen, - resolved: resolved, - schema: sch, - } - } - } - } - return nil -} - -// genLocation indicates from which section of the specification (models or operations) a definition has been created. -// -// This is reflected in the output spec with a "x-go-gen-location" extension. At the moment, this is is provided -// for information only. -func genLocation(parts splitKey) string { - if parts.IsOperation() { - return "operations" - } - if parts.IsDefinition() { - return "models" - } - return "" -} - -// uniqifyName yields a unique name for a definition -func uniqifyName(definitions swspec.Definitions, name string) (string, bool) { - isOAIGen := false - if name == "" { - name = "oaiGen" - isOAIGen = true - } - if len(definitions) == 0 { - return name, isOAIGen - } - - unq := true - for k := range definitions { - if strings.EqualFold(k, name) { - unq = false - break - } - } - - if unq { - return name, isOAIGen - } - - name += "OAIGen" - isOAIGen = true - var idx int - unique := name - _, known := definitions[unique] - for known { - idx++ - unique = fmt.Sprintf("%s%d", name, idx) - _, known = definitions[unique] - } - return unique, isOAIGen -} - -func namesFromKey(parts splitKey, aschema *AnalyzedSchema, operations map[string]opRef) []string { - var baseNames [][]string - var startIndex int - if parts.IsOperation() { - // params - if parts.IsOperationParam() || parts.IsSharedOperationParam() { - piref := parts.PathItemRef() - if piref.String() != "" && parts.IsOperationParam() { - if op, ok := operations[piref.String()]; ok { - startIndex = 5 - baseNames = append(baseNames, []string{op.ID, "params", "body"}) - } - } else if parts.IsSharedOperationParam() { - pref := parts.PathRef() - for k, v := range operations { - if strings.HasPrefix(k, pref.String()) { - startIndex = 4 - baseNames = append(baseNames, []string{v.ID, "params", "body"}) - } - } - } - } - // responses - if parts.IsOperationResponse() { - piref := parts.PathItemRef() - if piref.String() != "" { - if op, ok := operations[piref.String()]; ok { - startIndex = 6 - baseNames = append(baseNames, []string{op.ID, parts.ResponseName(), "body"}) - } - } - } - } - - // definitions - if parts.IsDefinition() { - nm := parts.DefinitionName() - if nm != "" { - startIndex = 2 - baseNames = append(baseNames, []string{parts.DefinitionName()}) - } - } - - var result []string - for _, segments := range baseNames { - nm := parts.BuildName(segments, startIndex, aschema) - if nm != "" { - result = append(result, nm) - } - } - sort.Strings(result) - return result -} - -const ( - paths = "paths" - responses = "responses" - parameters = "parameters" - definitions = "definitions" - definitionsPath = "#/definitions" -) - -var ( - ignoredKeys map[string]struct{} - validMethods map[string]struct{} -) - -func init() { - ignoredKeys = map[string]struct{}{ - "schema": {}, - "properties": {}, - "not": {}, - "anyOf": {}, - "oneOf": {}, - } - - validMethods = map[string]struct{}{ - "GET": {}, - "HEAD": {}, - "OPTIONS": {}, - "PATCH": {}, - "POST": {}, - "PUT": {}, - "DELETE": {}, - } -} - -type splitKey []string - -func (s splitKey) IsDefinition() bool { - return len(s) > 1 && s[0] == definitions -} - -func (s splitKey) DefinitionName() string { - if !s.IsDefinition() { - return "" - } - return s[1] -} - -func (s splitKey) isKeyName(i int) bool { - if i <= 0 { - return false - } - count := 0 - for idx := i - 1; idx > 0; idx-- { - if s[idx] != "properties" { - break - } - count++ - } - - return count%2 != 0 -} - -func (s splitKey) BuildName(segments []string, startIndex int, aschema *AnalyzedSchema) string { - for i, part := range s[startIndex:] { - if _, ignored := ignoredKeys[part]; !ignored || s.isKeyName(startIndex+i) { - if part == "items" || part == "additionalItems" { - if aschema.IsTuple || aschema.IsTupleWithExtra { - segments = append(segments, "tuple") - } else { - segments = append(segments, "items") - } - if part == "additionalItems" { - segments = append(segments, part) - } - continue - } - segments = append(segments, part) - } - } - return strings.Join(segments, " ") -} - -func (s splitKey) IsOperation() bool { - return len(s) > 1 && s[0] == paths -} - -func (s splitKey) IsSharedOperationParam() bool { - return len(s) > 2 && s[0] == paths && s[2] == parameters -} - -func (s splitKey) IsSharedParam() bool { - return len(s) > 1 && s[0] == parameters -} - -func (s splitKey) IsOperationParam() bool { - return len(s) > 3 && s[0] == paths && s[3] == parameters -} - -func (s splitKey) IsOperationResponse() bool { - return len(s) > 3 && s[0] == paths && s[3] == responses -} - -func (s splitKey) IsSharedResponse() bool { - return len(s) > 1 && s[0] == responses -} - -func (s splitKey) IsDefaultResponse() bool { - return len(s) > 4 && s[0] == paths && s[3] == responses && s[4] == "default" -} - -func (s splitKey) IsStatusCodeResponse() bool { - isInt := func() bool { - _, err := strconv.Atoi(s[4]) - return err == nil - } - return len(s) > 4 && s[0] == paths && s[3] == responses && isInt() -} - -func (s splitKey) ResponseName() string { - if s.IsStatusCodeResponse() { - code, _ := strconv.Atoi(s[4]) - return http.StatusText(code) - } - if s.IsDefaultResponse() { - return "Default" - } - return "" -} - -func (s splitKey) PathItemRef() swspec.Ref { - if len(s) < 3 { - return swspec.Ref{} - } - pth, method := s[1], s[2] - if _, isValidMethod := validMethods[strings.ToUpper(method)]; !isValidMethod && !strings.HasPrefix(method, "x-") { - return swspec.Ref{} - } - return swspec.MustCreateRef("#" + slashpath.Join("/", paths, jsonpointer.Escape(pth), strings.ToUpper(method))) -} - -func (s splitKey) PathRef() swspec.Ref { - if !s.IsOperation() { - return swspec.Ref{} - } - return swspec.MustCreateRef("#" + slashpath.Join("/", paths, jsonpointer.Escape(s[1]))) -} - -func keyParts(key string) splitKey { - var res []string - for _, part := range strings.Split(key[1:], "/") { - if part != "" { - res = append(res, jsonpointer.Unescape(part)) - } - } - return res -} - -func rewriteSchemaToRef(spec *swspec.Swagger, key string, ref swspec.Ref) error { - debugLog("rewriting schema to ref for %s with %s", key, ref.String()) - _, value, err := getPointerFromKey(spec, key) - if err != nil { - return err - } - - switch refable := value.(type) { - case *swspec.Schema: - return rewriteParentRef(spec, key, ref) - - case swspec.Schema: - return rewriteParentRef(spec, key, ref) - - case *swspec.SchemaOrArray: - if refable.Schema != nil { - refable.Schema = &swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - } - - case *swspec.SchemaOrBool: - if refable.Schema != nil { - refable.Schema = &swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - } - default: - return fmt.Errorf("no schema with ref found at %s for %T", key, value) - } - - return nil -} - -func rewriteParentRef(spec *swspec.Swagger, key string, ref swspec.Ref) error { - parent, entry, pvalue, err := getParentFromKey(spec, key) - if err != nil { - return err - } - - debugLog("rewriting holder for %T", pvalue) - switch container := pvalue.(type) { - case swspec.Response: - if err := rewriteParentRef(spec, "#"+parent, ref); err != nil { - return err - } - - case *swspec.Response: - container.Schema = &swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - case *swspec.Responses: - statusCode, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", key[1:], err) - } - resp := container.StatusCodeResponses[statusCode] - resp.Schema = &swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - container.StatusCodeResponses[statusCode] = resp - - case map[string]swspec.Response: - resp := container[entry] - resp.Schema = &swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - container[entry] = resp - - case swspec.Parameter: - if err := rewriteParentRef(spec, "#"+parent, ref); err != nil { - return err - } - - case map[string]swspec.Parameter: - param := container[entry] - param.Schema = &swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - container[entry] = param - - case []swspec.Parameter: - idx, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", key[1:], err) - } - param := container[idx] - param.Schema = &swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - container[idx] = param - - case swspec.Definitions: - container[entry] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - case map[string]swspec.Schema: - container[entry] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - case []swspec.Schema: - idx, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", key[1:], err) - } - container[idx] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - case *swspec.SchemaOrArray: - // NOTE: this is necessarily an array - otherwise, the parent would be *Schema - idx, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", key[1:], err) - } - container.Schemas[idx] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - // NOTE: can't have case *swspec.SchemaOrBool = parent in this case is *Schema - - default: - return fmt.Errorf("unhandled parent schema rewrite %s (%T)", key, pvalue) - } - return nil -} - -func cloneSchema(schema *swspec.Schema) (*swspec.Schema, error) { - var sch swspec.Schema - if err := swag.FromDynamicJSON(schema, &sch); err != nil { - return nil, fmt.Errorf("cannot clone schema: %v", err) - } - return &sch, nil -} - -// importExternalReferences iteratively digs remote references and imports them into the main schema. -// -// At every iteration, new remotes may be found when digging deeper: they are rebased to the current schema before being imported. -// -// This returns true when no more remote references can be found. -func importExternalReferences(opts *FlattenOpts) (bool, error) { - debugLog("importExternalReferences") - - groupedRefs := reverseIndexForSchemaRefs(opts) - sortedRefStr := make([]string, 0, len(groupedRefs)) - if opts.flattenContext == nil { - opts.flattenContext = newContext() - } - - // sort $ref resolution to ensure deterministic name conflict resolution - for refStr := range groupedRefs { - sortedRefStr = append(sortedRefStr, refStr) - } - sort.Strings(sortedRefStr) - - complete := true - - for _, refStr := range sortedRefStr { - entry := groupedRefs[refStr] - if entry.Ref.HasFragmentOnly { - continue - } - complete = false - var isOAIGen bool - - newName := opts.flattenContext.resolved[refStr] - if newName != "" { - // rewrite ref with already resolved external ref (useful for cyclical refs): - // rewrite external refs to local ones - debugLog("resolving known ref [%s] to %s", refStr, newName) - for _, key := range entry.Keys { - if err := updateRef(opts.Swagger(), key, - swspec.MustCreateRef(slashpath.Join(definitionsPath, newName))); err != nil { - return false, err - } - } - } else { - // resolve schemas - debugLog("resolving schema from remote $ref [%s]", refStr) - sch, err := swspec.ResolveRefWithBase(opts.Swagger(), &entry.Ref, opts.ExpandOpts(false)) - if err != nil { - return false, fmt.Errorf("could not resolve schema: %v", err) - } - - // at this stage only $ref analysis matters - partialAnalyzer := &Spec{ - references: referenceAnalysis{}, - patterns: patternAnalysis{}, - enums: enumAnalysis{}, - } - partialAnalyzer.reset() - partialAnalyzer.analyzeSchema("", *sch, "/") - - // now rewrite those refs with rebase - for key, ref := range partialAnalyzer.references.allRefs { - if err := updateRef(sch, key, swspec.MustCreateRef(rebaseRef(entry.Ref.String(), ref.String()))); err != nil { - return false, fmt.Errorf("failed to rewrite ref for key %q at %s: %v", key, entry.Ref.String(), err) - } - } - - // generate a unique name - isOAIGen means that a naming conflict was resolved by changing the name - newName, isOAIGen = uniqifyName(opts.Swagger().Definitions, nameFromRef(entry.Ref)) - debugLog("new name for [%s]: %s - with name conflict:%t", - strings.Join(entry.Keys, ", "), newName, isOAIGen) - - opts.flattenContext.resolved[refStr] = newName - - // rewrite the external refs to local ones - for _, key := range entry.Keys { - if err := updateRef(opts.Swagger(), key, - swspec.MustCreateRef(slashpath.Join(definitionsPath, newName))); err != nil { - return false, err - } - - // keep track of created refs - resolved := false - if _, ok := opts.flattenContext.newRefs[key]; ok { - resolved = opts.flattenContext.newRefs[key].resolved - } - opts.flattenContext.newRefs[key] = &newRef{ - key: key, - newName: newName, - path: slashpath.Join(definitionsPath, newName), - isOAIGen: isOAIGen, - resolved: resolved, - schema: sch, - } - } - - // add the resolved schema to the definitions - saveSchema(opts.Swagger(), newName, sch) - } - } - // maintains ref index entries - for k := range opts.flattenContext.newRefs { - r := opts.flattenContext.newRefs[k] - - // update tracking with resolved schemas - if r.schema.Ref.String() != "" { - ref := swspec.MustCreateRef(r.path) - sch, err := swspec.ResolveRefWithBase(opts.Swagger(), &ref, opts.ExpandOpts(false)) - if err != nil { - return false, fmt.Errorf("could not resolve schema: %v", err) - } - r.schema = sch - } - // update tracking with renamed keys: got a cascade of refs - if r.path != k { - renamed := *r - renamed.key = r.path - opts.flattenContext.newRefs[renamed.path] = &renamed - - // indirect ref - r.newName = slashpath.Base(k) - r.schema = swspec.RefSchema(r.path) - r.path = k - r.isOAIGen = strings.Contains(k, "OAIGen") - } - } - - return complete, nil -} - -type refRevIdx struct { - Ref swspec.Ref - Keys []string -} - -// rebaseRef rebase a remote ref relative to a base ref. -// -// NOTE: does not support JSONschema ID for $ref (we assume we are working with swagger specs here). -// -// NOTE(windows): -// * refs are assumed to have been normalized with drive letter lower cased (from go-openapi/spec) -// * "/ in paths may appear as escape sequences -func rebaseRef(baseRef string, ref string) string { - debugLog("rebasing ref: %s onto %s", ref, baseRef) - baseRef, _ = url.PathUnescape(baseRef) - ref, _ = url.PathUnescape(ref) - if baseRef == "" || baseRef == "." || strings.HasPrefix(baseRef, "#") { - return ref - } - - parts := strings.Split(ref, "#") - - baseParts := strings.Split(baseRef, "#") - baseURL, _ := url.Parse(baseParts[0]) - if strings.HasPrefix(ref, "#") { - if baseURL.Host == "" { - return strings.Join([]string{baseParts[0], parts[1]}, "#") - } - return strings.Join([]string{baseParts[0], parts[1]}, "#") - } - - refURL, _ := url.Parse(parts[0]) - if refURL.Host != "" || filepath.IsAbs(parts[0]) { - // not rebasing an absolute path - return ref - } - - // there is a relative path - var basePath string - if baseURL.Host != "" { - // when there is a host, standard URI rules apply (with "/") - baseURL.Path = slashpath.Dir(baseURL.Path) - baseURL.Path = slashpath.Join(baseURL.Path, "/"+parts[0]) - return baseURL.String() - } - - // this is a local relative path - // basePart[0] and parts[0] are local filesystem directories/files - basePath = filepath.Dir(baseParts[0]) - relPath := filepath.Join(basePath, string(filepath.Separator)+parts[0]) - if len(parts) > 1 { - return strings.Join([]string{relPath, parts[1]}, "#") - } - return relPath -} - -// normalizePath renders absolute path on remote file refs -// -// NOTE(windows): -// * refs are assumed to have been normalized with drive letter lower cased (from go-openapi/spec) -// * "/ in paths may appear as escape sequences -func normalizePath(ref swspec.Ref, opts *FlattenOpts) (normalizedPath string) { - uri, _ := url.PathUnescape(ref.String()) - if ref.HasFragmentOnly || filepath.IsAbs(uri) { - normalizedPath = uri - return - } - - refURL, _ := url.Parse(uri) - if refURL.Host != "" { - normalizedPath = uri - return - } - - parts := strings.Split(uri, "#") - // BasePath, parts[0] are local filesystem directories, guaranteed to be absolute at this stage - parts[0] = filepath.Join(filepath.Dir(opts.BasePath), parts[0]) - normalizedPath = strings.Join(parts, "#") - return -} - -func reverseIndexForSchemaRefs(opts *FlattenOpts) map[string]refRevIdx { - collected := make(map[string]refRevIdx) - for key, schRef := range opts.Spec.references.schemas { - // normalize paths before sorting, - // so we get together keys in same external file - normalizedPath := normalizePath(schRef, opts) - if entry, ok := collected[normalizedPath]; ok { - entry.Keys = append(entry.Keys, key) - collected[normalizedPath] = entry - } else { - collected[normalizedPath] = refRevIdx{ - Ref: schRef, - Keys: []string{key}, - } - } - } - return collected -} - -func nameFromRef(ref swspec.Ref) string { - u := ref.GetURL() - if u.Fragment != "" { - return swag.ToJSONName(slashpath.Base(u.Fragment)) - } - if u.Path != "" { - bn := slashpath.Base(u.Path) - if bn != "" && bn != "/" { - ext := slashpath.Ext(bn) - if ext != "" { - return swag.ToJSONName(bn[:len(bn)-len(ext)]) - } - return swag.ToJSONName(bn) - } - } - return swag.ToJSONName(strings.Replace(u.Host, ".", " ", -1)) -} - -func saveSchema(spec *swspec.Swagger, name string, schema *swspec.Schema) { - if schema == nil { - return - } - if spec.Definitions == nil { - spec.Definitions = make(map[string]swspec.Schema, 150) - } - spec.Definitions[name] = *schema -} - -// getPointerFromKey retrieves the content of the JSON pointer "key" -func getPointerFromKey(spec interface{}, key string) (string, interface{}, error) { - switch spec.(type) { - case *swspec.Schema: - case *swspec.Swagger: - default: - panic("unexpected type used in getPointerFromKey") - } - if key == "#/" { - return "", spec, nil - } - // unescape chars in key, e.g. "{}" from path params - pth, _ := internal.PathUnescape(key[1:]) - ptr, err := jsonpointer.New(pth) - if err != nil { - return "", nil, err - } - - value, _, err := ptr.Get(spec) - if err != nil { - debugLog("error when getting key: %s with path: %s", key, pth) - return "", nil, err - } - return pth, value, nil -} - -// getParentFromKey retrieves the container of the JSON pointer "key" -func getParentFromKey(spec interface{}, key string) (string, string, interface{}, error) { - switch spec.(type) { - case *swspec.Schema: - case *swspec.Swagger: - default: - panic("unexpected type used in getPointerFromKey") - } - // unescape chars in key, e.g. "{}" from path params - pth, _ := internal.PathUnescape(key[1:]) - - parent, entry := slashpath.Dir(pth), slashpath.Base(pth) - debugLog("getting schema holder at: %s, with entry: %s", parent, entry) - - pptr, err := jsonpointer.New(parent) - if err != nil { - return "", "", nil, err - } - pvalue, _, err := pptr.Get(spec) - if err != nil { - return "", "", nil, fmt.Errorf("can't get parent for %s: %v", parent, err) - } - return parent, entry, pvalue, nil -} - -// updateRef replaces a ref by another one -func updateRef(spec interface{}, key string, ref swspec.Ref) error { - switch spec.(type) { - case *swspec.Schema: - case *swspec.Swagger: - default: - panic("unexpected type used in getPointerFromKey") - } - debugLog("updating ref for %s with %s", key, ref.String()) - pth, value, err := getPointerFromKey(spec, key) - if err != nil { - return err - } - - switch refable := value.(type) { - case *swspec.Schema: - refable.Ref = ref - case *swspec.SchemaOrArray: - if refable.Schema != nil { - refable.Schema.Ref = ref - } - case *swspec.SchemaOrBool: - if refable.Schema != nil { - refable.Schema.Ref = ref - } - case swspec.Schema: - debugLog("rewriting holder for %T", refable) - _, entry, pvalue, erp := getParentFromKey(spec, key) - if erp != nil { - return err - } - switch container := pvalue.(type) { - case swspec.Definitions: - container[entry] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - case map[string]swspec.Schema: - container[entry] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - case []swspec.Schema: - idx, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", pth, err) - } - container[idx] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - case *swspec.SchemaOrArray: - // NOTE: this is necessarily an array - otherwise, the parent would be *Schema - idx, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", pth, err) - } - container.Schemas[idx] = swspec.Schema{SchemaProps: swspec.SchemaProps{Ref: ref}} - - // NOTE: can't have case *swspec.SchemaOrBool = parent in this case is *Schema - - default: - return fmt.Errorf("unhandled container type at %s: %T", key, value) - } - - default: - return fmt.Errorf("no schema with ref found at %s for %T", key, value) - } - - return nil -} - -// updateRefWithSchema replaces a ref with a schema (i.e. re-inline schema) -func updateRefWithSchema(spec *swspec.Swagger, key string, sch *swspec.Schema) error { - debugLog("updating ref for %s with schema", key) - pth, value, err := getPointerFromKey(spec, key) - if err != nil { - return err - } - - switch refable := value.(type) { - case *swspec.Schema: - *refable = *sch - case swspec.Schema: - _, entry, pvalue, erp := getParentFromKey(spec, key) - if erp != nil { - return err - } - switch container := pvalue.(type) { - case swspec.Definitions: - container[entry] = *sch - - case map[string]swspec.Schema: - container[entry] = *sch - - case []swspec.Schema: - idx, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", pth, err) - } - container[idx] = *sch - - case *swspec.SchemaOrArray: - // NOTE: this is necessarily an array - otherwise, the parent would be *Schema - idx, err := strconv.Atoi(entry) - if err != nil { - return fmt.Errorf("%s not a number: %v", pth, err) - } - container.Schemas[idx] = *sch - - // NOTE: can't have case *swspec.SchemaOrBool = parent in this case is *Schema - - default: - return fmt.Errorf("unhandled type for parent of [%s]: %T", key, value) - } - case *swspec.SchemaOrArray: - *refable.Schema = *sch - // NOTE: can't have case *swspec.SchemaOrBool = parent in this case is *Schema - case *swspec.SchemaOrBool: - *refable.Schema = *sch - default: - return fmt.Errorf("no schema with ref found at %s for %T", key, value) - } - - return nil -} - -func containsString(names []string, name string) bool { - for _, nm := range names { - if nm == name { - return true - } - } - return false -} - -type opRef struct { - Method string - Path string - Key string - ID string - Op *swspec.Operation - Ref swspec.Ref -} - -type opRefs []opRef - -func (o opRefs) Len() int { return len(o) } -func (o opRefs) Swap(i, j int) { o[i], o[j] = o[j], o[i] } -func (o opRefs) Less(i, j int) bool { return o[i].Key < o[j].Key } - -func gatherOperations(specDoc *Spec, operationIDs []string) map[string]opRef { - var oprefs opRefs - - for method, pathItem := range specDoc.Operations() { - for pth, operation := range pathItem { - vv := *operation - oprefs = append(oprefs, opRef{ - Key: swag.ToGoName(strings.ToLower(method) + " " + pth), - Method: method, - Path: pth, - ID: vv.ID, - Op: &vv, - Ref: swspec.MustCreateRef("#" + slashpath.Join("/paths", jsonpointer.Escape(pth), method)), - }) - } - } - - sort.Sort(oprefs) - - operations := make(map[string]opRef) - for _, opr := range oprefs { - nm := opr.ID - if nm == "" { - nm = opr.Key - } - - oo, found := operations[nm] - if found && oo.Method != opr.Method && oo.Path != opr.Path { - nm = opr.Key - } - if len(operationIDs) == 0 || containsString(operationIDs, opr.ID) || containsString(operationIDs, nm) { - opr.ID = nm - opr.Op.ID = nm - operations[nm] = opr - } - } - return operations -} - -// stripPointersAndOAIGen removes anonymous JSON pointers from spec and chain with name conflicts handler. -// This loops until the spec has no such pointer and all name conflicts have been reduced as much as possible. -func stripPointersAndOAIGen(opts *FlattenOpts) error { - // name all JSON pointers to anonymous documents - if err := namePointers(opts); err != nil { - return err - } - - // remove unnecessary OAIGen ref (created when flattening external refs creates name conflicts) - hasIntroducedPointerOrInline, ers := stripOAIGen(opts) - if ers != nil { - return ers - } - - // iterate as pointer or OAIGen resolution may introduce inline schemas or pointers - for hasIntroducedPointerOrInline { - if !opts.Minimal { - opts.Spec.reload() // re-analyze - if err := nameInlinedSchemas(opts); err != nil { - return err - } - } - - if err := namePointers(opts); err != nil { - return err - } - - // restrip - if hasIntroducedPointerOrInline, ers = stripOAIGen(opts); ers != nil { - return ers - } - - opts.Spec.reload() // re-analyze - } - return nil -} - -// stripOAIGen strips the spec from unnecessary OAIGen constructs, initially created to dedupe flattened definitions. -// -// A dedupe is deemed unnecessary whenever: -// - the only conflict is with its (single) parent: OAIGen is merged into its parent (reinlining) -// - there is a conflict with multiple parents: merge OAIGen in first parent, the rewrite other parents to point to -// the first parent. -// -// This function returns a true bool whenever it re-inlined a complex schema, so the caller may chose to iterate -// pointer and name resolution again. -func stripOAIGen(opts *FlattenOpts) (bool, error) { - debugLog("stripOAIGen") - replacedWithComplex := false - - // figure out referers of OAIGen definitions - for _, r := range opts.flattenContext.newRefs { - if !r.isOAIGen || r.resolved { // bail on already resolved entries (avoid looping) - continue - } - for k, v := range opts.Spec.references.allRefs { - if r.path != v.String() { - continue - } - found := false - for _, p := range r.parents { - if p == k { - found = true - break - } - } - if !found { - r.parents = append(r.parents, k) - } - } - } - - for k := range opts.flattenContext.newRefs { - r := opts.flattenContext.newRefs[k] - //debugLog("newRefs[%s]: isOAIGen: %t, resolved: %t, name: %s, path:%s, #parents: %d, parents: %v, ref: %s", - // k, r.isOAIGen, r.resolved, r.newName, r.path, len(r.parents), r.parents, r.schema.Ref.String()) - if r.isOAIGen && len(r.parents) >= 1 { - pr := r.parents - sort.Strings(pr) - - // rewrite first parent schema in lexicographical order - debugLog("rewrite first parent in lex order %s with schema", pr[0]) - if err := updateRefWithSchema(opts.Swagger(), pr[0], r.schema); err != nil { - return false, err - } - if pa, ok := opts.flattenContext.newRefs[pr[0]]; ok && pa.isOAIGen { - // update parent in ref index entry - debugLog("update parent entry: %s", pr[0]) - pa.schema = r.schema - pa.resolved = false - replacedWithComplex = true - } - - // rewrite other parents to point to first parent - if len(pr) > 1 { - for _, p := range pr[1:] { - replacingRef := swspec.MustCreateRef(pr[0]) - - // set complex when replacing ref is an anonymous jsonpointer: further processing may be required - replacedWithComplex = replacedWithComplex || - slashpath.Dir(replacingRef.String()) != definitionsPath - debugLog("rewrite parent with ref: %s", replacingRef.String()) - - // NOTE: it is possible at this stage to introduce json pointers (to non-definitions places). - // Those are stripped later on. - if err := updateRef(opts.Swagger(), p, replacingRef); err != nil { - return false, err - } - - if pa, ok := opts.flattenContext.newRefs[p]; ok && pa.isOAIGen { - // update parent in ref index - debugLog("update parent entry: %s", p) - pa.schema = r.schema - pa.resolved = false - replacedWithComplex = true - } - } - } - - // remove OAIGen definition - debugLog("removing definition %s", slashpath.Base(r.path)) - delete(opts.Swagger().Definitions, slashpath.Base(r.path)) - - // propagate changes in ref index for keys which have this one as a parent - for kk, value := range opts.flattenContext.newRefs { - if kk == k || !value.isOAIGen || value.resolved { - continue - } - found := false - newParents := make([]string, 0, len(value.parents)) - for _, parent := range value.parents { - switch { - case parent == r.path: - found = true - parent = pr[0] - case strings.HasPrefix(parent, r.path+"/"): - found = true - parent = slashpath.Join(pr[0], strings.TrimPrefix(parent, r.path)) - } - newParents = append(newParents, parent) - } - if found { - value.parents = newParents - } - } - - // mark naming conflict as resolved - debugLog("marking naming conflict resolved for key: %s", r.key) - opts.flattenContext.newRefs[r.key].isOAIGen = false - opts.flattenContext.newRefs[r.key].resolved = true - - // determine if the previous substitution did inline a complex schema - if r.schema != nil && r.schema.Ref.String() == "" { // inline schema - asch, err := Schema(SchemaOpts{Schema: r.schema, Root: opts.Swagger(), BasePath: opts.BasePath}) - if err != nil { - return false, err - } - debugLog("re-inlined schema: parent: %s, %t", pr[0], isAnalyzedAsComplex(asch)) - replacedWithComplex = replacedWithComplex || - !(slashpath.Dir(pr[0]) == definitionsPath) && isAnalyzedAsComplex(asch) - } - } - } - - debugLog("replacedWithComplex: %t", replacedWithComplex) - opts.Spec.reload() // re-analyze - return replacedWithComplex, nil -} - -// croak logs notifications and warnings about valid, but possibly unwanted constructs resulting -// from flattening a spec -func croak(opts *FlattenOpts) { - reported := make(map[string]bool, len(opts.flattenContext.newRefs)) - for _, v := range opts.Spec.references.allRefs { - // warns about duplicate handling - for _, r := range opts.flattenContext.newRefs { - if r.isOAIGen && r.path == v.String() { - reported[r.newName] = true - } - } - } - for k := range reported { - log.Printf("warning: duplicate flattened definition name resolved as %s", k) - } - // warns about possible type mismatches - uniqueMsg := make(map[string]bool) - for _, msg := range opts.flattenContext.warnings { - if _, ok := uniqueMsg[msg]; ok { - continue - } - log.Printf("warning: %s", msg) - uniqueMsg[msg] = true - } -} - -// namePointers replaces all JSON pointers to anonymous documents by a $ref to a new named definitions. -// -// This is carried on depth-first. Pointers to $refs which are top level definitions are replaced by the $ref itself. -// Pointers to simple types are expanded, unless they express commonality (i.e. several such $ref are used). -func namePointers(opts *FlattenOpts) error { - debugLog("name pointers") - refsToReplace := make(map[string]SchemaRef, len(opts.Spec.references.schemas)) - for k, ref := range opts.Spec.references.allRefs { - if slashpath.Dir(ref.String()) == definitionsPath { - // this a ref to a top-level definition: ok - continue - } - replacingRef, sch, erd := deepestRef(opts, ref) - if erd != nil { - return fmt.Errorf("at %s, %v", k, erd) - } - debugLog("planning pointer to replace at %s: %s, resolved to: %s", k, ref.String(), replacingRef.String()) - refsToReplace[k] = SchemaRef{ - Name: k, // caller - Ref: replacingRef, // callee - Schema: sch, - TopLevel: slashpath.Dir(replacingRef.String()) == definitionsPath, - } - } - depthFirst := sortDepthFirst(refsToReplace) - namer := &inlineSchemaNamer{ - Spec: opts.Swagger(), - Operations: opRefsByRef(gatherOperations(opts.Spec, nil)), - flattenContext: opts.flattenContext, - opts: opts, - } - - for _, key := range depthFirst { - v := refsToReplace[key] - // update current replacement, which may have been updated by previous changes of deeper elements - replacingRef, sch, erd := deepestRef(opts, v.Ref) - if erd != nil { - return fmt.Errorf("at %s, %v", key, erd) - } - v.Ref = replacingRef - v.Schema = sch - v.TopLevel = slashpath.Dir(replacingRef.String()) == definitionsPath - debugLog("replacing pointer at %s: resolved to: %s", key, v.Ref.String()) - - if v.TopLevel { - debugLog("replace pointer %s by canonical definition: %s", key, v.Ref.String()) - // if the schema is a $ref to a top level definition, just rewrite the pointer to this $ref - if err := updateRef(opts.Swagger(), key, v.Ref); err != nil { - return err - } - } else { - // this is a JSON pointer to an anonymous document (internal or external): - // create a definition for this schema when: - // - it is a complex schema - // - or it is pointed by more than one $ref (i.e. expresses commonality) - // otherwise, expand the pointer (single reference to a simple type) - // - // The named definition for this follows the target's key, not the caller's - debugLog("namePointers at %s for %s", key, v.Ref.String()) - - // qualify the expanded schema - /* - if key == "#/paths/~1some~1where~1{id}/get/parameters/1/items" { - // DEBUG - //func getPointerFromKey(spec interface{}, key string) (string, interface{}, error) { - k, res, err := getPointerFromKey(namer.Spec, key) - debugLog("k = %s, res=%#v, err=%v", k, res, err) - } - */ - asch, ers := Schema(SchemaOpts{Schema: v.Schema, Root: opts.Swagger(), BasePath: opts.BasePath}) - if ers != nil { - return fmt.Errorf("schema analysis [%s]: %v", key, ers) - } - callers := make([]string, 0, 64) - - debugLog("looking for callers") - an := New(opts.Swagger()) - for k, w := range an.references.allRefs { - r, _, erd := deepestRef(opts, w) - if erd != nil { - return fmt.Errorf("at %s, %v", key, erd) - } - if r.String() == v.Ref.String() { - callers = append(callers, k) - } - } - debugLog("callers for %s: %d", v.Ref.String(), len(callers)) - if len(callers) == 0 { - // has already been updated and resolved - continue - } - - parts := keyParts(v.Ref.String()) - debugLog("number of callers for %s: %d", v.Ref.String(), len(callers)) - // identifying edge case when the namer did nothing because we point to a non-schema object - // no definition is created and we expand the $ref for all callers - if (!asch.IsSimpleSchema || len(callers) > 1) && !parts.IsSharedParam() && !parts.IsSharedResponse() { - debugLog("replace JSON pointer at [%s] by definition: %s", key, v.Ref.String()) - if err := namer.Name(v.Ref.String(), v.Schema, asch); err != nil { - return err - } - - // regular case: we named the $ref as a definition, and we move all callers to this new $ref - for _, caller := range callers { - if caller != key { - // move $ref for next to resolve - debugLog("identified caller of %s at [%s]", v.Ref.String(), caller) - c := refsToReplace[caller] - c.Ref = v.Ref - refsToReplace[caller] = c - } - } - } else { - debugLog("expand JSON pointer for key=%s", key) - if err := updateRefWithSchema(opts.Swagger(), key, v.Schema); err != nil { - return err - } - // NOTE: there is no other caller to update - } - } - } - opts.Spec.reload() // re-analyze - return nil -} - -// deepestRef finds the first definition ref, from a cascade of nested refs which are not definitions. -// - if no definition is found, returns the deepest ref. -// - pointers to external files are expanded -// -// NOTE: all external $ref's are assumed to be already expanded at this stage. -func deepestRef(opts *FlattenOpts, ref swspec.Ref) (swspec.Ref, *swspec.Schema, error) { - if !ref.HasFragmentOnly { - // we found an external $ref, which is odd - // does nothing on external $refs - return ref, nil, nil - } - currentRef := ref - visited := make(map[string]bool, 64) -DOWNREF: - for currentRef.String() != "" { - if slashpath.Dir(currentRef.String()) == definitionsPath { - // this is a top-level definition: stop here and return this ref - return currentRef, nil, nil - } - if _, beenThere := visited[currentRef.String()]; beenThere { - return swspec.Ref{}, nil, - fmt.Errorf("cannot resolve cyclic chain of pointers under %s", currentRef.String()) - } - visited[currentRef.String()] = true - value, _, err := currentRef.GetPointer().Get(opts.Swagger()) - if err != nil { - return swspec.Ref{}, nil, err - } - switch refable := value.(type) { - case *swspec.Schema: - if refable.Ref.String() == "" { - break DOWNREF - } - currentRef = refable.Ref - - case swspec.Schema: - if refable.Ref.String() == "" { - break DOWNREF - } - currentRef = refable.Ref - - case *swspec.SchemaOrArray: - if refable.Schema == nil || refable.Schema != nil && refable.Schema.Ref.String() == "" { - break DOWNREF - } - currentRef = refable.Schema.Ref - - case *swspec.SchemaOrBool: - if refable.Schema == nil || refable.Schema != nil && refable.Schema.Ref.String() == "" { - break DOWNREF - } - currentRef = refable.Schema.Ref - - case swspec.Response: - // a pointer points to a schema initially marshalled in responses section... - // Attempt to convert this to a schema. If this fails, the spec is invalid - asJSON, _ := refable.MarshalJSON() - var asSchema swspec.Schema - err := asSchema.UnmarshalJSON(asJSON) - if err != nil { - return swspec.Ref{}, nil, - fmt.Errorf("invalid type for resolved JSON pointer %s. Expected a schema a, got: %T", - currentRef.String(), value) - - } - opts.flattenContext.warnings = append(opts.flattenContext.warnings, - fmt.Sprintf("found $ref %q (response) interpreted as schema", currentRef.String())) - - if asSchema.Ref.String() == "" { - break DOWNREF - } - currentRef = asSchema.Ref - - case swspec.Parameter: - // a pointer points to a schema initially marshalled in parameters section... - // Attempt to convert this to a schema. If this fails, the spec is invalid - asJSON, _ := refable.MarshalJSON() - var asSchema swspec.Schema - err := asSchema.UnmarshalJSON(asJSON) - if err != nil { - return swspec.Ref{}, nil, - fmt.Errorf("invalid type for resolved JSON pointer %s. Expected a schema a, got: %T", - currentRef.String(), value) - - } - opts.flattenContext.warnings = append(opts.flattenContext.warnings, - fmt.Sprintf("found $ref %q (parameter) interpreted as schema", currentRef.String())) - - if asSchema.Ref.String() == "" { - break DOWNREF - } - currentRef = asSchema.Ref - - default: - return swspec.Ref{}, nil, - fmt.Errorf("unhandled type to resolve JSON pointer %s. Expected a Schema, got: %T", - currentRef.String(), value) - - } - } - // assess what schema we're ending with - sch, erv := swspec.ResolveRefWithBase(opts.Swagger(), ¤tRef, opts.ExpandOpts(false)) - if erv != nil { - return swspec.Ref{}, nil, erv - } - if sch == nil { - return swspec.Ref{}, nil, fmt.Errorf("no schema found at %s", currentRef.String()) - } - return currentRef, sch, nil -} - -// normalizeRef strips the current file from any $ref. This works around issue go-openapi/spec#76: -// leading absolute file in $ref is stripped -func normalizeRef(opts *FlattenOpts) error { - debugLog("normalizeRef") - opts.Spec.reload() // re-analyze - for k, w := range opts.Spec.references.allRefs { - if strings.HasPrefix(w.String(), opts.BasePath+definitionsPath) { // may be a mix of / and \, depending on OS - // strip base path from definition - debugLog("stripping absolute path for: %s", w.String()) - if err := updateRef(opts.Swagger(), k, - swspec.MustCreateRef(slashpath.Join(definitionsPath, slashpath.Base(w.String())))); err != nil { - return err - } - } - } - opts.Spec.reload() // re-analyze - return nil -} diff --git a/vendor/github.com/go-openapi/analysis/go.mod b/vendor/github.com/go-openapi/analysis/go.mod deleted file mode 100644 index 6c8e58577..000000000 --- a/vendor/github.com/go-openapi/analysis/go.mod +++ /dev/null @@ -1,13 +0,0 @@ -module github.com/go-openapi/analysis - -require ( - github.com/go-openapi/jsonpointer v0.19.3 - github.com/go-openapi/loads v0.19.0 - github.com/go-openapi/spec v0.19.3 - github.com/go-openapi/strfmt v0.19.3 - github.com/go-openapi/swag v0.19.5 - github.com/stretchr/testify v1.3.0 - go.mongodb.org/mongo-driver v1.1.1 // indirect -) - -go 1.13 diff --git a/vendor/github.com/go-openapi/analysis/go.sum b/vendor/github.com/go-openapi/analysis/go.sum deleted file mode 100644 index 8e8b5f9bc..000000000 --- a/vendor/github.com/go-openapi/analysis/go.sum +++ /dev/null @@ -1,97 +0,0 @@ -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -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/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -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/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/loads v0.19.0 h1:wCOBNscACI8L93tt5tvB2zOMkJ098XCw3fP0BY2ybDA= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.2 h1:clPGfBnJohokno0e+d7hs6Yocrzjlgz6EsQSDncCRnE= -github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -go.mongodb.org/mongo-driver v1.0.3 h1:GKoji1ld3tw2aC+GX1wbr/J2fX13yNacEYoJ8Nhr0yU= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1 h1:Sq1fR+0c58RME5EoqKdjkiQAmPjmfHlZOoRI6fTUOcs= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/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-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/analysis/internal/post_go18.go b/vendor/github.com/go-openapi/analysis/internal/post_go18.go deleted file mode 100644 index f96f55c08..000000000 --- a/vendor/github.com/go-openapi/analysis/internal/post_go18.go +++ /dev/null @@ -1,29 +0,0 @@ -// +build go1.8 - -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package internal - -import "net/url" - -// PathUnescape provides url.PathUnescape(), with seamless -// go version support for pre-go1.8 -// -// TODO: this function is currently defined in go-openapi/swag, -// but unexported. We might chose to export it, or simple phase -// out pre-go1.8 support. -func PathUnescape(path string) (string, error) { - return url.PathUnescape(path) -} diff --git a/vendor/github.com/go-openapi/analysis/internal/pre_go18.go b/vendor/github.com/go-openapi/analysis/internal/pre_go18.go deleted file mode 100644 index 4cc644182..000000000 --- a/vendor/github.com/go-openapi/analysis/internal/pre_go18.go +++ /dev/null @@ -1,29 +0,0 @@ -// +build !go1.8 - -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package internal - -import "net/url" - -// PathUnescape provides url.PathUnescape(), with seamless -// go version support for pre-go1.8 -// -// TODO: this function is currently defined in go-openapi/swag, -// but unexported. We might chose to export it, or simple phase -// out pre-go1.8 support. -func PathUnescape(path string) (string, error) { - return url.QueryUnescape(path) -} diff --git a/vendor/github.com/go-openapi/analysis/mixin.go b/vendor/github.com/go-openapi/analysis/mixin.go deleted file mode 100644 index 625c46f8f..000000000 --- a/vendor/github.com/go-openapi/analysis/mixin.go +++ /dev/null @@ -1,425 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package analysis - -import ( - "fmt" - "reflect" - - "github.com/go-openapi/spec" -) - -// Mixin modifies the primary swagger spec by adding the paths and -// definitions from the mixin specs. Top level parameters and -// responses from the mixins are also carried over. Operation id -// collisions are avoided by appending "Mixin" but only if -// needed. -// -// The following parts of primary are subject to merge, filling empty details -// - Info -// - BasePath -// - Host -// - ExternalDocs -// -// Consider calling FixEmptyResponseDescriptions() on the modified primary -// if you read them from storage and they are valid to start with. -// -// Entries in "paths", "definitions", "parameters" and "responses" are -// added to the primary in the order of the given mixins. If the entry -// already exists in primary it is skipped with a warning message. -// -// The count of skipped entries (from collisions) is returned so any -// deviation from the number expected can flag a warning in your build -// scripts. Carefully review the collisions before accepting them; -// consider renaming things if possible. -// -// No key normalization takes place (paths, type defs, -// etc). Ensure they are canonical if your downstream tools do -// key normalization of any form. -// -// Merging schemes (http, https), and consumers/producers do not account for -// collisions. -func Mixin(primary *spec.Swagger, mixins ...*spec.Swagger) []string { - skipped := make([]string, 0, len(mixins)) - opIds := getOpIds(primary) - initPrimary(primary) - - for i, m := range mixins { - skipped = append(skipped, mergeSwaggerProps(primary, m)...) - - skipped = append(skipped, mergeConsumes(primary, m)...) - - skipped = append(skipped, mergeProduces(primary, m)...) - - skipped = append(skipped, mergeTags(primary, m)...) - - skipped = append(skipped, mergeSchemes(primary, m)...) - - skipped = append(skipped, mergeSecurityDefinitions(primary, m)...) - - skipped = append(skipped, mergeSecurityRequirements(primary, m)...) - - skipped = append(skipped, mergeDefinitions(primary, m)...) - - // merging paths requires a map of operationIDs to work with - skipped = append(skipped, mergePaths(primary, m, opIds, i)...) - - skipped = append(skipped, mergeParameters(primary, m)...) - - skipped = append(skipped, mergeResponses(primary, m)...) - } - return skipped -} - -// getOpIds extracts all the paths..operationIds from the given -// spec and returns them as the keys in a map with 'true' values. -func getOpIds(s *spec.Swagger) map[string]bool { - rv := make(map[string]bool) - if s.Paths == nil { - return rv - } - for _, v := range s.Paths.Paths { - piops := pathItemOps(v) - for _, op := range piops { - rv[op.ID] = true - } - } - return rv -} - -func pathItemOps(p spec.PathItem) []*spec.Operation { - var rv []*spec.Operation - rv = appendOp(rv, p.Get) - rv = appendOp(rv, p.Put) - rv = appendOp(rv, p.Post) - rv = appendOp(rv, p.Delete) - rv = appendOp(rv, p.Head) - rv = appendOp(rv, p.Patch) - return rv -} - -func appendOp(ops []*spec.Operation, op *spec.Operation) []*spec.Operation { - if op == nil { - return ops - } - return append(ops, op) -} - -func mergeSecurityDefinitions(primary *spec.Swagger, m *spec.Swagger) (skipped []string) { - for k, v := range m.SecurityDefinitions { - if _, exists := primary.SecurityDefinitions[k]; exists { - warn := fmt.Sprintf( - "SecurityDefinitions entry '%v' already exists in primary or higher priority mixin, skipping\n", k) - skipped = append(skipped, warn) - continue - } - primary.SecurityDefinitions[k] = v - } - return -} - -func mergeSecurityRequirements(primary *spec.Swagger, m *spec.Swagger) (skipped []string) { - for _, v := range m.Security { - found := false - for _, vv := range primary.Security { - if reflect.DeepEqual(v, vv) { - found = true - break - } - } - if found { - warn := fmt.Sprintf( - "Security requirement: '%v' already exists in primary or higher priority mixin, skipping\n", v) - skipped = append(skipped, warn) - continue - } - primary.Security = append(primary.Security, v) - } - return -} - -func mergeDefinitions(primary *spec.Swagger, m *spec.Swagger) (skipped []string) { - for k, v := range m.Definitions { - // assume name collisions represent IDENTICAL type. careful. - if _, exists := primary.Definitions[k]; exists { - warn := fmt.Sprintf( - "definitions entry '%v' already exists in primary or higher priority mixin, skipping\n", k) - skipped = append(skipped, warn) - continue - } - primary.Definitions[k] = v - } - return -} - -func mergePaths(primary *spec.Swagger, m *spec.Swagger, opIds map[string]bool, mixIndex int) (skipped []string) { - if m.Paths != nil { - for k, v := range m.Paths.Paths { - if _, exists := primary.Paths.Paths[k]; exists { - warn := fmt.Sprintf( - "paths entry '%v' already exists in primary or higher priority mixin, skipping\n", k) - skipped = append(skipped, warn) - continue - } - - // Swagger requires that operationIds be - // unique within a spec. If we find a - // collision we append "Mixin0" to the - // operatoinId we are adding, where 0 is mixin - // index. We assume that operationIds with - // all the proivded specs are already unique. - piops := pathItemOps(v) - for _, piop := range piops { - if opIds[piop.ID] { - piop.ID = fmt.Sprintf("%v%v%v", piop.ID, "Mixin", mixIndex) - } - opIds[piop.ID] = true - } - primary.Paths.Paths[k] = v - } - } - return -} - -func mergeParameters(primary *spec.Swagger, m *spec.Swagger) (skipped []string) { - for k, v := range m.Parameters { - // could try to rename on conflict but would - // have to fix $refs in the mixin. Complain - // for now - if _, exists := primary.Parameters[k]; exists { - warn := fmt.Sprintf( - "top level parameters entry '%v' already exists in primary or higher priority mixin, skipping\n", k) - skipped = append(skipped, warn) - continue - } - primary.Parameters[k] = v - } - return -} - -func mergeResponses(primary *spec.Swagger, m *spec.Swagger) (skipped []string) { - for k, v := range m.Responses { - // could try to rename on conflict but would - // have to fix $refs in the mixin. Complain - // for now - if _, exists := primary.Responses[k]; exists { - warn := fmt.Sprintf( - "top level responses entry '%v' already exists in primary or higher priority mixin, skipping\n", k) - skipped = append(skipped, warn) - continue - } - primary.Responses[k] = v - } - return skipped -} - -func mergeConsumes(primary *spec.Swagger, m *spec.Swagger) []string { - for _, v := range m.Consumes { - found := false - for _, vv := range primary.Consumes { - if v == vv { - found = true - break - } - } - if found { - // no warning here: we just skip it - continue - } - primary.Consumes = append(primary.Consumes, v) - } - return []string{} -} - -func mergeProduces(primary *spec.Swagger, m *spec.Swagger) []string { - for _, v := range m.Produces { - found := false - for _, vv := range primary.Produces { - if v == vv { - found = true - break - } - } - if found { - // no warning here: we just skip it - continue - } - primary.Produces = append(primary.Produces, v) - } - return []string{} -} - -func mergeTags(primary *spec.Swagger, m *spec.Swagger) (skipped []string) { - for _, v := range m.Tags { - found := false - for _, vv := range primary.Tags { - if v.Name == vv.Name { - found = true - break - } - } - if found { - warn := fmt.Sprintf( - "top level tags entry with name '%v' already exists in primary or higher priority mixin, skipping\n", v.Name) - skipped = append(skipped, warn) - continue - } - primary.Tags = append(primary.Tags, v) - } - return -} - -func mergeSchemes(primary *spec.Swagger, m *spec.Swagger) []string { - for _, v := range m.Schemes { - found := false - for _, vv := range primary.Schemes { - if v == vv { - found = true - break - } - } - if found { - // no warning here: we just skip it - continue - } - primary.Schemes = append(primary.Schemes, v) - } - return []string{} -} - -func mergeSwaggerProps(primary *spec.Swagger, m *spec.Swagger) []string { - var skipped []string - primary.Extensions, skipped = mergeExtensions(primary.Extensions, m.Extensions) - - // merging details in swagger top properties - if primary.Host == "" { - primary.Host = m.Host - } - if primary.BasePath == "" { - primary.BasePath = m.BasePath - } - if primary.Info == nil { - primary.Info = m.Info - } else if m.Info != nil { - var sk []string - primary.Info.Extensions, sk = mergeExtensions(primary.Info.Extensions, m.Info.Extensions) - skipped = append(skipped, sk...) - if primary.Info.Description == "" { - primary.Info.Description = m.Info.Description - } - if primary.Info.Title == "" { - primary.Info.Description = m.Info.Description - } - if primary.Info.TermsOfService == "" { - primary.Info.TermsOfService = m.Info.TermsOfService - } - if primary.Info.Version == "" { - primary.Info.Version = m.Info.Version - } - - if primary.Info.Contact == nil { - primary.Info.Contact = m.Info.Contact - } else if m.Info.Contact != nil { - if primary.Info.Contact.Name == "" { - primary.Info.Contact.Name = m.Info.Contact.Name - } - if primary.Info.Contact.URL == "" { - primary.Info.Contact.URL = m.Info.Contact.URL - } - if primary.Info.Contact.Email == "" { - primary.Info.Contact.Email = m.Info.Contact.Email - } - } - - if primary.Info.License == nil { - primary.Info.License = m.Info.License - } else if m.Info.License != nil { - if primary.Info.License.Name == "" { - primary.Info.License.Name = m.Info.License.Name - } - if primary.Info.License.URL == "" { - primary.Info.License.URL = m.Info.License.URL - } - } - - } - if primary.ExternalDocs == nil { - primary.ExternalDocs = m.ExternalDocs - } else if m.ExternalDocs != nil { - if primary.ExternalDocs.Description == "" { - primary.ExternalDocs.Description = m.ExternalDocs.Description - } - if primary.ExternalDocs.URL == "" { - primary.ExternalDocs.URL = m.ExternalDocs.URL - } - } - return skipped -} - -func mergeExtensions(primary spec.Extensions, m spec.Extensions) (result spec.Extensions, skipped []string) { - if primary == nil { - result = m - return - } - if m == nil { - result = primary - return - } - result = primary - for k, v := range m { - if _, found := primary[k]; found { - skipped = append(skipped, k) - continue - } - primary[k] = v - } - return -} - -func initPrimary(primary *spec.Swagger) { - if primary.SecurityDefinitions == nil { - primary.SecurityDefinitions = make(map[string]*spec.SecurityScheme) - } - if primary.Security == nil { - primary.Security = make([]map[string][]string, 0, 10) - } - if primary.Produces == nil { - primary.Produces = make([]string, 0, 10) - } - if primary.Consumes == nil { - primary.Consumes = make([]string, 0, 10) - } - if primary.Tags == nil { - primary.Tags = make([]spec.Tag, 0, 10) - } - if primary.Schemes == nil { - primary.Schemes = make([]string, 0, 10) - } - if primary.Paths == nil { - primary.Paths = &spec.Paths{Paths: make(map[string]spec.PathItem)} - } - if primary.Paths.Paths == nil { - primary.Paths.Paths = make(map[string]spec.PathItem) - } - if primary.Definitions == nil { - primary.Definitions = make(spec.Definitions) - } - if primary.Parameters == nil { - primary.Parameters = make(map[string]spec.Parameter) - } - if primary.Responses == nil { - primary.Responses = make(map[string]spec.Response) - } -} diff --git a/vendor/github.com/go-openapi/analysis/schema.go b/vendor/github.com/go-openapi/analysis/schema.go deleted file mode 100644 index 398c78063..000000000 --- a/vendor/github.com/go-openapi/analysis/schema.go +++ /dev/null @@ -1,234 +0,0 @@ -package analysis - -import ( - "fmt" - - "github.com/go-openapi/spec" - "github.com/go-openapi/strfmt" -) - -// SchemaOpts configures the schema analyzer -type SchemaOpts struct { - Schema *spec.Schema - Root interface{} - BasePath string - _ struct{} -} - -// Schema analysis, will classify the schema according to known -// patterns. -func Schema(opts SchemaOpts) (*AnalyzedSchema, error) { - if opts.Schema == nil { - return nil, fmt.Errorf("no schema to analyze") - } - - a := &AnalyzedSchema{ - schema: opts.Schema, - root: opts.Root, - basePath: opts.BasePath, - } - - a.initializeFlags() - a.inferKnownType() - a.inferEnum() - a.inferBaseType() - - if err := a.inferMap(); err != nil { - return nil, err - } - if err := a.inferArray(); err != nil { - return nil, err - } - - a.inferTuple() - - if err := a.inferFromRef(); err != nil { - return nil, err - } - - a.inferSimpleSchema() - return a, nil -} - -// AnalyzedSchema indicates what the schema represents -type AnalyzedSchema struct { - schema *spec.Schema - root interface{} - basePath string - - hasProps bool - hasAllOf bool - hasItems bool - hasAdditionalProps bool - hasAdditionalItems bool - hasRef bool - - IsKnownType bool - IsSimpleSchema bool - IsArray bool - IsSimpleArray bool - IsMap bool - IsSimpleMap bool - IsExtendedObject bool - IsTuple bool - IsTupleWithExtra bool - IsBaseType bool - IsEnum bool -} - -// Inherits copies value fields from other onto this schema -func (a *AnalyzedSchema) inherits(other *AnalyzedSchema) { - if other == nil { - return - } - a.hasProps = other.hasProps - a.hasAllOf = other.hasAllOf - a.hasItems = other.hasItems - a.hasAdditionalItems = other.hasAdditionalItems - a.hasAdditionalProps = other.hasAdditionalProps - a.hasRef = other.hasRef - - a.IsKnownType = other.IsKnownType - a.IsSimpleSchema = other.IsSimpleSchema - a.IsArray = other.IsArray - a.IsSimpleArray = other.IsSimpleArray - a.IsMap = other.IsMap - a.IsSimpleMap = other.IsSimpleMap - a.IsExtendedObject = other.IsExtendedObject - a.IsTuple = other.IsTuple - a.IsTupleWithExtra = other.IsTupleWithExtra - a.IsBaseType = other.IsBaseType - a.IsEnum = other.IsEnum -} - -func (a *AnalyzedSchema) inferFromRef() error { - if a.hasRef { - sch := new(spec.Schema) - sch.Ref = a.schema.Ref - err := spec.ExpandSchema(sch, a.root, nil) - if err != nil { - return err - } - rsch, err := Schema(SchemaOpts{ - Schema: sch, - Root: a.root, - BasePath: a.basePath, - }) - if err != nil { - // NOTE(fredbi): currently the only cause for errors is - // unresolved ref. Since spec.ExpandSchema() expands the - // schema recursively, there is no chance to get there, - // until we add more causes for error in this schema analysis. - return err - } - a.inherits(rsch) - } - return nil -} - -func (a *AnalyzedSchema) inferSimpleSchema() { - a.IsSimpleSchema = a.IsKnownType || a.IsSimpleArray || a.IsSimpleMap -} - -func (a *AnalyzedSchema) inferKnownType() { - tpe := a.schema.Type - format := a.schema.Format - a.IsKnownType = tpe.Contains("boolean") || - tpe.Contains("integer") || - tpe.Contains("number") || - tpe.Contains("string") || - (format != "" && strfmt.Default.ContainsName(format)) || - (a.isObjectType() && !a.hasProps && !a.hasAllOf && !a.hasAdditionalProps && !a.hasAdditionalItems) -} - -func (a *AnalyzedSchema) inferMap() error { - if a.isObjectType() { - hasExtra := a.hasProps || a.hasAllOf - a.IsMap = a.hasAdditionalProps && !hasExtra - a.IsExtendedObject = a.hasAdditionalProps && hasExtra - if a.IsMap { - if a.schema.AdditionalProperties.Schema != nil { - msch, err := Schema(SchemaOpts{ - Schema: a.schema.AdditionalProperties.Schema, - Root: a.root, - BasePath: a.basePath, - }) - if err != nil { - return err - } - a.IsSimpleMap = msch.IsSimpleSchema - } else if a.schema.AdditionalProperties.Allows { - a.IsSimpleMap = true - } - } - } - return nil -} - -func (a *AnalyzedSchema) inferArray() error { - // an array has Items defined as an object schema, otherwise we qualify this JSON array as a tuple - // (yes, even if the Items array contains only one element). - // arrays in JSON schema may be unrestricted (i.e no Items specified). - // Note that arrays in Swagger MUST have Items. Nonetheless, we analyze unrestricted arrays. - // - // NOTE: the spec package misses the distinction between: - // items: [] and items: {}, so we consider both arrays here. - a.IsArray = a.isArrayType() && (a.schema.Items == nil || a.schema.Items.Schemas == nil) - if a.IsArray && a.hasItems { - if a.schema.Items.Schema != nil { - itsch, err := Schema(SchemaOpts{ - Schema: a.schema.Items.Schema, - Root: a.root, - BasePath: a.basePath, - }) - if err != nil { - return err - } - a.IsSimpleArray = itsch.IsSimpleSchema - } - } - if a.IsArray && !a.hasItems { - a.IsSimpleArray = true - } - return nil -} - -func (a *AnalyzedSchema) inferTuple() { - tuple := a.hasItems && a.schema.Items.Schemas != nil - a.IsTuple = tuple && !a.hasAdditionalItems - a.IsTupleWithExtra = tuple && a.hasAdditionalItems -} - -func (a *AnalyzedSchema) inferBaseType() { - if a.isObjectType() { - a.IsBaseType = a.schema.Discriminator != "" - } -} - -func (a *AnalyzedSchema) inferEnum() { - a.IsEnum = len(a.schema.Enum) > 0 -} - -func (a *AnalyzedSchema) initializeFlags() { - a.hasProps = len(a.schema.Properties) > 0 - a.hasAllOf = len(a.schema.AllOf) > 0 - a.hasRef = a.schema.Ref.String() != "" - - a.hasItems = a.schema.Items != nil && - (a.schema.Items.Schema != nil || len(a.schema.Items.Schemas) > 0) - - a.hasAdditionalProps = a.schema.AdditionalProperties != nil && - (a.schema.AdditionalProperties != nil || a.schema.AdditionalProperties.Allows) - - a.hasAdditionalItems = a.schema.AdditionalItems != nil && - (a.schema.AdditionalItems.Schema != nil || a.schema.AdditionalItems.Allows) - -} - -func (a *AnalyzedSchema) isObjectType() bool { - return !a.hasRef && (a.schema.Type == nil || a.schema.Type.Contains("") || a.schema.Type.Contains("object")) -} - -func (a *AnalyzedSchema) isArrayType() bool { - return !a.hasRef && (a.schema.Type != nil && a.schema.Type.Contains("array")) -} diff --git a/vendor/github.com/go-openapi/errors/.golangci.yml b/vendor/github.com/go-openapi/errors/.golangci.yml deleted file mode 100644 index 6badaf154..000000000 --- a/vendor/github.com/go-openapi/errors/.golangci.yml +++ /dev/null @@ -1,20 +0,0 @@ -linters-settings: - govet: - check-shadowing: true - golint: - min-confidence: 0 - gocyclo: - min-complexity: 30 - maligned: - suggest-new: true - dupl: - threshold: 100 - goconst: - min-len: 2 - min-occurrences: 4 -linters: - enable-all: true - disable: - - maligned - - lll - - gochecknoglobals diff --git a/vendor/github.com/go-openapi/errors/.travis.yml b/vendor/github.com/go-openapi/errors/.travis.yml deleted file mode 100644 index ba8a6d591..000000000 --- a/vendor/github.com/go-openapi/errors/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -after_success: -- bash <(curl -s https://codecov.io/bash) -go: -- 1.11.x -- 1.12.x -install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on -language: go -notifications: - slack: - secure: gZGp9NaHxi7zawlXJXKY92BGeDR1x0tbIcTyU5nMKLq0fhIaiEBJEeALwZ4VgqsSv3DytSSF5mLH8fevAM3ixE6hxjKQ+lQuf7V/w3btCN1CSWgoua5LOh1kTnqZQtJuRvO4pzoJcT3bJWBsVZ07VGNVzzJEy/zAKCHFqBUCXShw7QemlLBcYWFNqveTlvDIfCzvouoLnPoXwxEpkjxe9uz/ZKZgAnup/fXjC8RFctmgCnkCyvJTk0Y/fZCsufixJrJhshBWTnlrFCzRmgNkz2d+i1Ls3+MJ5EJJ2Tx/A5S63dL49J1f9Kr0AKHADmulSy8JNzIckKwbyFMYUecrsW+Lsu9DhnVMy1jj5pKsJDLRi2iIU3fXTMWbcyQbXjbbnBO2mPdP3Tzme75y4D9fc8hUPeyqVv2BU26NEbQ7EF2pKJ93OXvci7HlwRBgdJa8j6mP2LEDClcPQW00g7N/OZe0cTOMa8L5AwiBlbArwqt9wv6YLJoTG0wpDhzWsFvbCg5bJxe28Yn3fIDD0Lk1I7iSnBbp/5gzF19jmxqvcT8tHRkDL4xfjbENFTZjA5uB4Z4pj4WSyWQILLV/Jwhe3fi9uQwdviFHfj5pnVrmNUiGSOQL672K5wl2c3E9mGwejvsu2dfEz28n7Y/FUnOpY3/cBS0n27JJaerS0zMKNLE= -script: -- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/errors/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/errors/CODE_OF_CONDUCT.md deleted file mode 100644 index 9322b065e..000000000 --- a/vendor/github.com/go-openapi/errors/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at ivan+abuse@flanders.co.nz. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/errors/README.md b/vendor/github.com/go-openapi/errors/README.md deleted file mode 100644 index 0ce50b23b..000000000 --- a/vendor/github.com/go-openapi/errors/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# OpenAPI errors [![Build Status](https://travis-ci.org/go-openapi/errors.svg?branch=master)](https://travis-ci.org/go-openapi/errors) [![codecov](https://codecov.io/gh/go-openapi/errors/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/errors) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) - -[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/errors/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/go-openapi/errors?status.svg)](http://godoc.org/github.com/go-openapi/errors) -[![GolangCI](https://golangci.com/badges/github.com/go-openapi/errors.svg)](https://golangci.com) -[![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/errors)](https://goreportcard.com/report/github.com/go-openapi/errors) - -Shared errors and error interface used throughout the various libraries found in the go-openapi toolkit. diff --git a/vendor/github.com/go-openapi/errors/api.go b/vendor/github.com/go-openapi/errors/api.go deleted file mode 100644 index 7667cee76..000000000 --- a/vendor/github.com/go-openapi/errors/api.go +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package errors - -import ( - "encoding/json" - "fmt" - "net/http" - "reflect" - "strings" -) - -// DefaultHTTPCode is used when the error Code cannot be used as an HTTP code. -var DefaultHTTPCode = http.StatusUnprocessableEntity - -// Error represents a error interface all swagger framework errors implement -type Error interface { - error - Code() int32 -} - -type apiError struct { - code int32 - message string -} - -func (a *apiError) Error() string { - return a.message -} - -func (a *apiError) Code() int32 { - return a.code -} - -// New creates a new API error with a code and a message -func New(code int32, message string, args ...interface{}) Error { - if len(args) > 0 { - return &apiError{code, fmt.Sprintf(message, args...)} - } - return &apiError{code, message} -} - -// NotFound creates a new not found error -func NotFound(message string, args ...interface{}) Error { - if message == "" { - message = "Not found" - } - return New(http.StatusNotFound, fmt.Sprintf(message, args...)) -} - -// NotImplemented creates a new not implemented error -func NotImplemented(message string) Error { - return New(http.StatusNotImplemented, message) -} - -// MethodNotAllowedError represents an error for when the path matches but the method doesn't -type MethodNotAllowedError struct { - code int32 - Allowed []string - message string -} - -func (m *MethodNotAllowedError) Error() string { - return m.message -} - -// Code the error code -func (m *MethodNotAllowedError) Code() int32 { - return m.code -} - -func errorAsJSON(err Error) []byte { - b, _ := json.Marshal(struct { - Code int32 `json:"code"` - Message string `json:"message"` - }{err.Code(), err.Error()}) - return b -} - -func flattenComposite(errs *CompositeError) *CompositeError { - var res []error - for _, er := range errs.Errors { - switch e := er.(type) { - case *CompositeError: - if len(e.Errors) > 0 { - flat := flattenComposite(e) - if len(flat.Errors) > 0 { - res = append(res, flat.Errors...) - } - } - default: - if e != nil { - res = append(res, e) - } - } - } - return CompositeValidationError(res...) -} - -// MethodNotAllowed creates a new method not allowed error -func MethodNotAllowed(requested string, allow []string) Error { - msg := fmt.Sprintf("method %s is not allowed, but [%s] are", requested, strings.Join(allow, ",")) - return &MethodNotAllowedError{code: http.StatusMethodNotAllowed, Allowed: allow, message: msg} -} - -// ServeError the error handler interface implementation -func ServeError(rw http.ResponseWriter, r *http.Request, err error) { - rw.Header().Set("Content-Type", "application/json") - switch e := err.(type) { - case *CompositeError: - er := flattenComposite(e) - // strips composite errors to first element only - if len(er.Errors) > 0 { - ServeError(rw, r, er.Errors[0]) - } else { - // guard against empty CompositeError (invalid construct) - ServeError(rw, r, nil) - } - case *MethodNotAllowedError: - rw.Header().Add("Allow", strings.Join(err.(*MethodNotAllowedError).Allowed, ",")) - rw.WriteHeader(asHTTPCode(int(e.Code()))) - if r == nil || r.Method != http.MethodHead { - _, _ = rw.Write(errorAsJSON(e)) - } - case Error: - value := reflect.ValueOf(e) - if value.Kind() == reflect.Ptr && value.IsNil() { - rw.WriteHeader(http.StatusInternalServerError) - _, _ = rw.Write(errorAsJSON(New(http.StatusInternalServerError, "Unknown error"))) - return - } - rw.WriteHeader(asHTTPCode(int(e.Code()))) - if r == nil || r.Method != http.MethodHead { - _, _ = rw.Write(errorAsJSON(e)) - } - case nil: - rw.WriteHeader(http.StatusInternalServerError) - _, _ = rw.Write(errorAsJSON(New(http.StatusInternalServerError, "Unknown error"))) - default: - rw.WriteHeader(http.StatusInternalServerError) - if r == nil || r.Method != http.MethodHead { - _, _ = rw.Write(errorAsJSON(New(http.StatusInternalServerError, err.Error()))) - } - } -} - -func asHTTPCode(input int) int { - if input >= 600 { - return DefaultHTTPCode - } - return input -} diff --git a/vendor/github.com/go-openapi/errors/go.mod b/vendor/github.com/go-openapi/errors/go.mod deleted file mode 100644 index 084143001..000000000 --- a/vendor/github.com/go-openapi/errors/go.mod +++ /dev/null @@ -1,6 +0,0 @@ -module github.com/go-openapi/errors - -require ( - github.com/stretchr/objx v0.2.0 // indirect - github.com/stretchr/testify v1.3.0 -) diff --git a/vendor/github.com/go-openapi/errors/go.sum b/vendor/github.com/go-openapi/errors/go.sum deleted file mode 100644 index e7314e279..000000000 --- a/vendor/github.com/go-openapi/errors/go.sum +++ /dev/null @@ -1,9 +0,0 @@ -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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/github.com/go-openapi/errors/headers.go b/vendor/github.com/go-openapi/errors/headers.go deleted file mode 100644 index 0360c094e..000000000 --- a/vendor/github.com/go-openapi/errors/headers.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package errors - -import ( - "fmt" - "net/http" -) - -// Validation represents a failure of a precondition -type Validation struct { - code int32 - Name string - In string - Value interface{} - message string - Values []interface{} -} - -func (e *Validation) Error() string { - return e.message -} - -// Code the error code -func (e *Validation) Code() int32 { - return e.code -} - -// ValidateName produces an error message name for an aliased property -func (e *Validation) ValidateName(name string) *Validation { - if e.Name == "" && name != "" { - e.Name = name - e.message = name + e.message - } - return e -} - -const ( - contentTypeFail = `unsupported media type %q, only %v are allowed` - responseFormatFail = `unsupported media type requested, only %v are available` -) - -// InvalidContentType error for an invalid content type -func InvalidContentType(value string, allowed []string) *Validation { - values := make([]interface{}, 0, len(allowed)) - for _, v := range allowed { - values = append(values, v) - } - return &Validation{ - code: http.StatusUnsupportedMediaType, - Name: "Content-Type", - In: "header", - Value: value, - Values: values, - message: fmt.Sprintf(contentTypeFail, value, allowed), - } -} - -// InvalidResponseFormat error for an unacceptable response format request -func InvalidResponseFormat(value string, allowed []string) *Validation { - values := make([]interface{}, 0, len(allowed)) - for _, v := range allowed { - values = append(values, v) - } - return &Validation{ - code: http.StatusNotAcceptable, - Name: "Accept", - In: "header", - Value: value, - Values: values, - message: fmt.Sprintf(responseFormatFail, allowed), - } -} diff --git a/vendor/github.com/go-openapi/errors/middleware.go b/vendor/github.com/go-openapi/errors/middleware.go deleted file mode 100644 index 6390d4636..000000000 --- a/vendor/github.com/go-openapi/errors/middleware.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package errors - -import ( - "bytes" - "fmt" - "strings" -) - -// APIVerificationFailed is an error that contains all the missing info for a mismatched section -// between the api registrations and the api spec -type APIVerificationFailed struct { - Section string - MissingSpecification []string - MissingRegistration []string -} - -// -func (v *APIVerificationFailed) Error() string { - buf := bytes.NewBuffer(nil) - - hasRegMissing := len(v.MissingRegistration) > 0 - hasSpecMissing := len(v.MissingSpecification) > 0 - - if hasRegMissing { - buf.WriteString(fmt.Sprintf("missing [%s] %s registrations", strings.Join(v.MissingRegistration, ", "), v.Section)) - } - - if hasRegMissing && hasSpecMissing { - buf.WriteString("\n") - } - - if hasSpecMissing { - buf.WriteString(fmt.Sprintf("missing from spec file [%s] %s", strings.Join(v.MissingSpecification, ", "), v.Section)) - } - - return buf.String() -} diff --git a/vendor/github.com/go-openapi/errors/parsing.go b/vendor/github.com/go-openapi/errors/parsing.go deleted file mode 100644 index 1bae87302..000000000 --- a/vendor/github.com/go-openapi/errors/parsing.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package errors - -import "fmt" - -// ParseError respresents a parsing error -type ParseError struct { - code int32 - Name string - In string - Value string - Reason error - message string -} - -func (e *ParseError) Error() string { - return e.message -} - -// Code returns the http status code for this error -func (e *ParseError) Code() int32 { - return e.code -} - -const ( - parseErrorTemplContent = `parsing %s %s from %q failed, because %s` - parseErrorTemplContentNoIn = `parsing %s from %q failed, because %s` -) - -// NewParseError creates a new parse error -func NewParseError(name, in, value string, reason error) *ParseError { - var msg string - if in == "" { - msg = fmt.Sprintf(parseErrorTemplContentNoIn, name, value, reason) - } else { - msg = fmt.Sprintf(parseErrorTemplContent, name, in, value, reason) - } - return &ParseError{ - code: 400, - Name: name, - In: in, - Value: value, - Reason: reason, - message: msg, - } -} diff --git a/vendor/github.com/go-openapi/loads/.editorconfig b/vendor/github.com/go-openapi/loads/.editorconfig deleted file mode 100644 index 3152da69a..000000000 --- a/vendor/github.com/go-openapi/loads/.editorconfig +++ /dev/null @@ -1,26 +0,0 @@ -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*] -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true - -# Set default charset -[*.{js,py,go,scala,rb,java,html,css,less,sass,md}] -charset = utf-8 - -# Tab indentation (no size specified) -[*.go] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false - -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] -indent_style = space -indent_size = 2 diff --git a/vendor/github.com/go-openapi/loads/.gitignore b/vendor/github.com/go-openapi/loads/.gitignore deleted file mode 100644 index e4f15f17b..000000000 --- a/vendor/github.com/go-openapi/loads/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -secrets.yml -coverage.out -profile.cov -profile.out diff --git a/vendor/github.com/go-openapi/loads/.golangci.yml b/vendor/github.com/go-openapi/loads/.golangci.yml deleted file mode 100644 index 1932914e6..000000000 --- a/vendor/github.com/go-openapi/loads/.golangci.yml +++ /dev/null @@ -1,22 +0,0 @@ -linters-settings: - govet: - check-shadowing: true - golint: - min-confidence: 0 - gocyclo: - min-complexity: 30 - maligned: - suggest-new: true - dupl: - threshold: 100 - goconst: - min-len: 2 - min-occurrences: 4 - -linters: - enable-all: true - disable: - - maligned - - lll - - gochecknoglobals - - gochecknoinits diff --git a/vendor/github.com/go-openapi/loads/.travis.yml b/vendor/github.com/go-openapi/loads/.travis.yml deleted file mode 100644 index 8a7e05d91..000000000 --- a/vendor/github.com/go-openapi/loads/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -after_success: -- bash <(curl -s https://codecov.io/bash) -go: -- 1.11.x -- 1.12.x -install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on -language: go -notifications: - slack: - secure: OxkPwVp35qBTUilgWC8xykSj+sGMcj0h8IIOKD+Rflx2schZVlFfdYdyVBM+s9OqeOfvtuvnR9v1Ye2rPKAvcjWdC4LpRGUsgmItZaI6Um8Aj6+K9udCw5qrtZVfOVmRu8LieH//XznWWKdOultUuniW0MLqw5+II87Gd00RWbCGi0hk0PykHe7uK+PDA2BEbqyZ2WKKYCvfB3j+0nrFOHScXqnh0V05l2E83J4+Sgy1fsPy+1WdX58ZlNBG333ibaC1FS79XvKSmTgKRkx3+YBo97u6ZtUmJa5WZjf2OdLG3KIckGWAv6R5xgxeU31N0Ng8L332w/Edpp2O/M2bZwdnKJ8hJQikXIAQbICbr+lTDzsoNzMdEIYcHpJ5hjPbiUl3Bmd+Jnsjf5McgAZDiWIfpCKZ29tPCEkVwRsOCqkyPRMNMzHHmoja495P5jR+ODS7+J8RFg5xgcnOgpP9D4Wlhztlf5WyZMpkLxTUD+bZq2SRf50HfHFXTkfq22zPl3d1eq0yrLwh/Z/fWKkfb6SyysROL8y6s8u3dpFX1YHSg0BR6i913h4aoZw9B2BG27cafLLTwKYsp2dFo1PWl4O6u9giFJIeqwloZHLKKrwh0cBFhB7RH0I58asxkZpCH6uWjJierahmHe7iS+E6i+9oCHkOZ59hmCYNimIs3hM= -script: -- gotestsum -f short-verbose -- -race -timeout=20m -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/loads/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/loads/CODE_OF_CONDUCT.md deleted file mode 100644 index 9322b065e..000000000 --- a/vendor/github.com/go-openapi/loads/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at ivan+abuse@flanders.co.nz. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/loads/README.md b/vendor/github.com/go-openapi/loads/README.md deleted file mode 100644 index 071cf69ab..000000000 --- a/vendor/github.com/go-openapi/loads/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Loads OAI specs [![Build Status](https://travis-ci.org/go-openapi/loads.svg?branch=master)](https://travis-ci.org/go-openapi/loads) [![codecov](https://codecov.io/gh/go-openapi/loads/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/loads) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) - -[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/loads/master/LICENSE) [![GoDoc](https://godoc.org/github.com/go-openapi/loads?status.svg)](http://godoc.org/github.com/go-openapi/loads) -[![GolangCI](https://golangci.com/badges/github.com/go-openapi/loads.svg)](https://golangci.com) -[![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/loads)](https://goreportcard.com/report/github.com/go-openapi/loads) - -Loading of OAI specification documents from local or remote locations. Supports JSON and YAML documents. diff --git a/vendor/github.com/go-openapi/loads/go.mod b/vendor/github.com/go-openapi/loads/go.mod deleted file mode 100644 index 8cf62326f..000000000 --- a/vendor/github.com/go-openapi/loads/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module github.com/go-openapi/loads - -require ( - github.com/go-openapi/analysis v0.19.5 - github.com/go-openapi/spec v0.19.3 - github.com/go-openapi/swag v0.19.5 - github.com/stretchr/testify v1.3.0 - gopkg.in/yaml.v2 v2.2.4 -) - -go 1.13 diff --git a/vendor/github.com/go-openapi/loads/go.sum b/vendor/github.com/go-openapi/loads/go.sum deleted file mode 100644 index 6eebff99d..000000000 --- a/vendor/github.com/go-openapi/loads/go.sum +++ /dev/null @@ -1,98 +0,0 @@ -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -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/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -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/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.19.5 h1:8b2ZgKfKIUTVQpTb77MoRDIMEIwvDVw40o3aOXdfYzI= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -go.mongodb.org/mongo-driver v1.0.3 h1:GKoji1ld3tw2aC+GX1wbr/J2fX13yNacEYoJ8Nhr0yU= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1 h1:Sq1fR+0c58RME5EoqKdjkiQAmPjmfHlZOoRI6fTUOcs= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/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-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/loads/spec.go b/vendor/github.com/go-openapi/loads/spec.go deleted file mode 100644 index e4b4a3cf7..000000000 --- a/vendor/github.com/go-openapi/loads/spec.go +++ /dev/null @@ -1,298 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package loads - -import ( - "bytes" - "encoding/gob" - "encoding/json" - "fmt" - "net/url" - - "github.com/go-openapi/analysis" - "github.com/go-openapi/spec" - "github.com/go-openapi/swag" -) - -// JSONDoc loads a json document from either a file or a remote url -func JSONDoc(path string) (json.RawMessage, error) { - data, err := swag.LoadFromFileOrHTTP(path) - if err != nil { - return nil, err - } - return json.RawMessage(data), nil -} - -// DocLoader represents a doc loader type -type DocLoader func(string) (json.RawMessage, error) - -// DocMatcher represents a predicate to check if a loader matches -type DocMatcher func(string) bool - -var ( - loaders *loader - defaultLoader *loader -) - -func init() { - defaultLoader = &loader{Match: func(_ string) bool { return true }, Fn: JSONDoc} - loaders = defaultLoader - spec.PathLoader = loaders.Fn - AddLoader(swag.YAMLMatcher, swag.YAMLDoc) - - gob.Register(map[string]interface{}{}) - gob.Register([]interface{}{}) - //gob.Register(spec.Refable{}) -} - -// AddLoader for a document -func AddLoader(predicate DocMatcher, load DocLoader) { - prev := loaders - loaders = &loader{ - Match: predicate, - Fn: load, - Next: prev, - } - spec.PathLoader = loaders.Fn -} - -type loader struct { - Fn DocLoader - Match DocMatcher - Next *loader -} - -// JSONSpec loads a spec from a json document -func JSONSpec(path string) (*Document, error) { - data, err := JSONDoc(path) - if err != nil { - return nil, err - } - // convert to json - return Analyzed(data, "") -} - -// Document represents a swagger spec document -type Document struct { - // specAnalyzer - Analyzer *analysis.Spec - spec *spec.Swagger - specFilePath string - origSpec *spec.Swagger - schema *spec.Schema - raw json.RawMessage -} - -// Embedded returns a Document based on embedded specs. No analysis is required -func Embedded(orig, flat json.RawMessage) (*Document, error) { - var origSpec, flatSpec spec.Swagger - if err := json.Unmarshal(orig, &origSpec); err != nil { - return nil, err - } - if err := json.Unmarshal(flat, &flatSpec); err != nil { - return nil, err - } - return &Document{ - raw: orig, - origSpec: &origSpec, - spec: &flatSpec, - }, nil -} - -// Spec loads a new spec document -func Spec(path string) (*Document, error) { - specURL, err := url.Parse(path) - if err != nil { - return nil, err - } - var lastErr error - for l := loaders.Next; l != nil; l = l.Next { - if loaders.Match(specURL.Path) { - b, err2 := loaders.Fn(path) - if err2 != nil { - lastErr = err2 - continue - } - doc, err3 := Analyzed(b, "") - if err3 != nil { - return nil, err3 - } - if doc != nil { - doc.specFilePath = path - } - return doc, nil - } - } - if lastErr != nil { - return nil, lastErr - } - b, err := defaultLoader.Fn(path) - if err != nil { - return nil, err - } - - document, err := Analyzed(b, "") - if document != nil { - document.specFilePath = path - } - - return document, err -} - -// Analyzed creates a new analyzed spec document -func Analyzed(data json.RawMessage, version string) (*Document, error) { - if version == "" { - version = "2.0" - } - if version != "2.0" { - return nil, fmt.Errorf("spec version %q is not supported", version) - } - - raw := data - trimmed := bytes.TrimSpace(data) - if len(trimmed) > 0 { - if trimmed[0] != '{' && trimmed[0] != '[' { - yml, err := swag.BytesToYAMLDoc(trimmed) - if err != nil { - return nil, fmt.Errorf("analyzed: %v", err) - } - d, err := swag.YAMLToJSON(yml) - if err != nil { - return nil, fmt.Errorf("analyzed: %v", err) - } - raw = d - } - } - - swspec := new(spec.Swagger) - if err := json.Unmarshal(raw, swspec); err != nil { - return nil, err - } - - origsqspec, err := cloneSpec(swspec) - if err != nil { - return nil, err - } - - d := &Document{ - Analyzer: analysis.New(swspec), - schema: spec.MustLoadSwagger20Schema(), - spec: swspec, - raw: raw, - origSpec: origsqspec, - } - return d, nil -} - -// Expanded expands the ref fields in the spec document and returns a new spec document -func (d *Document) Expanded(options ...*spec.ExpandOptions) (*Document, error) { - swspec := new(spec.Swagger) - if err := json.Unmarshal(d.raw, swspec); err != nil { - return nil, err - } - - var expandOptions *spec.ExpandOptions - if len(options) > 0 { - expandOptions = options[0] - } else { - expandOptions = &spec.ExpandOptions{ - RelativeBase: d.specFilePath, - } - } - - if err := spec.ExpandSpec(swspec, expandOptions); err != nil { - return nil, err - } - - dd := &Document{ - Analyzer: analysis.New(swspec), - spec: swspec, - specFilePath: d.specFilePath, - schema: spec.MustLoadSwagger20Schema(), - raw: d.raw, - origSpec: d.origSpec, - } - return dd, nil -} - -// BasePath the base path for this spec -func (d *Document) BasePath() string { - return d.spec.BasePath -} - -// Version returns the version of this spec -func (d *Document) Version() string { - return d.spec.Swagger -} - -// Schema returns the swagger 2.0 schema -func (d *Document) Schema() *spec.Schema { - return d.schema -} - -// Spec returns the swagger spec object model -func (d *Document) Spec() *spec.Swagger { - return d.spec -} - -// Host returns the host for the API -func (d *Document) Host() string { - return d.spec.Host -} - -// Raw returns the raw swagger spec as json bytes -func (d *Document) Raw() json.RawMessage { - return d.raw -} - -// OrigSpec yields the original spec -func (d *Document) OrigSpec() *spec.Swagger { - return d.origSpec -} - -// ResetDefinitions gives a shallow copy with the models reset -func (d *Document) ResetDefinitions() *Document { - defs := make(map[string]spec.Schema, len(d.origSpec.Definitions)) - for k, v := range d.origSpec.Definitions { - defs[k] = v - } - - d.spec.Definitions = defs - return d -} - -// Pristine creates a new pristine document instance based on the input data -func (d *Document) Pristine() *Document { - dd, _ := Analyzed(d.Raw(), d.Version()) - return dd -} - -// SpecFilePath returns the file path of the spec if one is defined -func (d *Document) SpecFilePath() string { - return d.specFilePath -} - -func cloneSpec(src *spec.Swagger) (*spec.Swagger, error) { - var b bytes.Buffer - if err := gob.NewEncoder(&b).Encode(src); err != nil { - return nil, err - } - - var dst spec.Swagger - if err := gob.NewDecoder(&b).Decode(&dst); err != nil { - return nil, err - } - return &dst, nil -} diff --git a/vendor/github.com/go-openapi/runtime/.editorconfig b/vendor/github.com/go-openapi/runtime/.editorconfig deleted file mode 100644 index 3152da69a..000000000 --- a/vendor/github.com/go-openapi/runtime/.editorconfig +++ /dev/null @@ -1,26 +0,0 @@ -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*] -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true - -# Set default charset -[*.{js,py,go,scala,rb,java,html,css,less,sass,md}] -charset = utf-8 - -# Tab indentation (no size specified) -[*.go] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false - -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] -indent_style = space -indent_size = 2 diff --git a/vendor/github.com/go-openapi/runtime/.travis.yml b/vendor/github.com/go-openapi/runtime/.travis.yml deleted file mode 100644 index 2fc7b58ff..000000000 --- a/vendor/github.com/go-openapi/runtime/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -after_success: -- bash <(curl -s https://codecov.io/bash) -go: -- 1.11.x -- 1.12.x -install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on -language: go -notifications: - slack: - secure: EmObnQuM9Mw8J9vpFaKKHqSMN4Wsr/A9+v7ewAD5cEhA0T1P4m7MbJMiJOhxUhj/X+BFh2DamW+P2lT8mybj5wg8wnkQ2BteKA8Tawi6f9PRw2NRheO8tAi8o/npLnlmet0kc93mn+oLuqHw36w4+j5mkOl2FghkfGiUVhwrhkCP7KXQN+3TU87e+/HzQumlJ3nsE+6terVxkH3PmaUTsS5ONaODZfuxFpfb7RsoEl3skHf6d+tr+1nViLxxly7558Nc33C+W1mr0qiEvMLZ+kJ/CpGWBJ6CUJM3jm6hNe2eMuIPwEK2hxZob8c7n22VPap4K6a0bBRoydoDXaba+2sD7Ym6ivDO/DVyL44VeBBLyIiIBylDGQdZH+6SoWm90Qe/i7tnY/T5Ao5igT8f3cfQY1c3EsTfqmlDfrhmACBmwSlgkdVBLTprHL63JMY24LWmh4jhxsmMRZhCL4dze8su1w6pLN/pD1pGHtKYCEVbdTmaM3PblNRFf12XB7qosmQsgUndH4Vq3bTbU0s1pKjeDhRyLvFzvR0TBbo0pDLEoF1A/i5GVFWa7yLZNUDudQERRh7qv/xBl2excIaQ1sV4DSVm7bAE9l6Kp+yeHQJW2uN6Y3X8wu9gB9nv9l5HBze7wh8KE6PyWAOLYYqZg9/sAtsv/2GcQqXcKFF1zcA= -script: -- gotestsum -f short-verbose -- -race -timeout=20m -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/runtime/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/runtime/CODE_OF_CONDUCT.md deleted file mode 100644 index 9322b065e..000000000 --- a/vendor/github.com/go-openapi/runtime/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at ivan+abuse@flanders.co.nz. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/runtime/README.md b/vendor/github.com/go-openapi/runtime/README.md deleted file mode 100644 index 5b1ec6494..000000000 --- a/vendor/github.com/go-openapi/runtime/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# runtime [![Build Status](https://travis-ci.org/go-openapi/runtime.svg?branch=client-context)](https://travis-ci.org/go-openapi/runtime) [![codecov](https://codecov.io/gh/go-openapi/runtime/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/runtime) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) - -[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/runtime/master/LICENSE) [![GoDoc](https://godoc.org/github.com/go-openapi/runtime?status.svg)](http://godoc.org/github.com/go-openapi/runtime) - -# golang Open-API toolkit - runtime - -The runtime component for use in codegeneration or as untyped usage. diff --git a/vendor/github.com/go-openapi/runtime/bytestream.go b/vendor/github.com/go-openapi/runtime/bytestream.go deleted file mode 100644 index 4459025b9..000000000 --- a/vendor/github.com/go-openapi/runtime/bytestream.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "bytes" - "encoding" - "errors" - "fmt" - "io" - "reflect" - - "github.com/go-openapi/swag" -) - -func defaultCloser() error { return nil } - -type byteStreamOpt func(opts *byteStreamOpts) - -// ClosesStream when the bytestream consumer or producer is finished -func ClosesStream(opts *byteStreamOpts) { - opts.Close = true -} - -type byteStreamOpts struct { - Close bool -} - -// ByteStreamConsumer creates a consmer for byte streams, -// takes a Writer/BinaryUnmarshaler interface or binary slice by reference, -// and reads from the provided reader -func ByteStreamConsumer(opts ...byteStreamOpt) Consumer { - var vals byteStreamOpts - for _, opt := range opts { - opt(&vals) - } - - return ConsumerFunc(func(reader io.Reader, data interface{}) error { - if reader == nil { - return errors.New("ByteStreamConsumer requires a reader") // early exit - } - - close := defaultCloser - if vals.Close { - if cl, ok := reader.(io.Closer); ok { - close = cl.Close - } - } - defer close() - - if wrtr, ok := data.(io.Writer); ok { - _, err := io.Copy(wrtr, reader) - return err - } - - buf := new(bytes.Buffer) - _, err := buf.ReadFrom(reader) - if err != nil { - return err - } - b := buf.Bytes() - - if bu, ok := data.(encoding.BinaryUnmarshaler); ok { - return bu.UnmarshalBinary(b) - } - - if t := reflect.TypeOf(data); data != nil && t.Kind() == reflect.Ptr { - v := reflect.Indirect(reflect.ValueOf(data)) - if t = v.Type(); t.Kind() == reflect.Slice && t.Elem().Kind() == reflect.Uint8 { - v.SetBytes(b) - return nil - } - } - - return fmt.Errorf("%v (%T) is not supported by the ByteStreamConsumer, %s", - data, data, "can be resolved by supporting Writer/BinaryUnmarshaler interface") - }) -} - -// ByteStreamProducer creates a producer for byte streams, -// takes a Reader/BinaryMarshaler interface or binary slice, -// and writes to a writer (essentially a pipe) -func ByteStreamProducer(opts ...byteStreamOpt) Producer { - var vals byteStreamOpts - for _, opt := range opts { - opt(&vals) - } - return ProducerFunc(func(writer io.Writer, data interface{}) error { - if writer == nil { - return errors.New("ByteStreamProducer requires a writer") // early exit - } - close := defaultCloser - if vals.Close { - if cl, ok := writer.(io.Closer); ok { - close = cl.Close - } - } - defer close() - - if rc, ok := data.(io.ReadCloser); ok { - defer rc.Close() - } - - if rdr, ok := data.(io.Reader); ok { - _, err := io.Copy(writer, rdr) - return err - } - - if bm, ok := data.(encoding.BinaryMarshaler); ok { - bytes, err := bm.MarshalBinary() - if err != nil { - return err - } - - _, err = writer.Write(bytes) - return err - } - - if data != nil { - if e, ok := data.(error); ok { - _, err := writer.Write([]byte(e.Error())) - return err - } - - v := reflect.Indirect(reflect.ValueOf(data)) - if t := v.Type(); t.Kind() == reflect.Slice && t.Elem().Kind() == reflect.Uint8 { - _, err := writer.Write(v.Bytes()) - return err - } - if t := v.Type(); t.Kind() == reflect.Struct || t.Kind() == reflect.Slice { - b, err := swag.WriteJSON(data) - if err != nil { - return err - } - _, err = writer.Write(b) - return err - } - } - - return fmt.Errorf("%v (%T) is not supported by the ByteStreamProducer, %s", - data, data, "can be resolved by supporting Reader/BinaryMarshaler interface") - }) -} diff --git a/vendor/github.com/go-openapi/runtime/client_auth_info.go b/vendor/github.com/go-openapi/runtime/client_auth_info.go deleted file mode 100644 index c6c97d9a7..000000000 --- a/vendor/github.com/go-openapi/runtime/client_auth_info.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import "github.com/go-openapi/strfmt" - -// A ClientAuthInfoWriterFunc converts a function to a request writer interface -type ClientAuthInfoWriterFunc func(ClientRequest, strfmt.Registry) error - -// AuthenticateRequest adds authentication data to the request -func (fn ClientAuthInfoWriterFunc) AuthenticateRequest(req ClientRequest, reg strfmt.Registry) error { - return fn(req, reg) -} - -// A ClientAuthInfoWriter implementor knows how to write authentication info to a request -type ClientAuthInfoWriter interface { - AuthenticateRequest(ClientRequest, strfmt.Registry) error -} diff --git a/vendor/github.com/go-openapi/runtime/client_operation.go b/vendor/github.com/go-openapi/runtime/client_operation.go deleted file mode 100644 index fa21eacf3..000000000 --- a/vendor/github.com/go-openapi/runtime/client_operation.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "context" - "net/http" -) - -// ClientOperation represents the context for a swagger operation to be submitted to the transport -type ClientOperation struct { - ID string - Method string - PathPattern string - ProducesMediaTypes []string - ConsumesMediaTypes []string - Schemes []string - AuthInfo ClientAuthInfoWriter - Params ClientRequestWriter - Reader ClientResponseReader - Context context.Context - Client *http.Client -} - -// A ClientTransport implementor knows how to submit Request objects to some destination -type ClientTransport interface { - //Submit(string, RequestWriter, ResponseReader, AuthInfoWriter) (interface{}, error) - Submit(*ClientOperation) (interface{}, error) -} diff --git a/vendor/github.com/go-openapi/runtime/client_request.go b/vendor/github.com/go-openapi/runtime/client_request.go deleted file mode 100644 index 904196ae3..000000000 --- a/vendor/github.com/go-openapi/runtime/client_request.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "io" - "io/ioutil" - "net/http" - "net/url" - "time" - - "github.com/go-openapi/strfmt" -) - -// ClientRequestWriterFunc converts a function to a request writer interface -type ClientRequestWriterFunc func(ClientRequest, strfmt.Registry) error - -// WriteToRequest adds data to the request -func (fn ClientRequestWriterFunc) WriteToRequest(req ClientRequest, reg strfmt.Registry) error { - return fn(req, reg) -} - -// ClientRequestWriter is an interface for things that know how to write to a request -type ClientRequestWriter interface { - WriteToRequest(ClientRequest, strfmt.Registry) error -} - -// ClientRequest is an interface for things that know how to -// add information to a swagger client request -type ClientRequest interface { - SetHeaderParam(string, ...string) error - - GetHeaderParams() http.Header - - SetQueryParam(string, ...string) error - - SetFormParam(string, ...string) error - - SetPathParam(string, string) error - - GetQueryParams() url.Values - - SetFileParam(string, ...NamedReadCloser) error - - SetBodyParam(interface{}) error - - SetTimeout(time.Duration) error - - GetMethod() string - - GetPath() string - - GetBody() []byte - - GetBodyParam() interface{} - - GetFileParam() map[string][]NamedReadCloser -} - -// NamedReadCloser represents a named ReadCloser interface -type NamedReadCloser interface { - io.ReadCloser - Name() string -} - -// NamedReader creates a NamedReadCloser for use as file upload -func NamedReader(name string, rdr io.Reader) NamedReadCloser { - rc, ok := rdr.(io.ReadCloser) - if !ok { - rc = ioutil.NopCloser(rdr) - } - return &namedReadCloser{ - name: name, - cr: rc, - } -} - -type namedReadCloser struct { - name string - cr io.ReadCloser -} - -func (n *namedReadCloser) Close() error { - return n.cr.Close() -} -func (n *namedReadCloser) Read(p []byte) (int, error) { - return n.cr.Read(p) -} -func (n *namedReadCloser) Name() string { - return n.name -} diff --git a/vendor/github.com/go-openapi/runtime/client_response.go b/vendor/github.com/go-openapi/runtime/client_response.go deleted file mode 100644 index 729e18b22..000000000 --- a/vendor/github.com/go-openapi/runtime/client_response.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "fmt" - "io" -) - -// A ClientResponse represents a client response -// This bridges between responses obtained from different transports -type ClientResponse interface { - Code() int - Message() string - GetHeader(string) string - Body() io.ReadCloser -} - -// A ClientResponseReaderFunc turns a function into a ClientResponseReader interface implementation -type ClientResponseReaderFunc func(ClientResponse, Consumer) (interface{}, error) - -// ReadResponse reads the response -func (read ClientResponseReaderFunc) ReadResponse(resp ClientResponse, consumer Consumer) (interface{}, error) { - return read(resp, consumer) -} - -// A ClientResponseReader is an interface for things want to read a response. -// An application of this is to create structs from response values -type ClientResponseReader interface { - ReadResponse(ClientResponse, Consumer) (interface{}, error) -} - -// NewAPIError creates a new API error -func NewAPIError(opName string, payload interface{}, code int) *APIError { - return &APIError{ - OperationName: opName, - Response: payload, - Code: code, - } -} - -// APIError wraps an error model and captures the status code -type APIError struct { - OperationName string - Response interface{} - Code int -} - -func (a *APIError) Error() string { - return fmt.Sprintf("%s (status %d): %+v ", a.OperationName, a.Code, a.Response) -} diff --git a/vendor/github.com/go-openapi/runtime/constants.go b/vendor/github.com/go-openapi/runtime/constants.go deleted file mode 100644 index a4de897ad..000000000 --- a/vendor/github.com/go-openapi/runtime/constants.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -const ( - // HeaderContentType represents a http content-type header, it's value is supposed to be a mime type - HeaderContentType = "Content-Type" - - // HeaderTransferEncoding represents a http transfer-encoding header. - HeaderTransferEncoding = "Transfer-Encoding" - - // HeaderAccept the Accept header - HeaderAccept = "Accept" - - charsetKey = "charset" - - // DefaultMime the default fallback mime type - DefaultMime = "application/octet-stream" - // JSONMime the json mime type - JSONMime = "application/json" - // YAMLMime the yaml mime type - YAMLMime = "application/x-yaml" - // XMLMime the xml mime type - XMLMime = "application/xml" - // TextMime the text mime type - TextMime = "text/plain" - // HTMLMime the html mime type - HTMLMime = "text/html" - // CSVMime the csv mime type - CSVMime = "text/csv" - // MultipartFormMime the multipart form mime type - MultipartFormMime = "multipart/form-data" - // URLencodedFormMime the url encoded form mime type - URLencodedFormMime = "application/x-www-form-urlencoded" -) diff --git a/vendor/github.com/go-openapi/runtime/csv.go b/vendor/github.com/go-openapi/runtime/csv.go deleted file mode 100644 index d807bd915..000000000 --- a/vendor/github.com/go-openapi/runtime/csv.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "bytes" - "encoding/csv" - "errors" - "io" -) - -// CSVConsumer creates a new CSV consumer -func CSVConsumer() Consumer { - return ConsumerFunc(func(reader io.Reader, data interface{}) error { - if reader == nil { - return errors.New("CSVConsumer requires a reader") - } - - csvReader := csv.NewReader(reader) - writer, ok := data.(io.Writer) - if !ok { - return errors.New("data type must be io.Writer") - } - csvWriter := csv.NewWriter(writer) - records, err := csvReader.ReadAll() - if err != nil { - return err - } - for _, r := range records { - if err := csvWriter.Write(r); err != nil { - return err - } - } - csvWriter.Flush() - return nil - }) -} - -// CSVProducer creates a new CSV producer -func CSVProducer() Producer { - return ProducerFunc(func(writer io.Writer, data interface{}) error { - if writer == nil { - return errors.New("CSVProducer requires a writer") - } - - dataBytes, ok := data.([]byte) - if !ok { - return errors.New("data type must be byte array") - } - - csvReader := csv.NewReader(bytes.NewBuffer(dataBytes)) - records, err := csvReader.ReadAll() - if err != nil { - return err - } - csvWriter := csv.NewWriter(writer) - for _, r := range records { - if err := csvWriter.Write(r); err != nil { - return err - } - } - csvWriter.Flush() - return nil - }) -} diff --git a/vendor/github.com/go-openapi/runtime/discard.go b/vendor/github.com/go-openapi/runtime/discard.go deleted file mode 100644 index 0d390cfd6..000000000 --- a/vendor/github.com/go-openapi/runtime/discard.go +++ /dev/null @@ -1,9 +0,0 @@ -package runtime - -import "io" - -// DiscardConsumer does absolutely nothing, it's a black hole. -var DiscardConsumer = ConsumerFunc(func(_ io.Reader, _ interface{}) error { return nil }) - -// DiscardProducer does absolutely nothing, it's a black hole. -var DiscardProducer = ProducerFunc(func(_ io.Writer, _ interface{}) error { return nil }) diff --git a/vendor/github.com/go-openapi/runtime/go.mod b/vendor/github.com/go-openapi/runtime/go.mod deleted file mode 100644 index ddf6f1613..000000000 --- a/vendor/github.com/go-openapi/runtime/go.mod +++ /dev/null @@ -1,16 +0,0 @@ -module github.com/go-openapi/runtime - -require ( - github.com/docker/go-units v0.4.0 - github.com/go-openapi/analysis v0.19.2 - github.com/go-openapi/errors v0.19.2 - github.com/go-openapi/loads v0.19.2 - github.com/go-openapi/spec v0.19.2 - github.com/go-openapi/strfmt v0.19.0 - github.com/go-openapi/swag v0.19.2 - github.com/go-openapi/validate v0.19.2 - github.com/stretchr/testify v1.3.0 - golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56 // indirect - golang.org/x/tools v0.0.0-20190617190820-da514acc4774 // indirect - gopkg.in/yaml.v2 v2.2.2 -) diff --git a/vendor/github.com/go-openapi/runtime/go.sum b/vendor/github.com/go-openapi/runtime/go.sum deleted file mode 100644 index bdb97c3a8..000000000 --- a/vendor/github.com/go-openapi/runtime/go.sum +++ /dev/null @@ -1,133 +0,0 @@ -github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -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/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf h1:eg0MeVzsP1G42dRafH3vf+al2vQIJU0YHX+1Tw87oco= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -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/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.17.2 h1:eYp14J1o8TTSCzndHBtsNuckikV1PfZOSnx4BcBeu0c= -github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2 h1:ophLETFestFZHk3ji7niPEL4d466QjW+0Tdg5VyDq7E= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.17.2 h1:azEQ8Fnx0jmtFF2fxsnmd6I0x6rsweUF63qqSO1NmKk= -github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.17.2 h1:3ekBy41gar/iJi2KSh/au/PrC2vpLr85upF/UZmm3W0= -github.com/go-openapi/jsonpointer v0.17.2/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.17.2 h1:lF3z7AH8dd0IKXc1zEBi1dj0B4XgVb5cVjn39dCK3Ls= -github.com/go-openapi/jsonreference v0.17.2/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.17.2 h1:tEXYu6Xc0pevpzzQx5ghrMN9F7IVpN/+u4iD3rkYE5o= -github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2 h1:rf5ArTHmIJxyV5Oiks+Su0mUens1+AjpkPoWr5xFRcI= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.17.2 h1:eb2NbuCnoe8cWAxhtK6CfMWUYmiFEZJ9Hx3Z2WRwJ5M= -github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.17.2 h1:2KDns36DMHXG9/iYkOjiX+/8fKK9GCU5ELZ+J6qcRVA= -github.com/go-openapi/strfmt v0.17.2/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0 h1:0Dn9qy1G9+UJfRU7TR8bmdGxb4uifB7HNrJjOnV0yPk= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.17.2 h1:K/ycE/XTUDFltNHSO32cGRUhrVGJD64o8WgAIZNyc3k= -github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/validate v0.17.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.17.2 h1:lwFfiS4sv5DvOrsYDsYq4N7UU8ghXiYtPJ+VcQnC3Xg= -github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2 h1:ky5l57HjyVRrsJfd2+Ro5Z9PjGuKbsmftwyMtk8H7js= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe h1:W/GaMY0y69G4cFlmsC6B9sbuo2fP8OFP1ABjt4kPz+w= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc h1:a3CU5tJYVj92DY2LaA1kUkrsqD5/3mLDhx2NcNqyW+0= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/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-20190320064053-1272bf9dcd53 h1:kcXqo9vE6fsZY5X5Rd7R1l7fTgnWaDCVmln65REefiE= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -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/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/runtime/interfaces.go b/vendor/github.com/go-openapi/runtime/interfaces.go deleted file mode 100644 index 65de0aa44..000000000 --- a/vendor/github.com/go-openapi/runtime/interfaces.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "io" - "net/http" - - "github.com/go-openapi/strfmt" -) - -// OperationHandlerFunc an adapter for a function to the OperationHandler interface -type OperationHandlerFunc func(interface{}) (interface{}, error) - -// Handle implements the operation handler interface -func (s OperationHandlerFunc) Handle(data interface{}) (interface{}, error) { - return s(data) -} - -// OperationHandler a handler for a swagger operation -type OperationHandler interface { - Handle(interface{}) (interface{}, error) -} - -// ConsumerFunc represents a function that can be used as a consumer -type ConsumerFunc func(io.Reader, interface{}) error - -// Consume consumes the reader into the data parameter -func (fn ConsumerFunc) Consume(reader io.Reader, data interface{}) error { - return fn(reader, data) -} - -// Consumer implementations know how to bind the values on the provided interface to -// data provided by the request body -type Consumer interface { - // Consume performs the binding of request values - Consume(io.Reader, interface{}) error -} - -// ProducerFunc represents a function that can be used as a producer -type ProducerFunc func(io.Writer, interface{}) error - -// Produce produces the response for the provided data -func (f ProducerFunc) Produce(writer io.Writer, data interface{}) error { - return f(writer, data) -} - -// Producer implementations know how to turn the provided interface into a valid -// HTTP response -type Producer interface { - // Produce writes to the http response - Produce(io.Writer, interface{}) error -} - -// AuthenticatorFunc turns a function into an authenticator -type AuthenticatorFunc func(interface{}) (bool, interface{}, error) - -// Authenticate authenticates the request with the provided data -func (f AuthenticatorFunc) Authenticate(params interface{}) (bool, interface{}, error) { - return f(params) -} - -// Authenticator represents an authentication strategy -// implementations of Authenticator know how to authenticate the -// request data and translate that into a valid principal object or an error -type Authenticator interface { - Authenticate(interface{}) (bool, interface{}, error) -} - -// AuthorizerFunc turns a function into an authorizer -type AuthorizerFunc func(*http.Request, interface{}) error - -// Authorize authorizes the processing of the request for the principal -func (f AuthorizerFunc) Authorize(r *http.Request, principal interface{}) error { - return f(r, principal) -} - -// Authorizer represents an authorization strategy -// implementations of Authorizer know how to authorize the principal object -// using the request data and returns error if unauthorized -type Authorizer interface { - Authorize(*http.Request, interface{}) error -} - -// Validatable types implementing this interface allow customizing their validation -// this will be used instead of the reflective validation based on the spec document. -// the implementations are assumed to have been generated by the swagger tool so they should -// contain all the validations obtained from the spec -type Validatable interface { - Validate(strfmt.Registry) error -} diff --git a/vendor/github.com/go-openapi/runtime/request.go b/vendor/github.com/go-openapi/runtime/request.go deleted file mode 100644 index 9e51b42b5..000000000 --- a/vendor/github.com/go-openapi/runtime/request.go +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "bufio" - "io" - "net/http" - "strings" - - "github.com/go-openapi/swag" -) - -// CanHaveBody returns true if this method can have a body -func CanHaveBody(method string) bool { - mn := strings.ToUpper(method) - return mn == "POST" || mn == "PUT" || mn == "PATCH" || mn == "DELETE" -} - -// IsSafe returns true if this is a request with a safe method -func IsSafe(r *http.Request) bool { - mn := strings.ToUpper(r.Method) - return mn == "GET" || mn == "HEAD" -} - -// AllowsBody returns true if the request allows for a body -func AllowsBody(r *http.Request) bool { - mn := strings.ToUpper(r.Method) - return mn != "HEAD" -} - -// HasBody returns true if this method needs a content-type -func HasBody(r *http.Request) bool { - // happy case: we have a content length set - if r.ContentLength > 0 { - return true - } - - if r.Header.Get(http.CanonicalHeaderKey("content-length")) != "" { - // in this case, no Transfer-Encoding should be present - // we have a header set but it was explicitly set to 0, so we assume no body - return false - } - - rdr := newPeekingReader(r.Body) - r.Body = rdr - return rdr.HasContent() -} - -func newPeekingReader(r io.ReadCloser) *peekingReader { - if r == nil { - return nil - } - return &peekingReader{ - underlying: bufio.NewReader(r), - orig: r, - } -} - -type peekingReader struct { - underlying interface { - Buffered() int - Peek(int) ([]byte, error) - Read([]byte) (int, error) - } - orig io.ReadCloser -} - -func (p *peekingReader) HasContent() bool { - if p == nil { - return false - } - if p.underlying.Buffered() > 0 { - return true - } - b, err := p.underlying.Peek(1) - if err != nil { - return false - } - return len(b) > 0 -} - -func (p *peekingReader) Read(d []byte) (int, error) { - if p == nil { - return 0, io.EOF - } - return p.underlying.Read(d) -} - -func (p *peekingReader) Close() error { - p.underlying = nil - if p.orig != nil { - return p.orig.Close() - } - return nil -} - -// JSONRequest creates a new http request with json headers set -func JSONRequest(method, urlStr string, body io.Reader) (*http.Request, error) { - req, err := http.NewRequest(method, urlStr, body) - if err != nil { - return nil, err - } - req.Header.Add(HeaderContentType, JSONMime) - req.Header.Add(HeaderAccept, JSONMime) - return req, nil -} - -// Gettable for things with a method GetOK(string) (data string, hasKey bool, hasValue bool) -type Gettable interface { - GetOK(string) ([]string, bool, bool) -} - -// ReadSingleValue reads a single value from the source -func ReadSingleValue(values Gettable, name string) string { - vv, _, hv := values.GetOK(name) - if hv { - return vv[len(vv)-1] - } - return "" -} - -// ReadCollectionValue reads a collection value from a string data source -func ReadCollectionValue(values Gettable, name, collectionFormat string) []string { - v := ReadSingleValue(values, name) - return swag.SplitByFormat(v, collectionFormat) -} diff --git a/vendor/github.com/go-openapi/runtime/statuses.go b/vendor/github.com/go-openapi/runtime/statuses.go deleted file mode 100644 index 3b011a0bf..000000000 --- a/vendor/github.com/go-openapi/runtime/statuses.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -// Statuses lists the most common HTTP status codes to default message -// taken from https://httpstatuses.com/ -var Statuses = map[int]string{ - 100: "Continue", - 101: "Switching Protocols", - 102: "Processing", - 103: "Checkpoint", - 122: "URI too long", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Request Processed", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 207: "Multi-Status", - 208: "Already Reported", - 226: "IM Used", - 300: "Multiple Choices", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 306: "Switch Proxy", - 307: "Temporary Redirect", - 308: "Permanent Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Request Range Not Satisfiable", - 417: "Expectation Failed", - 418: "I'm a teapot", - 420: "Enhance Your Calm", - 422: "Unprocessable Entity", - 423: "Locked", - 424: "Failed Dependency", - 426: "Upgrade Required", - 428: "Precondition Required", - 429: "Too Many Requests", - 431: "Request Header Fields Too Large", - 444: "No Response", - 449: "Retry With", - 450: "Blocked by Windows Parental Controls", - 451: "Wrong Exchange Server", - 499: "Client Closed Request", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", - 506: "Variant Also Negotiates", - 507: "Insufficient Storage", - 508: "Loop Detected", - 509: "Bandwidth Limit Exceeded", - 510: "Not Extended", - 511: "Network Authentication Required", - 598: "Network read timeout error", - 599: "Network connect timeout error", -} diff --git a/vendor/github.com/go-openapi/runtime/text.go b/vendor/github.com/go-openapi/runtime/text.go deleted file mode 100644 index c7fd04c3c..000000000 --- a/vendor/github.com/go-openapi/runtime/text.go +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "bytes" - "encoding" - "errors" - "fmt" - "io" - "reflect" - - "github.com/go-openapi/swag" -) - -// TextConsumer creates a new text consumer -func TextConsumer() Consumer { - return ConsumerFunc(func(reader io.Reader, data interface{}) error { - if reader == nil { - return errors.New("TextConsumer requires a reader") // early exit - } - - buf := new(bytes.Buffer) - _, err := buf.ReadFrom(reader) - if err != nil { - return err - } - b := buf.Bytes() - - // If the buffer is empty, no need to unmarshal it, which causes a panic. - if len(b) == 0 { - data = "" - return nil - } - - if tu, ok := data.(encoding.TextUnmarshaler); ok { - err := tu.UnmarshalText(b) - if err != nil { - return fmt.Errorf("text consumer: %v", err) - } - - return nil - } - - t := reflect.TypeOf(data) - if data != nil && t.Kind() == reflect.Ptr { - v := reflect.Indirect(reflect.ValueOf(data)) - if t.Elem().Kind() == reflect.String { - v.SetString(string(b)) - return nil - } - } - - return fmt.Errorf("%v (%T) is not supported by the TextConsumer, %s", - data, data, "can be resolved by supporting TextUnmarshaler interface") - }) -} - -// TextProducer creates a new text producer -func TextProducer() Producer { - return ProducerFunc(func(writer io.Writer, data interface{}) error { - if writer == nil { - return errors.New("TextProducer requires a writer") // early exit - } - - if data == nil { - return errors.New("no data given to produce text from") - } - - if tm, ok := data.(encoding.TextMarshaler); ok { - txt, err := tm.MarshalText() - if err != nil { - return fmt.Errorf("text producer: %v", err) - } - _, err = writer.Write(txt) - return err - } - - if str, ok := data.(error); ok { - _, err := writer.Write([]byte(str.Error())) - return err - } - - if str, ok := data.(fmt.Stringer); ok { - _, err := writer.Write([]byte(str.String())) - return err - } - - v := reflect.Indirect(reflect.ValueOf(data)) - if t := v.Type(); t.Kind() == reflect.Struct || t.Kind() == reflect.Slice { - b, err := swag.WriteJSON(data) - if err != nil { - return err - } - _, err = writer.Write(b) - return err - } - if v.Kind() != reflect.String { - return fmt.Errorf("%T is not a supported type by the TextProducer", data) - } - - _, err := writer.Write([]byte(v.String())) - return err - }) -} diff --git a/vendor/github.com/go-openapi/runtime/values.go b/vendor/github.com/go-openapi/runtime/values.go deleted file mode 100644 index 11f5732af..000000000 --- a/vendor/github.com/go-openapi/runtime/values.go +++ /dev/null @@ -1,19 +0,0 @@ -package runtime - -// Values typically represent parameters on a http request. -type Values map[string][]string - -// GetOK returns the values collection for the given key. -// When the key is present in the map it will return true for hasKey. -// When the value is not empty it will return true for hasValue. -func (v Values) GetOK(key string) (value []string, hasKey bool, hasValue bool) { - value, hasKey = v[key] - if !hasKey { - return - } - if len(value) == 0 { - return - } - hasValue = true - return -} diff --git a/vendor/github.com/go-openapi/runtime/xml.go b/vendor/github.com/go-openapi/runtime/xml.go deleted file mode 100644 index 821c7393d..000000000 --- a/vendor/github.com/go-openapi/runtime/xml.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package runtime - -import ( - "encoding/xml" - "io" -) - -// XMLConsumer creates a new XML consumer -func XMLConsumer() Consumer { - return ConsumerFunc(func(reader io.Reader, data interface{}) error { - dec := xml.NewDecoder(reader) - return dec.Decode(data) - }) -} - -// XMLProducer creates a new XML producer -func XMLProducer() Producer { - return ProducerFunc(func(writer io.Writer, data interface{}) error { - enc := xml.NewEncoder(writer) - return enc.Encode(data) - }) -} diff --git a/vendor/github.com/go-openapi/strfmt/.editorconfig b/vendor/github.com/go-openapi/strfmt/.editorconfig deleted file mode 100644 index 3152da69a..000000000 --- a/vendor/github.com/go-openapi/strfmt/.editorconfig +++ /dev/null @@ -1,26 +0,0 @@ -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*] -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true - -# Set default charset -[*.{js,py,go,scala,rb,java,html,css,less,sass,md}] -charset = utf-8 - -# Tab indentation (no size specified) -[*.go] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false - -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] -indent_style = space -indent_size = 2 diff --git a/vendor/github.com/go-openapi/strfmt/.golangci.yml b/vendor/github.com/go-openapi/strfmt/.golangci.yml deleted file mode 100644 index f260ce7e5..000000000 --- a/vendor/github.com/go-openapi/strfmt/.golangci.yml +++ /dev/null @@ -1,30 +0,0 @@ -linters-settings: - govet: - check-shadowing: true - golint: - min-confidence: 0 - gocyclo: - min-complexity: 31 - maligned: - suggest-new: true - dupl: - threshold: 100 - goconst: - min-len: 2 - min-occurrences: 4 - -linters: - enable-all: true - disable: - - maligned - - lll - - gochecknoinits - - gochecknoglobals - -issues: - exclude-rules: - - path: bson.go - text: "should be .*ObjectID" - linters: - - golint - diff --git a/vendor/github.com/go-openapi/strfmt/.travis.yml b/vendor/github.com/go-openapi/strfmt/.travis.yml deleted file mode 100644 index eb962aebc..000000000 --- a/vendor/github.com/go-openapi/strfmt/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -after_success: -- bash <(curl -s https://codecov.io/bash) -go: -- 1.11.x -- 1.12.x -install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -language: go -env: -- GO111MODULE=on -notifications: - slack: - secure: zE5AtIYTpYfQPnTzP+EaQPN7JKtfFAGv6PrJqoIZLOXa8B6zGb6+J1JRNNxWi7faWbyJOxa4FSSsuPsKZMycUK6wlLFIdhDxwqeo7Ew8r6rdZKdfUHQggfNS9wO79ARoNYUDHtmnaBUS+eWSM1YqSc4i99QxyyfuURLOeAaA/q14YbdlTlaw3lrZ0qT92ot1FnVGNOx064zuHtFeUf+jAVRMZ6Q3rvqllwIlPszE6rmHGXBt2VoJxRaBetdwd7FgkcYw9FPXKHhadwC7/75ZAdmxIukhxNMw4Tr5NuPcqNcnbYLenDP7B3lssGVIrP4BRSqekS1d/tqvdvnnFWHMwrNCkSnSc065G5+qWTlXKAemIclgiXXqE2furBNLm05MDdG8fn5epS0UNarkjD+zX336RiqwBlOX4KbF+vPyqcO98CsN0lnd+H6loc9reiTHs37orFFpQ+309av9be2GGsHUsRB9ssIyrewmhAccOmkRtr2dVTZJNFQwa5Kph5TNJuTjnZEwG/xUkEX2YSfwShOsb062JWiflV6PJdnl80pc9Tn7D5sO5Bf9DbijGRJwwP+YiiJtwtr+vsvS+n4sM0b5eqm4UoRo+JJO8ffoJtHS7ItuyRbVQCwEPJ4221WLcf5PquEEDdAPwR+K4Gj8qTXqTDdxOiES1xFUKVgmzhI= -script: -- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/strfmt/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/strfmt/CODE_OF_CONDUCT.md deleted file mode 100644 index 9322b065e..000000000 --- a/vendor/github.com/go-openapi/strfmt/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at ivan+abuse@flanders.co.nz. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/strfmt/LICENSE b/vendor/github.com/go-openapi/strfmt/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/vendor/github.com/go-openapi/strfmt/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/go-openapi/strfmt/README.md b/vendor/github.com/go-openapi/strfmt/README.md deleted file mode 100644 index 87357cd02..000000000 --- a/vendor/github.com/go-openapi/strfmt/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# Strfmt [![Build Status](https://travis-ci.org/go-openapi/strfmt.svg?branch=master)](https://travis-ci.org/go-openapi/strfmt) [![codecov](https://codecov.io/gh/go-openapi/strfmt/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/strfmt) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) - -[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/strfmt/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/go-openapi/strfmt?status.svg)](http://godoc.org/github.com/go-openapi/strfmt) -[![GolangCI](https://golangci.com/badges/github.com/go-openapi/strfmt.svg)](https://golangci.com) -[![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/strfmt)](https://goreportcard.com/report/github.com/go-openapi/strfmt) - -This package exposes a registry of data types to support string formats in the go-openapi toolkit. - -strfmt represents a well known string format such as credit card or email. The go toolkit for OpenAPI specifications knows how to deal with those. - -## Supported data formats -go-openapi/strfmt follows the swagger 2.0 specification with the following formats -defined [here](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types). - -It also provides convenient extensions to go-openapi users. - -- [x] JSON-schema draft 4 formats - - date-time - - email - - hostname - - ipv4 - - ipv6 - - uri -- [x] swagger 2.0 format extensions - - binary - - byte (e.g. base64 encoded string) - - date (e.g. "1970-01-01") - - password -- [x] go-openapi custom format extensions - - bsonobjectid (BSON objectID) - - creditcard - - duration (e.g. "3 weeks", "1ms") - - hexcolor (e.g. "#FFFFFF") - - isbn, isbn10, isbn13 - - mac (e.g "01:02:03:04:05:06") - - rgbcolor (e.g. "rgb(100,100,100)") - - ssn - - uuid, uuid3, uuid4, uuid5 - - cidr (e.g. "192.0.2.1/24", "2001:db8:a0b:12f0::1/32") - -> NOTE: as the name stands for, this package is intended to support string formatting only. -> It does not provide validation for numerical values with swagger format extension for JSON types "number" or -> "integer" (e.g. float, double, int32...). - -## Format types -Types defined in strfmt expose marshaling and validation capabilities. - -List of defined types: -- Base64 -- CreditCard -- Date -- DateTime -- Duration -- Email -- HexColor -- Hostname -- IPv4 -- IPv6 -- CIDR -- ISBN -- ISBN10 -- ISBN13 -- MAC -- ObjectId -- Password -- RGBColor -- SSN -- URI -- UUID -- UUID3 -- UUID4 -- UUID5 diff --git a/vendor/github.com/go-openapi/strfmt/go.mod b/vendor/github.com/go-openapi/strfmt/go.mod deleted file mode 100644 index 78c8489b2..000000000 --- a/vendor/github.com/go-openapi/strfmt/go.mod +++ /dev/null @@ -1,13 +0,0 @@ -module github.com/go-openapi/strfmt - -require ( - github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a - github.com/go-openapi/errors v0.19.2 - github.com/go-stack/stack v1.8.0 // indirect - github.com/google/go-cmp v0.3.0 // indirect - github.com/google/uuid v1.1.1 - github.com/mitchellh/mapstructure v1.1.2 - github.com/stretchr/testify v1.3.0 - github.com/tidwall/pretty v1.0.0 // indirect - go.mongodb.org/mongo-driver v1.0.3 -) diff --git a/vendor/github.com/go-openapi/strfmt/go.sum b/vendor/github.com/go-openapi/strfmt/go.sum deleted file mode 100644 index e53dd37c1..000000000 --- a/vendor/github.com/go-openapi/strfmt/go.sum +++ /dev/null @@ -1,25 +0,0 @@ -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -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/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -go.mongodb.org/mongo-driver v1.0.3 h1:GKoji1ld3tw2aC+GX1wbr/J2fX13yNacEYoJ8Nhr0yU= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= diff --git a/vendor/github.com/go-openapi/validate/.editorconfig b/vendor/github.com/go-openapi/validate/.editorconfig deleted file mode 100644 index 3152da69a..000000000 --- a/vendor/github.com/go-openapi/validate/.editorconfig +++ /dev/null @@ -1,26 +0,0 @@ -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*] -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true - -# Set default charset -[*.{js,py,go,scala,rb,java,html,css,less,sass,md}] -charset = utf-8 - -# Tab indentation (no size specified) -[*.go] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false - -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] -indent_style = space -indent_size = 2 diff --git a/vendor/github.com/go-openapi/validate/.golangci.yml b/vendor/github.com/go-openapi/validate/.golangci.yml deleted file mode 100644 index dc8178c80..000000000 --- a/vendor/github.com/go-openapi/validate/.golangci.yml +++ /dev/null @@ -1,28 +0,0 @@ -linters-settings: - govet: - check-shadowing: true - golint: - min-confidence: 0 - gocyclo: - min-complexity: 50 - maligned: - suggest-new: true - dupl: - threshold: 100 - goconst: - min-len: 2 - min-occurrences: 3 - -linters: - enable-all: true - disable: - - maligned - - lll - - godox - - gocognit - - whitespace - - wsl - - funlen - - gochecknoglobals - - gochecknoinits - - scopelint diff --git a/vendor/github.com/go-openapi/validate/.travis.yml b/vendor/github.com/go-openapi/validate/.travis.yml deleted file mode 100644 index dd3a4b29f..000000000 --- a/vendor/github.com/go-openapi/validate/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -after_success: -- bash <(curl -s https://codecov.io/bash) -go: -- 1.11.x -- 1.12.x -install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on -language: go -notifications: - slack: - secure: EmObnQuM9Mw8J9vpFaKKHqSMN4Wsr/A9+v7ewAD5cEhA0T1P4m7MbJMiJOhxUhj/X+BFh2DamW+P2lT8mybj5wg8wnkQ2BteKA8Tawi6f9PRw2NRheO8tAi8o/npLnlmet0kc93mn+oLuqHw36w4+j5mkOl2FghkfGiUVhwrhkCP7KXQN+3TU87e+/HzQumlJ3nsE+6terVxkH3PmaUTsS5ONaODZfuxFpfb7RsoEl3skHf6d+tr+1nViLxxly7558Nc33C+W1mr0qiEvMLZ+kJ/CpGWBJ6CUJM3jm6hNe2eMuIPwEK2hxZob8c7n22VPap4K6a0bBRoydoDXaba+2sD7Ym6ivDO/DVyL44VeBBLyIiIBylDGQdZH+6SoWm90Qe/i7tnY/T5Ao5igT8f3cfQY1c3EsTfqmlDfrhmACBmwSlgkdVBLTprHL63JMY24LWmh4jhxsmMRZhCL4dze8su1w6pLN/pD1pGHtKYCEVbdTmaM3PblNRFf12XB7qosmQsgUndH4Vq3bTbU0s1pKjeDhRyLvFzvR0TBbo0pDLEoF1A/i5GVFWa7yLZNUDudQERRh7qv/xBl2excIaQ1sV4DSVm7bAE9l6Kp+yeHQJW2uN6Y3X8wu9gB9nv9l5HBze7wh8KE6PyWAOLYYqZg9/sAtsv/2GcQqXcKFF1zcA= -script: -- gotestsum -f short-verbose -- -race ./... -- gotestsum -f short-verbose -- -timeout=20m -coverprofile=coverage.txt -covermode=atomic -args -enable-long ./... -- gotestsum -f short-verbose -- -timeout=30m -args -enable-go-swagger ./... -- go get -u github.com/go-openapi/runtime@master -- gotestsum -f short-verbose -- -timeout=30m github.com/go-openapi/runtime/... diff --git a/vendor/github.com/go-openapi/validate/CODE_OF_CONDUCT.md b/vendor/github.com/go-openapi/validate/CODE_OF_CONDUCT.md deleted file mode 100644 index 9322b065e..000000000 --- a/vendor/github.com/go-openapi/validate/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at ivan+abuse@flanders.co.nz. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/vendor/github.com/go-openapi/validate/LICENSE b/vendor/github.com/go-openapi/validate/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/vendor/github.com/go-openapi/validate/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/go-openapi/validate/README.md b/vendor/github.com/go-openapi/validate/README.md deleted file mode 100644 index 08fb352bc..000000000 --- a/vendor/github.com/go-openapi/validate/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Validation helpers [![Build Status](https://travis-ci.org/go-openapi/validate.svg?branch=master)](https://travis-ci.org/go-openapi/validate) [![codecov](https://codecov.io/gh/go-openapi/validate/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/validate) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) - -[![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/validate/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/go-openapi/validate?status.svg)](http://godoc.org/github.com/go-openapi/validate) -[![GolangCI](https://golangci.com/badges/github.com/go-openapi/validate.svg)](https://golangci.com) -[![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/validate)](https://goreportcard.com/report/github.com/go-openapi/validate) diff --git a/vendor/github.com/go-openapi/validate/default_validator.go b/vendor/github.com/go-openapi/validate/default_validator.go deleted file mode 100644 index 26d54b7c2..000000000 --- a/vendor/github.com/go-openapi/validate/default_validator.go +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -import ( - "fmt" - "strings" - - "github.com/go-openapi/spec" -) - -// defaultValidator validates default values in a spec. -// According to Swagger spec, default values MUST validate their schema. -type defaultValidator struct { - SpecValidator *SpecValidator - visitedSchemas map[string]bool -} - -// resetVisited resets the internal state of visited schemas -func (d *defaultValidator) resetVisited() { - d.visitedSchemas = map[string]bool{} -} - -func isVisited(path string, visitedSchemas map[string]bool) bool { - found := visitedSchemas[path] - if !found { - // search for overlapping paths - frags := strings.Split(path, ".") - if len(frags) < 2 { - // shortcut exit on smaller paths - return found - } - last := len(frags) - 1 - var currentFragStr, parent string - for i := range frags { - if i == 0 { - currentFragStr = frags[last] - } else { - currentFragStr = strings.Join([]string{frags[last-i], currentFragStr}, ".") - } - if i < last { - parent = strings.Join(frags[0:last-i], ".") - } else { - parent = "" - } - if strings.HasSuffix(parent, currentFragStr) { - found = true - break - } - } - } - return found -} - -// beingVisited asserts a schema is being visited -func (d *defaultValidator) beingVisited(path string) { - d.visitedSchemas[path] = true -} - -// isVisited tells if a path has already been visited -func (d *defaultValidator) isVisited(path string) bool { - return isVisited(path, d.visitedSchemas) -} - -// Validate validates the default values declared in the swagger spec -func (d *defaultValidator) Validate() (errs *Result) { - errs = new(Result) - if d == nil || d.SpecValidator == nil { - return errs - } - d.resetVisited() - errs.Merge(d.validateDefaultValueValidAgainstSchema()) // error - - return errs -} - -func (d *defaultValidator) validateDefaultValueValidAgainstSchema() *Result { - // every default value that is specified must validate against the schema for that property - // headers, items, parameters, schema - - res := new(Result) - s := d.SpecValidator - - for method, pathItem := range s.analyzer.Operations() { - for path, op := range pathItem { - // parameters - for _, param := range paramHelp.safeExpandedParamsFor(path, method, op.ID, res, s) { - if param.Default != nil && param.Required { - res.AddWarnings(requiredHasDefaultMsg(param.Name, param.In)) - } - - // reset explored schemas to get depth-first recursive-proof exploration - d.resetVisited() - - // Check simple parameters first - // default values provided must validate against their inline definition (no explicit schema) - if param.Default != nil && param.Schema == nil { - // check param default value is valid - red := NewParamValidator(¶m, s.KnownFormats).Validate(param.Default) - if red.HasErrorsOrWarnings() { - res.AddErrors(defaultValueDoesNotValidateMsg(param.Name, param.In)) - res.Merge(red) - } - } - - // Recursively follows Items and Schemas - if param.Items != nil { - red := d.validateDefaultValueItemsAgainstSchema(param.Name, param.In, ¶m, param.Items) - if red.HasErrorsOrWarnings() { - res.AddErrors(defaultValueItemsDoesNotValidateMsg(param.Name, param.In)) - res.Merge(red) - } - } - - if param.Schema != nil { - // Validate default value against schema - red := d.validateDefaultValueSchemaAgainstSchema(param.Name, param.In, param.Schema) - if red.HasErrorsOrWarnings() { - res.AddErrors(defaultValueDoesNotValidateMsg(param.Name, param.In)) - res.Merge(red) - } - } - } - - if op.Responses != nil { - if op.Responses.Default != nil { - // Same constraint on default Response - res.Merge(d.validateDefaultInResponse(op.Responses.Default, jsonDefault, path, 0, op.ID)) - } - // Same constraint on regular Responses - if op.Responses.StatusCodeResponses != nil { // Safeguard - for code, r := range op.Responses.StatusCodeResponses { - res.Merge(d.validateDefaultInResponse(&r, "response", path, code, op.ID)) - } - } - } else if op.ID != "" { - // Empty op.ID means there is no meaningful operation: no need to report a specific message - res.AddErrors(noValidResponseMsg(op.ID)) - } - } - } - if s.spec.Spec().Definitions != nil { // Safeguard - // reset explored schemas to get depth-first recursive-proof exploration - d.resetVisited() - for nm, sch := range s.spec.Spec().Definitions { - res.Merge(d.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("definitions.%s", nm), "body", &sch)) - } - } - return res -} - -func (d *defaultValidator) validateDefaultInResponse(resp *spec.Response, responseType, path string, responseCode int, operationID string) *Result { - s := d.SpecValidator - - response, res := responseHelp.expandResponseRef(resp, path, s) - if !res.IsValid() { - return res - } - - responseName, responseCodeAsStr := responseHelp.responseMsgVariants(responseType, responseCode) - - // nolint: dupl - if response.Headers != nil { // Safeguard - for nm, h := range response.Headers { - // reset explored schemas to get depth-first recursive-proof exploration - d.resetVisited() - - if h.Default != nil { - red := NewHeaderValidator(nm, &h, s.KnownFormats).Validate(h.Default) - if red.HasErrorsOrWarnings() { - res.AddErrors(defaultValueHeaderDoesNotValidateMsg(operationID, nm, responseName)) - res.Merge(red) - } - } - - // Headers have inline definition, like params - if h.Items != nil { - red := d.validateDefaultValueItemsAgainstSchema(nm, "header", &h, h.Items) - if red.HasErrorsOrWarnings() { - res.AddErrors(defaultValueHeaderItemsDoesNotValidateMsg(operationID, nm, responseName)) - res.Merge(red) - } - } - - if _, err := compileRegexp(h.Pattern); err != nil { - res.AddErrors(invalidPatternInHeaderMsg(operationID, nm, responseName, h.Pattern, err)) - } - - // Headers don't have schema - } - } - if response.Schema != nil { - // reset explored schemas to get depth-first recursive-proof exploration - d.resetVisited() - - red := d.validateDefaultValueSchemaAgainstSchema(responseCodeAsStr, "response", response.Schema) - if red.HasErrorsOrWarnings() { - // Additional message to make sure the context of the error is not lost - res.AddErrors(defaultValueInDoesNotValidateMsg(operationID, responseName)) - res.Merge(red) - } - } - return res -} - -func (d *defaultValidator) validateDefaultValueSchemaAgainstSchema(path, in string, schema *spec.Schema) *Result { - if schema == nil || d.isVisited(path) { - // Avoids recursing if we are already done with that check - return nil - } - d.beingVisited(path) - res := new(Result) - s := d.SpecValidator - - if schema.Default != nil { - res.Merge(NewSchemaValidator(schema, s.spec.Spec(), path+".default", s.KnownFormats, SwaggerSchema(true)).Validate(schema.Default)) - } - if schema.Items != nil { - if schema.Items.Schema != nil { - res.Merge(d.validateDefaultValueSchemaAgainstSchema(path+".items.default", in, schema.Items.Schema)) - } - // Multiple schemas in items - if schema.Items.Schemas != nil { // Safeguard - for i, sch := range schema.Items.Schemas { - res.Merge(d.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.items[%d].default", path, i), in, &sch)) - } - } - } - if _, err := compileRegexp(schema.Pattern); err != nil { - res.AddErrors(invalidPatternInMsg(path, in, schema.Pattern)) - } - if schema.AdditionalItems != nil && schema.AdditionalItems.Schema != nil { - // NOTE: we keep validating values, even though additionalItems is not supported by Swagger 2.0 (and 3.0 as well) - res.Merge(d.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.additionalItems", path), in, schema.AdditionalItems.Schema)) - } - for propName, prop := range schema.Properties { - res.Merge(d.validateDefaultValueSchemaAgainstSchema(path+"."+propName, in, &prop)) - } - for propName, prop := range schema.PatternProperties { - res.Merge(d.validateDefaultValueSchemaAgainstSchema(path+"."+propName, in, &prop)) - } - if schema.AdditionalProperties != nil && schema.AdditionalProperties.Schema != nil { - res.Merge(d.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.additionalProperties", path), in, schema.AdditionalProperties.Schema)) - } - if schema.AllOf != nil { - for i, aoSch := range schema.AllOf { - res.Merge(d.validateDefaultValueSchemaAgainstSchema(fmt.Sprintf("%s.allOf[%d]", path, i), in, &aoSch)) - } - } - return res -} - -// TODO: Temporary duplicated code. Need to refactor with examples -// nolint: dupl -func (d *defaultValidator) validateDefaultValueItemsAgainstSchema(path, in string, root interface{}, items *spec.Items) *Result { - res := new(Result) - s := d.SpecValidator - if items != nil { - if items.Default != nil { - res.Merge(newItemsValidator(path, in, items, root, s.KnownFormats).Validate(0, items.Default)) - } - if items.Items != nil { - res.Merge(d.validateDefaultValueItemsAgainstSchema(path+"[0].default", in, root, items.Items)) - } - if _, err := compileRegexp(items.Pattern); err != nil { - res.AddErrors(invalidPatternInMsg(path, in, items.Pattern)) - } - } - return res -} diff --git a/vendor/github.com/go-openapi/validate/doc.go b/vendor/github.com/go-openapi/validate/doc.go deleted file mode 100644 index f5ca9a5d5..000000000 --- a/vendor/github.com/go-openapi/validate/doc.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/* -Package validate provides methods to validate a swagger specification, -as well as tools to validate data against their schema. - -This package follows Swagger 2.0. specification (aka OpenAPI 2.0). Reference -can be found here: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md. - -Validating a specification - -Validates a spec document (from JSON or YAML) against the JSON schema for swagger, -then checks a number of extra rules that can't be expressed in JSON schema. - -Entry points: - - Spec() - - NewSpecValidator() - - SpecValidator.Validate() - -Reported as errors: - [x] definition can't declare a property that's already defined by one of its ancestors - [x] definition's ancestor can't be a descendant of the same model - [x] path uniqueness: each api path should be non-verbatim (account for path param names) unique per method - [x] each security reference should contain only unique scopes - [x] each security scope in a security definition should be unique - [x] parameters in path must be unique - [x] each path parameter must correspond to a parameter placeholder and vice versa - [x] each referenceable definition must have references - [x] each definition property listed in the required array must be defined in the properties of the model - [x] each parameter should have a unique `name` and `type` combination - [x] each operation should have only 1 parameter of type body - [x] each reference must point to a valid object - [x] every default value that is specified must validate against the schema for that property - [x] items property is required for all schemas/definitions of type `array` - [x] path parameters must be declared a required - [x] headers must not contain $ref - [x] schema and property examples provided must validate against their respective object's schema - [x] examples provided must validate their schema - -Reported as warnings: - [x] path parameters should not contain any of [{,},\w] - [x] empty path - [x] unused definitions - [x] unsupported validation of examples on non-JSON media types - [x] examples in response without schema - [x] readOnly properties should not be required - -Validating a schema - -The schema validation toolkit validates data against JSON-schema-draft 04 schema. - -It is tested against the full json-schema-testing-suite (https://github.com/json-schema-org/JSON-Schema-Test-Suite), -except for the optional part (bignum, ECMA regexp, ...). - -It supports the complete JSON-schema vocabulary, including keywords not supported by Swagger (e.g. additionalItems, ...) - -Entry points: - - AgainstSchema() - - ... - -Known limitations - -With the current version of this package, the following aspects of swagger are not yet supported: - [ ] errors and warnings are not reported with key/line number in spec - [ ] default values and examples on responses only support application/json producer type - [ ] invalid numeric constraints (such as Minimum, etc..) are not checked except for default and example values - [ ] rules for collectionFormat are not implemented - [ ] no validation rule for polymorphism support (discriminator) [not done here] - [ ] valid js ECMA regexp not supported by Go regexp engine are considered invalid - [ ] arbitrary large numbers are not supported: max is math.MaxFloat64 - -*/ -package validate diff --git a/vendor/github.com/go-openapi/validate/example_validator.go b/vendor/github.com/go-openapi/validate/example_validator.go deleted file mode 100644 index 130359175..000000000 --- a/vendor/github.com/go-openapi/validate/example_validator.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -import ( - "fmt" - - "github.com/go-openapi/spec" -) - -// ExampleValidator validates example values defined in a spec -type exampleValidator struct { - SpecValidator *SpecValidator - visitedSchemas map[string]bool -} - -// resetVisited resets the internal state of visited schemas -func (ex *exampleValidator) resetVisited() { - ex.visitedSchemas = map[string]bool{} -} - -// beingVisited asserts a schema is being visited -func (ex *exampleValidator) beingVisited(path string) { - ex.visitedSchemas[path] = true -} - -// isVisited tells if a path has already been visited -func (ex *exampleValidator) isVisited(path string) bool { - return isVisited(path, ex.visitedSchemas) -} - -// Validate validates the example values declared in the swagger spec -// Example values MUST conform to their schema. -// -// With Swagger 2.0, examples are supported in: -// - schemas -// - individual property -// - responses -// -func (ex *exampleValidator) Validate() (errs *Result) { - errs = new(Result) - if ex == nil || ex.SpecValidator == nil { - return errs - } - ex.resetVisited() - errs.Merge(ex.validateExampleValueValidAgainstSchema()) // error - - - return errs -} - -func (ex *exampleValidator) validateExampleValueValidAgainstSchema() *Result { - // every example value that is specified must validate against the schema for that property - // in: schemas, properties, object, items - // not in: headers, parameters without schema - - res := new(Result) - s := ex.SpecValidator - - for method, pathItem := range s.analyzer.Operations() { - for path, op := range pathItem { - // parameters - for _, param := range paramHelp.safeExpandedParamsFor(path, method, op.ID, res, s) { - - // As of swagger 2.0, Examples are not supported in simple parameters - // However, it looks like it is supported by go-openapi - - // reset explored schemas to get depth-first recursive-proof exploration - ex.resetVisited() - - // Check simple parameters first - // default values provided must validate against their inline definition (no explicit schema) - if param.Example != nil && param.Schema == nil { - // check param default value is valid - red := NewParamValidator(¶m, s.KnownFormats).Validate(param.Example) - if red.HasErrorsOrWarnings() { - res.AddWarnings(exampleValueDoesNotValidateMsg(param.Name, param.In)) - res.MergeAsWarnings(red) - } - } - - // Recursively follows Items and Schemas - if param.Items != nil { - red := ex.validateExampleValueItemsAgainstSchema(param.Name, param.In, ¶m, param.Items) - if red.HasErrorsOrWarnings() { - res.AddWarnings(exampleValueItemsDoesNotValidateMsg(param.Name, param.In)) - res.Merge(red) - } - } - - if param.Schema != nil { - // Validate example value against schema - red := ex.validateExampleValueSchemaAgainstSchema(param.Name, param.In, param.Schema) - if red.HasErrorsOrWarnings() { - res.AddWarnings(exampleValueDoesNotValidateMsg(param.Name, param.In)) - res.Merge(red) - } - } - } - - if op.Responses != nil { - if op.Responses.Default != nil { - // Same constraint on default Response - res.Merge(ex.validateExampleInResponse(op.Responses.Default, jsonDefault, path, 0, op.ID)) - } - // Same constraint on regular Responses - if op.Responses.StatusCodeResponses != nil { // Safeguard - for code, r := range op.Responses.StatusCodeResponses { - res.Merge(ex.validateExampleInResponse(&r, "response", path, code, op.ID)) - } - } - } else if op.ID != "" { - // Empty op.ID means there is no meaningful operation: no need to report a specific message - res.AddErrors(noValidResponseMsg(op.ID)) - } - } - } - if s.spec.Spec().Definitions != nil { // Safeguard - // reset explored schemas to get depth-first recursive-proof exploration - ex.resetVisited() - for nm, sch := range s.spec.Spec().Definitions { - res.Merge(ex.validateExampleValueSchemaAgainstSchema(fmt.Sprintf("definitions.%s", nm), "body", &sch)) - } - } - return res -} - -func (ex *exampleValidator) validateExampleInResponse(resp *spec.Response, responseType, path string, responseCode int, operationID string) *Result { - s := ex.SpecValidator - - response, res := responseHelp.expandResponseRef(resp, path, s) - if !res.IsValid() { // Safeguard - return res - } - - responseName, responseCodeAsStr := responseHelp.responseMsgVariants(responseType, responseCode) - - // nolint: dupl - if response.Headers != nil { // Safeguard - for nm, h := range response.Headers { - // reset explored schemas to get depth-first recursive-proof exploration - ex.resetVisited() - - if h.Example != nil { - red := NewHeaderValidator(nm, &h, s.KnownFormats).Validate(h.Example) - if red.HasErrorsOrWarnings() { - res.AddWarnings(exampleValueHeaderDoesNotValidateMsg(operationID, nm, responseName)) - res.MergeAsWarnings(red) - } - } - - // Headers have inline definition, like params - if h.Items != nil { - red := ex.validateExampleValueItemsAgainstSchema(nm, "header", &h, h.Items) - if red.HasErrorsOrWarnings() { - res.AddWarnings(exampleValueHeaderItemsDoesNotValidateMsg(operationID, nm, responseName)) - res.MergeAsWarnings(red) - } - } - - if _, err := compileRegexp(h.Pattern); err != nil { - res.AddErrors(invalidPatternInHeaderMsg(operationID, nm, responseName, h.Pattern, err)) - } - - // Headers don't have schema - } - } - if response.Schema != nil { - // reset explored schemas to get depth-first recursive-proof exploration - ex.resetVisited() - - red := ex.validateExampleValueSchemaAgainstSchema(responseCodeAsStr, "response", response.Schema) - if red.HasErrorsOrWarnings() { - // Additional message to make sure the context of the error is not lost - res.AddWarnings(exampleValueInDoesNotValidateMsg(operationID, responseName)) - res.Merge(red) - } - } - - if response.Examples != nil { - if response.Schema != nil { - if example, ok := response.Examples["application/json"]; ok { - res.MergeAsWarnings(NewSchemaValidator(response.Schema, s.spec.Spec(), path+".examples", s.KnownFormats, SwaggerSchema(true)).Validate(example)) - } else { - // TODO: validate other media types too - res.AddWarnings(examplesMimeNotSupportedMsg(operationID, responseName)) - } - } else { - res.AddWarnings(examplesWithoutSchemaMsg(operationID, responseName)) - } - } - return res -} - -func (ex *exampleValidator) validateExampleValueSchemaAgainstSchema(path, in string, schema *spec.Schema) *Result { - if schema == nil || ex.isVisited(path) { - // Avoids recursing if we are already done with that check - return nil - } - ex.beingVisited(path) - s := ex.SpecValidator - res := new(Result) - - if schema.Example != nil { - res.MergeAsWarnings(NewSchemaValidator(schema, s.spec.Spec(), path+".example", s.KnownFormats, SwaggerSchema(true)).Validate(schema.Example)) - } - if schema.Items != nil { - if schema.Items.Schema != nil { - res.Merge(ex.validateExampleValueSchemaAgainstSchema(path+".items.example", in, schema.Items.Schema)) - } - // Multiple schemas in items - if schema.Items.Schemas != nil { // Safeguard - for i, sch := range schema.Items.Schemas { - res.Merge(ex.validateExampleValueSchemaAgainstSchema(fmt.Sprintf("%s.items[%d].example", path, i), in, &sch)) - } - } - } - if _, err := compileRegexp(schema.Pattern); err != nil { - res.AddErrors(invalidPatternInMsg(path, in, schema.Pattern)) - } - if schema.AdditionalItems != nil && schema.AdditionalItems.Schema != nil { - // NOTE: we keep validating values, even though additionalItems is unsupported in Swagger 2.0 (and 3.0 as well) - res.Merge(ex.validateExampleValueSchemaAgainstSchema(fmt.Sprintf("%s.additionalItems", path), in, schema.AdditionalItems.Schema)) - } - for propName, prop := range schema.Properties { - res.Merge(ex.validateExampleValueSchemaAgainstSchema(path+"."+propName, in, &prop)) - } - for propName, prop := range schema.PatternProperties { - res.Merge(ex.validateExampleValueSchemaAgainstSchema(path+"."+propName, in, &prop)) - } - if schema.AdditionalProperties != nil && schema.AdditionalProperties.Schema != nil { - res.Merge(ex.validateExampleValueSchemaAgainstSchema(fmt.Sprintf("%s.additionalProperties", path), in, schema.AdditionalProperties.Schema)) - } - if schema.AllOf != nil { - for i, aoSch := range schema.AllOf { - res.Merge(ex.validateExampleValueSchemaAgainstSchema(fmt.Sprintf("%s.allOf[%d]", path, i), in, &aoSch)) - } - } - return res -} - -// TODO: Temporary duplicated code. Need to refactor with examples -// nolint: dupl -func (ex *exampleValidator) validateExampleValueItemsAgainstSchema(path, in string, root interface{}, items *spec.Items) *Result { - res := new(Result) - s := ex.SpecValidator - if items != nil { - if items.Example != nil { - res.MergeAsWarnings(newItemsValidator(path, in, items, root, s.KnownFormats).Validate(0, items.Example)) - } - if items.Items != nil { - res.Merge(ex.validateExampleValueItemsAgainstSchema(path+"[0].example", in, root, items.Items)) - } - if _, err := compileRegexp(items.Pattern); err != nil { - res.AddErrors(invalidPatternInMsg(path, in, items.Pattern)) - } - } - return res -} diff --git a/vendor/github.com/go-openapi/validate/go.mod b/vendor/github.com/go-openapi/validate/go.mod deleted file mode 100644 index 2d59ddbaf..000000000 --- a/vendor/github.com/go-openapi/validate/go.mod +++ /dev/null @@ -1,20 +0,0 @@ -module github.com/go-openapi/validate - -require ( - github.com/go-openapi/analysis v0.19.5 - github.com/go-openapi/errors v0.19.2 - github.com/go-openapi/jsonpointer v0.19.3 - github.com/go-openapi/jsonreference v0.19.3 // indirect - github.com/go-openapi/loads v0.19.4 - github.com/go-openapi/runtime v0.19.4 - github.com/go-openapi/spec v0.19.3 - github.com/go-openapi/strfmt v0.19.3 - github.com/go-openapi/swag v0.19.5 - github.com/mailru/easyjson v0.7.0 // indirect - github.com/stretchr/testify v1.4.0 - github.com/vektah/gqlparser v1.1.2 - go.mongodb.org/mongo-driver v1.1.2 // indirect - gopkg.in/yaml.v2 v2.2.4 -) - -go 1.13 diff --git a/vendor/github.com/go-openapi/validate/go.sum b/vendor/github.com/go-openapi/validate/go.sum deleted file mode 100644 index 0e9c75c1f..000000000 --- a/vendor/github.com/go-openapi/validate/go.sum +++ /dev/null @@ -1,156 +0,0 @@ -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -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/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -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/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2 h1:ophLETFestFZHk3ji7niPEL4d466QjW+0Tdg5VyDq7E= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5 h1:8b2ZgKfKIUTVQpTb77MoRDIMEIwvDVw40o3aOXdfYzI= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0 h1:wCOBNscACI8L93tt5tvB2zOMkJ098XCw3fP0BY2ybDA= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2 h1:rf5ArTHmIJxyV5Oiks+Su0mUens1+AjpkPoWr5xFRcI= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.3 h1:jwIoahqCmaA5OBoc/B+1+Mu2L0Gr8xYQnbeyQEo/7b0= -github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI= -github.com/go-openapi/loads v0.19.4 h1:5I4CCSqoWzT+82bBkNIvmLc0UOsoKKQ4Fz+3VxOB7SY= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0 h1:sU6pp4dSV2sGlNKKyHxZzi1m1kG4WnYtWcJ+HYbygjE= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4 h1:csnOgcgAiuGoM/Po7PEpKDoNulCcF3FGbSnbHfxgjMI= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0 h1:0Dn9qy1G9+UJfRU7TR8bmdGxb4uifB7HNrJjOnV0yPk= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -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/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/vektah/gqlparser v1.1.2 h1:ZsyLGn7/7jDNI+y4SEhI4yAxRChlv15pUHMjijT+e68= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -go.mongodb.org/mongo-driver v1.0.3 h1:GKoji1ld3tw2aC+GX1wbr/J2fX13yNacEYoJ8Nhr0yU= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1 h1:Sq1fR+0c58RME5EoqKdjkiQAmPjmfHlZOoRI6fTUOcs= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2 h1:jxcFYjlkl8xaERsgLo+RNquI0epW6zuy/ZRQs6jnrFA= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/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-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582 h1:p9xBe/w/OzkeYVKm234g55gMdD1nSIooTir5kV11kfA= -golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/validate/helpers.go b/vendor/github.com/go-openapi/validate/helpers.go deleted file mode 100644 index 4b77a0004..000000000 --- a/vendor/github.com/go-openapi/validate/helpers.go +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -// TODO: define this as package validate/internal -// This must be done while keeping CI intact with all tests and test coverage - -import ( - "reflect" - "strconv" - "strings" - - "github.com/go-openapi/errors" - "github.com/go-openapi/spec" -) - -const ( - swaggerBody = "body" - swaggerExample = "example" - swaggerExamples = "examples" -) - -const ( - objectType = "object" - arrayType = "array" - stringType = "string" - integerType = "integer" - numberType = "number" - booleanType = "boolean" - fileType = "file" - nullType = "null" -) - -const ( - jsonProperties = "properties" - jsonItems = "items" - jsonType = "type" - //jsonSchema = "schema" - jsonDefault = "default" -) - -const ( - stringFormatDate = "date" - stringFormatDateTime = "date-time" - stringFormatPassword = "password" - stringFormatByte = "byte" - //stringFormatBinary = "binary" - stringFormatCreditCard = "creditcard" - stringFormatDuration = "duration" - stringFormatEmail = "email" - stringFormatHexColor = "hexcolor" - stringFormatHostname = "hostname" - stringFormatIPv4 = "ipv4" - stringFormatIPv6 = "ipv6" - stringFormatISBN = "isbn" - stringFormatISBN10 = "isbn10" - stringFormatISBN13 = "isbn13" - stringFormatMAC = "mac" - stringFormatBSONObjectID = "bsonobjectid" - stringFormatRGBColor = "rgbcolor" - stringFormatSSN = "ssn" - stringFormatURI = "uri" - stringFormatUUID = "uuid" - stringFormatUUID3 = "uuid3" - stringFormatUUID4 = "uuid4" - stringFormatUUID5 = "uuid5" - - integerFormatInt32 = "int32" - integerFormatInt64 = "int64" - integerFormatUInt32 = "uint32" - integerFormatUInt64 = "uint64" - - numberFormatFloat32 = "float32" - numberFormatFloat64 = "float64" - numberFormatFloat = "float" - numberFormatDouble = "double" -) - -// Helpers available at the package level -var ( - pathHelp *pathHelper - valueHelp *valueHelper - errorHelp *errorHelper - paramHelp *paramHelper - responseHelp *responseHelper -) - -type errorHelper struct { - // A collection of unexported helpers for error construction -} - -func (h *errorHelper) sErr(err errors.Error) *Result { - // Builds a Result from standard errors.Error - return &Result{Errors: []error{err}} -} - -func (h *errorHelper) addPointerError(res *Result, err error, ref string, fromPath string) *Result { - // Provides more context on error messages - // reported by the jsoinpointer package by altering the passed Result - if err != nil { - res.AddErrors(cannotResolveRefMsg(fromPath, ref, err)) - } - return res -} - -type pathHelper struct { - // A collection of unexported helpers for path validation -} - -func (h *pathHelper) stripParametersInPath(path string) string { - // Returns a path stripped from all path parameters, with multiple or trailing slashes removed. - // - // Stripping is performed on a slash-separated basis, e.g '/a{/b}' remains a{/b} and not /a. - // - Trailing "/" make a difference, e.g. /a/ !~ /a (ex: canary/bitbucket.org/swagger.json) - // - presence or absence of a parameter makes a difference, e.g. /a/{log} !~ /a/ (ex: canary/kubernetes/swagger.json) - - // Regexp to extract parameters from path, with surrounding {}. - // NOTE: important non-greedy modifier - rexParsePathParam := mustCompileRegexp(`{[^{}]+?}`) - strippedSegments := []string{} - - for _, segment := range strings.Split(path, "/") { - strippedSegments = append(strippedSegments, rexParsePathParam.ReplaceAllString(segment, "X")) - } - return strings.Join(strippedSegments, "/") -} - -func (h *pathHelper) extractPathParams(path string) (params []string) { - // Extracts all params from a path, with surrounding "{}" - rexParsePathParam := mustCompileRegexp(`{[^{}]+?}`) - - for _, segment := range strings.Split(path, "/") { - for _, v := range rexParsePathParam.FindAllStringSubmatch(segment, -1) { - params = append(params, v...) - } - } - return -} - -type valueHelper struct { - // A collection of unexported helpers for value validation -} - -func (h *valueHelper) asInt64(val interface{}) int64 { - // Number conversion function for int64, without error checking - // (implements an implicit type upgrade). - v := reflect.ValueOf(val) - switch v.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return int64(v.Uint()) - case reflect.Float32, reflect.Float64: - return int64(v.Float()) - default: - //panic("Non numeric value in asInt64()") - return 0 - } -} - -func (h *valueHelper) asUint64(val interface{}) uint64 { - // Number conversion function for uint64, without error checking - // (implements an implicit type upgrade). - v := reflect.ValueOf(val) - switch v.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return uint64(v.Int()) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return v.Uint() - case reflect.Float32, reflect.Float64: - return uint64(v.Float()) - default: - //panic("Non numeric value in asUint64()") - return 0 - } -} - -// Same for unsigned floats -func (h *valueHelper) asFloat64(val interface{}) float64 { - // Number conversion function for float64, without error checking - // (implements an implicit type upgrade). - v := reflect.ValueOf(val) - switch v.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return float64(v.Int()) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return float64(v.Uint()) - case reflect.Float32, reflect.Float64: - return v.Float() - default: - //panic("Non numeric value in asFloat64()") - return 0 - } -} - -type paramHelper struct { - // A collection of unexported helpers for parameters resolution -} - -func (h *paramHelper) safeExpandedParamsFor(path, method, operationID string, res *Result, s *SpecValidator) (params []spec.Parameter) { - operation, ok := s.analyzer.OperationFor(method, path) - if ok { - // expand parameters first if necessary - resolvedParams := []spec.Parameter{} - for _, ppr := range operation.Parameters { - resolvedParam, red := h.resolveParam(path, method, operationID, &ppr, s) - res.Merge(red) - if resolvedParam != nil { - resolvedParams = append(resolvedParams, *resolvedParam) - } - } - // remove params with invalid expansion from Slice - operation.Parameters = resolvedParams - - for _, ppr := range s.analyzer.SafeParamsFor(method, path, - func(p spec.Parameter, err error) bool { - // since params have already been expanded, there are few causes for error - res.AddErrors(someParametersBrokenMsg(path, method, operationID)) - // original error from analyzer - res.AddErrors(err) - return true - }) { - params = append(params, ppr) - } - } - return -} - -func (h *paramHelper) resolveParam(path, method, operationID string, param *spec.Parameter, s *SpecValidator) (*spec.Parameter, *Result) { - // Ensure parameter is expanded - var err error - res := new(Result) - isRef := param.Ref.String() != "" - if s.spec.SpecFilePath() == "" { - err = spec.ExpandParameterWithRoot(param, s.spec.Spec(), nil) - } else { - err = spec.ExpandParameter(param, s.spec.SpecFilePath()) - - } - if err != nil { // Safeguard - // NOTE: we may enter enter here when the whole parameter is an unresolved $ref - refPath := strings.Join([]string{"\"" + path + "\"", method}, ".") - errorHelp.addPointerError(res, err, param.Ref.String(), refPath) - return nil, res - } - res.Merge(h.checkExpandedParam(param, param.Name, param.In, operationID, isRef)) - return param, res -} - -func (h *paramHelper) checkExpandedParam(pr *spec.Parameter, path, in, operation string, isRef bool) *Result { - // Secure parameter structure after $ref resolution - res := new(Result) - simpleZero := spec.SimpleSchema{} - // Try to explain why... best guess - switch { - case pr.In == swaggerBody && (pr.SimpleSchema != simpleZero && pr.SimpleSchema.Type != objectType): - if isRef { - // Most likely, a $ref with a sibling is an unwanted situation: in itself this is a warning... - // but we detect it because of the following error: - // schema took over Parameter for an unexplained reason - res.AddWarnings(refShouldNotHaveSiblingsMsg(path, operation)) - } - res.AddErrors(invalidParameterDefinitionMsg(path, in, operation)) - case pr.In != swaggerBody && pr.Schema != nil: - if isRef { - res.AddWarnings(refShouldNotHaveSiblingsMsg(path, operation)) - } - res.AddErrors(invalidParameterDefinitionAsSchemaMsg(path, in, operation)) - case (pr.In == swaggerBody && pr.Schema == nil) || (pr.In != swaggerBody && pr.SimpleSchema == simpleZero): - // Other unexpected mishaps - res.AddErrors(invalidParameterDefinitionMsg(path, in, operation)) - } - return res -} - -type responseHelper struct { - // A collection of unexported helpers for response resolution -} - -func (r *responseHelper) expandResponseRef( - response *spec.Response, - path string, s *SpecValidator) (*spec.Response, *Result) { - // Ensure response is expanded - var err error - res := new(Result) - if s.spec.SpecFilePath() == "" { - // there is no physical document to resolve $ref in response - err = spec.ExpandResponseWithRoot(response, s.spec.Spec(), nil) - } else { - err = spec.ExpandResponse(response, s.spec.SpecFilePath()) - } - if err != nil { // Safeguard - // NOTE: we may enter here when the whole response is an unresolved $ref. - errorHelp.addPointerError(res, err, response.Ref.String(), path) - return nil, res - } - return response, res -} - -func (r *responseHelper) responseMsgVariants( - responseType string, - responseCode int) (responseName, responseCodeAsStr string) { - // Path variants for messages - if responseType == jsonDefault { - responseCodeAsStr = jsonDefault - responseName = "default response" - } else { - responseCodeAsStr = strconv.Itoa(responseCode) - responseName = "response " + responseCodeAsStr - } - return -} diff --git a/vendor/github.com/go-openapi/validate/result.go b/vendor/github.com/go-openapi/validate/result.go deleted file mode 100644 index 8f5f935e5..000000000 --- a/vendor/github.com/go-openapi/validate/result.go +++ /dev/null @@ -1,486 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -import ( - "fmt" - "reflect" - "strings" - - "github.com/go-openapi/errors" - "github.com/go-openapi/spec" -) - -// Result represents a validation result set, composed of -// errors and warnings. -// -// It is used to keep track of all detected errors and warnings during -// the validation of a specification. -// -// Matchcount is used to determine -// which errors are relevant in the case of AnyOf, OneOf -// schema validation. Results from the validation branch -// with most matches get eventually selected. -// -// TODO: keep path of key originating the error -type Result struct { - Errors []error - Warnings []error - MatchCount int - - // the object data - data interface{} - - // Schemata for the root object - rootObjectSchemata schemata - // Schemata for object fields - fieldSchemata []fieldSchemata - // Schemata for slice items - itemSchemata []itemSchemata - - cachedFieldSchemta map[FieldKey][]*spec.Schema - cachedItemSchemata map[ItemKey][]*spec.Schema -} - -// FieldKey is a pair of an object and a field, usable as a key for a map. -type FieldKey struct { - object reflect.Value // actually a map[string]interface{}, but the latter cannot be a key - field string -} - -// ItemKey is a pair of a slice and an index, usable as a key for a map. -type ItemKey struct { - slice reflect.Value // actually a []interface{}, but the latter cannot be a key - index int -} - -// NewFieldKey returns a pair of an object and field usable as a key of a map. -func NewFieldKey(obj map[string]interface{}, field string) FieldKey { - return FieldKey{object: reflect.ValueOf(obj), field: field} -} - -// Object returns the underlying object of this key. -func (fk *FieldKey) Object() map[string]interface{} { - return fk.object.Interface().(map[string]interface{}) -} - -// Field returns the underlying field of this key. -func (fk *FieldKey) Field() string { - return fk.field -} - -// NewItemKey returns a pair of a slice and index usable as a key of a map. -func NewItemKey(slice interface{}, i int) ItemKey { - return ItemKey{slice: reflect.ValueOf(slice), index: i} -} - -// Slice returns the underlying slice of this key. -func (ik *ItemKey) Slice() []interface{} { - return ik.slice.Interface().([]interface{}) -} - -// Index returns the underlying index of this key. -func (ik *ItemKey) Index() int { - return ik.index -} - -type fieldSchemata struct { - obj map[string]interface{} - field string - schemata schemata -} - -type itemSchemata struct { - slice reflect.Value - index int - schemata schemata -} - -// Merge merges this result with the other one(s), preserving match counts etc. -func (r *Result) Merge(others ...*Result) *Result { - for _, other := range others { - if other == nil { - continue - } - r.mergeWithoutRootSchemata(other) - r.rootObjectSchemata.Append(other.rootObjectSchemata) - } - return r -} - -// Data returns the original data object used for validation. Mutating this renders -// the result invalid. -func (r *Result) Data() interface{} { - return r.data -} - -// RootObjectSchemata returns the schemata which apply to the root object. -func (r *Result) RootObjectSchemata() []*spec.Schema { - return r.rootObjectSchemata.Slice() -} - -// FieldSchemata returns the schemata which apply to fields in objects. -// nolint: dupl -func (r *Result) FieldSchemata() map[FieldKey][]*spec.Schema { - if r.cachedFieldSchemta != nil { - return r.cachedFieldSchemta - } - - ret := make(map[FieldKey][]*spec.Schema, len(r.fieldSchemata)) - for _, fs := range r.fieldSchemata { - key := NewFieldKey(fs.obj, fs.field) - if fs.schemata.one != nil { - ret[key] = append(ret[key], fs.schemata.one) - } else if len(fs.schemata.multiple) > 0 { - ret[key] = append(ret[key], fs.schemata.multiple...) - } - } - r.cachedFieldSchemta = ret - return ret -} - -// ItemSchemata returns the schemata which apply to items in slices. -// nolint: dupl -func (r *Result) ItemSchemata() map[ItemKey][]*spec.Schema { - if r.cachedItemSchemata != nil { - return r.cachedItemSchemata - } - - ret := make(map[ItemKey][]*spec.Schema, len(r.itemSchemata)) - for _, ss := range r.itemSchemata { - key := NewItemKey(ss.slice, ss.index) - if ss.schemata.one != nil { - ret[key] = append(ret[key], ss.schemata.one) - } else if len(ss.schemata.multiple) > 0 { - ret[key] = append(ret[key], ss.schemata.multiple...) - } - } - r.cachedItemSchemata = ret - return ret -} - -func (r *Result) resetCaches() { - r.cachedFieldSchemta = nil - r.cachedItemSchemata = nil -} - -// mergeForField merges other into r, assigning other's root schemata to the given Object and field name. -// nolint: unparam -func (r *Result) mergeForField(obj map[string]interface{}, field string, other *Result) *Result { - if other == nil { - return r - } - r.mergeWithoutRootSchemata(other) - - if other.rootObjectSchemata.Len() > 0 { - if r.fieldSchemata == nil { - r.fieldSchemata = make([]fieldSchemata, len(obj)) - } - r.fieldSchemata = append(r.fieldSchemata, fieldSchemata{ - obj: obj, - field: field, - schemata: other.rootObjectSchemata, - }) - } - - return r -} - -// mergeForSlice merges other into r, assigning other's root schemata to the given slice and index. -// nolint: unparam -func (r *Result) mergeForSlice(slice reflect.Value, i int, other *Result) *Result { - if other == nil { - return r - } - r.mergeWithoutRootSchemata(other) - - if other.rootObjectSchemata.Len() > 0 { - if r.itemSchemata == nil { - r.itemSchemata = make([]itemSchemata, slice.Len()) - } - r.itemSchemata = append(r.itemSchemata, itemSchemata{ - slice: slice, - index: i, - schemata: other.rootObjectSchemata, - }) - } - - return r -} - -// addRootObjectSchemata adds the given schemata for the root object of the result. -// The slice schemata might be reused. I.e. do not modify it after being added to a result. -func (r *Result) addRootObjectSchemata(s *spec.Schema) { - r.rootObjectSchemata.Append(schemata{one: s}) -} - -// addPropertySchemata adds the given schemata for the object and field. -// The slice schemata might be reused. I.e. do not modify it after being added to a result. -func (r *Result) addPropertySchemata(obj map[string]interface{}, fld string, schema *spec.Schema) { - if r.fieldSchemata == nil { - r.fieldSchemata = make([]fieldSchemata, 0, len(obj)) - } - r.fieldSchemata = append(r.fieldSchemata, fieldSchemata{obj: obj, field: fld, schemata: schemata{one: schema}}) -} - -/* -// addSliceSchemata adds the given schemata for the slice and index. -// The slice schemata might be reused. I.e. do not modify it after being added to a result. -func (r *Result) addSliceSchemata(slice reflect.Value, i int, schema *spec.Schema) { - if r.itemSchemata == nil { - r.itemSchemata = make([]itemSchemata, 0, slice.Len()) - } - r.itemSchemata = append(r.itemSchemata, itemSchemata{slice: slice, index: i, schemata: schemata{one: schema}}) -} -*/ - -// mergeWithoutRootSchemata merges other into r, ignoring the rootObject schemata. -func (r *Result) mergeWithoutRootSchemata(other *Result) { - r.resetCaches() - r.AddErrors(other.Errors...) - r.AddWarnings(other.Warnings...) - r.MatchCount += other.MatchCount - - if other.fieldSchemata != nil { - if r.fieldSchemata == nil { - r.fieldSchemata = other.fieldSchemata - } else { - r.fieldSchemata = append(r.fieldSchemata, other.fieldSchemata...) - } - } - - if other.itemSchemata != nil { - if r.itemSchemata == nil { - r.itemSchemata = other.itemSchemata - } else { - r.itemSchemata = append(r.itemSchemata, other.itemSchemata...) - } - } -} - -// MergeAsErrors merges this result with the other one(s), preserving match counts etc. -// -// Warnings from input are merged as Errors in the returned merged Result. -func (r *Result) MergeAsErrors(others ...*Result) *Result { - for _, other := range others { - if other != nil { - r.resetCaches() - r.AddErrors(other.Errors...) - r.AddErrors(other.Warnings...) - r.MatchCount += other.MatchCount - } - } - return r -} - -// MergeAsWarnings merges this result with the other one(s), preserving match counts etc. -// -// Errors from input are merged as Warnings in the returned merged Result. -func (r *Result) MergeAsWarnings(others ...*Result) *Result { - for _, other := range others { - if other != nil { - r.resetCaches() - r.AddWarnings(other.Errors...) - r.AddWarnings(other.Warnings...) - r.MatchCount += other.MatchCount - } - } - return r -} - -// AddErrors adds errors to this validation result (if not already reported). -// -// Since the same check may be passed several times while exploring the -// spec structure (via $ref, ...) reported messages are kept -// unique. -func (r *Result) AddErrors(errors ...error) { - for _, e := range errors { - found := false - if e != nil { - for _, isReported := range r.Errors { - if e.Error() == isReported.Error() { - found = true - break - } - } - if !found { - r.Errors = append(r.Errors, e) - } - } - } -} - -// AddWarnings adds warnings to this validation result (if not already reported). -func (r *Result) AddWarnings(warnings ...error) { - for _, e := range warnings { - found := false - if e != nil { - for _, isReported := range r.Warnings { - if e.Error() == isReported.Error() { - found = true - break - } - } - if !found { - r.Warnings = append(r.Warnings, e) - } - } - } -} - -func (r *Result) keepRelevantErrors() *Result { - // TODO: this one is going to disapear... - // keepRelevantErrors strips a result from standard errors and keeps - // the ones which are supposedly more accurate. - // - // The original result remains unaffected (creates a new instance of Result). - // This method is used to work around the "matchCount" filter which would otherwise - // strip our result from some accurate error reporting from lower level validators. - // - // NOTE: this implementation with a placeholder (IMPORTANT!) is neither clean nor - // very efficient. On the other hand, relying on go-openapi/errors to manipulate - // codes would require to change a lot here. So, for the moment, let's go with - // placeholders. - strippedErrors := []error{} - for _, e := range r.Errors { - if strings.HasPrefix(e.Error(), "IMPORTANT!") { - strippedErrors = append(strippedErrors, fmt.Errorf(strings.TrimPrefix(e.Error(), "IMPORTANT!"))) - } - } - strippedWarnings := []error{} - for _, e := range r.Warnings { - if strings.HasPrefix(e.Error(), "IMPORTANT!") { - strippedWarnings = append(strippedWarnings, fmt.Errorf(strings.TrimPrefix(e.Error(), "IMPORTANT!"))) - } - } - strippedResult := new(Result) - strippedResult.Errors = strippedErrors - strippedResult.Warnings = strippedWarnings - return strippedResult -} - -// IsValid returns true when this result is valid. -// -// Returns true on a nil *Result. -func (r *Result) IsValid() bool { - if r == nil { - return true - } - return len(r.Errors) == 0 -} - -// HasErrors returns true when this result is invalid. -// -// Returns false on a nil *Result. -func (r *Result) HasErrors() bool { - if r == nil { - return false - } - return !r.IsValid() -} - -// HasWarnings returns true when this result contains warnings. -// -// Returns false on a nil *Result. -func (r *Result) HasWarnings() bool { - if r == nil { - return false - } - return len(r.Warnings) > 0 -} - -// HasErrorsOrWarnings returns true when this result contains -// either errors or warnings. -// -// Returns false on a nil *Result. -func (r *Result) HasErrorsOrWarnings() bool { - if r == nil { - return false - } - return len(r.Errors) > 0 || len(r.Warnings) > 0 -} - -// Inc increments the match count -func (r *Result) Inc() { - r.MatchCount++ -} - -// AsError renders this result as an error interface -// -// TODO: reporting / pretty print with path ordered and indented -func (r *Result) AsError() error { - if r.IsValid() { - return nil - } - return errors.CompositeValidationError(r.Errors...) -} - -// schemata is an arbitrary number of schemata. It does a distinction between zero, -// one and many schemata to avoid slice allocations. -type schemata struct { - // one is set if there is exactly one schema. In that case multiple must be nil. - one *spec.Schema - // multiple is an arbitrary number of schemas. If it is set, one must be nil. - multiple []*spec.Schema -} - -func (s *schemata) Len() int { - if s.one != nil { - return 1 - } - return len(s.multiple) -} - -func (s *schemata) Slice() []*spec.Schema { - if s == nil { - return nil - } - if s.one != nil { - return []*spec.Schema{s.one} - } - return s.multiple -} - -// appendSchemata appends the schemata in other to s. It mutated s in-place. -func (s *schemata) Append(other schemata) { - if other.one == nil && len(other.multiple) == 0 { - return - } - if s.one == nil && len(s.multiple) == 0 { - *s = other - return - } - - if s.one != nil { - if other.one != nil { - s.multiple = []*spec.Schema{s.one, other.one} - } else { - t := make([]*spec.Schema, 0, 1+len(other.multiple)) - s.multiple = append(append(t, s.one), other.multiple...) - } - s.one = nil - } else { - if other.one != nil { - s.multiple = append(s.multiple, other.one) - } else { - if cap(s.multiple) >= len(s.multiple)+len(other.multiple) { - s.multiple = append(s.multiple, other.multiple...) - } else { - t := make([]*spec.Schema, 0, len(s.multiple)+len(other.multiple)) - s.multiple = append(append(t, s.multiple...), other.multiple...) - } - } - } -} diff --git a/vendor/github.com/go-openapi/validate/schema_option.go b/vendor/github.com/go-openapi/validate/schema_option.go deleted file mode 100644 index 4b4879de8..000000000 --- a/vendor/github.com/go-openapi/validate/schema_option.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -// SchemaValidatorOptions defines optional rules for schema validation -type SchemaValidatorOptions struct { - EnableObjectArrayTypeCheck bool - EnableArrayMustHaveItemsCheck bool -} - -// Option sets optional rules for schema validation -type Option func(*SchemaValidatorOptions) - -// EnableObjectArrayTypeCheck activates the swagger rule: an items must be in type: array -func EnableObjectArrayTypeCheck(enable bool) Option { - return func(svo *SchemaValidatorOptions) { - svo.EnableObjectArrayTypeCheck = enable - } -} - -// EnableArrayMustHaveItemsCheck activates the swagger rule: an array must have items defined -func EnableArrayMustHaveItemsCheck(enable bool) Option { - return func(svo *SchemaValidatorOptions) { - svo.EnableArrayMustHaveItemsCheck = enable - } -} - -// SwaggerSchema activates swagger schema validation rules -func SwaggerSchema(enable bool) Option { - return func(svo *SchemaValidatorOptions) { - svo.EnableObjectArrayTypeCheck = enable - svo.EnableArrayMustHaveItemsCheck = enable - } -} - -// Options returns current options -func (svo SchemaValidatorOptions) Options() []Option { - return []Option{ - EnableObjectArrayTypeCheck(svo.EnableObjectArrayTypeCheck), - EnableArrayMustHaveItemsCheck(svo.EnableArrayMustHaveItemsCheck), - } -} diff --git a/vendor/github.com/go-openapi/validate/spec.go b/vendor/github.com/go-openapi/validate/spec.go deleted file mode 100644 index ce8ba17ca..000000000 --- a/vendor/github.com/go-openapi/validate/spec.go +++ /dev/null @@ -1,787 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -import ( - "encoding/json" - "fmt" - "sort" - "strings" - - "github.com/go-openapi/analysis" - "github.com/go-openapi/errors" - "github.com/go-openapi/jsonpointer" - "github.com/go-openapi/loads" - "github.com/go-openapi/spec" - "github.com/go-openapi/strfmt" -) - -// Spec validates an OpenAPI 2.0 specification document. -// -// Returns an error flattening in a single standard error, all validation messages. -// -// - TODO: $ref should not have siblings -// - TODO: make sure documentation reflects all checks and warnings -// - TODO: check on discriminators -// - TODO: explicit message on unsupported keywords (better than "forbidden property"...) -// - TODO: full list of unresolved refs -// - TODO: validate numeric constraints (issue#581): this should be handled like defaults and examples -// - TODO: option to determine if we validate for go-swagger or in a more general context -// - TODO: check on required properties to support anyOf, allOf, oneOf -// -// NOTE: SecurityScopes are maps: no need to check uniqueness -// -func Spec(doc *loads.Document, formats strfmt.Registry) error { - errs, _ /*warns*/ := NewSpecValidator(doc.Schema(), formats).Validate(doc) - if errs.HasErrors() { - return errors.CompositeValidationError(errs.Errors...) - } - return nil -} - -// SpecValidator validates a swagger 2.0 spec -type SpecValidator struct { - schema *spec.Schema // swagger 2.0 schema - spec *loads.Document - analyzer *analysis.Spec - expanded *loads.Document - KnownFormats strfmt.Registry - Options Opts // validation options -} - -// NewSpecValidator creates a new swagger spec validator instance -func NewSpecValidator(schema *spec.Schema, formats strfmt.Registry) *SpecValidator { - return &SpecValidator{ - schema: schema, - KnownFormats: formats, - Options: defaultOpts, - } -} - -// Validate validates the swagger spec -func (s *SpecValidator) Validate(data interface{}) (*Result, *Result) { - var sd *loads.Document - errs, warnings := new(Result), new(Result) - - if v, ok := data.(*loads.Document); ok { - sd = v - } - if sd == nil { - errs.AddErrors(invalidDocumentMsg()) - return errs, warnings // no point in continuing - } - s.spec = sd - s.analyzer = analysis.New(sd.Spec()) - - // Swagger schema validator - schv := NewSchemaValidator(s.schema, nil, "", s.KnownFormats, SwaggerSchema(true)) - var obj interface{} - - // Raw spec unmarshalling errors - if err := json.Unmarshal(sd.Raw(), &obj); err != nil { - // NOTE: under normal conditions, the *load.Document has been already unmarshalled - // So this one is just a paranoid check on the behavior of the spec package - panic(InvalidDocumentError) - } - - defer func() { - // errs holds all errors and warnings, - // warnings only warnings - errs.MergeAsWarnings(warnings) - warnings.AddErrors(errs.Warnings...) - }() - - errs.Merge(schv.Validate(obj)) // error - - // There may be a point in continuing to try and determine more accurate errors - if !s.Options.ContinueOnErrors && errs.HasErrors() { - return errs, warnings // no point in continuing - } - - errs.Merge(s.validateReferencesValid()) // error - - // There may be a point in continuing to try and determine more accurate errors - if !s.Options.ContinueOnErrors && errs.HasErrors() { - return errs, warnings // no point in continuing - } - - errs.Merge(s.validateDuplicateOperationIDs()) - errs.Merge(s.validateDuplicatePropertyNames()) // error - - errs.Merge(s.validateParameters()) // error - - errs.Merge(s.validateItems()) // error - - - // Properties in required definition MUST validate their schema - // Properties SHOULD NOT be declared as both required and readOnly (warning) - errs.Merge(s.validateRequiredDefinitions()) // error and warning - - // There may be a point in continuing to try and determine more accurate errors - if !s.Options.ContinueOnErrors && errs.HasErrors() { - return errs, warnings // no point in continuing - } - - // Values provided as default MUST validate their schema - df := &defaultValidator{SpecValidator: s} - errs.Merge(df.Validate()) - - // Values provided as examples MUST validate their schema - // Value provided as examples in a response without schema generate a warning - // Known limitations: examples in responses for mime type not application/json are ignored (warning) - ex := &exampleValidator{SpecValidator: s} - errs.Merge(ex.Validate()) - - errs.Merge(s.validateNonEmptyPathParamNames()) - - //errs.Merge(s.validateRefNoSibling()) // warning only - errs.Merge(s.validateReferenced()) // warning only - - return errs, warnings -} - -func (s *SpecValidator) validateNonEmptyPathParamNames() *Result { - res := new(Result) - if s.spec.Spec().Paths == nil { - // There is no Paths object: error - res.AddErrors(noValidPathMsg()) - } else { - if s.spec.Spec().Paths.Paths == nil { - // Paths may be empty: warning - res.AddWarnings(noValidPathMsg()) - } else { - for k := range s.spec.Spec().Paths.Paths { - if strings.Contains(k, "{}") { - res.AddErrors(emptyPathParameterMsg(k)) - } - } - } - } - return res -} - -func (s *SpecValidator) validateDuplicateOperationIDs() *Result { - // OperationID, if specified, must be unique across the board - res := new(Result) - known := make(map[string]int) - for _, v := range s.analyzer.OperationIDs() { - if v != "" { - known[v]++ - } - } - for k, v := range known { - if v > 1 { - res.AddErrors(nonUniqueOperationIDMsg(k, v)) - } - } - return res -} - -type dupProp struct { - Name string - Definition string -} - -func (s *SpecValidator) validateDuplicatePropertyNames() *Result { - // definition can't declare a property that's already defined by one of its ancestors - res := new(Result) - for k, sch := range s.spec.Spec().Definitions { - if len(sch.AllOf) == 0 { - continue - } - - knownanc := map[string]struct{}{ - "#/definitions/" + k: {}, - } - - ancs, rec := s.validateCircularAncestry(k, sch, knownanc) - if rec != nil && (rec.HasErrors() || !rec.HasWarnings()) { - res.Merge(rec) - } - if len(ancs) > 0 { - res.AddErrors(circularAncestryDefinitionMsg(k, ancs)) - return res - } - - knowns := make(map[string]struct{}) - dups, rep := s.validateSchemaPropertyNames(k, sch, knowns) - if rep != nil && (rep.HasErrors() || rep.HasWarnings()) { - res.Merge(rep) - } - if len(dups) > 0 { - var pns []string - for _, v := range dups { - pns = append(pns, v.Definition+"."+v.Name) - } - res.AddErrors(duplicatePropertiesMsg(k, pns)) - } - - } - return res -} - -func (s *SpecValidator) resolveRef(ref *spec.Ref) (*spec.Schema, error) { - if s.spec.SpecFilePath() != "" { - return spec.ResolveRefWithBase(s.spec.Spec(), ref, &spec.ExpandOptions{RelativeBase: s.spec.SpecFilePath()}) - } - // NOTE: it looks like with the new spec resolver, this code is now unrecheable - return spec.ResolveRef(s.spec.Spec(), ref) -} - -func (s *SpecValidator) validateSchemaPropertyNames(nm string, sch spec.Schema, knowns map[string]struct{}) ([]dupProp, *Result) { - var dups []dupProp - - schn := nm - schc := &sch - res := new(Result) - - for schc.Ref.String() != "" { - // gather property names - reso, err := s.resolveRef(&schc.Ref) - if err != nil { - errorHelp.addPointerError(res, err, schc.Ref.String(), nm) - return dups, res - } - schc = reso - schn = sch.Ref.String() - } - - if len(schc.AllOf) > 0 { - for _, chld := range schc.AllOf { - dup, rep := s.validateSchemaPropertyNames(schn, chld, knowns) - if rep != nil && (rep.HasErrors() || rep.HasWarnings()) { - res.Merge(rep) - } - dups = append(dups, dup...) - } - return dups, res - } - - for k := range schc.Properties { - _, ok := knowns[k] - if ok { - dups = append(dups, dupProp{Name: k, Definition: schn}) - } else { - knowns[k] = struct{}{} - } - } - - return dups, res -} - -func (s *SpecValidator) validateCircularAncestry(nm string, sch spec.Schema, knowns map[string]struct{}) ([]string, *Result) { - res := new(Result) - - if sch.Ref.String() == "" && len(sch.AllOf) == 0 { // Safeguard. We should not be able to actually get there - return nil, res - } - var ancs []string - - schn := nm - schc := &sch - - for schc.Ref.String() != "" { - reso, err := s.resolveRef(&schc.Ref) - if err != nil { - errorHelp.addPointerError(res, err, schc.Ref.String(), nm) - return ancs, res - } - schc = reso - schn = sch.Ref.String() - } - - if schn != nm && schn != "" { - if _, ok := knowns[schn]; ok { - ancs = append(ancs, schn) - } - knowns[schn] = struct{}{} - - if len(ancs) > 0 { - return ancs, res - } - } - - if len(schc.AllOf) > 0 { - for _, chld := range schc.AllOf { - if chld.Ref.String() != "" || len(chld.AllOf) > 0 { - anc, rec := s.validateCircularAncestry(schn, chld, knowns) - if rec != nil && (rec.HasErrors() || !rec.HasWarnings()) { - res.Merge(rec) - } - ancs = append(ancs, anc...) - if len(ancs) > 0 { - return ancs, res - } - } - } - } - return ancs, res -} - -func (s *SpecValidator) validateItems() *Result { - // validate parameter, items, schema and response objects for presence of item if type is array - res := new(Result) - - for method, pi := range s.analyzer.Operations() { - for path, op := range pi { - for _, param := range paramHelp.safeExpandedParamsFor(path, method, op.ID, res, s) { - - if param.TypeName() == arrayType && param.ItemsTypeName() == "" { - res.AddErrors(arrayInParamRequiresItemsMsg(param.Name, op.ID)) - continue - } - if param.In != swaggerBody { - if param.Items != nil { - items := param.Items - for items.TypeName() == arrayType { - if items.ItemsTypeName() == "" { - res.AddErrors(arrayInParamRequiresItemsMsg(param.Name, op.ID)) - break - } - items = items.Items - } - } - } else { - // In: body - if param.Schema != nil { - res.Merge(s.validateSchemaItems(*param.Schema, fmt.Sprintf("body param %q", param.Name), op.ID)) - } - } - } - - var responses []spec.Response - if op.Responses != nil { - if op.Responses.Default != nil { - responses = append(responses, *op.Responses.Default) - } - if op.Responses.StatusCodeResponses != nil { - for _, v := range op.Responses.StatusCodeResponses { - responses = append(responses, v) - } - } - } - - for _, resp := range responses { - // Response headers with array - for hn, hv := range resp.Headers { - if hv.TypeName() == arrayType && hv.ItemsTypeName() == "" { - res.AddErrors(arrayInHeaderRequiresItemsMsg(hn, op.ID)) - } - } - if resp.Schema != nil { - res.Merge(s.validateSchemaItems(*resp.Schema, "response body", op.ID)) - } - } - } - } - return res -} - -// Verifies constraints on array type -func (s *SpecValidator) validateSchemaItems(schema spec.Schema, prefix, opID string) *Result { - res := new(Result) - if !schema.Type.Contains(arrayType) { - return res - } - - if schema.Items == nil || schema.Items.Len() == 0 { - res.AddErrors(arrayRequiresItemsMsg(prefix, opID)) - return res - } - - if schema.Items.Schema != nil { - schema = *schema.Items.Schema - if _, err := compileRegexp(schema.Pattern); err != nil { - res.AddErrors(invalidItemsPatternMsg(prefix, opID, schema.Pattern)) - } - - res.Merge(s.validateSchemaItems(schema, prefix, opID)) - } - return res -} - -func (s *SpecValidator) validatePathParamPresence(path string, fromPath, fromOperation []string) *Result { - // Each defined operation path parameters must correspond to a named element in the API's path pattern. - // (For example, you cannot have a path parameter named id for the following path /pets/{petId} but you must have a path parameter named petId.) - res := new(Result) - for _, l := range fromPath { - var matched bool - for _, r := range fromOperation { - if l == "{"+r+"}" { - matched = true - break - } - } - if !matched { - res.AddErrors(noParameterInPathMsg(l)) - } - } - - for _, p := range fromOperation { - var matched bool - for _, r := range fromPath { - if "{"+p+"}" == r { - matched = true - break - } - } - if !matched { - res.AddErrors(pathParamNotInPathMsg(path, p)) - } - } - - return res -} - -func (s *SpecValidator) validateReferenced() *Result { - var res Result - res.MergeAsWarnings(s.validateReferencedParameters()) - res.MergeAsWarnings(s.validateReferencedResponses()) - res.MergeAsWarnings(s.validateReferencedDefinitions()) - return &res -} - -// nolint: dupl -func (s *SpecValidator) validateReferencedParameters() *Result { - // Each referenceable definition should have references. - params := s.spec.Spec().Parameters - if len(params) == 0 { - return nil - } - - expected := make(map[string]struct{}) - for k := range params { - expected["#/parameters/"+jsonpointer.Escape(k)] = struct{}{} - } - for _, k := range s.analyzer.AllParameterReferences() { - delete(expected, k) - } - - if len(expected) == 0 { - return nil - } - result := new(Result) - for k := range expected { - result.AddWarnings(unusedParamMsg(k)) - } - return result -} - -// nolint: dupl -func (s *SpecValidator) validateReferencedResponses() *Result { - // Each referenceable definition should have references. - responses := s.spec.Spec().Responses - if len(responses) == 0 { - return nil - } - - expected := make(map[string]struct{}) - for k := range responses { - expected["#/responses/"+jsonpointer.Escape(k)] = struct{}{} - } - for _, k := range s.analyzer.AllResponseReferences() { - delete(expected, k) - } - - if len(expected) == 0 { - return nil - } - result := new(Result) - for k := range expected { - result.AddWarnings(unusedResponseMsg(k)) - } - return result -} - -// nolint: dupl -func (s *SpecValidator) validateReferencedDefinitions() *Result { - // Each referenceable definition must have references. - defs := s.spec.Spec().Definitions - if len(defs) == 0 { - return nil - } - - expected := make(map[string]struct{}) - for k := range defs { - expected["#/definitions/"+jsonpointer.Escape(k)] = struct{}{} - } - for _, k := range s.analyzer.AllDefinitionReferences() { - delete(expected, k) - } - - if len(expected) == 0 { - return nil - } - - result := new(Result) - for k := range expected { - result.AddWarnings(unusedDefinitionMsg(k)) - } - return result -} - -func (s *SpecValidator) validateRequiredDefinitions() *Result { - // Each property listed in the required array must be defined in the properties of the model - res := new(Result) - -DEFINITIONS: - for d, schema := range s.spec.Spec().Definitions { - if schema.Required != nil { // Safeguard - for _, pn := range schema.Required { - red := s.validateRequiredProperties(pn, d, &schema) - res.Merge(red) - if !red.IsValid() && !s.Options.ContinueOnErrors { - break DEFINITIONS // there is an error, let's stop that bleeding - } - } - } - } - return res -} - -func (s *SpecValidator) validateRequiredProperties(path, in string, v *spec.Schema) *Result { - // Takes care of recursive property definitions, which may be nested in additionalProperties schemas - res := new(Result) - propertyMatch := false - patternMatch := false - additionalPropertiesMatch := false - isReadOnly := false - - // Regular properties - if _, ok := v.Properties[path]; ok { - propertyMatch = true - isReadOnly = v.Properties[path].ReadOnly - } - - // NOTE: patternProperties are not supported in swagger. Even though, we continue validation here - // We check all defined patterns: if one regexp is invalid, croaks an error - for pp, pv := range v.PatternProperties { - re, err := compileRegexp(pp) - if err != nil { - res.AddErrors(invalidPatternMsg(pp, in)) - } else if re.MatchString(path) { - patternMatch = true - if !propertyMatch { - isReadOnly = pv.ReadOnly - } - } - } - - if !(propertyMatch || patternMatch) { - if v.AdditionalProperties != nil { - if v.AdditionalProperties.Allows && v.AdditionalProperties.Schema == nil { - additionalPropertiesMatch = true - } else if v.AdditionalProperties.Schema != nil { - // additionalProperties as schema are upported in swagger - // recursively validates additionalProperties schema - // TODO : anyOf, allOf, oneOf like in schemaPropsValidator - red := s.validateRequiredProperties(path, in, v.AdditionalProperties.Schema) - if red.IsValid() { - additionalPropertiesMatch = true - if !propertyMatch && !patternMatch { - isReadOnly = v.AdditionalProperties.Schema.ReadOnly - } - } - res.Merge(red) - } - } - } - - if !(propertyMatch || patternMatch || additionalPropertiesMatch) { - res.AddErrors(requiredButNotDefinedMsg(path, in)) - } - - if isReadOnly { - res.AddWarnings(readOnlyAndRequiredMsg(in, path)) - } - return res -} - -func (s *SpecValidator) validateParameters() *Result { - // - for each method, path is unique, regardless of path parameters - // e.g. GET:/petstore/{id}, GET:/petstore/{pet}, GET:/petstore are - // considered duplicate paths - // - each parameter should have a unique `name` and `type` combination - // - each operation should have only 1 parameter of type body - // - there must be at most 1 parameter in body - // - parameters with pattern property must specify valid patterns - // - $ref in parameters must resolve - // - path param must be required - res := new(Result) - rexGarbledPathSegment := mustCompileRegexp(`.*[{}\s]+.*`) - for method, pi := range s.analyzer.Operations() { - methodPaths := make(map[string]map[string]string) - for path, op := range pi { - pathToAdd := pathHelp.stripParametersInPath(path) - - // Warn on garbled path afer param stripping - if rexGarbledPathSegment.MatchString(pathToAdd) { - res.AddWarnings(pathStrippedParamGarbledMsg(pathToAdd)) - } - - // Check uniqueness of stripped paths - if _, found := methodPaths[method][pathToAdd]; found { - - // Sort names for stable, testable output - if strings.Compare(path, methodPaths[method][pathToAdd]) < 0 { - res.AddErrors(pathOverlapMsg(path, methodPaths[method][pathToAdd])) - } else { - res.AddErrors(pathOverlapMsg(methodPaths[method][pathToAdd], path)) - } - } else { - if _, found := methodPaths[method]; !found { - methodPaths[method] = map[string]string{} - } - methodPaths[method][pathToAdd] = path //Original non stripped path - - } - - var bodyParams []string - var paramNames []string - var hasForm, hasBody bool - - // Check parameters names uniqueness for operation - // TODO: should be done after param expansion - res.Merge(s.checkUniqueParams(path, method, op)) - - for _, pr := range paramHelp.safeExpandedParamsFor(path, method, op.ID, res, s) { - // Validate pattern regexp for parameters with a Pattern property - if _, err := compileRegexp(pr.Pattern); err != nil { - res.AddErrors(invalidPatternInParamMsg(op.ID, pr.Name, pr.Pattern)) - } - - // There must be at most one parameter in body: list them all - if pr.In == swaggerBody { - bodyParams = append(bodyParams, fmt.Sprintf("%q", pr.Name)) - hasBody = true - } - - if pr.In == "path" { - paramNames = append(paramNames, pr.Name) - // Path declared in path must have the required: true property - if !pr.Required { - res.AddErrors(pathParamRequiredMsg(op.ID, pr.Name)) - } - } - - if pr.In == "formData" { - hasForm = true - } - - if !(pr.Type == numberType || pr.Type == integerType) && - (pr.Maximum != nil || pr.Minimum != nil || pr.MultipleOf != nil) { - // A non-numeric parameter has validation keywords for numeric instances (number and integer) - res.AddWarnings(parameterValidationTypeMismatchMsg(pr.Name, path, pr.Type)) - } - - if !(pr.Type == stringType) && - // A non-string parameter has validation keywords for strings - (pr.MaxLength != nil || pr.MinLength != nil || pr.Pattern != "") { - res.AddWarnings(parameterValidationTypeMismatchMsg(pr.Name, path, pr.Type)) - } - - if !(pr.Type == arrayType) && - // A non-array parameter has validation keywords for arrays - (pr.MaxItems != nil || pr.MinItems != nil || pr.UniqueItems) { - res.AddWarnings(parameterValidationTypeMismatchMsg(pr.Name, path, pr.Type)) - } - } - - // In:formData and In:body are mutually exclusive - if hasBody && hasForm { - res.AddErrors(bothFormDataAndBodyMsg(op.ID)) - } - // There must be at most one body param - // Accurately report situations when more than 1 body param is declared (possibly unnamed) - if len(bodyParams) > 1 { - sort.Strings(bodyParams) - res.AddErrors(multipleBodyParamMsg(op.ID, bodyParams)) - } - - // Check uniqueness of parameters in path - paramsInPath := pathHelp.extractPathParams(path) - for i, p := range paramsInPath { - for j, q := range paramsInPath { - if p == q && i > j { - res.AddErrors(pathParamNotUniqueMsg(path, p, q)) - break - } - } - } - - // Warns about possible malformed params in path - rexGarbledParam := mustCompileRegexp(`{.*[{}\s]+.*}`) - for _, p := range paramsInPath { - if rexGarbledParam.MatchString(p) { - res.AddWarnings(pathParamGarbledMsg(path, p)) - } - } - - // Match params from path vs params from params section - res.Merge(s.validatePathParamPresence(path, paramsInPath, paramNames)) - } - } - return res -} - -func (s *SpecValidator) validateReferencesValid() *Result { - // each reference must point to a valid object - res := new(Result) - for _, r := range s.analyzer.AllRefs() { - if !r.IsValidURI(s.spec.SpecFilePath()) { // Safeguard - spec should always yield a valid URI - res.AddErrors(invalidRefMsg(r.String())) - } - } - if !res.HasErrors() { - // NOTE: with default settings, loads.Document.Expanded() - // stops on first error. Anyhow, the expand option to continue - // on errors fails to report errors at all. - exp, err := s.spec.Expanded() - if err != nil { - res.AddErrors(unresolvedReferencesMsg(err)) - } - s.expanded = exp - } - return res -} - -func (s *SpecValidator) checkUniqueParams(path, method string, op *spec.Operation) *Result { - // Check for duplicate parameters declaration in param section. - // Each parameter should have a unique `name` and `type` combination - // NOTE: this could be factorized in analysis (when constructing the params map) - // However, there are some issues with such a factorization: - // - analysis does not seem to fully expand params - // - param keys may be altered by x-go-name - res := new(Result) - pnames := make(map[string]struct{}) - - if op.Parameters != nil { // Safeguard - for _, ppr := range op.Parameters { - var ok bool - pr, red := paramHelp.resolveParam(path, method, op.ID, &ppr, s) - res.Merge(red) - - if pr != nil && pr.Name != "" { // params with empty name does no participate the check - key := fmt.Sprintf("%s#%s", pr.In, pr.Name) - - if _, ok = pnames[key]; ok { - res.AddErrors(duplicateParamNameMsg(pr.In, pr.Name, op.ID)) - } - pnames[key] = struct{}{} - } - } - } - return res -} - -// SetContinueOnErrors sets the ContinueOnErrors option for this validator. -func (s *SpecValidator) SetContinueOnErrors(c bool) { - s.Options.ContinueOnErrors = c -} diff --git a/vendor/github.com/go-openapi/validate/spec_messages.go b/vendor/github.com/go-openapi/validate/spec_messages.go deleted file mode 100644 index 1a5892aee..000000000 --- a/vendor/github.com/go-openapi/validate/spec_messages.go +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -import ( - "net/http" - - "github.com/go-openapi/errors" -) - -// Error messages related to spec validation and returned as results. -const ( - // ArrayRequiresItemsError ... - ArrayRequiresItemsError = "%s for %q is a collection without an element type (array requires items definition)" - - // ArrayInParamRequiresItemsError ... - ArrayInParamRequiresItemsError = "param %q for %q is a collection without an element type (array requires item definition)" - - // ArrayInHeaderRequiresItemsError ... - ArrayInHeaderRequiresItemsError = "header %q for %q is a collection without an element type (array requires items definition)" - - // BothFormDataAndBodyError indicates that an operation specifies both a body and a formData parameter, which is forbidden - BothFormDataAndBodyError = "operation %q has both formData and body parameters. Only one such In: type may be used for a given operation" - - // CannotResolveRefError when a $ref could not be resolved - CannotResolveReferenceError = "could not resolve reference in %s to $ref %s: %v" - - // CircularAncestryDefinitionError ... - CircularAncestryDefinitionError = "definition %q has circular ancestry: %v" - - // DefaultValueDoesNotValidateError results from an invalid default value provided - DefaultValueDoesNotValidateError = "default value for %s in %s does not validate its schema" - - // DefaultValueItemsDoesNotValidateError results from an invalid default value provided for Items - DefaultValueItemsDoesNotValidateError = "default value for %s.items in %s does not validate its schema" - - // DefaultValueHeaderDoesNotValidateError results from an invalid default value provided in header - DefaultValueHeaderDoesNotValidateError = "in operation %q, default value in header %s for %s does not validate its schema" - - // DefaultValueHeaderItemsDoesNotValidateError results from an invalid default value provided in header.items - DefaultValueHeaderItemsDoesNotValidateError = "in operation %q, default value in header.items %s for %s does not validate its schema" - - // DefaultValueInDoesNotValidateError ... - DefaultValueInDoesNotValidateError = "in operation %q, default value in %s does not validate its schema" - - // DuplicateParamNameError ... - DuplicateParamNameError = "duplicate parameter name %q for %q in operation %q" - - // DuplicatePropertiesError ... - DuplicatePropertiesError = "definition %q contains duplicate properties: %v" - - // ExampleValueDoesNotValidateError results from an invalid example value provided - ExampleValueDoesNotValidateError = "example value for %s in %s does not validate its schema" - - // ExampleValueItemsDoesNotValidateError results from an invalid example value provided for Items - ExampleValueItemsDoesNotValidateError = "example value for %s.items in %s does not validate its schema" - - // ExampleValueHeaderDoesNotValidateError results from an invalid example value provided in header - ExampleValueHeaderDoesNotValidateError = "in operation %q, example value in header %s for %s does not validate its schema" - - // ExampleValueHeaderItemsDoesNotValidateError results from an invalid example value provided in header.items - ExampleValueHeaderItemsDoesNotValidateError = "in operation %q, example value in header.items %s for %s does not validate its schema" - - // ExampleValueInDoesNotValidateError ... - ExampleValueInDoesNotValidateError = "in operation %q, example value in %s does not validate its schema" - - // EmptyPathParameterError means that a path parameter was found empty (e.g. "{}") - EmptyPathParameterError = "%q contains an empty path parameter" - - // InvalidDocumentError states that spec validation only processes spec.Document objects - InvalidDocumentError = "spec validator can only validate spec.Document objects" - - // InvalidItemsPatternError indicates an Items definition with invalid pattern - InvalidItemsPatternError = "%s for %q has invalid items pattern: %q" - - // InvalidParameterDefinitionError indicates an error detected on a parameter definition - InvalidParameterDefinitionError = "invalid definition for parameter %s in %s in operation %q" - - // InvalidParameterDefinitionAsSchemaError indicates an error detected on a parameter definition, which was mistaken with a schema definition. - // Most likely, this situation is encountered whenever a $ref has been added as a sibling of the parameter definition. - InvalidParameterDefinitionAsSchemaError = "invalid definition as Schema for parameter %s in %s in operation %q" - - // InvalidPatternError ... - InvalidPatternError = "pattern %q is invalid in %s" - - // InvalidPatternInError indicates an invalid pattern in a schema or items definition - InvalidPatternInError = "%s in %s has invalid pattern: %q" - - // InvalidPatternInHeaderError indicates a header definition with an invalid pattern - InvalidPatternInHeaderError = "in operation %q, header %s for %s has invalid pattern %q: %v" - - // InvalidPatternInParamError ... - InvalidPatternInParamError = "operation %q has invalid pattern in param %q: %q" - - // InvalidReferenceError indicates that a $ref property could not be resolved - InvalidReferenceError = "invalid ref %q" - - // InvalidResponseDefinitionAsSchemaError indicates an error detected on a response definition, which was mistaken with a schema definition. - // Most likely, this situation is encountered whenever a $ref has been added as a sibling of the response definition. - InvalidResponseDefinitionAsSchemaError = "invalid definition as Schema for response %s in %s" - - // MultipleBodyParamError indicates that an operation specifies multiple parameter with in: body - MultipleBodyParamError = "operation %q has more than 1 body param: %v" - - // NonUniqueOperationIDError indicates that the same operationId has been specified several times - NonUniqueOperationIDError = "%q is defined %d times" - - // NoParameterInPathError indicates that a path was found without any parameter - NoParameterInPathError = "path param %q has no parameter definition" - - // NoValidPathErrorOrWarning indicates that no single path could be validated. If Paths is empty, this message is only a warning. - NoValidPathErrorOrWarning = "spec has no valid path defined" - - // NoValidResponseError indicates that no valid response description could be found for an operation - NoValidResponseError = "operation %q has no valid response" - - // PathOverlapError ... - PathOverlapError = "path %s overlaps with %s" - - // PathParamNotInPathError indicates that a parameter specified with in: path was not found in the path specification - PathParamNotInPathError = "path param %q is not present in path %q" - - // PathParamNotUniqueError ... - PathParamNotUniqueError = "params in path %q must be unique: %q conflicts with %q" - - // PathParamNotRequiredError ... - PathParamRequiredError = "in operation %q,path param %q must be declared as required" - - // RefNotAllowedInHeaderError indicates a $ref was found in a header definition, which is not allowed by Swagger - RefNotAllowedInHeaderError = "IMPORTANT!in %q: $ref are not allowed in headers. In context for header %q%s" - - // RequiredButNotDefinedError ... - RequiredButNotDefinedError = "%q is present in required but not defined as property in definition %q" - - // SomeParametersBrokenError indicates that some parameters could not be resolved, which might result in partial checks to be carried on - SomeParametersBrokenError = "some parameters definitions are broken in %q.%s. Cannot carry on full checks on parameters for operation %s" - - // UnresolvedReferencesError indicates that at least one $ref could not be resolved - UnresolvedReferencesError = "some references could not be resolved in spec. First found: %v" -) - -// Warning messages related to spec validation and returned as results -const ( - // ExamplesWithoutSchemaWarning indicates that examples are provided for a response,but not schema to validate the example against - ExamplesWithoutSchemaWarning = "Examples provided without schema in operation %q, %s" - - // ExamplesMimeNotSupportedWarning indicates that examples are provided with a mime type different than application/json, which - // the validator dos not support yetl - ExamplesMimeNotSupportedWarning = "No validation attempt for examples for media types other than application/json, in operation %q, %s" - - // PathParamGarbledWarning ... - PathParamGarbledWarning = "in path %q, param %q contains {,} or white space. Albeit not stricly illegal, this is probably no what you want" - - // ParamValidationTypeMismatch indicates that parameter has validation which does not match its type - ParamValidationTypeMismatch = "validation keywords of parameter %q in path %q don't match its type %s" - - // PathStrippedParamGarbledWarning ... - PathStrippedParamGarbledWarning = "path stripped from path parameters %s contains {,} or white space. This is probably no what you want." - - // ReadOnlyAndRequiredWarning ... - ReadOnlyAndRequiredWarning = "Required property %s in %q should not be marked as both required and readOnly" - - // RefShouldNotHaveSiblingsWarning indicates that a $ref was found with a sibling definition. This results in the $ref taking over its siblings, - // which is most likely not wanted. - RefShouldNotHaveSiblingsWarning = "$ref property should have no sibling in %q.%s" - - // RequiredHasDefaultWarning indicates that a required parameter property should not have a default - RequiredHasDefaultWarning = "%s in %s has a default value and is required as parameter" - - // UnusedDefinitionWarning ... - UnusedDefinitionWarning = "definition %q is not used anywhere" - - // UnusedParamWarning ... - UnusedParamWarning = "parameter %q is not used anywhere" - - // UnusedResponseWarning ... - UnusedResponseWarning = "response %q is not used anywhere" -) - -// Additional error codes -const ( - // InternalErrorCode reports an internal technical error - InternalErrorCode = http.StatusInternalServerError - // NotFoundErrorCode indicates that a resource (e.g. a $ref) could not be found - NotFoundErrorCode = http.StatusNotFound -) - -func invalidDocumentMsg() errors.Error { - return errors.New(InternalErrorCode, InvalidDocumentError) -} -func invalidRefMsg(path string) errors.Error { - return errors.New(NotFoundErrorCode, InvalidReferenceError, path) -} -func unresolvedReferencesMsg(err error) errors.Error { - return errors.New(errors.CompositeErrorCode, UnresolvedReferencesError, err) -} -func noValidPathMsg() errors.Error { - return errors.New(errors.CompositeErrorCode, NoValidPathErrorOrWarning) -} -func emptyPathParameterMsg(path string) errors.Error { - return errors.New(errors.CompositeErrorCode, EmptyPathParameterError, path) -} -func nonUniqueOperationIDMsg(path string, i int) errors.Error { - return errors.New(errors.CompositeErrorCode, NonUniqueOperationIDError, path, i) -} -func circularAncestryDefinitionMsg(path string, args interface{}) errors.Error { - return errors.New(errors.CompositeErrorCode, CircularAncestryDefinitionError, path, args) -} -func duplicatePropertiesMsg(path string, args interface{}) errors.Error { - return errors.New(errors.CompositeErrorCode, DuplicatePropertiesError, path, args) -} -func pathParamNotInPathMsg(path, param string) errors.Error { - return errors.New(errors.CompositeErrorCode, PathParamNotInPathError, param, path) -} -func arrayRequiresItemsMsg(path, operation string) errors.Error { - return errors.New(errors.CompositeErrorCode, ArrayRequiresItemsError, path, operation) -} -func arrayInParamRequiresItemsMsg(path, operation string) errors.Error { - return errors.New(errors.CompositeErrorCode, ArrayInParamRequiresItemsError, path, operation) -} -func arrayInHeaderRequiresItemsMsg(path, operation string) errors.Error { - return errors.New(errors.CompositeErrorCode, ArrayInHeaderRequiresItemsError, path, operation) -} -func invalidItemsPatternMsg(path, operation, pattern string) errors.Error { - return errors.New(errors.CompositeErrorCode, InvalidItemsPatternError, path, operation, pattern) -} -func invalidPatternMsg(pattern, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, InvalidPatternError, pattern, path) -} -func requiredButNotDefinedMsg(path, definition string) errors.Error { - return errors.New(errors.CompositeErrorCode, RequiredButNotDefinedError, path, definition) -} -func pathParamGarbledMsg(path, param string) errors.Error { - return errors.New(errors.CompositeErrorCode, PathParamGarbledWarning, path, param) -} -func pathStrippedParamGarbledMsg(path string) errors.Error { - return errors.New(errors.CompositeErrorCode, PathStrippedParamGarbledWarning, path) -} -func pathOverlapMsg(path, arg string) errors.Error { - return errors.New(errors.CompositeErrorCode, PathOverlapError, path, arg) -} -func invalidPatternInParamMsg(operation, param, pattern string) errors.Error { - return errors.New(errors.CompositeErrorCode, InvalidPatternInParamError, operation, param, pattern) -} -func pathParamRequiredMsg(operation, param string) errors.Error { - return errors.New(errors.CompositeErrorCode, PathParamRequiredError, operation, param) -} -func bothFormDataAndBodyMsg(operation string) errors.Error { - return errors.New(errors.CompositeErrorCode, BothFormDataAndBodyError, operation) -} -func multipleBodyParamMsg(operation string, args interface{}) errors.Error { - return errors.New(errors.CompositeErrorCode, MultipleBodyParamError, operation, args) -} -func pathParamNotUniqueMsg(path, param, arg string) errors.Error { - return errors.New(errors.CompositeErrorCode, PathParamNotUniqueError, path, param, arg) -} -func duplicateParamNameMsg(path, param, operation string) errors.Error { - return errors.New(errors.CompositeErrorCode, DuplicateParamNameError, param, path, operation) -} -func unusedParamMsg(arg string) errors.Error { - return errors.New(errors.CompositeErrorCode, UnusedParamWarning, arg) -} -func unusedDefinitionMsg(arg string) errors.Error { - return errors.New(errors.CompositeErrorCode, UnusedDefinitionWarning, arg) -} -func unusedResponseMsg(arg string) errors.Error { - return errors.New(errors.CompositeErrorCode, UnusedResponseWarning, arg) -} -func readOnlyAndRequiredMsg(path, param string) errors.Error { - return errors.New(errors.CompositeErrorCode, ReadOnlyAndRequiredWarning, param, path) -} -func noParameterInPathMsg(param string) errors.Error { - return errors.New(errors.CompositeErrorCode, NoParameterInPathError, param) -} -func requiredHasDefaultMsg(param, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, RequiredHasDefaultWarning, param, path) -} -func defaultValueDoesNotValidateMsg(param, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, DefaultValueDoesNotValidateError, param, path) -} -func defaultValueItemsDoesNotValidateMsg(param, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, DefaultValueItemsDoesNotValidateError, param, path) -} -func noValidResponseMsg(operation string) errors.Error { - return errors.New(errors.CompositeErrorCode, NoValidResponseError, operation) -} -func defaultValueHeaderDoesNotValidateMsg(operation, header, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, DefaultValueHeaderDoesNotValidateError, operation, header, path) -} -func defaultValueHeaderItemsDoesNotValidateMsg(operation, header, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, DefaultValueHeaderItemsDoesNotValidateError, operation, header, path) -} -func invalidPatternInHeaderMsg(operation, header, path, pattern string, args interface{}) errors.Error { - return errors.New(errors.CompositeErrorCode, InvalidPatternInHeaderError, operation, header, path, pattern, args) -} -func invalidPatternInMsg(path, in, pattern string) errors.Error { - return errors.New(errors.CompositeErrorCode, InvalidPatternInError, path, in, pattern) -} -func defaultValueInDoesNotValidateMsg(operation, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, DefaultValueInDoesNotValidateError, operation, path) -} -func exampleValueDoesNotValidateMsg(param, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, ExampleValueDoesNotValidateError, param, path) -} -func exampleValueItemsDoesNotValidateMsg(param, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, ExampleValueItemsDoesNotValidateError, param, path) -} -func exampleValueHeaderDoesNotValidateMsg(operation, header, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, ExampleValueHeaderDoesNotValidateError, operation, header, path) -} -func exampleValueHeaderItemsDoesNotValidateMsg(operation, header, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, ExampleValueHeaderItemsDoesNotValidateError, operation, header, path) -} -func exampleValueInDoesNotValidateMsg(operation, path string) errors.Error { - return errors.New(errors.CompositeErrorCode, ExampleValueInDoesNotValidateError, operation, path) -} -func examplesWithoutSchemaMsg(operation, response string) errors.Error { - return errors.New(errors.CompositeErrorCode, ExamplesWithoutSchemaWarning, operation, response) -} -func examplesMimeNotSupportedMsg(operation, response string) errors.Error { - return errors.New(errors.CompositeErrorCode, ExamplesMimeNotSupportedWarning, operation, response) -} -func refNotAllowedInHeaderMsg(path, header, ref string) errors.Error { - return errors.New(errors.CompositeErrorCode, RefNotAllowedInHeaderError, path, header, ref) -} -func cannotResolveRefMsg(path, ref string, err error) errors.Error { - return errors.New(errors.CompositeErrorCode, CannotResolveReferenceError, path, ref, err) -} -func invalidParameterDefinitionMsg(path, method, operationID string) errors.Error { - return errors.New(errors.CompositeErrorCode, InvalidParameterDefinitionError, path, method, operationID) -} -func invalidParameterDefinitionAsSchemaMsg(path, method, operationID string) errors.Error { - return errors.New(errors.CompositeErrorCode, InvalidParameterDefinitionAsSchemaError, path, method, operationID) -} -func parameterValidationTypeMismatchMsg(param, path, typ string) errors.Error { - return errors.New(errors.CompositeErrorCode, ParamValidationTypeMismatch, param, path, typ) -} - -// disabled -//func invalidResponseDefinitionAsSchemaMsg(path, method string) errors.Error { -// return errors.New(errors.CompositeErrorCode, InvalidResponseDefinitionAsSchemaError, path, method) -//} -func someParametersBrokenMsg(path, method, operationID string) errors.Error { - return errors.New(errors.CompositeErrorCode, SomeParametersBrokenError, path, method, operationID) -} -func refShouldNotHaveSiblingsMsg(path, operationID string) errors.Error { - return errors.New(errors.CompositeErrorCode, RefShouldNotHaveSiblingsWarning, operationID, path) -} diff --git a/vendor/github.com/go-openapi/validate/update-fixtures.sh b/vendor/github.com/go-openapi/validate/update-fixtures.sh deleted file mode 100644 index 21b06e2b0..000000000 --- a/vendor/github.com/go-openapi/validate/update-fixtures.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -eu -o pipefail -dir=$(git rev-parse --show-toplevel) -scratch=$(mktemp -d -t tmp.XXXXXXXXXX) - -function finish { - rm -rf "$scratch" -} -trap finish EXIT SIGHUP SIGINT SIGTERM - -cd "$scratch" -git clone https://github.com/json-schema-org/JSON-Schema-Test-Suite Suite -cp -r Suite/tests/draft4/* "$dir/fixtures/jsonschema_suite" -cp -a Suite/remotes "$dir/fixtures/jsonschema_suite" diff --git a/vendor/github.com/go-openapi/validate/validator.go b/vendor/github.com/go-openapi/validate/validator.go deleted file mode 100644 index 2acb839db..000000000 --- a/vendor/github.com/go-openapi/validate/validator.go +++ /dev/null @@ -1,646 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package validate - -import ( - "fmt" - "reflect" - - "github.com/go-openapi/errors" - "github.com/go-openapi/spec" - "github.com/go-openapi/strfmt" -) - -// An EntityValidator is an interface for things that can validate entities -type EntityValidator interface { - Validate(interface{}) *Result -} - -type valueValidator interface { - SetPath(path string) - Applies(interface{}, reflect.Kind) bool - Validate(interface{}) *Result -} - -type itemsValidator struct { - items *spec.Items - root interface{} - path string - in string - validators []valueValidator - KnownFormats strfmt.Registry -} - -func newItemsValidator(path, in string, items *spec.Items, root interface{}, formats strfmt.Registry) *itemsValidator { - iv := &itemsValidator{path: path, in: in, items: items, root: root, KnownFormats: formats} - iv.validators = []valueValidator{ - &typeValidator{ - Type: spec.StringOrArray([]string{items.Type}), - Nullable: items.Nullable, - Format: items.Format, - In: in, - Path: path, - }, - iv.stringValidator(), - iv.formatValidator(), - iv.numberValidator(), - iv.sliceValidator(), - iv.commonValidator(), - } - return iv -} - -func (i *itemsValidator) Validate(index int, data interface{}) *Result { - tpe := reflect.TypeOf(data) - kind := tpe.Kind() - mainResult := new(Result) - path := fmt.Sprintf("%s.%d", i.path, index) - - for _, validator := range i.validators { - validator.SetPath(path) - if validator.Applies(i.root, kind) { - result := validator.Validate(data) - mainResult.Merge(result) - mainResult.Inc() - if result != nil && result.HasErrors() { - return mainResult - } - } - } - return mainResult -} - -func (i *itemsValidator) commonValidator() valueValidator { - return &basicCommonValidator{ - In: i.in, - Default: i.items.Default, - Enum: i.items.Enum, - } -} - -func (i *itemsValidator) sliceValidator() valueValidator { - return &basicSliceValidator{ - In: i.in, - Default: i.items.Default, - MaxItems: i.items.MaxItems, - MinItems: i.items.MinItems, - UniqueItems: i.items.UniqueItems, - Source: i.root, - Items: i.items.Items, - KnownFormats: i.KnownFormats, - } -} - -func (i *itemsValidator) numberValidator() valueValidator { - return &numberValidator{ - In: i.in, - Default: i.items.Default, - MultipleOf: i.items.MultipleOf, - Maximum: i.items.Maximum, - ExclusiveMaximum: i.items.ExclusiveMaximum, - Minimum: i.items.Minimum, - ExclusiveMinimum: i.items.ExclusiveMinimum, - Type: i.items.Type, - Format: i.items.Format, - } -} - -func (i *itemsValidator) stringValidator() valueValidator { - return &stringValidator{ - In: i.in, - Default: i.items.Default, - MaxLength: i.items.MaxLength, - MinLength: i.items.MinLength, - Pattern: i.items.Pattern, - AllowEmptyValue: false, - } -} - -func (i *itemsValidator) formatValidator() valueValidator { - return &formatValidator{ - In: i.in, - //Default: i.items.Default, - Format: i.items.Format, - KnownFormats: i.KnownFormats, - } -} - -type basicCommonValidator struct { - Path string - In string - Default interface{} - Enum []interface{} -} - -func (b *basicCommonValidator) SetPath(path string) { - b.Path = path -} - -func (b *basicCommonValidator) Applies(source interface{}, kind reflect.Kind) bool { - switch source.(type) { - case *spec.Parameter, *spec.Schema, *spec.Header: - return true - } - return false -} - -func (b *basicCommonValidator) Validate(data interface{}) (res *Result) { - if len(b.Enum) > 0 { - for _, enumValue := range b.Enum { - actualType := reflect.TypeOf(enumValue) - if actualType != nil { // Safeguard - expectedValue := reflect.ValueOf(data) - if expectedValue.IsValid() && expectedValue.Type().ConvertibleTo(actualType) { - if reflect.DeepEqual(expectedValue.Convert(actualType).Interface(), enumValue) { - return nil - } - } - } - } - return errorHelp.sErr(errors.EnumFail(b.Path, b.In, data, b.Enum)) - } - return nil -} - -// A HeaderValidator has very limited subset of validations to apply -type HeaderValidator struct { - name string - header *spec.Header - validators []valueValidator - KnownFormats strfmt.Registry -} - -// NewHeaderValidator creates a new header validator object -func NewHeaderValidator(name string, header *spec.Header, formats strfmt.Registry) *HeaderValidator { - p := &HeaderValidator{name: name, header: header, KnownFormats: formats} - p.validators = []valueValidator{ - &typeValidator{ - Type: spec.StringOrArray([]string{header.Type}), - Nullable: header.Nullable, - Format: header.Format, - In: "header", - Path: name, - }, - p.stringValidator(), - p.formatValidator(), - p.numberValidator(), - p.sliceValidator(), - p.commonValidator(), - } - return p -} - -// Validate the value of the header against its schema -func (p *HeaderValidator) Validate(data interface{}) *Result { - result := new(Result) - tpe := reflect.TypeOf(data) - kind := tpe.Kind() - - for _, validator := range p.validators { - if validator.Applies(p.header, kind) { - if err := validator.Validate(data); err != nil { - result.Merge(err) - if err.HasErrors() { - return result - } - } - } - } - return nil -} - -func (p *HeaderValidator) commonValidator() valueValidator { - return &basicCommonValidator{ - Path: p.name, - In: "response", - Default: p.header.Default, - Enum: p.header.Enum, - } -} - -func (p *HeaderValidator) sliceValidator() valueValidator { - return &basicSliceValidator{ - Path: p.name, - In: "response", - Default: p.header.Default, - MaxItems: p.header.MaxItems, - MinItems: p.header.MinItems, - UniqueItems: p.header.UniqueItems, - Items: p.header.Items, - Source: p.header, - KnownFormats: p.KnownFormats, - } -} - -func (p *HeaderValidator) numberValidator() valueValidator { - return &numberValidator{ - Path: p.name, - In: "response", - Default: p.header.Default, - MultipleOf: p.header.MultipleOf, - Maximum: p.header.Maximum, - ExclusiveMaximum: p.header.ExclusiveMaximum, - Minimum: p.header.Minimum, - ExclusiveMinimum: p.header.ExclusiveMinimum, - Type: p.header.Type, - Format: p.header.Format, - } -} - -func (p *HeaderValidator) stringValidator() valueValidator { - return &stringValidator{ - Path: p.name, - In: "response", - Default: p.header.Default, - Required: true, - MaxLength: p.header.MaxLength, - MinLength: p.header.MinLength, - Pattern: p.header.Pattern, - AllowEmptyValue: false, - } -} - -func (p *HeaderValidator) formatValidator() valueValidator { - return &formatValidator{ - Path: p.name, - In: "response", - //Default: p.header.Default, - Format: p.header.Format, - KnownFormats: p.KnownFormats, - } -} - -// A ParamValidator has very limited subset of validations to apply -type ParamValidator struct { - param *spec.Parameter - validators []valueValidator - KnownFormats strfmt.Registry -} - -// NewParamValidator creates a new param validator object -func NewParamValidator(param *spec.Parameter, formats strfmt.Registry) *ParamValidator { - p := &ParamValidator{param: param, KnownFormats: formats} - p.validators = []valueValidator{ - &typeValidator{ - Type: spec.StringOrArray([]string{param.Type}), - Nullable: param.Nullable, - Format: param.Format, - In: param.In, - Path: param.Name, - }, - p.stringValidator(), - p.formatValidator(), - p.numberValidator(), - p.sliceValidator(), - p.commonValidator(), - } - return p -} - -// Validate the data against the description of the parameter -func (p *ParamValidator) Validate(data interface{}) *Result { - result := new(Result) - tpe := reflect.TypeOf(data) - kind := tpe.Kind() - - // TODO: validate type - for _, validator := range p.validators { - if validator.Applies(p.param, kind) { - if err := validator.Validate(data); err != nil { - result.Merge(err) - if err.HasErrors() { - return result - } - } - } - } - return nil -} - -func (p *ParamValidator) commonValidator() valueValidator { - return &basicCommonValidator{ - Path: p.param.Name, - In: p.param.In, - Default: p.param.Default, - Enum: p.param.Enum, - } -} - -func (p *ParamValidator) sliceValidator() valueValidator { - return &basicSliceValidator{ - Path: p.param.Name, - In: p.param.In, - Default: p.param.Default, - MaxItems: p.param.MaxItems, - MinItems: p.param.MinItems, - UniqueItems: p.param.UniqueItems, - Items: p.param.Items, - Source: p.param, - KnownFormats: p.KnownFormats, - } -} - -func (p *ParamValidator) numberValidator() valueValidator { - return &numberValidator{ - Path: p.param.Name, - In: p.param.In, - Default: p.param.Default, - MultipleOf: p.param.MultipleOf, - Maximum: p.param.Maximum, - ExclusiveMaximum: p.param.ExclusiveMaximum, - Minimum: p.param.Minimum, - ExclusiveMinimum: p.param.ExclusiveMinimum, - Type: p.param.Type, - Format: p.param.Format, - } -} - -func (p *ParamValidator) stringValidator() valueValidator { - return &stringValidator{ - Path: p.param.Name, - In: p.param.In, - Default: p.param.Default, - AllowEmptyValue: p.param.AllowEmptyValue, - Required: p.param.Required, - MaxLength: p.param.MaxLength, - MinLength: p.param.MinLength, - Pattern: p.param.Pattern, - } -} - -func (p *ParamValidator) formatValidator() valueValidator { - return &formatValidator{ - Path: p.param.Name, - In: p.param.In, - //Default: p.param.Default, - Format: p.param.Format, - KnownFormats: p.KnownFormats, - } -} - -type basicSliceValidator struct { - Path string - In string - Default interface{} - MaxItems *int64 - MinItems *int64 - UniqueItems bool - Items *spec.Items - Source interface{} - itemsValidator *itemsValidator - KnownFormats strfmt.Registry -} - -func (s *basicSliceValidator) SetPath(path string) { - s.Path = path -} - -func (s *basicSliceValidator) Applies(source interface{}, kind reflect.Kind) bool { - switch source.(type) { - case *spec.Parameter, *spec.Items, *spec.Header: - return kind == reflect.Slice - } - return false -} - -func (s *basicSliceValidator) Validate(data interface{}) *Result { - val := reflect.ValueOf(data) - - size := int64(val.Len()) - if s.MinItems != nil { - if err := MinItems(s.Path, s.In, size, *s.MinItems); err != nil { - return errorHelp.sErr(err) - } - } - - if s.MaxItems != nil { - if err := MaxItems(s.Path, s.In, size, *s.MaxItems); err != nil { - return errorHelp.sErr(err) - } - } - - if s.UniqueItems { - if err := UniqueItems(s.Path, s.In, data); err != nil { - return errorHelp.sErr(err) - } - } - - if s.itemsValidator == nil && s.Items != nil { - s.itemsValidator = newItemsValidator(s.Path, s.In, s.Items, s.Source, s.KnownFormats) - } - - if s.itemsValidator != nil { - for i := 0; i < int(size); i++ { - ele := val.Index(i) - if err := s.itemsValidator.Validate(i, ele.Interface()); err != nil && err.HasErrors() { - return err - } - } - } - return nil -} - -/* unused -func (s *basicSliceValidator) hasDuplicates(value reflect.Value, size int) bool { - dict := make(map[interface{}]struct{}) - for i := 0; i < size; i++ { - ele := value.Index(i) - if _, ok := dict[ele.Interface()]; ok { - return true - } - dict[ele.Interface()] = struct{}{} - } - return false -} -*/ - -type numberValidator struct { - Path string - In string - Default interface{} - MultipleOf *float64 - Maximum *float64 - ExclusiveMaximum bool - Minimum *float64 - ExclusiveMinimum bool - // Allows for more accurate behavior regarding integers - Type string - Format string -} - -func (n *numberValidator) SetPath(path string) { - n.Path = path -} - -func (n *numberValidator) Applies(source interface{}, kind reflect.Kind) bool { - switch source.(type) { - case *spec.Parameter, *spec.Schema, *spec.Items, *spec.Header: - isInt := kind >= reflect.Int && kind <= reflect.Uint64 - isFloat := kind == reflect.Float32 || kind == reflect.Float64 - r := isInt || isFloat - debugLog("schema props validator for %q applies %t for %T (kind: %v) isInt=%t, isFloat=%t\n", n.Path, r, source, kind, isInt, isFloat) - return r - } - debugLog("schema props validator for %q applies %t for %T (kind: %v)\n", n.Path, false, source, kind) - return false -} - -// Validate provides a validator for generic JSON numbers, -// -// By default, numbers are internally represented as float64. -// Formats float, or float32 may alter this behavior by mapping to float32. -// A special validation process is followed for integers, with optional "format": -// this is an attempt to provide a validation with native types. -// -// NOTE: since the constraint specified (boundary, multipleOf) is unmarshalled -// as float64, loss of information remains possible (e.g. on very large integers). -// -// Since this value directly comes from the unmarshalling, it is not possible -// at this stage of processing to check further and guarantee the correctness of such values. -// -// Normally, the JSON Number.MAX_SAFE_INTEGER (resp. Number.MIN_SAFE_INTEGER) -// would check we do not get such a loss. -// -// If this is the case, replace AddErrors() by AddWarnings() and IsValid() by !HasWarnings(). -// -// TODO: consider replacing boundary check errors by simple warnings. -// -// TODO: default boundaries with MAX_SAFE_INTEGER are not checked (specific to json.Number?) -func (n *numberValidator) Validate(val interface{}) *Result { - res := new(Result) - - resMultiple := new(Result) - resMinimum := new(Result) - resMaximum := new(Result) - - // Used only to attempt to validate constraint on value, - // even though value or constraint specified do not match type and format - data := valueHelp.asFloat64(val) - - // Is the provided value within the range of the specified numeric type and format? - res.AddErrors(IsValueValidAgainstRange(val, n.Type, n.Format, "Checked", n.Path)) - - // nolint: dupl - if n.MultipleOf != nil { - // Is the constraint specifier within the range of the specific numeric type and format? - resMultiple.AddErrors(IsValueValidAgainstRange(*n.MultipleOf, n.Type, n.Format, "MultipleOf", n.Path)) - if resMultiple.IsValid() { - // Constraint validated with compatible types - if err := MultipleOfNativeType(n.Path, n.In, val, *n.MultipleOf); err != nil { - resMultiple.Merge(errorHelp.sErr(err)) - } - } else { - // Constraint nevertheless validated, converted as general number - if err := MultipleOf(n.Path, n.In, data, *n.MultipleOf); err != nil { - resMultiple.Merge(errorHelp.sErr(err)) - } - } - } - - // nolint: dupl - if n.Maximum != nil { - // Is the constraint specifier within the range of the specific numeric type and format? - resMaximum.AddErrors(IsValueValidAgainstRange(*n.Maximum, n.Type, n.Format, "Maximum boundary", n.Path)) - if resMaximum.IsValid() { - // Constraint validated with compatible types - if err := MaximumNativeType(n.Path, n.In, val, *n.Maximum, n.ExclusiveMaximum); err != nil { - resMaximum.Merge(errorHelp.sErr(err)) - } - } else { - // Constraint nevertheless validated, converted as general number - if err := Maximum(n.Path, n.In, data, *n.Maximum, n.ExclusiveMaximum); err != nil { - resMaximum.Merge(errorHelp.sErr(err)) - } - } - } - - // nolint: dupl - if n.Minimum != nil { - // Is the constraint specifier within the range of the specific numeric type and format? - resMinimum.AddErrors(IsValueValidAgainstRange(*n.Minimum, n.Type, n.Format, "Minimum boundary", n.Path)) - if resMinimum.IsValid() { - // Constraint validated with compatible types - if err := MinimumNativeType(n.Path, n.In, val, *n.Minimum, n.ExclusiveMinimum); err != nil { - resMinimum.Merge(errorHelp.sErr(err)) - } - } else { - // Constraint nevertheless validated, converted as general number - if err := Minimum(n.Path, n.In, data, *n.Minimum, n.ExclusiveMinimum); err != nil { - resMinimum.Merge(errorHelp.sErr(err)) - } - } - } - res.Merge(resMultiple, resMinimum, resMaximum) - res.Inc() - return res -} - -type stringValidator struct { - Default interface{} - Required bool - AllowEmptyValue bool - MaxLength *int64 - MinLength *int64 - Pattern string - Path string - In string -} - -func (s *stringValidator) SetPath(path string) { - s.Path = path -} - -func (s *stringValidator) Applies(source interface{}, kind reflect.Kind) bool { - switch source.(type) { - case *spec.Parameter, *spec.Schema, *spec.Items, *spec.Header: - r := kind == reflect.String - debugLog("string validator for %q applies %t for %T (kind: %v)\n", s.Path, r, source, kind) - return r - } - debugLog("string validator for %q applies %t for %T (kind: %v)\n", s.Path, false, source, kind) - return false -} - -func (s *stringValidator) Validate(val interface{}) *Result { - data, ok := val.(string) - if !ok { - return errorHelp.sErr(errors.InvalidType(s.Path, s.In, stringType, val)) - } - - if s.Required && !s.AllowEmptyValue && (s.Default == nil || s.Default == "") { - if err := RequiredString(s.Path, s.In, data); err != nil { - return errorHelp.sErr(err) - } - } - - if s.MaxLength != nil { - if err := MaxLength(s.Path, s.In, data, *s.MaxLength); err != nil { - return errorHelp.sErr(err) - } - } - - if s.MinLength != nil { - if err := MinLength(s.Path, s.In, data, *s.MinLength); err != nil { - return errorHelp.sErr(err) - } - } - - if s.Pattern != "" { - if err := Pattern(s.Path, s.In, data, s.Pattern); err != nil { - return errorHelp.sErr(err) - } - } - return nil -} diff --git a/vendor/github.com/go-stack/stack/.travis.yml b/vendor/github.com/go-stack/stack/.travis.yml deleted file mode 100644 index 5c5a2b516..000000000 --- a/vendor/github.com/go-stack/stack/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: go -sudo: false -go: - - 1.7.x - - 1.8.x - - 1.9.x - - 1.10.x - - 1.11.x - - tip - -before_install: - - go get github.com/mattn/goveralls - -script: - - goveralls -service=travis-ci diff --git a/vendor/github.com/go-stack/stack/README.md b/vendor/github.com/go-stack/stack/README.md deleted file mode 100644 index f11ccccaa..000000000 --- a/vendor/github.com/go-stack/stack/README.md +++ /dev/null @@ -1,38 +0,0 @@ -[![GoDoc](https://godoc.org/github.com/go-stack/stack?status.svg)](https://godoc.org/github.com/go-stack/stack) -[![Go Report Card](https://goreportcard.com/badge/go-stack/stack)](https://goreportcard.com/report/go-stack/stack) -[![TravisCI](https://travis-ci.org/go-stack/stack.svg?branch=master)](https://travis-ci.org/go-stack/stack) -[![Coverage Status](https://coveralls.io/repos/github/go-stack/stack/badge.svg?branch=master)](https://coveralls.io/github/go-stack/stack?branch=master) - -# stack - -Package stack implements utilities to capture, manipulate, and format call -stacks. It provides a simpler API than package runtime. - -The implementation takes care of the minutia and special cases of interpreting -the program counter (pc) values returned by runtime.Callers. - -## Versioning - -Package stack publishes releases via [semver](http://semver.org/) compatible Git -tags prefixed with a single 'v'. The master branch always contains the latest -release. The develop branch contains unreleased commits. - -## Formatting - -Package stack's types implement fmt.Formatter, which provides a simple and -flexible way to declaratively configure formatting when used with logging or -error tracking packages. - -```go -func DoTheThing() { - c := stack.Caller(0) - log.Print(c) // "source.go:10" - log.Printf("%+v", c) // "pkg/path/source.go:10" - log.Printf("%n", c) // "DoTheThing" - - s := stack.Trace().TrimRuntime() - log.Print(s) // "[source.go:15 caller.go:42 main.go:14]" -} -``` - -See the docs for all of the supported formatting options. diff --git a/vendor/github.com/go-stack/stack/go.mod b/vendor/github.com/go-stack/stack/go.mod deleted file mode 100644 index 96a53a109..000000000 --- a/vendor/github.com/go-stack/stack/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/go-stack/stack diff --git a/vendor/github.com/go-stack/stack/stack.go b/vendor/github.com/go-stack/stack/stack.go deleted file mode 100644 index ac3b93b14..000000000 --- a/vendor/github.com/go-stack/stack/stack.go +++ /dev/null @@ -1,400 +0,0 @@ -// +build go1.7 - -// Package stack implements utilities to capture, manipulate, and format call -// stacks. It provides a simpler API than package runtime. -// -// The implementation takes care of the minutia and special cases of -// interpreting the program counter (pc) values returned by runtime.Callers. -// -// Package stack's types implement fmt.Formatter, which provides a simple and -// flexible way to declaratively configure formatting when used with logging -// or error tracking packages. -package stack - -import ( - "bytes" - "errors" - "fmt" - "io" - "runtime" - "strconv" - "strings" -) - -// Call records a single function invocation from a goroutine stack. -type Call struct { - frame runtime.Frame -} - -// Caller returns a Call from the stack of the current goroutine. The argument -// skip is the number of stack frames to ascend, with 0 identifying the -// calling function. -func Caller(skip int) Call { - // As of Go 1.9 we need room for up to three PC entries. - // - // 0. An entry for the stack frame prior to the target to check for - // special handling needed if that prior entry is runtime.sigpanic. - // 1. A possible second entry to hold metadata about skipped inlined - // functions. If inline functions were not skipped the target frame - // PC will be here. - // 2. A third entry for the target frame PC when the second entry - // is used for skipped inline functions. - var pcs [3]uintptr - n := runtime.Callers(skip+1, pcs[:]) - frames := runtime.CallersFrames(pcs[:n]) - frame, _ := frames.Next() - frame, _ = frames.Next() - - return Call{ - frame: frame, - } -} - -// String implements fmt.Stinger. It is equivalent to fmt.Sprintf("%v", c). -func (c Call) String() string { - return fmt.Sprint(c) -} - -// MarshalText implements encoding.TextMarshaler. It formats the Call the same -// as fmt.Sprintf("%v", c). -func (c Call) MarshalText() ([]byte, error) { - if c.frame == (runtime.Frame{}) { - return nil, ErrNoFunc - } - - buf := bytes.Buffer{} - fmt.Fprint(&buf, c) - return buf.Bytes(), nil -} - -// ErrNoFunc means that the Call has a nil *runtime.Func. The most likely -// cause is a Call with the zero value. -var ErrNoFunc = errors.New("no call stack information") - -// Format implements fmt.Formatter with support for the following verbs. -// -// %s source file -// %d line number -// %n function name -// %k last segment of the package path -// %v equivalent to %s:%d -// -// It accepts the '+' and '#' flags for most of the verbs as follows. -// -// %+s path of source file relative to the compile time GOPATH, -// or the module path joined to the path of source file relative -// to module root -// %#s full path of source file -// %+n import path qualified function name -// %+k full package path -// %+v equivalent to %+s:%d -// %#v equivalent to %#s:%d -func (c Call) Format(s fmt.State, verb rune) { - if c.frame == (runtime.Frame{}) { - fmt.Fprintf(s, "%%!%c(NOFUNC)", verb) - return - } - - switch verb { - case 's', 'v': - file := c.frame.File - switch { - case s.Flag('#'): - // done - case s.Flag('+'): - file = pkgFilePath(&c.frame) - default: - const sep = "/" - if i := strings.LastIndex(file, sep); i != -1 { - file = file[i+len(sep):] - } - } - io.WriteString(s, file) - if verb == 'v' { - buf := [7]byte{':'} - s.Write(strconv.AppendInt(buf[:1], int64(c.frame.Line), 10)) - } - - case 'd': - buf := [6]byte{} - s.Write(strconv.AppendInt(buf[:0], int64(c.frame.Line), 10)) - - case 'k': - name := c.frame.Function - const pathSep = "/" - start, end := 0, len(name) - if i := strings.LastIndex(name, pathSep); i != -1 { - start = i + len(pathSep) - } - const pkgSep = "." - if i := strings.Index(name[start:], pkgSep); i != -1 { - end = start + i - } - if s.Flag('+') { - start = 0 - } - io.WriteString(s, name[start:end]) - - case 'n': - name := c.frame.Function - if !s.Flag('+') { - const pathSep = "/" - if i := strings.LastIndex(name, pathSep); i != -1 { - name = name[i+len(pathSep):] - } - const pkgSep = "." - if i := strings.Index(name, pkgSep); i != -1 { - name = name[i+len(pkgSep):] - } - } - io.WriteString(s, name) - } -} - -// Frame returns the call frame infomation for the Call. -func (c Call) Frame() runtime.Frame { - return c.frame -} - -// PC returns the program counter for this call frame; multiple frames may -// have the same PC value. -// -// Deprecated: Use Call.Frame instead. -func (c Call) PC() uintptr { - return c.frame.PC -} - -// CallStack records a sequence of function invocations from a goroutine -// stack. -type CallStack []Call - -// String implements fmt.Stinger. It is equivalent to fmt.Sprintf("%v", cs). -func (cs CallStack) String() string { - return fmt.Sprint(cs) -} - -var ( - openBracketBytes = []byte("[") - closeBracketBytes = []byte("]") - spaceBytes = []byte(" ") -) - -// MarshalText implements encoding.TextMarshaler. It formats the CallStack the -// same as fmt.Sprintf("%v", cs). -func (cs CallStack) MarshalText() ([]byte, error) { - buf := bytes.Buffer{} - buf.Write(openBracketBytes) - for i, pc := range cs { - if i > 0 { - buf.Write(spaceBytes) - } - fmt.Fprint(&buf, pc) - } - buf.Write(closeBracketBytes) - return buf.Bytes(), nil -} - -// Format implements fmt.Formatter by printing the CallStack as square brackets -// ([, ]) surrounding a space separated list of Calls each formatted with the -// supplied verb and options. -func (cs CallStack) Format(s fmt.State, verb rune) { - s.Write(openBracketBytes) - for i, pc := range cs { - if i > 0 { - s.Write(spaceBytes) - } - pc.Format(s, verb) - } - s.Write(closeBracketBytes) -} - -// Trace returns a CallStack for the current goroutine with element 0 -// identifying the calling function. -func Trace() CallStack { - var pcs [512]uintptr - n := runtime.Callers(1, pcs[:]) - - frames := runtime.CallersFrames(pcs[:n]) - cs := make(CallStack, 0, n) - - // Skip extra frame retrieved just to make sure the runtime.sigpanic - // special case is handled. - frame, more := frames.Next() - - for more { - frame, more = frames.Next() - cs = append(cs, Call{frame: frame}) - } - - return cs -} - -// TrimBelow returns a slice of the CallStack with all entries below c -// removed. -func (cs CallStack) TrimBelow(c Call) CallStack { - for len(cs) > 0 && cs[0] != c { - cs = cs[1:] - } - return cs -} - -// TrimAbove returns a slice of the CallStack with all entries above c -// removed. -func (cs CallStack) TrimAbove(c Call) CallStack { - for len(cs) > 0 && cs[len(cs)-1] != c { - cs = cs[:len(cs)-1] - } - return cs -} - -// pkgIndex returns the index that results in file[index:] being the path of -// file relative to the compile time GOPATH, and file[:index] being the -// $GOPATH/src/ portion of file. funcName must be the name of a function in -// file as returned by runtime.Func.Name. -func pkgIndex(file, funcName string) int { - // As of Go 1.6.2 there is no direct way to know the compile time GOPATH - // at runtime, but we can infer the number of path segments in the GOPATH. - // We note that runtime.Func.Name() returns the function name qualified by - // the import path, which does not include the GOPATH. Thus we can trim - // segments from the beginning of the file path until the number of path - // separators remaining is one more than the number of path separators in - // the function name. For example, given: - // - // GOPATH /home/user - // file /home/user/src/pkg/sub/file.go - // fn.Name() pkg/sub.Type.Method - // - // We want to produce: - // - // file[:idx] == /home/user/src/ - // file[idx:] == pkg/sub/file.go - // - // From this we can easily see that fn.Name() has one less path separator - // than our desired result for file[idx:]. We count separators from the - // end of the file path until it finds two more than in the function name - // and then move one character forward to preserve the initial path - // segment without a leading separator. - const sep = "/" - i := len(file) - for n := strings.Count(funcName, sep) + 2; n > 0; n-- { - i = strings.LastIndex(file[:i], sep) - if i == -1 { - i = -len(sep) - break - } - } - // get back to 0 or trim the leading separator - return i + len(sep) -} - -// pkgFilePath returns the frame's filepath relative to the compile-time GOPATH, -// or its module path joined to its path relative to the module root. -// -// As of Go 1.11 there is no direct way to know the compile time GOPATH or -// module paths at runtime, but we can piece together the desired information -// from available information. We note that runtime.Frame.Function contains the -// function name qualified by the package path, which includes the module path -// but not the GOPATH. We can extract the package path from that and append the -// last segments of the file path to arrive at the desired package qualified -// file path. For example, given: -// -// GOPATH /home/user -// import path pkg/sub -// frame.File /home/user/src/pkg/sub/file.go -// frame.Function pkg/sub.Type.Method -// Desired return pkg/sub/file.go -// -// It appears that we simply need to trim ".Type.Method" from frame.Function and -// append "/" + path.Base(file). -// -// But there are other wrinkles. Although it is idiomatic to do so, the internal -// name of a package is not required to match the last segment of its import -// path. In addition, the introduction of modules in Go 1.11 allows working -// without a GOPATH. So we also must make these work right: -// -// GOPATH /home/user -// import path pkg/go-sub -// package name sub -// frame.File /home/user/src/pkg/go-sub/file.go -// frame.Function pkg/sub.Type.Method -// Desired return pkg/go-sub/file.go -// -// Module path pkg/v2 -// import path pkg/v2/go-sub -// package name sub -// frame.File /home/user/cloned-pkg/go-sub/file.go -// frame.Function pkg/v2/sub.Type.Method -// Desired return pkg/v2/go-sub/file.go -// -// We can handle all of these situations by using the package path extracted -// from frame.Function up to, but not including, the last segment as the prefix -// and the last two segments of frame.File as the suffix of the returned path. -// This preserves the existing behavior when working in a GOPATH without modules -// and a semantically equivalent behavior when used in module aware project. -func pkgFilePath(frame *runtime.Frame) string { - pre := pkgPrefix(frame.Function) - post := pathSuffix(frame.File) - if pre == "" { - return post - } - return pre + "/" + post -} - -// pkgPrefix returns the import path of the function's package with the final -// segment removed. -func pkgPrefix(funcName string) string { - const pathSep = "/" - end := strings.LastIndex(funcName, pathSep) - if end == -1 { - return "" - } - return funcName[:end] -} - -// pathSuffix returns the last two segments of path. -func pathSuffix(path string) string { - const pathSep = "/" - lastSep := strings.LastIndex(path, pathSep) - if lastSep == -1 { - return path - } - return path[strings.LastIndex(path[:lastSep], pathSep)+1:] -} - -var runtimePath string - -func init() { - var pcs [3]uintptr - runtime.Callers(0, pcs[:]) - frames := runtime.CallersFrames(pcs[:]) - frame, _ := frames.Next() - file := frame.File - - idx := pkgIndex(frame.File, frame.Function) - - runtimePath = file[:idx] - if runtime.GOOS == "windows" { - runtimePath = strings.ToLower(runtimePath) - } -} - -func inGoroot(c Call) bool { - file := c.frame.File - if len(file) == 0 || file[0] == '?' { - return true - } - if runtime.GOOS == "windows" { - file = strings.ToLower(file) - } - return strings.HasPrefix(file, runtimePath) || strings.HasSuffix(file, "/_testmain.go") -} - -// TrimRuntime returns a slice of the CallStack with the topmost entries from -// the go runtime removed. It considers any calls originating from unknown -// files, files under GOROOT, or _testmain.go as part of the runtime. -func (cs CallStack) TrimRuntime() CallStack { - for len(cs) > 0 && inGoroot(cs[len(cs)-1]) { - cs = cs[:len(cs)-1] - } - return cs -} diff --git a/vendor/github.com/golang/protobuf/proto/text_decode.go b/vendor/github.com/golang/protobuf/proto/text_decode.go index 4a5931009..47eb3e445 100644 --- a/vendor/github.com/golang/protobuf/proto/text_decode.go +++ b/vendor/github.com/golang/protobuf/proto/text_decode.go @@ -765,7 +765,7 @@ func unescape(s string) (ch string, tail string, err error) { if i > utf8.MaxRune { return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) } - return string(i), s, nil + return string(rune(i)), s, nil } return "", "", fmt.Errorf(`unknown escape \%c`, r) } diff --git a/vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md b/vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..9a1aff412 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +## Prometheus Community Code of Conduct + +Prometheus follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). diff --git a/vendor/github.com/prometheus/procfs/cpuinfo.go b/vendor/github.com/prometheus/procfs/cpuinfo.go index 31d42f712..b9fb589aa 100644 --- a/vendor/github.com/prometheus/procfs/cpuinfo.go +++ b/vendor/github.com/prometheus/procfs/cpuinfo.go @@ -407,6 +407,50 @@ func parseCPUInfoPPC(info []byte) ([]CPUInfo, error) { return cpuinfo, nil } +func parseCPUInfoRISCV(info []byte) ([]CPUInfo, error) { + scanner := bufio.NewScanner(bytes.NewReader(info)) + + firstLine := firstNonEmptyLine(scanner) + if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { + return nil, errors.New("invalid cpuinfo file: " + firstLine) + } + field := strings.SplitN(firstLine, ": ", 2) + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + firstcpu := CPUInfo{Processor: uint(v)} + cpuinfo := []CPUInfo{firstcpu} + i := 0 + + for scanner.Scan() { + line := scanner.Text() + if !strings.Contains(line, ":") { + continue + } + field := strings.SplitN(line, ": ", 2) + switch strings.TrimSpace(field[0]) { + case "processor": + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + i = int(v) + cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor + cpuinfo[i].Processor = uint(v) + case "hart": + cpuinfo[i].CoreID = field[1] + case "isa": + cpuinfo[i].ModelName = field[1] + } + } + return cpuinfo, nil +} + +func parseCPUInfoDummy(_ []byte) ([]CPUInfo, error) { // nolint:unused,deadcode + return nil, errors.New("not implemented") +} + // firstNonEmptyLine advances the scanner to the first non-empty line // and returns the contents of that line func firstNonEmptyLine(scanner *bufio.Scanner) string { diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_arm.go b/vendor/github.com/prometheus/procfs/cpuinfo_arm.go deleted file mode 100644 index 835550770..000000000 --- a/vendor/github.com/prometheus/procfs/cpuinfo_arm.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2020 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build linux - -package procfs - -var parseCPUInfo = parseCPUInfoARM diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_arm64.go b/vendor/github.com/prometheus/procfs/cpuinfo_armx.go similarity index 97% rename from vendor/github.com/prometheus/procfs/cpuinfo_arm64.go rename to vendor/github.com/prometheus/procfs/cpuinfo_armx.go index 4f5d172a3..44b590ed3 100644 --- a/vendor/github.com/prometheus/procfs/cpuinfo_arm64.go +++ b/vendor/github.com/prometheus/procfs/cpuinfo_armx.go @@ -12,7 +12,7 @@ // limitations under the License. // +build linux -// +build arm64 +// +build arm arm64 package procfs diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mips64.go b/vendor/github.com/prometheus/procfs/cpuinfo_mips64.go deleted file mode 100644 index 22d93f8ef..000000000 --- a/vendor/github.com/prometheus/procfs/cpuinfo_mips64.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2020 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build linux - -package procfs - -var parseCPUInfo = parseCPUInfoMips diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go b/vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go deleted file mode 100644 index 22d93f8ef..000000000 --- a/vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2020 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build linux - -package procfs - -var parseCPUInfo = parseCPUInfoMips diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go b/vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go similarity index 94% rename from vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go rename to vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go index 22d93f8ef..91e272573 100644 --- a/vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go +++ b/vendor/github.com/prometheus/procfs/cpuinfo_mipsx.go @@ -12,6 +12,7 @@ // limitations under the License. // +build linux +// +build mips mipsle mips64 mips64le package procfs diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mips.go b/vendor/github.com/prometheus/procfs/cpuinfo_others.go similarity index 82% rename from vendor/github.com/prometheus/procfs/cpuinfo_mips.go rename to vendor/github.com/prometheus/procfs/cpuinfo_others.go index 22d93f8ef..95b5b4ec4 100644 --- a/vendor/github.com/prometheus/procfs/cpuinfo_mips.go +++ b/vendor/github.com/prometheus/procfs/cpuinfo_others.go @@ -12,7 +12,8 @@ // limitations under the License. // +build linux +// +build !386,!amd64,!arm,!arm64,!mips,!mips64,!mips64le,!mipsle,!ppc64,!ppc64le,!riscv64,!s390x package procfs -var parseCPUInfo = parseCPUInfoMips +var parseCPUInfo = parseCPUInfoDummy diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go b/vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go similarity index 96% rename from vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go rename to vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go index 64aee9c63..6068bd571 100644 --- a/vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go +++ b/vendor/github.com/prometheus/procfs/cpuinfo_ppcx.go @@ -12,6 +12,7 @@ // limitations under the License. // +build linux +// +build ppc64 ppc64le package procfs diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_default.go b/vendor/github.com/prometheus/procfs/cpuinfo_x86.go similarity index 100% rename from vendor/github.com/prometheus/procfs/cpuinfo_default.go rename to vendor/github.com/prometheus/procfs/cpuinfo_x86.go diff --git a/vendor/github.com/prometheus/procfs/fixtures.ttar b/vendor/github.com/prometheus/procfs/fixtures.ttar index 868c8573d..12494d742 100644 --- a/vendor/github.com/prometheus/procfs/fixtures.ttar +++ b/vendor/github.com/prometheus/procfs/fixtures.ttar @@ -467,7 +467,7 @@ Pid: 26231 PPid: 1 TracerPid: 0 Uid: 1000 1000 1000 0 -Gid: 0 0 0 0 +Gid: 1001 1001 1001 0 FDSize: 128 Groups: NStgid: 1 @@ -1966,7 +1966,7 @@ Lines: 1 Mode: 444 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/proc/mdstat -Lines: 56 +Lines: 60 Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md3 : active raid6 sda1[8] sdh1[7] sdg1[6] sdf1[5] sde1[11] sdd1[3] sdc1[10] sdb1[9] sdd1[10](S) sdd2[11](S) @@ -1989,6 +1989,10 @@ md8 : active raid1 sdb1[1] sda1[0] sdc[2](S) sde[3](S) 195310144 blocks [2/2] [UU] [=>...................] resync = 8.5% (16775552/195310144) finish=17.0min speed=259783K/sec +md201 : active raid1 sda3[0] sdb3[1] + 1993728 blocks super 1.2 [2/2] [UU] + [=>...................] check = 5.7% (114176/1993728) finish=0.2min speed=114176K/sec + md7 : active raid6 sdb1[0] sde1[3] sdd1[2] sdc1[1](F) 7813735424 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/3] [U_UU] bitmap: 0/30 pages [0KB], 65536KB chunk @@ -3754,6 +3758,73 @@ Path: fixtures/sys/class/powercap/intel-rapl:0:0/uevent Lines: 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/powercap/intel-rapl:a +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_0_max_power_uw +Lines: 1 +95000000 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_0_name +Lines: 1 +long_term +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_0_power_limit_uw +Lines: 1 +4090000000 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_0_time_window_us +Lines: 1 +999424 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_1_max_power_uw +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_1_name +Lines: 1 +short_term +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_1_power_limit_uw +Lines: 1 +4090000000 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/constraint_1_time_window_us +Lines: 1 +2440 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/enabled +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/energy_uj +Lines: 1 +240422366267 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/max_energy_range_uj +Lines: 1 +262143328850 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/name +Lines: 1 +package-10 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/powercap/intel-rapl:a/uevent +Lines: 0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/class/thermal Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/github.com/prometheus/procfs/kernel_random.go b/vendor/github.com/prometheus/procfs/kernel_random.go index beefdf02e..da3a941d6 100644 --- a/vendor/github.com/prometheus/procfs/kernel_random.go +++ b/vendor/github.com/prometheus/procfs/kernel_random.go @@ -25,7 +25,7 @@ import ( type KernelRandom struct { // EntropyAvaliable gives the available entropy, in bits. EntropyAvaliable *uint64 - // PoolSize gives the size of the entropy pool, in bytes. + // PoolSize gives the size of the entropy pool, in bits. PoolSize *uint64 // URandomMinReseedSeconds is the number of seconds after which the DRNG will be reseeded. URandomMinReseedSeconds *uint64 diff --git a/vendor/github.com/prometheus/procfs/mdstat.go b/vendor/github.com/prometheus/procfs/mdstat.go index 3e9362a94..98e37aa8c 100644 --- a/vendor/github.com/prometheus/procfs/mdstat.go +++ b/vendor/github.com/prometheus/procfs/mdstat.go @@ -107,11 +107,14 @@ func parseMDStat(mdStatData []byte) ([]MDStat, error) { syncedBlocks := size recovering := strings.Contains(lines[syncLineIdx], "recovery") resyncing := strings.Contains(lines[syncLineIdx], "resync") + checking := strings.Contains(lines[syncLineIdx], "check") // Append recovery and resyncing state info. - if recovering || resyncing { + if recovering || resyncing || checking { if recovering { state = "recovering" + } else if checking { + state = "checking" } else { state = "resyncing" } diff --git a/vendor/github.com/prometheus/procfs/proc_status.go b/vendor/github.com/prometheus/procfs/proc_status.go index c58346d91..6edd8333b 100644 --- a/vendor/github.com/prometheus/procfs/proc_status.go +++ b/vendor/github.com/prometheus/procfs/proc_status.go @@ -72,8 +72,10 @@ type ProcStatus struct { // Number of involuntary context switches. NonVoluntaryCtxtSwitches uint64 - // UIDs of the process (Real, effective, saved set, and filesystem UIDs (GIDs)) + // UIDs of the process (Real, effective, saved set, and filesystem UIDs) UIDs [4]string + // GIDs of the process (Real, effective, saved set, and filesystem GIDs) + GIDs [4]string } // NewStatus returns the current status information of the process. @@ -119,6 +121,8 @@ func (s *ProcStatus) fillStatus(k string, vString string, vUint uint64, vUintByt s.Name = vString case "Uid": copy(s.UIDs[:], strings.Split(vString, "\t")) + case "Gid": + copy(s.GIDs[:], strings.Split(vString, "\t")) case "VmPeak": s.VmPeak = vUintBytes case "VmSize": diff --git a/vendor/github.com/spf13/cobra/CHANGELOG.md b/vendor/github.com/spf13/cobra/CHANGELOG.md new file mode 100644 index 000000000..742d6d6e2 --- /dev/null +++ b/vendor/github.com/spf13/cobra/CHANGELOG.md @@ -0,0 +1,22 @@ +# Cobra Changelog + +## Pending +* Fix man page doc generation - no auto generated tag when `cmd.DisableAutoGenTag = true` @jpmcb + +## v1.0.0 +Announcing v1.0.0 of Cobra. 🎉 +**Notable Changes** +* Fish completion (including support for Go custom completion) @marckhouzam +* API (urgent): Rename BashCompDirectives to ShellCompDirectives @marckhouzam +* Remove/replace SetOutput on Command - deprecated @jpmcb +* add support for autolabel stale PR @xchapter7x +* Add Labeler Actions @xchapter7x +* Custom completions coded in Go (instead of Bash) @marckhouzam +* Partial Revert of #922 @jharshman +* Add Makefile to project @jharshman +* Correct documentation for InOrStdin @desponda +* Apply formatting to templates @jharshman +* Revert change so help is printed on stdout again @marckhouzam +* Update md2man to v2.0.0 @pdf +* update viper to v1.4.0 @umarcor +* Update cmd/root.go example in README.md @jharshman diff --git a/vendor/github.com/spf13/cobra/CONTRIBUTING.md b/vendor/github.com/spf13/cobra/CONTRIBUTING.md new file mode 100644 index 000000000..6f356e6a8 --- /dev/null +++ b/vendor/github.com/spf13/cobra/CONTRIBUTING.md @@ -0,0 +1,50 @@ +# Contributing to Cobra + +Thank you so much for contributing to Cobra. We appreciate your time and help. +Here are some guidelines to help you get started. + +## Code of Conduct + +Be kind and respectful to the members of the community. Take time to educate +others who are seeking help. Harassment of any kind will not be tolerated. + +## Questions + +If you have questions regarding Cobra, feel free to ask it in the community +[#cobra Slack channel][cobra-slack] + +## Filing a bug or feature + +1. Before filing an issue, please check the existing issues to see if a + similar one was already opened. If there is one already opened, feel free + to comment on it. +1. If you believe you've found a bug, please provide detailed steps of + reproduction, the version of Cobra and anything else you believe will be + useful to help troubleshoot it (e.g. OS environment, environment variables, + etc...). Also state the current behavior vs. the expected behavior. +1. If you'd like to see a feature or an enhancement please open an issue with + a clear title and description of what the feature is and why it would be + beneficial to the project and its users. + +## Submitting changes + +1. CLA: Upon submitting a Pull Request (PR), contributors will be prompted to + sign a CLA. Please sign the CLA :slightly_smiling_face: +1. Tests: If you are submitting code, please ensure you have adequate tests + for the feature. Tests can be run via `go test ./...` or `make test`. +1. Since this is golang project, ensure the new code is properly formatted to + ensure code consistency. Run `make all`. + +### Quick steps to contribute + +1. Fork the project. +1. Download your fork to your PC (`git clone https://github.com/your_username/cobra && cd cobra`) +1. Create your feature branch (`git checkout -b my-new-feature`) +1. Make changes and run tests (`make test`) +1. Add them to staging (`git add .`) +1. Commit your changes (`git commit -m 'Add some feature'`) +1. Push to the branch (`git push origin my-new-feature`) +1. Create new pull request + + +[cobra-slack]: https://gophers.slack.com/archives/CD3LP1199 diff --git a/vendor/github.com/spf13/cobra/README.md b/vendor/github.com/spf13/cobra/README.md index 9d7993426..3cf1b25d8 100644 --- a/vendor/github.com/spf13/cobra/README.md +++ b/vendor/github.com/spf13/cobra/README.md @@ -2,35 +2,14 @@ Cobra is both a library for creating powerful modern CLI applications as well as a program to generate applications and command files. -Many of the most widely used Go projects are built using Cobra, such as: -[Kubernetes](http://kubernetes.io/), -[Hugo](http://gohugo.io), -[rkt](https://github.com/coreos/rkt), -[etcd](https://github.com/coreos/etcd), -[Moby (former Docker)](https://github.com/moby/moby), -[Docker (distribution)](https://github.com/docker/distribution), -[OpenShift](https://www.openshift.com/), -[Delve](https://github.com/derekparker/delve), -[GopherJS](http://www.gopherjs.org/), -[CockroachDB](http://www.cockroachlabs.com/), -[Bleve](http://www.blevesearch.com/), -[ProjectAtomic (enterprise)](http://www.projectatomic.io/), -[Giant Swarm's gsctl](https://github.com/giantswarm/gsctl), -[Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack), -[rclone](http://rclone.org/), -[nehm](https://github.com/bogem/nehm), -[Pouch](https://github.com/alibaba/pouch), -[Istio](https://istio.io), -[Prototool](https://github.com/uber/prototool), -[mattermost-server](https://github.com/mattermost/mattermost-server), -[Gardener](https://github.com/gardener/gardenctl), -[Linkerd](https://linkerd.io/), -[Github CLI](https://github.com/cli/cli) -etc. +Cobra is used in many Go projects such as [Kubernetes](http://kubernetes.io/), +[Hugo](https://gohugo.io), and [Github CLI](https://github.com/cli/cli) to +name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra. [![Build Status](https://travis-ci.org/spf13/cobra.svg "Travis CI status")](https://travis-ci.org/spf13/cobra) [![GoDoc](https://godoc.org/github.com/spf13/cobra?status.svg)](https://godoc.org/github.com/spf13/cobra) [![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cobra)](https://goreportcard.com/report/github.com/spf13/cobra) +[![Slack](https://img.shields.io/badge/Slack-cobra-brightgreen)](https://gophers.slack.com/archives/CD3LP1199) # Table of Contents @@ -50,9 +29,8 @@ etc. * [PreRun and PostRun Hooks](#prerun-and-postrun-hooks) * [Suggestions when "unknown command" happens](#suggestions-when-unknown-command-happens) * [Generating documentation for your command](#generating-documentation-for-your-command) - * [Generating bash completions](#generating-bash-completions) - * [Generating zsh completions](#generating-zsh-completions) -- [Contributing](#contributing) + * [Generating shell completions](#generating-shell-completions) +- [Contributing](CONTRIBUTING.md) - [License](#license) # Overview @@ -72,7 +50,7 @@ Cobra provides: * Intelligent suggestions (`app srver`... did you mean `app server`?) * Automatic help generation for commands and flags * Automatic help flag recognition of `-h`, `--help`, etc. -* Automatically generated bash autocomplete for your application +* Automatically generated shell autocomplete for your application (bash, zsh, fish, powershell) * Automatically generated man pages for your application * Command aliases so you can change things without breaking them * The flexibility to define your own help, usage, etc. @@ -130,7 +108,7 @@ Using Cobra is easy. First, use `go get` to install the latest version of the library. This command will install the `cobra` generator executable along with the library and its dependencies: - go get -u github.com/spf13/cobra/cobra + go get -u github.com/spf13/cobra Next, include Cobra in your application: @@ -199,7 +177,7 @@ var rootCmd = &cobra.Command{ func Execute() { if err := rootCmd.Execute(); err != nil { - fmt.Println(err) + fmt.Fprintln(os.Stderr, err) os.Exit(1) } } @@ -335,6 +313,37 @@ var versionCmd = &cobra.Command{ } ``` +### Returning and handling errors + +If you wish to return an error to the caller of a command, `RunE` can be used. + +```go +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +func init() { + rootCmd.AddCommand(tryCmd) +} + +var tryCmd = &cobra.Command{ + Use: "try", + Short: "Try and possibly fail at something", + RunE: func(cmd *cobra.Command, args []string) error { + if err := someFunc(); err != nil { + return err + } + return nil + }, +} +``` + +The error can then be caught at the execute function call. + ## Working with Flags Flags provide modifiers to control how the action command operates. @@ -410,6 +419,12 @@ rootCmd.Flags().StringVarP(&Region, "region", "r", "", "AWS region (required)") rootCmd.MarkFlagRequired("region") ``` +Or, for persistent flags: +```go +rootCmd.PersistentFlags().StringVarP(&Region, "region", "r", "", "AWS region (required)") +rootCmd.MarkPersistentFlagRequired("region") +``` + ## Positional and Custom Arguments Validation of positional arguments can be specified using the `Args` field @@ -740,30 +755,11 @@ Run 'kubectl help' for usage. ## Generating documentation for your command -Cobra can generate documentation based on subcommands, flags, etc. in the following formats: - -- [Markdown](doc/md_docs.md) -- [ReStructured Text](doc/rest_docs.md) -- [Man Page](doc/man_docs.md) - -## Generating bash completions - -Cobra can generate a bash-completion file. If you add more information to your command, these completions can be amazingly powerful and flexible. Read more about it in [Bash Completions](bash_completions.md). - -## Generating zsh completions - -Cobra can generate zsh-completion file. Read more about it in -[Zsh Completions](zsh_completions.md). +Cobra can generate documentation based on subcommands, flags, etc. Read more about it in the [docs generation documentation](doc/README.md). -# Contributing +## Generating shell completions -1. Fork it -2. Download your fork to your PC (`git clone https://github.com/your_username/cobra && cd cobra`) -3. Create your feature branch (`git checkout -b my-new-feature`) -4. Make changes and add them (`git add .`) -5. Commit your changes (`git commit -m 'Add some feature'`) -6. Push to the branch (`git push origin my-new-feature`) -7. Create new pull request +Cobra can generate a shell-completion file for the following shells: Bash, Zsh, Fish, Powershell. If you add more information to your commands, these completions can be amazingly powerful and flexible. Read more about it in [Shell Completions](shell_completions.md). # License diff --git a/vendor/github.com/spf13/cobra/bash_completions.go b/vendor/github.com/spf13/cobra/bash_completions.go index 1e27188c3..846636d75 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.go +++ b/vendor/github.com/spf13/cobra/bash_completions.go @@ -62,6 +62,12 @@ __%[1]s_handle_go_custom_completion() { __%[1]s_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}" + local shellCompDirectiveError=%[3]d + local shellCompDirectiveNoSpace=%[4]d + local shellCompDirectiveNoFileComp=%[5]d + local shellCompDirectiveFilterFileExt=%[6]d + local shellCompDirectiveFilterDirs=%[7]d + local out requestComp lastParam lastChar comp directive args # Prepare the command to request completions for the program. @@ -95,24 +101,50 @@ __%[1]s_handle_go_custom_completion() __%[1]s_debug "${FUNCNAME[0]}: the completion directive is: ${directive}" __%[1]s_debug "${FUNCNAME[0]}: the completions are: ${out[*]}" - if [ $((directive & %[3]d)) -ne 0 ]; then + if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then # Error code. No completion. __%[1]s_debug "${FUNCNAME[0]}: received error from custom completion go code" return else - if [ $((directive & %[4]d)) -ne 0 ]; then + if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then if [[ $(type -t compopt) = "builtin" ]]; then __%[1]s_debug "${FUNCNAME[0]}: activating no space" compopt -o nospace fi fi - if [ $((directive & %[5]d)) -ne 0 ]; then + if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then if [[ $(type -t compopt) = "builtin" ]]; then __%[1]s_debug "${FUNCNAME[0]}: activating no file completion" compopt +o default fi fi + fi + if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then + # File extension filtering + local fullFilter filter filteringCmd + # Do not use quotes around the $out variable or else newline + # characters will be kept. + for filter in ${out[*]}; do + fullFilter+="$filter|" + done + + filteringCmd="_filedir $fullFilter" + __%[1]s_debug "File filtering command: $filteringCmd" + $filteringCmd + elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then + # File completion for directories only + local subDir + # Use printf to strip any trailing newline + subdir=$(printf "%%s" "${out[0]}") + if [ -n "$subdir" ]; then + __%[1]s_debug "Listing directories in $subdir" + __%[1]s_handle_subdirs_in_dir_flag "$subdir" + else + __%[1]s_debug "Listing directories in ." + _filedir -d + fi + else while IFS='' read -r comp; do COMPREPLY+=("$comp") done < <(compgen -W "${out[*]}" -- "$cur") @@ -181,10 +213,9 @@ __%[1]s_handle_reply() local completions completions=("${commands[@]}") if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then - completions=("${must_have_one_noun[@]}") + completions+=("${must_have_one_noun[@]}") elif [[ -n "${has_completion_function}" ]]; then # if a go completion function is provided, defer to that function - completions=() __%[1]s_handle_go_custom_completion fi if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then @@ -344,7 +375,9 @@ __%[1]s_handle_word() __%[1]s_handle_word } -`, name, ShellCompNoDescRequestCmd, ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp)) +`, name, ShellCompNoDescRequestCmd, + ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp, + ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs)) } func writePostscript(buf *bytes.Buffer, name string) { @@ -390,7 +423,7 @@ fi func writeCommands(buf *bytes.Buffer, cmd *Command) { buf.WriteString(" commands=()\n") for _, c := range cmd.Commands() { - if !c.IsAvailableCommand() || c == cmd.helpCommand { + if !c.IsAvailableCommand() && c != cmd.helpCommand { continue } buf.WriteString(fmt.Sprintf(" commands+=(%q)\n", c.Name())) @@ -462,12 +495,14 @@ func writeFlag(buf *bytes.Buffer, flag *pflag.Flag, cmd *Command) { func writeLocalNonPersistentFlag(buf *bytes.Buffer, flag *pflag.Flag) { name := flag.Name - format := " local_nonpersistent_flags+=(\"--%s" + format := " local_nonpersistent_flags+=(\"--%[1]s\")\n" if len(flag.NoOptDefVal) == 0 { - format += "=" + format += " local_nonpersistent_flags+=(\"--%[1]s=\")\n" } - format += "\")\n" buf.WriteString(fmt.Sprintf(format, name)) + if len(flag.Shorthand) > 0 { + buf.WriteString(fmt.Sprintf(" local_nonpersistent_flags+=(\"-%s\")\n", flag.Shorthand)) + } } // Setup annotations for go completions for registered flags @@ -502,7 +537,9 @@ func writeFlags(buf *bytes.Buffer, cmd *Command) { if len(flag.Shorthand) > 0 { writeShortFlag(buf, flag, cmd) } - if localNonPersistentFlags.Lookup(flag.Name) != nil { + // localNonPersistentFlags are used to stop the completion of subcommands when one is set + // if TraverseChildren is true we should allow to complete subcommands + if localNonPersistentFlags.Lookup(flag.Name) != nil && !cmd.Root().TraverseChildren { writeLocalNonPersistentFlag(buf, flag) } }) @@ -583,7 +620,7 @@ func writeArgAliases(buf *bytes.Buffer, cmd *Command) { func gen(buf *bytes.Buffer, cmd *Command) { for _, c := range cmd.Commands() { - if !c.IsAvailableCommand() || c == cmd.helpCommand { + if !c.IsAvailableCommand() && c != cmd.helpCommand { continue } gen(buf, c) diff --git a/vendor/github.com/spf13/cobra/bash_completions.md b/vendor/github.com/spf13/cobra/bash_completions.md index e61a3a654..a82d5bb8b 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.md +++ b/vendor/github.com/spf13/cobra/bash_completions.md @@ -1,206 +1,14 @@ -# Generating Bash Completions For Your Own cobra.Command +# Generating Bash Completions For Your cobra.Command -If you are using the generator you can create a completion command by running +Please refer to [Shell Completions](shell_completions.md) for details. -```bash -cobra add completion -``` - -Update the help text show how to install the bash_completion Linux show here [Kubectl docs show mac options](https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion) - -Writing the shell script to stdout allows the most flexible use. - -```go -// completionCmd represents the completion command -var completionCmd = &cobra.Command{ - Use: "completion", - Short: "Generates bash completion scripts", - Long: `To load completion run - -. <(bitbucket completion) - -To configure your bash shell to load completions for each session add to your bashrc - -# ~/.bashrc or ~/.profile -. <(bitbucket completion) -`, - Run: func(cmd *cobra.Command, args []string) { - rootCmd.GenBashCompletion(os.Stdout); - }, -} -``` - -**Note:** The cobra generator may include messages printed to stdout for example if the config file is loaded, this will break the auto complete script - - -## Example from kubectl - -Generating bash completions from a cobra command is incredibly easy. An actual program which does so for the kubernetes kubectl binary is as follows: - -```go -package main - -import ( - "io/ioutil" - "os" - - "k8s.io/kubernetes/pkg/kubectl/cmd" - "k8s.io/kubernetes/pkg/kubectl/cmd/util" -) - -func main() { - kubectl := cmd.NewKubectlCommand(util.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard) - kubectl.GenBashCompletionFile("out.sh") -} -``` - -`out.sh` will get you completions of subcommands and flags. Copy it to `/etc/bash_completion.d/` as described [here](https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1) and reset your terminal to use autocompletion. If you make additional annotations to your code, you can get even more intelligent and flexible behavior. - -## Have the completions code complete your 'nouns' - -### Static completion of nouns - -This method allows you to provide a pre-defined list of completion choices for your nouns using the `validArgs` field. -For example, if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them. Simplified code from `kubectl get` looks like: - -```go -validArgs []string = { "pod", "node", "service", "replicationcontroller" } - -cmd := &cobra.Command{ - Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)", - Short: "Display one or many resources", - Long: get_long, - Example: get_example, - Run: func(cmd *cobra.Command, args []string) { - err := RunGet(f, out, cmd, args) - util.CheckErr(err) - }, - ValidArgs: validArgs, -} -``` - -Notice we put the "ValidArgs" on the "get" subcommand. Doing so will give results like - -```bash -# kubectl get [tab][tab] -node pod replicationcontroller service -``` - -### Plural form and shortcuts for nouns - -If your nouns have a number of aliases, you can define them alongside `ValidArgs` using `ArgAliases`: - -```go -argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" } - -cmd := &cobra.Command{ - ... - ValidArgs: validArgs, - ArgAliases: argAliases -} -``` - -The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by -the completion algorithm if entered manually, e.g. in: - -```bash -# kubectl get rc [tab][tab] -backend frontend database -``` - -Note that without declaring `rc` as an alias, the completion algorithm would show the list of nouns -in this example again instead of the replication controllers. - -### Dynamic completion of nouns - -In some cases it is not possible to provide a list of possible completions in advance. Instead, the list of completions must be determined at execution-time. Cobra provides two ways of defining such dynamic completion of nouns. Note that both these methods can be used along-side each other as long as they are not both used for the same command. +## Bash legacy dynamic completions -**Note**: *Custom Completions written in Go* will automatically work for other shell-completion scripts (e.g., Fish shell), while *Custom Completions written in Bash* will only work for Bash shell-completion. It is therefore recommended to use *Custom Completions written in Go*. - -#### 1. Custom completions of nouns written in Go - -In a similar fashion as for static completions, you can use the `ValidArgsFunction` field to provide a Go function that Cobra will execute when it needs the list of completion choices for the nouns of a command. Note that either `ValidArgs` or `ValidArgsFunction` can be used for a single cobra command, but not both. -Simplified code from `helm status` looks like: - -```go -cmd := &cobra.Command{ - Use: "status RELEASE_NAME", - Short: "Display the status of the named release", - Long: status_long, - RunE: func(cmd *cobra.Command, args []string) { - RunGet(args[0]) - }, - ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - if len(args) != 0 { - return nil, cobra.ShellCompDirectiveNoFileComp - } - return getReleasesFromCluster(toComplete), cobra.ShellCompDirectiveNoFileComp - }, -} -``` -Where `getReleasesFromCluster()` is a Go function that obtains the list of current Helm releases running on the Kubernetes cluster. -Notice we put the `ValidArgsFunction` on the `status` subcommand. Let's assume the Helm releases on the cluster are: `harbor`, `notary`, `rook` and `thanos` then this dynamic completion will give results like - -```bash -# helm status [tab][tab] -harbor notary rook thanos -``` -You may have noticed the use of `cobra.ShellCompDirective`. These directives are bit fields allowing to control some shell completion behaviors for your particular completion. You can combine them with the bit-or operator such as `cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp` -```go -// Indicates an error occurred and completions should be ignored. -ShellCompDirectiveError -// Indicates that the shell should not add a space after the completion, -// even if there is a single completion provided. -ShellCompDirectiveNoSpace -// Indicates that the shell should not provide file completion even when -// no completion is provided. -// This currently does not work for zsh or bash < 4 -ShellCompDirectiveNoFileComp -// Indicates that the shell will perform its default behavior after completions -// have been provided (this implies !ShellCompDirectiveNoSpace && !ShellCompDirectiveNoFileComp). -ShellCompDirectiveDefault -``` +For backwards-compatibility, Cobra still supports its legacy dynamic completion solution (described below). Unlike the `ValidArgsFunction` solution, the legacy solution will only work for Bash shell-completion and not for other shells. This legacy solution can be used along-side `ValidArgsFunction` and `RegisterFlagCompletionFunc()`, as long as both solutions are not used for the same command. This provides a path to gradually migrate from the legacy solution to the new solution. -When using the `ValidArgsFunction`, Cobra will call your registered function after having parsed all flags and arguments provided in the command-line. You therefore don't need to do this parsing yourself. For example, when a user calls `helm status --namespace my-rook-ns [tab][tab]`, Cobra will call your registered `ValidArgsFunction` after having parsed the `--namespace` flag, as it would have done when calling the `RunE` function. +The legacy solution allows you to inject bash functions into the bash completion script. Those bash functions are responsible for providing the completion choices for your own completions. -##### Debugging - -Cobra achieves dynamic completions written in Go through the use of a hidden command called by the completion script. To debug your Go completion code, you can call this hidden command directly: -```bash -# helm __complete status har -harbor -:4 -Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr -``` -***Important:*** If the noun to complete is empty, you must pass an empty parameter to the `__complete` command: -```bash -# helm __complete status "" -harbor -notary -rook -thanos -:4 -Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr -``` -Calling the `__complete` command directly allows you to run the Go debugger to troubleshoot your code. You can also add printouts to your code; Cobra provides the following functions to use for printouts in Go completion code: -```go -// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE -// is set to a file path) and optionally prints to stderr. -cobra.CompDebug(msg string, printToStdErr bool) { -cobra.CompDebugln(msg string, printToStdErr bool) - -// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE -// is set to a file path) and to stderr. -cobra.CompError(msg string) -cobra.CompErrorln(msg string) -``` -***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned above. - -#### 2. Custom completions of nouns written in Bash - -This method allows you to inject bash functions into the completion script. Those bash functions are responsible for providing the completion choices for your own completions. - -Some more actual code that works in kubernetes: +Some code that works in kubernetes: ```bash const ( @@ -253,93 +61,7 @@ Find more information at https://github.com/GoogleCloudPlatform/kubernetes.`, The `BashCompletionFunction` option is really only valid/useful on the root command. Doing the above will cause `__kubectl_custom_func()` (`___custom_func()`) to be called when the built in processor was unable to find a solution. In the case of kubernetes a valid command might look something like `kubectl get pod [mypod]`. If you type `kubectl get pod [tab][tab]` the `__kubectl_customc_func()` will run because the cobra.Command only understood "kubectl" and "get." `__kubectl_custom_func()` will see that the cobra.Command is "kubectl_get" and will thus call another helper `__kubectl_get_resource()`. `__kubectl_get_resource` will look at the 'nouns' collected. In our example the only noun will be `pod`. So it will call `__kubectl_parse_get pod`. `__kubectl_parse_get` will actually call out to kubernetes and get any pods. It will then set `COMPREPLY` to valid pods! -## Mark flags as required - -Most of the time completions will only show subcommands. But if a flag is required to make a subcommand work, you probably want it to show up when the user types [tab][tab]. Marking a flag as 'Required' is incredibly easy. - -```go -cmd.MarkFlagRequired("pod") -cmd.MarkFlagRequired("container") -``` - -and you'll get something like - -```bash -# kubectl exec [tab][tab][tab] --c --container= -p --pod= -``` - -# Specify valid filename extensions for flags that take a filename - -In this example we use --filename= and expect to get a json or yaml file as the argument. To make this easier we annotate the --filename flag with valid filename extensions. - -```go - annotations := []string{"json", "yaml", "yml"} - annotation := make(map[string][]string) - annotation[cobra.BashCompFilenameExt] = annotations - - flag := &pflag.Flag{ - Name: "filename", - Shorthand: "f", - Usage: usage, - Value: value, - DefValue: value.String(), - Annotations: annotation, - } - cmd.Flags().AddFlag(flag) -``` - -Now when you run a command with this filename flag you'll get something like - -```bash -# kubectl create -f -test/ example/ rpmbuild/ -hello.yml test.json -``` - -So while there are many other files in the CWD it only shows me subdirs and those with valid extensions. - -# Specify custom flag completion - -As for nouns, Cobra provides two ways of defining dynamic completion of flags. Note that both these methods can be used along-side each other as long as they are not both used for the same flag. - -**Note**: *Custom Completions written in Go* will automatically work for other shell-completion scripts (e.g., Fish shell), while *Custom Completions written in Bash* will only work for Bash shell-completion. It is therefore recommended to use *Custom Completions written in Go*. - -## 1. Custom completions of flags written in Go - -To provide a Go function that Cobra will execute when it needs the list of completion choices for a flag, you must register the function in the following manner: - -```go -flagName := "output" -cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return []string{"json", "table", "yaml"}, cobra.ShellCompDirectiveDefault -}) -``` -Notice that calling `RegisterFlagCompletionFunc()` is done through the `command` with which the flag is associated. In our example this dynamic completion will give results like so: - -```bash -# helm status --output [tab][tab] -json table yaml -``` - -### Debugging - -You can also easily debug your Go completion code for flags: -```bash -# helm __complete status --output "" -json -table -yaml -:4 -Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr -``` -***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned in the above section. - -## 2. Custom completions of flags written in Bash - -Alternatively, you can use bash code for flag custom completion. Similar to the filename -completion and filtering using `cobra.BashCompFilenameExt`, you can specify -a custom flag completion bash function with `cobra.BashCompCustom`: +Similarly, for flags: ```go annotation := make(map[string][]string) @@ -367,17 +89,3 @@ __kubectl_get_namespaces() fi } ``` -# Using bash aliases for commands - -You can also configure the `bash aliases` for the commands and they will also support completions. - -```bash -alias aliasname=origcommand -complete -o default -F __start_origcommand aliasname - -# and now when you run `aliasname` completion will make -# suggestions as it did for `origcommand`. - -$) aliasname -completion firstcommand secondcommand -``` diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go index 88e6ed77d..77b399e02 100644 --- a/vendor/github.com/spf13/cobra/command.go +++ b/vendor/github.com/spf13/cobra/command.go @@ -37,6 +37,14 @@ type FParseErrWhitelist flag.ParseErrorsWhitelist // definition to ensure usability. type Command struct { // Use is the one-line usage message. + // Recommended syntax is as follow: + // [ ] identifies an optional argument. Arguments that are not enclosed in brackets are required. + // ... indicates that you can specify multiple values for the previous argument. + // | indicates mutually exclusive information. You can use the argument to the left of the separator or the + // argument to the right of the separator. You cannot use both arguments in a single use of the command. + // { } delimits a set of mutually exclusive arguments when one of the arguments is required. If the arguments are + // optional, they are enclosed in brackets ([ ]). + // Example: add [-F file | -D dir]... [-f format] profile Use string // Aliases is an array of aliases that can be used instead of the first word in Use. @@ -359,7 +367,7 @@ func (c *Command) UsageFunc() (f func(*Command) error) { c.mergePersistentFlags() err := tmpl(c.OutOrStderr(), c.UsageTemplate(), c) if err != nil { - c.Println(err) + c.PrintErrln(err) } return err } @@ -387,7 +395,7 @@ func (c *Command) HelpFunc() func(*Command, []string) { // See https://github.com/spf13/cobra/issues/1002 err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c) if err != nil { - c.Println(err) + c.PrintErrln(err) } } } @@ -930,8 +938,8 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { c = cmd } if !c.SilenceErrors { - c.Println("Error:", err.Error()) - c.Printf("Run '%v --help' for usage.\n", c.CommandPath()) + c.PrintErrln("Error:", err.Error()) + c.PrintErrf("Run '%v --help' for usage.\n", c.CommandPath()) } return c, err } @@ -959,7 +967,7 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { // If root command has SilentErrors flagged, // all subcommands should respect it if !cmd.SilenceErrors && !c.SilenceErrors { - c.Println("Error:", err.Error()) + c.PrintErrln("Error:", err.Error()) } // If root command has SilentUsage flagged, @@ -979,6 +987,10 @@ func (c *Command) ValidateArgs(args []string) error { } func (c *Command) validateRequiredFlags() error { + if c.DisableFlagParsing { + return nil + } + flags := c.Flags() missingFlagNames := []string{} flags.VisitAll(func(pflag *flag.Flag) { @@ -1052,7 +1064,25 @@ func (c *Command) InitDefaultHelpCmd() { Short: "Help about any command", Long: `Help provides help for any command in the application. Simply type ` + c.Name() + ` help [path to command] for full details.`, - + ValidArgsFunction: func(c *Command, args []string, toComplete string) ([]string, ShellCompDirective) { + var completions []string + cmd, _, e := c.Root().Find(args) + if e != nil { + return nil, ShellCompDirectiveNoFileComp + } + if cmd == nil { + // Root help command. + cmd = c.Root() + } + for _, subCmd := range cmd.Commands() { + if subCmd.IsAvailableCommand() || subCmd == cmd.helpCommand { + if strings.HasPrefix(subCmd.Name(), toComplete) { + completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short)) + } + } + } + return completions, ShellCompDirectiveNoFileComp + }, Run: func(c *Command, args []string) { cmd, _, e := c.Root().Find(args) if cmd == nil || e != nil { @@ -1179,12 +1209,12 @@ func (c *Command) PrintErr(i ...interface{}) { // PrintErrln is a convenience method to Println to the defined Err output, fallback to Stderr if not set. func (c *Command) PrintErrln(i ...interface{}) { - c.Print(fmt.Sprintln(i...)) + c.PrintErr(fmt.Sprintln(i...)) } // PrintErrf is a convenience method to Printf to the defined Err output, fallback to Stderr if not set. func (c *Command) PrintErrf(format string, i ...interface{}) { - c.Print(fmt.Sprintf(format, i...)) + c.PrintErr(fmt.Sprintf(format, i...)) } // CommandPath returns the full path to this command. diff --git a/vendor/github.com/spf13/cobra/custom_completions.go b/vendor/github.com/spf13/cobra/custom_completions.go index ba57327c1..f9e88e081 100644 --- a/vendor/github.com/spf13/cobra/custom_completions.go +++ b/vendor/github.com/spf13/cobra/custom_completions.go @@ -1,7 +1,6 @@ package cobra import ( - "errors" "fmt" "os" "strings" @@ -38,8 +37,29 @@ const ( // This currently does not work for zsh or bash < 4 ShellCompDirectiveNoFileComp + // ShellCompDirectiveFilterFileExt indicates that the provided completions + // should be used as file extension filters. + // For flags, using Command.MarkFlagFilename() and Command.MarkPersistentFlagFilename() + // is a shortcut to using this directive explicitly. The BashCompFilenameExt + // annotation can also be used to obtain the same behavior for flags. + ShellCompDirectiveFilterFileExt + + // ShellCompDirectiveFilterDirs indicates that only directory names should + // be provided in file completion. To request directory names within another + // directory, the returned completions should specify the directory within + // which to search. The BashCompSubdirsInDir annotation can be used to + // obtain the same behavior but only for flags. + ShellCompDirectiveFilterDirs + + // =========================================================================== + + // All directives using iota should be above this one. + // For internal use. + shellCompDirectiveMaxValue + // ShellCompDirectiveDefault indicates to let the shell perform its default // behavior after completions have been provided. + // This one must be last to avoid messing up the iota count. ShellCompDirectiveDefault ShellCompDirective = 0 ) @@ -68,11 +88,17 @@ func (d ShellCompDirective) string() string { if d&ShellCompDirectiveNoFileComp != 0 { directives = append(directives, "ShellCompDirectiveNoFileComp") } + if d&ShellCompDirectiveFilterFileExt != 0 { + directives = append(directives, "ShellCompDirectiveFilterFileExt") + } + if d&ShellCompDirectiveFilterDirs != 0 { + directives = append(directives, "ShellCompDirectiveFilterDirs") + } if len(directives) == 0 { directives = append(directives, "ShellCompDirectiveDefault") } - if d > ShellCompDirectiveError+ShellCompDirectiveNoSpace+ShellCompDirectiveNoFileComp { + if d >= shellCompDirectiveMaxValue { return fmt.Sprintf("ERROR: unexpected ShellCompDirective value: %d", d) } return strings.Join(directives, ", ") @@ -105,11 +131,25 @@ func (c *Command) initCompleteCmd(args []string) { // Remove any description that may be included following a tab character. comp = strings.Split(comp, "\t")[0] } + + // Make sure we only write the first line to the output. + // This is needed if a description contains a linebreak. + // Otherwise the shell scripts will interpret the other lines as new flags + // and could therefore provide a wrong completion. + comp = strings.Split(comp, "\n")[0] + + // Finally trim the completion. This is especially important to get rid + // of a trailing tab when there are no description following it. + // For example, a sub-command without a description should not be completed + // with a tab at the end (or else zsh will show a -- following it + // although there is no description). + comp = strings.TrimSpace(comp) + // Print each possible completion to stdout for the completion script to consume. fmt.Fprintln(finalCmd.OutOrStdout(), comp) } - if directive > ShellCompDirectiveError+ShellCompDirectiveNoSpace+ShellCompDirectiveNoFileComp { + if directive >= shellCompDirectiveMaxValue { directive = ShellCompDirectiveDefault } @@ -136,90 +176,179 @@ func (c *Command) initCompleteCmd(args []string) { } func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDirective, error) { - var completions []string - // The last argument, which is not completely typed by the user, // should not be part of the list of arguments toComplete := args[len(args)-1] trimmedArgs := args[:len(args)-1] + var finalCmd *Command + var finalArgs []string + var err error // Find the real command for which completion must be performed - finalCmd, finalArgs, err := c.Root().Find(trimmedArgs) + // check if we need to traverse here to parse local flags on parent commands + if c.Root().TraverseChildren { + finalCmd, finalArgs, err = c.Root().Traverse(trimmedArgs) + } else { + finalCmd, finalArgs, err = c.Root().Find(trimmedArgs) + } if err != nil { // Unable to find the real command. E.g., someInvalidCmd - return c, completions, ShellCompDirectiveDefault, fmt.Errorf("Unable to find a command for arguments: %v", trimmedArgs) + return c, []string{}, ShellCompDirectiveDefault, fmt.Errorf("Unable to find a command for arguments: %v", trimmedArgs) + } + + // Check if we are doing flag value completion before parsing the flags. + // This is important because if we are completing a flag value, we need to also + // remove the flag name argument from the list of finalArgs or else the parsing + // could fail due to an invalid value (incomplete) for the flag. + flag, finalArgs, toComplete, err := checkIfFlagCompletion(finalCmd, finalArgs, toComplete) + if err != nil { + // Error while attempting to parse flags + return finalCmd, []string{}, ShellCompDirectiveDefault, err + } + + // Parse the flags early so we can check if required flags are set + if err = finalCmd.ParseFlags(finalArgs); err != nil { + return finalCmd, []string{}, ShellCompDirectiveDefault, fmt.Errorf("Error while parsing flags from args %v: %s", finalArgs, err.Error()) + } + + if flag != nil { + // Check if we are completing a flag value subject to annotations + if validExts, present := flag.Annotations[BashCompFilenameExt]; present { + if len(validExts) != 0 { + // File completion filtered by extensions + return finalCmd, validExts, ShellCompDirectiveFilterFileExt, nil + } + + // The annotation requests simple file completion. There is no reason to do + // that since it is the default behavior anyway. Let's ignore this annotation + // in case the program also registered a completion function for this flag. + // Even though it is a mistake on the program's side, let's be nice when we can. + } + + if subDir, present := flag.Annotations[BashCompSubdirsInDir]; present { + if len(subDir) == 1 { + // Directory completion from within a directory + return finalCmd, subDir, ShellCompDirectiveFilterDirs, nil + } + // Directory completion + return finalCmd, []string{}, ShellCompDirectiveFilterDirs, nil + } } // When doing completion of a flag name, as soon as an argument starts with // a '-' we know it is a flag. We cannot use isFlagArg() here as it requires - // the flag to be complete - if len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") { - // We are completing a flag name - finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { - completions = append(completions, getFlagNameCompletions(flag, toComplete)...) - }) - finalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) { - completions = append(completions, getFlagNameCompletions(flag, toComplete)...) - }) - - directive := ShellCompDirectiveDefault - if len(completions) > 0 { - if strings.HasSuffix(completions[0], "=") { - directive = ShellCompDirectiveNoSpace + // the flag name to be complete + if flag == nil && len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") { + var completions []string + + // First check for required flags + completions = completeRequireFlags(finalCmd, toComplete) + + // If we have not found any required flags, only then can we show regular flags + if len(completions) == 0 { + doCompleteFlags := func(flag *pflag.Flag) { + if !flag.Changed || + strings.Contains(flag.Value.Type(), "Slice") || + strings.Contains(flag.Value.Type(), "Array") { + // If the flag is not already present, or if it can be specified multiple times (Array or Slice) + // we suggest it as a completion + completions = append(completions, getFlagNameCompletions(flag, toComplete)...) + } } + + // We cannot use finalCmd.Flags() because we may not have called ParsedFlags() for commands + // that have set DisableFlagParsing; it is ParseFlags() that merges the inherited and + // non-inherited flags. + finalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) { + doCompleteFlags(flag) + }) + finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { + doCompleteFlags(flag) + }) + } + + directive := ShellCompDirectiveNoFileComp + if len(completions) == 1 && strings.HasSuffix(completions[0], "=") { + // If there is a single completion, the shell usually adds a space + // after the completion. We don't want that if the flag ends with an = + directive = ShellCompDirectiveNoSpace } return finalCmd, completions, directive, nil } - var flag *pflag.Flag + // We only remove the flags from the arguments if DisableFlagParsing is not set. + // This is important for commands which have requested to do their own flag completion. if !finalCmd.DisableFlagParsing { - // We only do flag completion if we are allowed to parse flags - // This is important for commands which have requested to do their own flag completion. - flag, finalArgs, toComplete, err = checkIfFlagCompletion(finalCmd, finalArgs, toComplete) - if err != nil { - // Error while attempting to parse flags - return finalCmd, completions, ShellCompDirectiveDefault, err - } + finalArgs = finalCmd.Flags().Args() } + var completions []string + directive := ShellCompDirectiveDefault if flag == nil { - // Complete subcommand names - for _, subCmd := range finalCmd.Commands() { - if subCmd.IsAvailableCommand() && strings.HasPrefix(subCmd.Name(), toComplete) { - completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short)) + foundLocalNonPersistentFlag := false + // If TraverseChildren is true on the root command we don't check for + // local flags because we can use a local flag on a parent command + if !finalCmd.Root().TraverseChildren { + // Check if there are any local, non-persistent flags on the command-line + localNonPersistentFlags := finalCmd.LocalNonPersistentFlags() + finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { + if localNonPersistentFlags.Lookup(flag.Name) != nil && flag.Changed { + foundLocalNonPersistentFlag = true + } + }) + } + + // Complete subcommand names, including the help command + if len(finalArgs) == 0 && !foundLocalNonPersistentFlag { + // We only complete sub-commands if: + // - there are no arguments on the command-line and + // - there are no local, non-peristent flag on the command-line or TraverseChildren is true + for _, subCmd := range finalCmd.Commands() { + if subCmd.IsAvailableCommand() || subCmd == finalCmd.helpCommand { + if strings.HasPrefix(subCmd.Name(), toComplete) { + completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short)) + } + directive = ShellCompDirectiveNoFileComp + } } } + // Complete required flags even without the '-' prefix + completions = append(completions, completeRequireFlags(finalCmd, toComplete)...) + + // Always complete ValidArgs, even if we are completing a subcommand name. + // This is for commands that have both subcommands and ValidArgs. if len(finalCmd.ValidArgs) > 0 { - // Always complete ValidArgs, even if we are completing a subcommand name. - // This is for commands that have both subcommands and ValidArgs. - for _, validArg := range finalCmd.ValidArgs { - if strings.HasPrefix(validArg, toComplete) { - completions = append(completions, validArg) + if len(finalArgs) == 0 { + // ValidArgs are only for the first argument + for _, validArg := range finalCmd.ValidArgs { + if strings.HasPrefix(validArg, toComplete) { + completions = append(completions, validArg) + } + } + directive = ShellCompDirectiveNoFileComp + + // If no completions were found within commands or ValidArgs, + // see if there are any ArgAliases that should be completed. + if len(completions) == 0 { + for _, argAlias := range finalCmd.ArgAliases { + if strings.HasPrefix(argAlias, toComplete) { + completions = append(completions, argAlias) + } + } } } // If there are ValidArgs specified (even if they don't match), we stop completion. // Only one of ValidArgs or ValidArgsFunction can be used for a single command. - return finalCmd, completions, ShellCompDirectiveNoFileComp, nil + return finalCmd, completions, directive, nil } - // Always let the logic continue so as to add any ValidArgsFunction completions, + // Let the logic continue so as to add any ValidArgsFunction completions, // even if we already found sub-commands. // This is for commands that have subcommands but also specify a ValidArgsFunction. } - // Parse the flags and extract the arguments to prepare for calling the completion function - if err = finalCmd.ParseFlags(finalArgs); err != nil { - return finalCmd, completions, ShellCompDirectiveDefault, fmt.Errorf("Error while parsing flags from args %v: %s", finalArgs, err.Error()) - } - - // We only remove the flags from the arguments if DisableFlagParsing is not set. - // This is important for commands which have requested to do their own flag completion. - if !finalCmd.DisableFlagParsing { - finalArgs = finalCmd.Flags().Args() - } - // Find the completion function for the flag or command var completionFn func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) if flag != nil { @@ -227,14 +356,14 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi } else { completionFn = finalCmd.ValidArgsFunction } - if completionFn == nil { - // Go custom completion not supported/needed for this flag or command - return finalCmd, completions, ShellCompDirectiveDefault, nil + if completionFn != nil { + // Go custom completion defined for this flag or command. + // Call the registered completion function to get the completions. + var comps []string + comps, directive = completionFn(finalCmd, finalArgs, toComplete) + completions = append(completions, comps...) } - // Call the registered completion function to get the completions - comps, directive := completionFn(finalCmd, finalArgs, toComplete) - completions = append(completions, comps...) return finalCmd, completions, directive, nil } @@ -249,11 +378,18 @@ func getFlagNameCompletions(flag *pflag.Flag, toComplete string) []string { // Flag without the = completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage)) - if len(flag.NoOptDefVal) == 0 { - // Flag requires a value, so it can be suffixed with = - flagName += "=" - completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage)) - } + // Why suggest both long forms: --flag and --flag= ? + // This forces the user to *always* have to type either an = or a space after the flag name. + // Let's be nice and avoid making users have to do that. + // Since boolean flags and shortname flags don't show the = form, let's go that route and never show it. + // The = form will still work, we just won't suggest it. + // This also makes the list of suggested flags shorter as we avoid all the = forms. + // + // if len(flag.NoOptDefVal) == 0 { + // // Flag requires a value, so it can be suffixed with = + // flagName += "=" + // completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage)) + // } } flagName = "-" + flag.Shorthand @@ -264,17 +400,54 @@ func getFlagNameCompletions(flag *pflag.Flag, toComplete string) []string { return completions } +func completeRequireFlags(finalCmd *Command, toComplete string) []string { + var completions []string + + doCompleteRequiredFlags := func(flag *pflag.Flag) { + if _, present := flag.Annotations[BashCompOneRequiredFlag]; present { + if !flag.Changed { + // If the flag is not already present, we suggest it as a completion + completions = append(completions, getFlagNameCompletions(flag, toComplete)...) + } + } + } + + // We cannot use finalCmd.Flags() because we may not have called ParsedFlags() for commands + // that have set DisableFlagParsing; it is ParseFlags() that merges the inherited and + // non-inherited flags. + finalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) { + doCompleteRequiredFlags(flag) + }) + finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { + doCompleteRequiredFlags(flag) + }) + + return completions +} + func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*pflag.Flag, []string, string, error) { + if finalCmd.DisableFlagParsing { + // We only do flag completion if we are allowed to parse flags + // This is important for commands which have requested to do their own flag completion. + return nil, args, lastArg, nil + } + var flagName string trimmedArgs := args flagWithEqual := false - if isFlagArg(lastArg) { + + // When doing completion of a flag name, as soon as an argument starts with + // a '-' we know it is a flag. We cannot use isFlagArg() here as that function + // requires the flag name to be complete + if len(lastArg) > 0 && lastArg[0] == '-' { if index := strings.Index(lastArg, "="); index >= 0 { + // Flag with an = flagName = strings.TrimLeft(lastArg[:index], "-") lastArg = lastArg[index+1:] flagWithEqual = true } else { - return nil, nil, "", errors.New("Unexpected completion request for flag") + // Normal flag completion + return nil, args, lastArg, nil } } diff --git a/vendor/github.com/spf13/cobra/fish_completions.go b/vendor/github.com/spf13/cobra/fish_completions.go index c83609c83..eaae9bca8 100644 --- a/vendor/github.com/spf13/cobra/fish_completions.go +++ b/vendor/github.com/spf13/cobra/fish_completions.go @@ -5,9 +5,15 @@ import ( "fmt" "io" "os" + "strings" ) func genFishComp(buf *bytes.Buffer, name string, includeDesc bool) { + // Variables should not contain a '-' or ':' character + nameForVar := name + nameForVar = strings.Replace(nameForVar, "-", "_", -1) + nameForVar = strings.Replace(nameForVar, ":", "_", -1) + compCmd := ShellCompRequestCmd if !includeDesc { compCmd = ShellCompNoDescRequestCmd @@ -37,7 +43,13 @@ function __%[1]s_perform_completion end __%[1]s_debug "emptyArg: $emptyArg" - set requestComp "$args[1] %[2]s $args[2..-1] $emptyArg" + if not type -q "$args[1]" + # This can happen when "complete --do-complete %[2]s" is called when running this script. + __%[1]s_debug "Cannot find $args[1]. No completions." + return + end + + set requestComp "$args[1] %[3]s $args[2..-1] $emptyArg" __%[1]s_debug "Calling $requestComp" set results (eval $requestComp 2> /dev/null) @@ -71,7 +83,8 @@ function __%[1]s_prepare_completions # Check if the command-line is already provided. This is useful for testing. if not set --query __%[1]s_comp_commandLine - set __%[1]s_comp_commandLine (commandline) + # Use the -c flag to allow for completion in the middle of the line + set __%[1]s_comp_commandLine (commandline -c) end __%[1]s_debug "commandLine is: $__%[1]s_comp_commandLine" @@ -83,7 +96,7 @@ function __%[1]s_prepare_completions __%[1]s_debug "No completion, probably due to a failure" # Might as well do file completion, in case it helps set --global __%[1]s_comp_do_file_comp 1 - return 0 + return 1 end set directive (string sub --start 2 $results[-1]) @@ -92,20 +105,35 @@ function __%[1]s_prepare_completions __%[1]s_debug "Completions are: $__%[1]s_comp_results" __%[1]s_debug "Directive is: $directive" + set shellCompDirectiveError %[4]d + set shellCompDirectiveNoSpace %[5]d + set shellCompDirectiveNoFileComp %[6]d + set shellCompDirectiveFilterFileExt %[7]d + set shellCompDirectiveFilterDirs %[8]d + if test -z "$directive" set directive 0 end - set compErr (math (math --scale 0 $directive / %[3]d) %% 2) + set compErr (math (math --scale 0 $directive / $shellCompDirectiveError) %% 2) if test $compErr -eq 1 __%[1]s_debug "Received error directive: aborting." # Might as well do file completion, in case it helps set --global __%[1]s_comp_do_file_comp 1 - return 0 + return 1 end - set nospace (math (math --scale 0 $directive / %[4]d) %% 2) - set nofiles (math (math --scale 0 $directive / %[5]d) %% 2) + set filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) %% 2) + set dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) %% 2) + if test $filefilter -eq 1; or test $dirfilter -eq 1 + __%[1]s_debug "File extension filtering or directory filtering not supported" + # Do full file completion instead + set --global __%[1]s_comp_do_file_comp 1 + return 1 + end + + set nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) %% 2) + set nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) %% 2) __%[1]s_debug "nospace: $nospace, nofiles: $nofiles" @@ -132,24 +160,31 @@ function __%[1]s_prepare_completions return (not set --query __%[1]s_comp_do_file_comp) end -# Remove any pre-existing completions for the program since we will be handling all of them -# TODO this cleanup is not sufficient. Fish completions are only loaded once the user triggers -# them, so the below deletion will not work as it is run too early. What else can we do? -complete -c %[1]s -e +# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves +# so we can properly delete any completions provided by another script. +# The space after the the program name is essential to trigger completion for the program +# and not completion of the program name itself. +complete --do-complete "%[2]s " > /dev/null 2>&1 +# Using '> /dev/null 2>&1' since '&>' is not supported in older versions of fish. + +# Remove any pre-existing completions for the program since we will be handling all of them. +complete -c %[2]s -e # The order in which the below two lines are defined is very important so that __%[1]s_prepare_completions # is called first. It is __%[1]s_prepare_completions that sets up the __%[1]s_comp_do_file_comp variable. # # This completion will be run second as complete commands are added FILO. # It triggers file completion choices when __%[1]s_comp_do_file_comp is set. -complete -c %[1]s -n 'set --query __%[1]s_comp_do_file_comp' +complete -c %[2]s -n 'set --query __%[1]s_comp_do_file_comp' # This completion will be run first as complete commands are added FILO. -# The call to __%[1]s_prepare_completions will setup both __%[1]s_comp_results abd __%[1]s_comp_do_file_comp. +# The call to __%[1]s_prepare_completions will setup both __%[1]s_comp_results and __%[1]s_comp_do_file_comp. # It provides the program's completion choices. -complete -c %[1]s -n '__%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results' +complete -c %[2]s -n '__%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results' -`, name, compCmd, ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp)) +`, nameForVar, name, compCmd, + ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp, + ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs)) } // GenFishCompletion generates fish completion file and writes to the passed writer. diff --git a/vendor/github.com/spf13/cobra/fish_completions.md b/vendor/github.com/spf13/cobra/fish_completions.md index 6bfe5f88e..19b2ed129 100644 --- a/vendor/github.com/spf13/cobra/fish_completions.md +++ b/vendor/github.com/spf13/cobra/fish_completions.md @@ -1,7 +1,4 @@ -## Generating Fish Completions for your own cobra.Command +## Generating Fish Completions For Your cobra.Command -Cobra supports native Fish completions generated from the root `cobra.Command`. You can use the `command.GenFishCompletion()` or `command.GenFishCompletionFile()` functions. You must provide these functions with a parameter indicating if the completions should be annotated with a description; Cobra will provide the description automatically based on usage information. You can choose to make this option configurable by your users. +Please refer to [Shell Completions](shell_completions.md) for details. -### Limitations - -* Custom completions implemented using the `ValidArgsFunction` and `RegisterFlagCompletionFunc()` are supported automatically but the ones implemented in Bash scripting are not. diff --git a/vendor/github.com/spf13/cobra/go.mod b/vendor/github.com/spf13/cobra/go.mod index dea1030ba..57e3244d5 100644 --- a/vendor/github.com/spf13/cobra/go.mod +++ b/vendor/github.com/spf13/cobra/go.mod @@ -6,7 +6,7 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.0 github.com/inconshreveable/mousetrap v1.0.0 github.com/mitchellh/go-homedir v1.1.0 - github.com/spf13/pflag v1.0.3 - github.com/spf13/viper v1.4.0 - gopkg.in/yaml.v2 v2.2.2 + github.com/spf13/pflag v1.0.5 + github.com/spf13/viper v1.7.0 + gopkg.in/yaml.v2 v2.2.8 ) diff --git a/vendor/github.com/spf13/cobra/go.sum b/vendor/github.com/spf13/cobra/go.sum index 3aaa2ac0f..0aae73863 100644 --- a/vendor/github.com/spf13/cobra/go.sum +++ b/vendor/github.com/spf13/cobra/go.sum @@ -1,28 +1,48 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +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/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -32,19 +52,55 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -55,20 +111,34 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -79,11 +149,18 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= @@ -92,58 +169,145 @@ github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +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/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +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-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/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-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/vendor/github.com/spf13/cobra/powershell_completions.md b/vendor/github.com/spf13/cobra/powershell_completions.md index afed80240..55f154a68 100644 --- a/vendor/github.com/spf13/cobra/powershell_completions.md +++ b/vendor/github.com/spf13/cobra/powershell_completions.md @@ -2,6 +2,8 @@ Cobra can generate PowerShell completion scripts. Users need PowerShell version 5.0 or above, which comes with Windows 10 and can be downloaded separately for Windows 7 or 8.1. They can then write the completions to a file and source this file from their PowerShell profile, which is referenced by the `$Profile` environment variable. See `Get-Help about_Profiles` for more info about PowerShell profiles. +*Note*: PowerShell completions have not (yet?) been aligned to Cobra's generic shell completion support. This implies the PowerShell completions are not as rich as for other shells (see [What's not yet supported](#whats-not-yet-supported)), and may behave slightly differently. They are still very useful for PowerShell users. + # What's supported - Completion for subcommands using their `.Short` description diff --git a/vendor/github.com/spf13/cobra/projects_using_cobra.md b/vendor/github.com/spf13/cobra/projects_using_cobra.md new file mode 100644 index 000000000..31c272036 --- /dev/null +++ b/vendor/github.com/spf13/cobra/projects_using_cobra.md @@ -0,0 +1,35 @@ +## Projects using Cobra + +- [Arduino CLI](https://github.com/arduino/arduino-cli) +- [Bleve](http://www.blevesearch.com/) +- [CockroachDB](http://www.cockroachlabs.com/) +- [Cosmos SDK](https://github.com/cosmos/cosmos-sdk) +- [Delve](https://github.com/derekparker/delve) +- [Docker (distribution)](https://github.com/docker/distribution) +- [Etcd](https://etcd.io/) +- [Gardener](https://github.com/gardener/gardenctl) +- [Giant Swarm's gsctl](https://github.com/giantswarm/gsctl) +- [Git Bump](https://github.com/erdaltsksn/git-bump) +- [Github CLI](https://github.com/cli/cli) +- [GitHub Labeler](https://github.com/erdaltsksn/gh-label) +- [Golangci-lint](https://golangci-lint.run) +- [GopherJS](http://www.gopherjs.org/) +- [Helm](https://helm.sh) +- [Hugo](https://gohugo.io) +- [Istio](https://istio.io) +- [Kool](https://github.com/kool-dev/kool) +- [Kubernetes](http://kubernetes.io/) +- [Linkerd](https://linkerd.io/) +- [Mattermost-server](https://github.com/mattermost/mattermost-server) +- [Metal Stack CLI](https://github.com/metal-stack/metalctl) +- [Moby (former Docker)](https://github.com/moby/moby) +- [Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack) +- [OpenShift](https://www.openshift.com/) +- [Pouch](https://github.com/alibaba/pouch) +- [ProjectAtomic (enterprise)](http://www.projectatomic.io/) +- [Prototool](https://github.com/uber/prototool) +- [Random](https://github.com/erdaltsksn/random) +- [Rclone](https://rclone.org/) +- [Skaffold](https://skaffold.dev/) +- [Tendermint](https://github.com/tendermint/tendermint) +- [Werf](https://werf.io/) diff --git a/vendor/github.com/spf13/cobra/shell_completions.go b/vendor/github.com/spf13/cobra/shell_completions.go index ba0af9cb5..d99bf91e5 100644 --- a/vendor/github.com/spf13/cobra/shell_completions.go +++ b/vendor/github.com/spf13/cobra/shell_completions.go @@ -4,82 +4,81 @@ import ( "github.com/spf13/pflag" ) -// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists, +// MarkFlagRequired instructs the various shell completion implementations to +// prioritize the named flag when performing completion, // and causes your command to report an error if invoked without the flag. func (c *Command) MarkFlagRequired(name string) error { return MarkFlagRequired(c.Flags(), name) } -// MarkPersistentFlagRequired adds the BashCompOneRequiredFlag annotation to the named persistent flag if it exists, +// MarkPersistentFlagRequired instructs the various shell completion implementations to +// prioritize the named persistent flag when performing completion, // and causes your command to report an error if invoked without the flag. func (c *Command) MarkPersistentFlagRequired(name string) error { return MarkFlagRequired(c.PersistentFlags(), name) } -// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists, +// MarkFlagRequired instructs the various shell completion implementations to +// prioritize the named flag when performing completion, // and causes your command to report an error if invoked without the flag. func MarkFlagRequired(flags *pflag.FlagSet, name string) error { return flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{"true"}) } -// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag, if it exists. -// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided. +// MarkFlagFilename instructs the various shell completion implementations to +// limit completions for the named flag to the specified file extensions. func (c *Command) MarkFlagFilename(name string, extensions ...string) error { return MarkFlagFilename(c.Flags(), name, extensions...) } // MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists. -// Generated bash autocompletion will call the bash function f for the flag. +// The bash completion script will call the bash function f for the flag. +// +// This will only work for bash completion. +// It is recommended to instead use c.RegisterFlagCompletionFunc(...) which allows +// to register a Go function which will work across all shells. func (c *Command) MarkFlagCustom(name string, f string) error { return MarkFlagCustom(c.Flags(), name, f) } // MarkPersistentFlagFilename instructs the various shell completion -// implementations to limit completions for this persistent flag to the -// specified extensions (patterns). -// -// Shell Completion compatibility matrix: bash, zsh +// implementations to limit completions for the named persistent flag to the +// specified file extensions. func (c *Command) MarkPersistentFlagFilename(name string, extensions ...string) error { return MarkFlagFilename(c.PersistentFlags(), name, extensions...) } // MarkFlagFilename instructs the various shell completion implementations to -// limit completions for this flag to the specified extensions (patterns). -// -// Shell Completion compatibility matrix: bash, zsh +// limit completions for the named flag to the specified file extensions. func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error { return flags.SetAnnotation(name, BashCompFilenameExt, extensions) } -// MarkFlagCustom instructs the various shell completion implementations to -// limit completions for this flag to the specified extensions (patterns). +// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists. +// The bash completion script will call the bash function f for the flag. // -// Shell Completion compatibility matrix: bash, zsh +// This will only work for bash completion. +// It is recommended to instead use c.RegisterFlagCompletionFunc(...) which allows +// to register a Go function which will work across all shells. func MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error { return flags.SetAnnotation(name, BashCompCustom, []string{f}) } // MarkFlagDirname instructs the various shell completion implementations to -// complete only directories with this named flag. -// -// Shell Completion compatibility matrix: zsh +// limit completions for the named flag to directory names. func (c *Command) MarkFlagDirname(name string) error { return MarkFlagDirname(c.Flags(), name) } // MarkPersistentFlagDirname instructs the various shell completion -// implementations to complete only directories with this persistent named flag. -// -// Shell Completion compatibility matrix: zsh +// implementations to limit completions for the named persistent flag to +// directory names. func (c *Command) MarkPersistentFlagDirname(name string) error { return MarkFlagDirname(c.PersistentFlags(), name) } // MarkFlagDirname instructs the various shell completion implementations to -// complete only directories with this specified flag. -// -// Shell Completion compatibility matrix: zsh +// limit completions for the named flag to directory names. func MarkFlagDirname(flags *pflag.FlagSet, name string) error { - zshPattern := "-(/)" - return flags.SetAnnotation(name, zshCompDirname, []string{zshPattern}) + return flags.SetAnnotation(name, BashCompSubdirsInDir, []string{}) } diff --git a/vendor/github.com/spf13/cobra/shell_completions.md b/vendor/github.com/spf13/cobra/shell_completions.md new file mode 100644 index 000000000..d8416ab1d --- /dev/null +++ b/vendor/github.com/spf13/cobra/shell_completions.md @@ -0,0 +1,434 @@ +# Generating shell completions + +Cobra can generate shell completions for multiple shells. +The currently supported shells are: +- Bash +- Zsh +- Fish +- PowerShell + +If you are using the generator you can create a completion command by running + +```bash +cobra add completion +``` +and then modifying the generated `cmd/completion.go` file to look something like this +(writing the shell script to stdout allows the most flexible use): + +```go +var completionCmd = &cobra.Command{ + Use: "completion [bash|zsh|fish|powershell]", + Short: "Generate completion script", + Long: `To load completions: + +Bash: + +$ source <(yourprogram completion bash) + +# To load completions for each session, execute once: +Linux: + $ yourprogram completion bash > /etc/bash_completion.d/yourprogram +MacOS: + $ yourprogram completion bash > /usr/local/etc/bash_completion.d/yourprogram + +Zsh: + +# If shell completion is not already enabled in your environment you will need +# to enable it. You can execute the following once: + +$ echo "autoload -U compinit; compinit" >> ~/.zshrc + +# To load completions for each session, execute once: +$ yourprogram completion zsh > "${fpath[1]}/_yourprogram" + +# You will need to start a new shell for this setup to take effect. + +Fish: + +$ yourprogram completion fish | source + +# To load completions for each session, execute once: +$ yourprogram completion fish > ~/.config/fish/completions/yourprogram.fish +`, + DisableFlagsInUseLine: true, + ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, + Args: cobra.ExactValidArgs(1), + Run: func(cmd *cobra.Command, args []string) { + switch args[0] { + case "bash": + cmd.Root().GenBashCompletion(os.Stdout) + case "zsh": + cmd.Root().GenZshCompletion(os.Stdout) + case "fish": + cmd.Root().GenFishCompletion(os.Stdout, true) + case "powershell": + cmd.Root().GenPowerShellCompletion(os.Stdout) + } + }, +} +``` + +**Note:** The cobra generator may include messages printed to stdout for example if the config file is loaded, this will break the auto complete script so must be removed. + +# Customizing completions + +The generated completion scripts will automatically handle completing commands and flags. However, you can make your completions much more powerful by providing information to complete your program's nouns and flag values. + +## Completion of nouns + +### Static completion of nouns + +Cobra allows you to provide a pre-defined list of completion choices for your nouns using the `ValidArgs` field. +For example, if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them. +Some simplified code from `kubectl get` looks like: + +```go +validArgs []string = { "pod", "node", "service", "replicationcontroller" } + +cmd := &cobra.Command{ + Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)", + Short: "Display one or many resources", + Long: get_long, + Example: get_example, + Run: func(cmd *cobra.Command, args []string) { + err := RunGet(f, out, cmd, args) + util.CheckErr(err) + }, + ValidArgs: validArgs, +} +``` + +Notice we put the `ValidArgs` field on the `get` sub-command. Doing so will give results like: + +```bash +$ kubectl get [tab][tab] +node pod replicationcontroller service +``` + +#### Aliases for nouns + +If your nouns have aliases, you can define them alongside `ValidArgs` using `ArgAliases`: + +```go +argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" } + +cmd := &cobra.Command{ + ... + ValidArgs: validArgs, + ArgAliases: argAliases +} +``` + +The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by +the completion algorithm if entered manually, e.g. in: + +```bash +$ kubectl get rc [tab][tab] +backend frontend database +``` + +Note that without declaring `rc` as an alias, the completion algorithm would not know to show the list of +replication controllers following `rc`. + +### Dynamic completion of nouns + +In some cases it is not possible to provide a list of completions in advance. Instead, the list of completions must be determined at execution-time. In a similar fashion as for static completions, you can use the `ValidArgsFunction` field to provide a Go function that Cobra will execute when it needs the list of completion choices for the nouns of a command. Note that either `ValidArgs` or `ValidArgsFunction` can be used for a single cobra command, but not both. +Simplified code from `helm status` looks like: + +```go +cmd := &cobra.Command{ + Use: "status RELEASE_NAME", + Short: "Display the status of the named release", + Long: status_long, + RunE: func(cmd *cobra.Command, args []string) { + RunGet(args[0]) + }, + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + if len(args) != 0 { + return nil, cobra.ShellCompDirectiveNoFileComp + } + return getReleasesFromCluster(toComplete), cobra.ShellCompDirectiveNoFileComp + }, +} +``` +Where `getReleasesFromCluster()` is a Go function that obtains the list of current Helm releases running on the Kubernetes cluster. +Notice we put the `ValidArgsFunction` on the `status` sub-command. Let's assume the Helm releases on the cluster are: `harbor`, `notary`, `rook` and `thanos` then this dynamic completion will give results like: + +```bash +$ helm status [tab][tab] +harbor notary rook thanos +``` +You may have noticed the use of `cobra.ShellCompDirective`. These directives are bit fields allowing to control some shell completion behaviors for your particular completion. You can combine them with the bit-or operator such as `cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp` +```go +// Indicates that the shell will perform its default behavior after completions +// have been provided (this implies none of the other directives). +ShellCompDirectiveDefault + +// Indicates an error occurred and completions should be ignored. +ShellCompDirectiveError + +// Indicates that the shell should not add a space after the completion, +// even if there is a single completion provided. +ShellCompDirectiveNoSpace + +// Indicates that the shell should not provide file completion even when +// no completion is provided. +ShellCompDirectiveNoFileComp + +// Indicates that the returned completions should be used as file extension filters. +// For example, to complete only files of the form *.json or *.yaml: +// return []string{"yaml", "json"}, ShellCompDirectiveFilterFileExt +// For flags, using MarkFlagFilename() and MarkPersistentFlagFilename() +// is a shortcut to using this directive explicitly. +// +ShellCompDirectiveFilterFileExt + +// Indicates that only directory names should be provided in file completion. +// For example: +// return nil, ShellCompDirectiveFilterDirs +// For flags, using MarkFlagDirname() is a shortcut to using this directive explicitly. +// +// To request directory names within another directory, the returned completions +// should specify a single directory name within which to search. For example, +// to complete directories within "themes/": +// return []string{"themes"}, ShellCompDirectiveFilterDirs +// +ShellCompDirectiveFilterDirs +``` + +***Note***: When using the `ValidArgsFunction`, Cobra will call your registered function after having parsed all flags and arguments provided in the command-line. You therefore don't need to do this parsing yourself. For example, when a user calls `helm status --namespace my-rook-ns [tab][tab]`, Cobra will call your registered `ValidArgsFunction` after having parsed the `--namespace` flag, as it would have done when calling the `RunE` function. + +#### Debugging + +Cobra achieves dynamic completion through the use of a hidden command called by the completion script. To debug your Go completion code, you can call this hidden command directly: +```bash +$ helm __complete status har +harbor +:4 +Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr +``` +***Important:*** If the noun to complete is empty (when the user has not yet typed any letters of that noun), you must pass an empty parameter to the `__complete` command: +```bash +$ helm __complete status "" +harbor +notary +rook +thanos +:4 +Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr +``` +Calling the `__complete` command directly allows you to run the Go debugger to troubleshoot your code. You can also add printouts to your code; Cobra provides the following functions to use for printouts in Go completion code: +```go +// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE +// is set to a file path) and optionally prints to stderr. +cobra.CompDebug(msg string, printToStdErr bool) { +cobra.CompDebugln(msg string, printToStdErr bool) + +// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE +// is set to a file path) and to stderr. +cobra.CompError(msg string) +cobra.CompErrorln(msg string) +``` +***Important:*** You should **not** leave traces that print directly to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned above. + +## Completions for flags + +### Mark flags as required + +Most of the time completions will only show sub-commands. But if a flag is required to make a sub-command work, you probably want it to show up when the user types [tab][tab]. You can mark a flag as 'Required' like so: + +```go +cmd.MarkFlagRequired("pod") +cmd.MarkFlagRequired("container") +``` + +and you'll get something like + +```bash +$ kubectl exec [tab][tab] +-c --container= -p --pod= +``` + +### Specify dynamic flag completion + +As for nouns, Cobra provides a way of defining dynamic completion of flags. To provide a Go function that Cobra will execute when it needs the list of completion choices for a flag, you must register the function using the `command.RegisterFlagCompletionFunc()` function. + +```go +flagName := "output" +cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return []string{"json", "table", "yaml"}, cobra.ShellCompDirectiveDefault +}) +``` +Notice that calling `RegisterFlagCompletionFunc()` is done through the `command` with which the flag is associated. In our example this dynamic completion will give results like so: + +```bash +$ helm status --output [tab][tab] +json table yaml +``` + +#### Debugging + +You can also easily debug your Go completion code for flags: +```bash +$ helm __complete status --output "" +json +table +yaml +:4 +Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr +``` +***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned further above. + +### Specify valid filename extensions for flags that take a filename + +To limit completions of flag values to file names with certain extensions you can either use the different `MarkFlagFilename()` functions or a combination of `RegisterFlagCompletionFunc()` and `ShellCompDirectiveFilterFileExt`, like so: +```go +flagName := "output" +cmd.MarkFlagFilename(flagName, "yaml", "json") +``` +or +```go +flagName := "output" +cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return []string{"yaml", "json"}, ShellCompDirectiveFilterFileExt}) +``` + +### Limit flag completions to directory names + +To limit completions of flag values to directory names you can either use the `MarkFlagDirname()` functions or a combination of `RegisterFlagCompletionFunc()` and `ShellCompDirectiveFilterDirs`, like so: +```go +flagName := "output" +cmd.MarkFlagDirname(flagName) +``` +or +```go +flagName := "output" +cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return nil, cobra.ShellCompDirectiveFilterDirs +}) +``` +To limit completions of flag values to directory names *within another directory* you can use a combination of `RegisterFlagCompletionFunc()` and `ShellCompDirectiveFilterDirs` like so: +```go +flagName := "output" +cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return []string{"themes"}, cobra.ShellCompDirectiveFilterDirs +}) +``` +### Descriptions for completions + +Both `zsh` and `fish` allow for descriptions to annotate completion choices. For commands and flags, Cobra will provide the descriptions automatically, based on usage information. For example, using zsh: +``` +$ helm s[tab] +search -- search for a keyword in charts +show -- show information of a chart +status -- displays the status of the named release +``` +while using fish: +``` +$ helm s[tab] +search (search for a keyword in charts) show (show information of a chart) status (displays the status of the named release) +``` + +Cobra allows you to add annotations to your own completions. Simply add the annotation text after each completion, following a `\t` separator. This technique applies to completions returned by `ValidArgs`, `ValidArgsFunction` and `RegisterFlagCompletionFunc()`. For example: +```go +ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return []string{"harbor\tAn image registry", "thanos\tLong-term metrics"}, cobra.ShellCompDirectiveNoFileComp +}} +``` +or +```go +ValidArgs: []string{"bash\tCompletions for bash", "zsh\tCompletions for zsh"} +``` +## Bash completions + +### Dependencies + +The bash completion script generated by Cobra requires the `bash_completion` package. You should update the help text of your completion command to show how to install the `bash_completion` package ([Kubectl docs](https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion)) + +### Aliases + +You can also configure `bash` aliases for your program and they will also support completions. + +```bash +alias aliasname=origcommand +complete -o default -F __start_origcommand aliasname + +# and now when you run `aliasname` completion will make +# suggestions as it did for `origcommand`. + +$ aliasname +completion firstcommand secondcommand +``` +### Bash legacy dynamic completions + +For backwards-compatibility, Cobra still supports its bash legacy dynamic completion solution. +Please refer to [Bash Completions](bash_completions.md) for details. + +## Zsh completions + +Cobra supports native Zsh completion generated from the root `cobra.Command`. +The generated completion script should be put somewhere in your `$fpath` and be named +`_`. You will need to start a new shell for the completions to become available. + +Zsh supports descriptions for completions. Cobra will provide the description automatically, +based on usage information. Cobra provides a way to completely disable such descriptions by +using `GenZshCompletionNoDesc()` or `GenZshCompletionFileNoDesc()`. You can choose to make +this a configurable option to your users. +``` +# With descriptions +$ helm s[tab] +search -- search for a keyword in charts +show -- show information of a chart +status -- displays the status of the named release + +# Without descriptions +$ helm s[tab] +search show status +``` +*Note*: Because of backwards-compatibility requirements, we were forced to have a different API to disable completion descriptions between `Zsh` and `Fish`. + +### Limitations + +* Custom completions implemented in Bash scripting (legacy) are not supported and will be ignored for `zsh` (including the use of the `BashCompCustom` flag annotation). + * You should instead use `ValidArgsFunction` and `RegisterFlagCompletionFunc()` which are portable to the different shells (`bash`, `zsh`, `fish`). +* The function `MarkFlagCustom()` is not supported and will be ignored for `zsh`. + * You should instead use `RegisterFlagCompletionFunc()`. + +### Zsh completions standardization + +Cobra 1.1 standardized its zsh completion support to align it with its other shell completions. Although the API was kept backwards-compatible, some small changes in behavior were introduced. +Please refer to [Zsh Completions](zsh_completions.md) for details. + +## Fish completions + +Cobra supports native Fish completions generated from the root `cobra.Command`. You can use the `command.GenFishCompletion()` or `command.GenFishCompletionFile()` functions. You must provide these functions with a parameter indicating if the completions should be annotated with a description; Cobra will provide the description automatically based on usage information. You can choose to make this option configurable by your users. +``` +# With descriptions +$ helm s[tab] +search (search for a keyword in charts) show (show information of a chart) status (displays the status of the named release) + +# Without descriptions +$ helm s[tab] +search show status +``` +*Note*: Because of backwards-compatibility requirements, we were forced to have a different API to disable completion descriptions between `Zsh` and `Fish`. + +### Limitations + +* Custom completions implemented in Bash scripting (legacy) are not supported and will be ignored for `fish` (including the use of the `BashCompCustom` flag annotation). + * You should instead use `ValidArgsFunction` and `RegisterFlagCompletionFunc()` which are portable to the different shells (`bash`, `zsh`, `fish`). +* The function `MarkFlagCustom()` is not supported and will be ignored for `fish`. + * You should instead use `RegisterFlagCompletionFunc()`. +* The following flag completion annotations are not supported and will be ignored for `fish`: + * `BashCompFilenameExt` (filtering by file extension) + * `BashCompSubdirsInDir` (filtering by directory) +* The functions corresponding to the above annotations are consequently not supported and will be ignored for `fish`: + * `MarkFlagFilename()` and `MarkPersistentFlagFilename()` (filtering by file extension) + * `MarkFlagDirname()` and `MarkPersistentFlagDirname()` (filtering by directory) +* Similarly, the following completion directives are not supported and will be ignored for `fish`: + * `ShellCompDirectiveFilterFileExt` (filtering by file extension) + * `ShellCompDirectiveFilterDirs` (filtering by directory) + +## PowerShell completions + +Please refer to [PowerShell Completions](powershell_completions.md) for details. diff --git a/vendor/github.com/spf13/cobra/zsh_completions.go b/vendor/github.com/spf13/cobra/zsh_completions.go index 12755482f..92a70394a 100644 --- a/vendor/github.com/spf13/cobra/zsh_completions.go +++ b/vendor/github.com/spf13/cobra/zsh_completions.go @@ -1,336 +1,240 @@ package cobra import ( - "encoding/json" + "bytes" "fmt" "io" "os" - "sort" - "strings" - "text/template" - - "github.com/spf13/pflag" -) - -const ( - zshCompArgumentAnnotation = "cobra_annotations_zsh_completion_argument_annotation" - zshCompArgumentFilenameComp = "cobra_annotations_zsh_completion_argument_file_completion" - zshCompArgumentWordComp = "cobra_annotations_zsh_completion_argument_word_completion" - zshCompDirname = "cobra_annotations_zsh_dirname" ) -var ( - zshCompFuncMap = template.FuncMap{ - "genZshFuncName": zshCompGenFuncName, - "extractFlags": zshCompExtractFlag, - "genFlagEntryForZshArguments": zshCompGenFlagEntryForArguments, - "extractArgsCompletions": zshCompExtractArgumentCompletionHintsForRendering, - } - zshCompletionText = ` -{{/* should accept Command (that contains subcommands) as parameter */}} -{{define "argumentsC" -}} -{{ $cmdPath := genZshFuncName .}} -function {{$cmdPath}} { - local -a commands - - _arguments -C \{{- range extractFlags .}} - {{genFlagEntryForZshArguments .}} \{{- end}} - "1: :->cmnds" \ - "*::arg:->args" - - case $state in - cmnds) - commands=({{range .Commands}}{{if not .Hidden}} - "{{.Name}}:{{.Short}}"{{end}}{{end}} - ) - _describe "command" commands - ;; - esac - - case "$words[1]" in {{- range .Commands}}{{if not .Hidden}} - {{.Name}}) - {{$cmdPath}}_{{.Name}} - ;;{{end}}{{end}} - esac -} -{{range .Commands}}{{if not .Hidden}} -{{template "selectCmdTemplate" .}} -{{- end}}{{end}} -{{- end}} - -{{/* should accept Command without subcommands as parameter */}} -{{define "arguments" -}} -function {{genZshFuncName .}} { -{{" _arguments"}}{{range extractFlags .}} \ - {{genFlagEntryForZshArguments . -}} -{{end}}{{range extractArgsCompletions .}} \ - {{.}}{{end}} -} -{{end}} - -{{/* dispatcher for commands with or without subcommands */}} -{{define "selectCmdTemplate" -}} -{{if .Hidden}}{{/* ignore hidden*/}}{{else -}} -{{if .Commands}}{{template "argumentsC" .}}{{else}}{{template "arguments" .}}{{end}} -{{- end}} -{{- end}} - -{{/* template entry point */}} -{{define "Main" -}} -#compdef _{{.Name}} {{.Name}} - -{{template "selectCmdTemplate" .}} -{{end}} -` -) - -// zshCompArgsAnnotation is used to encode/decode zsh completion for -// arguments to/from Command.Annotations. -type zshCompArgsAnnotation map[int]zshCompArgHint - -type zshCompArgHint struct { - // Indicates the type of the completion to use. One of: - // zshCompArgumentFilenameComp or zshCompArgumentWordComp - Tipe string `json:"type"` - - // A value for the type above (globs for file completion or words) - Options []string `json:"options"` -} - -// GenZshCompletionFile generates zsh completion file. +// GenZshCompletionFile generates zsh completion file including descriptions. func (c *Command) GenZshCompletionFile(filename string) error { - outFile, err := os.Create(filename) - if err != nil { - return err - } - defer outFile.Close() - - return c.GenZshCompletion(outFile) + return c.genZshCompletionFile(filename, true) } -// GenZshCompletion generates a zsh completion file and writes to the passed -// writer. The completion always run on the root command regardless of the -// command it was called from. +// GenZshCompletion generates zsh completion file including descriptions +// and writes it to the passed writer. func (c *Command) GenZshCompletion(w io.Writer) error { - tmpl, err := template.New("Main").Funcs(zshCompFuncMap).Parse(zshCompletionText) - if err != nil { - return fmt.Errorf("error creating zsh completion template: %v", err) - } - return tmpl.Execute(w, c.Root()) -} - -// MarkZshCompPositionalArgumentFile marks the specified argument (first -// argument is 1) as completed by file selection. patterns (e.g. "*.txt") are -// optional - if not provided the completion will search for all files. -func (c *Command) MarkZshCompPositionalArgumentFile(argPosition int, patterns ...string) error { - if argPosition < 1 { - return fmt.Errorf("Invalid argument position (%d)", argPosition) - } - annotation, err := c.zshCompGetArgsAnnotations() - if err != nil { - return err - } - if c.zshcompArgsAnnotationnIsDuplicatePosition(annotation, argPosition) { - return fmt.Errorf("Duplicate annotation for positional argument at index %d", argPosition) - } - annotation[argPosition] = zshCompArgHint{ - Tipe: zshCompArgumentFilenameComp, - Options: patterns, - } - return c.zshCompSetArgsAnnotations(annotation) -} - -// MarkZshCompPositionalArgumentWords marks the specified positional argument -// (first argument is 1) as completed by the provided words. At east one word -// must be provided, spaces within words will be offered completion with -// "word\ word". -func (c *Command) MarkZshCompPositionalArgumentWords(argPosition int, words ...string) error { - if argPosition < 1 { - return fmt.Errorf("Invalid argument position (%d)", argPosition) - } - if len(words) == 0 { - return fmt.Errorf("Trying to set empty word list for positional argument %d", argPosition) - } - annotation, err := c.zshCompGetArgsAnnotations() - if err != nil { - return err - } - if c.zshcompArgsAnnotationnIsDuplicatePosition(annotation, argPosition) { - return fmt.Errorf("Duplicate annotation for positional argument at index %d", argPosition) - } - annotation[argPosition] = zshCompArgHint{ - Tipe: zshCompArgumentWordComp, - Options: words, - } - return c.zshCompSetArgsAnnotations(annotation) -} - -func zshCompExtractArgumentCompletionHintsForRendering(c *Command) ([]string, error) { - var result []string - annotation, err := c.zshCompGetArgsAnnotations() - if err != nil { - return nil, err - } - for k, v := range annotation { - s, err := zshCompRenderZshCompArgHint(k, v) - if err != nil { - return nil, err - } - result = append(result, s) - } - if len(c.ValidArgs) > 0 { - if _, positionOneExists := annotation[1]; !positionOneExists { - s, err := zshCompRenderZshCompArgHint(1, zshCompArgHint{ - Tipe: zshCompArgumentWordComp, - Options: c.ValidArgs, - }) - if err != nil { - return nil, err - } - result = append(result, s) - } - } - sort.Strings(result) - return result, nil + return c.genZshCompletion(w, true) } -func zshCompRenderZshCompArgHint(i int, z zshCompArgHint) (string, error) { - switch t := z.Tipe; t { - case zshCompArgumentFilenameComp: - var globs []string - for _, g := range z.Options { - globs = append(globs, fmt.Sprintf(`-g "%s"`, g)) - } - return fmt.Sprintf(`'%d: :_files %s'`, i, strings.Join(globs, " ")), nil - case zshCompArgumentWordComp: - var words []string - for _, w := range z.Options { - words = append(words, fmt.Sprintf("%q", w)) - } - return fmt.Sprintf(`'%d: :(%s)'`, i, strings.Join(words, " ")), nil - default: - return "", fmt.Errorf("Invalid zsh argument completion annotation: %s", t) - } +// GenZshCompletionFileNoDesc generates zsh completion file without descriptions. +func (c *Command) GenZshCompletionFileNoDesc(filename string) error { + return c.genZshCompletionFile(filename, false) } -func (c *Command) zshcompArgsAnnotationnIsDuplicatePosition(annotation zshCompArgsAnnotation, position int) bool { - _, dup := annotation[position] - return dup +// GenZshCompletionNoDesc generates zsh completion file without descriptions +// and writes it to the passed writer. +func (c *Command) GenZshCompletionNoDesc(w io.Writer) error { + return c.genZshCompletion(w, false) } -func (c *Command) zshCompGetArgsAnnotations() (zshCompArgsAnnotation, error) { - annotation := make(zshCompArgsAnnotation) - annotationString, ok := c.Annotations[zshCompArgumentAnnotation] - if !ok { - return annotation, nil - } - err := json.Unmarshal([]byte(annotationString), &annotation) - if err != nil { - return annotation, fmt.Errorf("Error unmarshaling zsh argument annotation: %v", err) - } - return annotation, nil -} - -func (c *Command) zshCompSetArgsAnnotations(annotation zshCompArgsAnnotation) error { - jsn, err := json.Marshal(annotation) - if err != nil { - return fmt.Errorf("Error marshaling zsh argument annotation: %v", err) - } - if c.Annotations == nil { - c.Annotations = make(map[string]string) - } - c.Annotations[zshCompArgumentAnnotation] = string(jsn) +// MarkZshCompPositionalArgumentFile only worked for zsh and its behavior was +// not consistent with Bash completion. It has therefore been disabled. +// Instead, when no other completion is specified, file completion is done by +// default for every argument. One can disable file completion on a per-argument +// basis by using ValidArgsFunction and ShellCompDirectiveNoFileComp. +// To achieve file extension filtering, one can use ValidArgsFunction and +// ShellCompDirectiveFilterFileExt. +// +// Deprecated +func (c *Command) MarkZshCompPositionalArgumentFile(argPosition int, patterns ...string) error { return nil } -func zshCompGenFuncName(c *Command) string { - if c.HasParent() { - return zshCompGenFuncName(c.Parent()) + "_" + c.Name() - } - return "_" + c.Name() -} - -func zshCompExtractFlag(c *Command) []*pflag.Flag { - var flags []*pflag.Flag - c.LocalFlags().VisitAll(func(f *pflag.Flag) { - if !f.Hidden { - flags = append(flags, f) - } - }) - c.InheritedFlags().VisitAll(func(f *pflag.Flag) { - if !f.Hidden { - flags = append(flags, f) - } - }) - return flags -} - -// zshCompGenFlagEntryForArguments returns an entry that matches _arguments -// zsh-completion parameters. It's too complicated to generate in a template. -func zshCompGenFlagEntryForArguments(f *pflag.Flag) string { - if f.Name == "" || f.Shorthand == "" { - return zshCompGenFlagEntryForSingleOptionFlag(f) - } - return zshCompGenFlagEntryForMultiOptionFlag(f) -} - -func zshCompGenFlagEntryForSingleOptionFlag(f *pflag.Flag) string { - var option, multiMark, extras string - - if zshCompFlagCouldBeSpecifiedMoreThenOnce(f) { - multiMark = "*" - } - - option = "--" + f.Name - if option == "--" { - option = "-" + f.Shorthand - } - extras = zshCompGenFlagEntryExtras(f) - - return fmt.Sprintf(`'%s%s[%s]%s'`, multiMark, option, zshCompQuoteFlagDescription(f.Usage), extras) -} - -func zshCompGenFlagEntryForMultiOptionFlag(f *pflag.Flag) string { - var options, parenMultiMark, curlyMultiMark, extras string - - if zshCompFlagCouldBeSpecifiedMoreThenOnce(f) { - parenMultiMark = "*" - curlyMultiMark = "\\*" - } - - options = fmt.Sprintf(`'(%s-%s %s--%s)'{%s-%s,%s--%s}`, - parenMultiMark, f.Shorthand, parenMultiMark, f.Name, curlyMultiMark, f.Shorthand, curlyMultiMark, f.Name) - extras = zshCompGenFlagEntryExtras(f) - - return fmt.Sprintf(`%s'[%s]%s'`, options, zshCompQuoteFlagDescription(f.Usage), extras) +// MarkZshCompPositionalArgumentWords only worked for zsh. It has therefore +// been disabled. +// To achieve the same behavior across all shells, one can use +// ValidArgs (for the first argument only) or ValidArgsFunction for +// any argument (can include the first one also). +// +// Deprecated +func (c *Command) MarkZshCompPositionalArgumentWords(argPosition int, words ...string) error { + return nil } -func zshCompGenFlagEntryExtras(f *pflag.Flag) string { - if f.NoOptDefVal != "" { - return "" - } - - extras := ":" // allow options for flag (even without assistance) - for key, values := range f.Annotations { - switch key { - case zshCompDirname: - extras = fmt.Sprintf(":filename:_files -g %q", values[0]) - case BashCompFilenameExt: - extras = ":filename:_files" - for _, pattern := range values { - extras = extras + fmt.Sprintf(` -g "%s"`, pattern) - } - } +func (c *Command) genZshCompletionFile(filename string, includeDesc bool) error { + outFile, err := os.Create(filename) + if err != nil { + return err } + defer outFile.Close() - return extras -} - -func zshCompFlagCouldBeSpecifiedMoreThenOnce(f *pflag.Flag) bool { - return strings.Contains(f.Value.Type(), "Slice") || - strings.Contains(f.Value.Type(), "Array") -} - -func zshCompQuoteFlagDescription(s string) string { - return strings.Replace(s, "'", `'\''`, -1) + return c.genZshCompletion(outFile, includeDesc) +} + +func (c *Command) genZshCompletion(w io.Writer, includeDesc bool) error { + buf := new(bytes.Buffer) + genZshComp(buf, c.Name(), includeDesc) + _, err := buf.WriteTo(w) + return err +} + +func genZshComp(buf *bytes.Buffer, name string, includeDesc bool) { + compCmd := ShellCompRequestCmd + if !includeDesc { + compCmd = ShellCompNoDescRequestCmd + } + buf.WriteString(fmt.Sprintf(`#compdef _%[1]s %[1]s + +# zsh completion for %-36[1]s -*- shell-script -*- + +__%[1]s_debug() +{ + local file="$BASH_COMP_DEBUG_FILE" + if [[ -n ${file} ]]; then + echo "$*" >> "${file}" + fi +} + +_%[1]s() +{ + local shellCompDirectiveError=%[3]d + local shellCompDirectiveNoSpace=%[4]d + local shellCompDirectiveNoFileComp=%[5]d + local shellCompDirectiveFilterFileExt=%[6]d + local shellCompDirectiveFilterDirs=%[7]d + + local lastParam lastChar flagPrefix requestComp out directive compCount comp lastComp + local -a completions + + __%[1]s_debug "\n========= starting completion logic ==========" + __%[1]s_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}" + + # The user could have moved the cursor backwards on the command-line. + # We need to trigger completion from the $CURRENT location, so we need + # to truncate the command-line ($words) up to the $CURRENT location. + # (We cannot use $CURSOR as its value does not work when a command is an alias.) + words=("${=words[1,CURRENT]}") + __%[1]s_debug "Truncated words[*]: ${words[*]}," + + lastParam=${words[-1]} + lastChar=${lastParam[-1]} + __%[1]s_debug "lastParam: ${lastParam}, lastChar: ${lastChar}" + + # For zsh, when completing a flag with an = (e.g., %[1]s -n=) + # completions must be prefixed with the flag + setopt local_options BASH_REMATCH + if [[ "${lastParam}" =~ '-.*=' ]]; then + # We are dealing with a flag with an = + flagPrefix="-P ${BASH_REMATCH}" + fi + + # Prepare the command to obtain completions + requestComp="${words[1]} %[2]s ${words[2,-1]}" + if [ "${lastChar}" = "" ]; then + # If the last parameter is complete (there is a space following it) + # We add an extra empty parameter so we can indicate this to the go completion code. + __%[1]s_debug "Adding extra empty parameter" + requestComp="${requestComp} \"\"" + fi + + __%[1]s_debug "About to call: eval ${requestComp}" + + # Use eval to handle any environment variables and such + out=$(eval ${requestComp} 2>/dev/null) + __%[1]s_debug "completion output: ${out}" + + # Extract the directive integer following a : from the last line + local lastLine + while IFS='\n' read -r line; do + lastLine=${line} + done < <(printf "%%s\n" "${out[@]}") + __%[1]s_debug "last line: ${lastLine}" + + if [ "${lastLine[1]}" = : ]; then + directive=${lastLine[2,-1]} + # Remove the directive including the : and the newline + local suffix + (( suffix=${#lastLine}+2)) + out=${out[1,-$suffix]} + else + # There is no directive specified. Leave $out as is. + __%[1]s_debug "No directive found. Setting do default" + directive=0 + fi + + __%[1]s_debug "directive: ${directive}" + __%[1]s_debug "completions: ${out}" + __%[1]s_debug "flagPrefix: ${flagPrefix}" + + if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then + __%[1]s_debug "Completion received error. Ignoring completions." + return + fi + + compCount=0 + while IFS='\n' read -r comp; do + if [ -n "$comp" ]; then + # If requested, completions are returned with a description. + # The description is preceded by a TAB character. + # For zsh's _describe, we need to use a : instead of a TAB. + # We first need to escape any : as part of the completion itself. + comp=${comp//:/\\:} + + local tab=$(printf '\t') + comp=${comp//$tab/:} + + ((compCount++)) + __%[1]s_debug "Adding completion: ${comp}" + completions+=${comp} + lastComp=$comp + fi + done < <(printf "%%s\n" "${out[@]}") + + if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then + # File extension filtering + local filteringCmd + filteringCmd='_files' + for filter in ${completions[@]}; do + if [ ${filter[1]} != '*' ]; then + # zsh requires a glob pattern to do file filtering + filter="\*.$filter" + fi + filteringCmd+=" -g $filter" + done + filteringCmd+=" ${flagPrefix}" + + __%[1]s_debug "File filtering command: $filteringCmd" + _arguments '*:filename:'"$filteringCmd" + elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then + # File completion for directories only + local subDir + subdir="${completions[1]}" + if [ -n "$subdir" ]; then + __%[1]s_debug "Listing directories in $subdir" + pushd "${subdir}" >/dev/null 2>&1 + else + __%[1]s_debug "Listing directories in ." + fi + + _arguments '*:dirname:_files -/'" ${flagPrefix}" + if [ -n "$subdir" ]; then + popd >/dev/null 2>&1 + fi + elif [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ] && [ ${compCount} -eq 1 ]; then + __%[1]s_debug "Activating nospace." + # We can use compadd here as there is no description when + # there is only one completion. + compadd -S '' "${lastComp}" + elif [ ${compCount} -eq 0 ]; then + if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then + __%[1]s_debug "deactivating file completion" + else + # Perform file completion + __%[1]s_debug "activating file completion" + _arguments '*:filename:_files'" ${flagPrefix}" + fi + else + _describe "completions" completions $(echo $flagPrefix) + fi +} + +# don't run the completion function when being source-ed or eval-ed +if [ "$funcstack[1]" = "_%[1]s" ]; then + _%[1]s +fi +`, name, compCmd, + ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp, + ShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs)) } diff --git a/vendor/github.com/spf13/cobra/zsh_completions.md b/vendor/github.com/spf13/cobra/zsh_completions.md index df9c2eac9..7cff61787 100644 --- a/vendor/github.com/spf13/cobra/zsh_completions.md +++ b/vendor/github.com/spf13/cobra/zsh_completions.md @@ -1,39 +1,48 @@ -## Generating Zsh Completion for your cobra.Command - -Cobra supports native Zsh completion generated from the root `cobra.Command`. -The generated completion script should be put somewhere in your `$fpath` named -`_`. - -### What's Supported - -* Completion for all non-hidden subcommands using their `.Short` description. -* Completion for all non-hidden flags using the following rules: - * Filename completion works by marking the flag with `cmd.MarkFlagFilename...` - family of commands. - * The requirement for argument to the flag is decided by the `.NoOptDefVal` - flag value - if it's empty then completion will expect an argument. - * Flags of one of the various `*Array` and `*Slice` types supports multiple - specifications (with or without argument depending on the specific type). -* Completion of positional arguments using the following rules: - * Argument position for all options below starts at `1`. If argument position - `0` is requested it will raise an error. - * Use `command.MarkZshCompPositionalArgumentFile` to complete filenames. Glob - patterns (e.g. `"*.log"`) are optional - if not specified it will offer to - complete all file types. - * Use `command.MarkZshCompPositionalArgumentWords` to offer specific words for - completion. At least one word is required. - * It's possible to specify completion for some arguments and leave some - unspecified (e.g. offer words for second argument but nothing for first - argument). This will cause no completion for first argument but words - completion for second argument. - * If no argument completion was specified for 1st argument (but optionally was - specified for 2nd) and the command has `ValidArgs` it will be used as - completion options for 1st argument. - * Argument completions only offered for commands with no subcommands. - -### What's not yet Supported - -* Custom completion scripts are not supported yet (We should probably create zsh - specific one, doesn't make sense to re-use the bash one as the functions will - be different). -* Whatever other feature you're looking for and doesn't exist :) +## Generating Zsh Completion For Your cobra.Command + +Please refer to [Shell Completions](shell_completions.md) for details. + +## Zsh completions standardization + +Cobra 1.1 standardized its zsh completion support to align it with its other shell completions. Although the API was kept backwards-compatible, some small changes in behavior were introduced. + +### Deprecation summary + +See further below for more details on these deprecations. + +* `cmd.MarkZshCompPositionalArgumentFile(pos, []string{})` is no longer needed. It is therefore **deprecated** and silently ignored. +* `cmd.MarkZshCompPositionalArgumentFile(pos, glob[])` is **deprecated** and silently ignored. + * Instead use `ValidArgsFunction` with `ShellCompDirectiveFilterFileExt`. +* `cmd.MarkZshCompPositionalArgumentWords()` is **deprecated** and silently ignored. + * Instead use `ValidArgsFunction`. + +### Behavioral changes + +**Noun completion** +|Old behavior|New behavior| +|---|---| +|No file completion by default (opposite of bash)|File completion by default; use `ValidArgsFunction` with `ShellCompDirectiveNoFileComp` to turn off file completion on a per-argument basis| +|Completion of flag names without the `-` prefix having been typed|Flag names are only completed if the user has typed the first `-`| +`cmd.MarkZshCompPositionalArgumentFile(pos, []string{})` used to turn on file completion on a per-argument position basis|File completion for all arguments by default; `cmd.MarkZshCompPositionalArgumentFile()` is **deprecated** and silently ignored| +|`cmd.MarkZshCompPositionalArgumentFile(pos, glob[])` used to turn on file completion **with glob filtering** on a per-argument position basis (zsh-specific)|`cmd.MarkZshCompPositionalArgumentFile()` is **deprecated** and silently ignored; use `ValidArgsFunction` with `ShellCompDirectiveFilterFileExt` for file **extension** filtering (not full glob filtering)| +|`cmd.MarkZshCompPositionalArgumentWords(pos, words[])` used to provide completion choices on a per-argument position basis (zsh-specific)|`cmd.MarkZshCompPositionalArgumentWords()` is **deprecated** and silently ignored; use `ValidArgsFunction` to achieve the same behavior| + +**Flag-value completion** + +|Old behavior|New behavior| +|---|---| +|No file completion by default (opposite of bash)|File completion by default; use `RegisterFlagCompletionFunc()` with `ShellCompDirectiveNoFileComp` to turn off file completion| +|`cmd.MarkFlagFilename(flag, []string{})` and similar used to turn on file completion|File completion by default; `cmd.MarkFlagFilename(flag, []string{})` no longer needed in this context and silently ignored| +|`cmd.MarkFlagFilename(flag, glob[])` used to turn on file completion **with glob filtering** (syntax of `[]string{"*.yaml", "*.yml"}` incompatible with bash)|Will continue to work, however, support for bash syntax is added and should be used instead so as to work for all shells (`[]string{"yaml", "yml"}`)| +|`cmd.MarkFlagDirname(flag)` only completes directories (zsh-specific)|Has been added for all shells| +|Completion of a flag name does not repeat, unless flag is of type `*Array` or `*Slice` (not supported by bash)|Retained for `zsh` and added to `fish`| +|Completion of a flag name does not provide the `=` form (unlike bash)|Retained for `zsh` and added to `fish`| + +**Improvements** + +* Custom completion support (`ValidArgsFunction` and `RegisterFlagCompletionFunc()`) +* File completion by default if no other completions found +* Handling of required flags +* File extension filtering no longer mutually exclusive with bash usage +* Completion of directory names *within* another directory +* Support for `=` form of flags diff --git a/vendor/github.com/stretchr/testify/LICENSE b/vendor/github.com/stretchr/testify/LICENSE index f38ec5956..4b0421cf9 100644 --- a/vendor/github.com/stretchr/testify/LICENSE +++ b/vendor/github.com/stretchr/testify/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2012-2018 Mat Ryer and Tyler Bunnell +Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go similarity index 62% rename from vendor/github.com/stretchr/testify/assert/assertion_order.go rename to vendor/github.com/stretchr/testify/assert/assertion_compare.go index 15a486ca6..dc200395c 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_order.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_compare.go @@ -5,20 +5,28 @@ import ( "reflect" ) -func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { +type CompareType int + +const ( + compareLess CompareType = iota - 1 + compareEqual + compareGreater +) + +func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { switch kind { case reflect.Int: { intobj1 := obj1.(int) intobj2 := obj2.(int) if intobj1 > intobj2 { - return -1, true + return compareGreater, true } if intobj1 == intobj2 { - return 0, true + return compareEqual, true } if intobj1 < intobj2 { - return 1, true + return compareLess, true } } case reflect.Int8: @@ -26,13 +34,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { int8obj1 := obj1.(int8) int8obj2 := obj2.(int8) if int8obj1 > int8obj2 { - return -1, true + return compareGreater, true } if int8obj1 == int8obj2 { - return 0, true + return compareEqual, true } if int8obj1 < int8obj2 { - return 1, true + return compareLess, true } } case reflect.Int16: @@ -40,13 +48,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { int16obj1 := obj1.(int16) int16obj2 := obj2.(int16) if int16obj1 > int16obj2 { - return -1, true + return compareGreater, true } if int16obj1 == int16obj2 { - return 0, true + return compareEqual, true } if int16obj1 < int16obj2 { - return 1, true + return compareLess, true } } case reflect.Int32: @@ -54,13 +62,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { int32obj1 := obj1.(int32) int32obj2 := obj2.(int32) if int32obj1 > int32obj2 { - return -1, true + return compareGreater, true } if int32obj1 == int32obj2 { - return 0, true + return compareEqual, true } if int32obj1 < int32obj2 { - return 1, true + return compareLess, true } } case reflect.Int64: @@ -68,13 +76,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { int64obj1 := obj1.(int64) int64obj2 := obj2.(int64) if int64obj1 > int64obj2 { - return -1, true + return compareGreater, true } if int64obj1 == int64obj2 { - return 0, true + return compareEqual, true } if int64obj1 < int64obj2 { - return 1, true + return compareLess, true } } case reflect.Uint: @@ -82,13 +90,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { uintobj1 := obj1.(uint) uintobj2 := obj2.(uint) if uintobj1 > uintobj2 { - return -1, true + return compareGreater, true } if uintobj1 == uintobj2 { - return 0, true + return compareEqual, true } if uintobj1 < uintobj2 { - return 1, true + return compareLess, true } } case reflect.Uint8: @@ -96,13 +104,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { uint8obj1 := obj1.(uint8) uint8obj2 := obj2.(uint8) if uint8obj1 > uint8obj2 { - return -1, true + return compareGreater, true } if uint8obj1 == uint8obj2 { - return 0, true + return compareEqual, true } if uint8obj1 < uint8obj2 { - return 1, true + return compareLess, true } } case reflect.Uint16: @@ -110,13 +118,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { uint16obj1 := obj1.(uint16) uint16obj2 := obj2.(uint16) if uint16obj1 > uint16obj2 { - return -1, true + return compareGreater, true } if uint16obj1 == uint16obj2 { - return 0, true + return compareEqual, true } if uint16obj1 < uint16obj2 { - return 1, true + return compareLess, true } } case reflect.Uint32: @@ -124,13 +132,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { uint32obj1 := obj1.(uint32) uint32obj2 := obj2.(uint32) if uint32obj1 > uint32obj2 { - return -1, true + return compareGreater, true } if uint32obj1 == uint32obj2 { - return 0, true + return compareEqual, true } if uint32obj1 < uint32obj2 { - return 1, true + return compareLess, true } } case reflect.Uint64: @@ -138,13 +146,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { uint64obj1 := obj1.(uint64) uint64obj2 := obj2.(uint64) if uint64obj1 > uint64obj2 { - return -1, true + return compareGreater, true } if uint64obj1 == uint64obj2 { - return 0, true + return compareEqual, true } if uint64obj1 < uint64obj2 { - return 1, true + return compareLess, true } } case reflect.Float32: @@ -152,13 +160,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { float32obj1 := obj1.(float32) float32obj2 := obj2.(float32) if float32obj1 > float32obj2 { - return -1, true + return compareGreater, true } if float32obj1 == float32obj2 { - return 0, true + return compareEqual, true } if float32obj1 < float32obj2 { - return 1, true + return compareLess, true } } case reflect.Float64: @@ -166,13 +174,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { float64obj1 := obj1.(float64) float64obj2 := obj2.(float64) if float64obj1 > float64obj2 { - return -1, true + return compareGreater, true } if float64obj1 == float64obj2 { - return 0, true + return compareEqual, true } if float64obj1 < float64obj2 { - return 1, true + return compareLess, true } } case reflect.String: @@ -180,18 +188,18 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { stringobj1 := obj1.(string) stringobj2 := obj2.(string) if stringobj1 > stringobj2 { - return -1, true + return compareGreater, true } if stringobj1 == stringobj2 { - return 0, true + return compareEqual, true } if stringobj1 < stringobj2 { - return 1, true + return compareLess, true } } } - return 0, false + return compareEqual, false } // Greater asserts that the first element is greater than the second @@ -200,26 +208,7 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (int, bool) { // assert.Greater(t, float64(2), float64(1)) // assert.Greater(t, "b", "a") func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - e1Kind := reflect.ValueOf(e1).Kind() - e2Kind := reflect.ValueOf(e2).Kind() - if e1Kind != e2Kind { - return Fail(t, "Elements should be the same type", msgAndArgs...) - } - - res, isComparable := compare(e1, e2, e1Kind) - if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\"", reflect.TypeOf(e1)), msgAndArgs...) - } - - if res != -1 { - return Fail(t, fmt.Sprintf("\"%v\" is not greater than \"%v\"", e1, e2), msgAndArgs...) - } - - return true + return compareTwoValues(t, e1, e2, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs) } // GreaterOrEqual asserts that the first element is greater than or equal to the second @@ -229,26 +218,7 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface // assert.GreaterOrEqual(t, "b", "a") // assert.GreaterOrEqual(t, "b", "b") func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - e1Kind := reflect.ValueOf(e1).Kind() - e2Kind := reflect.ValueOf(e2).Kind() - if e1Kind != e2Kind { - return Fail(t, "Elements should be the same type", msgAndArgs...) - } - - res, isComparable := compare(e1, e2, e1Kind) - if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\"", reflect.TypeOf(e1)), msgAndArgs...) - } - - if res != -1 && res != 0 { - return Fail(t, fmt.Sprintf("\"%v\" is not greater than or equal to \"%v\"", e1, e2), msgAndArgs...) - } - - return true + return compareTwoValues(t, e1, e2, []CompareType{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs) } // Less asserts that the first element is less than the second @@ -257,26 +227,7 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in // assert.Less(t, float64(1), float64(2)) // assert.Less(t, "a", "b") func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - e1Kind := reflect.ValueOf(e1).Kind() - e2Kind := reflect.ValueOf(e2).Kind() - if e1Kind != e2Kind { - return Fail(t, "Elements should be the same type", msgAndArgs...) - } - - res, isComparable := compare(e1, e2, e1Kind) - if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\"", reflect.TypeOf(e1)), msgAndArgs...) - } - - if res != 1 { - return Fail(t, fmt.Sprintf("\"%v\" is not less than \"%v\"", e1, e2), msgAndArgs...) - } - - return true + return compareTwoValues(t, e1, e2, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs) } // LessOrEqual asserts that the first element is less than or equal to the second @@ -286,6 +237,10 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) // assert.LessOrEqual(t, "a", "b") // assert.LessOrEqual(t, "b", "b") func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool { + return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs) +} + +func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() } @@ -296,14 +251,24 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter return Fail(t, "Elements should be the same type", msgAndArgs...) } - res, isComparable := compare(e1, e2, e1Kind) + compareResult, isComparable := compare(e1, e2, e1Kind) if !isComparable { return Fail(t, fmt.Sprintf("Can not compare type \"%s\"", reflect.TypeOf(e1)), msgAndArgs...) } - if res != 1 && res != 0 { - return Fail(t, fmt.Sprintf("\"%v\" is not less than or equal to \"%v\"", e1, e2), msgAndArgs...) + if !containsValue(allowedComparesResults, compareResult) { + return Fail(t, fmt.Sprintf(failMessage, e1, e2), msgAndArgs...) } return true } + +func containsValue(values []CompareType, value CompareType) bool { + for _, v := range values { + if v == value { + return true + } + } + + return false +} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go index bf89ecd21..49370eb16 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go @@ -93,7 +93,7 @@ func EqualErrorf(t TestingT, theError error, errString string, msg string, args // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// assert.EqualValuesf(t, uint32(123, "error message %s", "formatted"), int32(123)) +// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -127,7 +127,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick // Exactlyf asserts that two objects are equal in value and type. // -// assert.Exactlyf(t, int32(123, "error message %s", "formatted"), int64(123)) +// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -173,7 +173,7 @@ func FileExistsf(t TestingT, path string, msg string, args ...interface{}) bool // Greaterf asserts that the first element is greater than the second // // assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2, "error message %s", "formatted"), float64(1)) +// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") // assert.Greaterf(t, "b", "a", "error message %s", "formatted") func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -225,7 +225,7 @@ func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, u // // assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -237,7 +237,7 @@ func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, // // assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -245,6 +245,18 @@ func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url stri return HTTPRedirect(t, handler, method, url, values, append([]interface{}{msg}, args...)...) } +// HTTPStatusCodef asserts that a specified handler returns a specified status code. +// +// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// +// Returns whether the assertion was successful (true) or not (false). +func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return HTTPStatusCode(t, handler, method, url, values, statuscode, append([]interface{}{msg}, args...)...) +} + // HTTPSuccessf asserts that a specified handler returns a success status code. // // assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") @@ -259,7 +271,7 @@ func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url strin // Implementsf asserts that an object is implemented by the specified interface. // -// assert.Implementsf(t, (*MyInterface, "error message %s", "formatted")(nil), new(MyObject)) +// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -341,7 +353,7 @@ func Lenf(t TestingT, object interface{}, length int, msg string, args ...interf // Lessf asserts that the first element is less than the second // // assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1, "error message %s", "formatted"), float64(2)) +// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") // assert.Lessf(t, "a", "b", "error message %s", "formatted") func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -454,6 +466,16 @@ func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, return NotEqual(t, expected, actual, append([]interface{}{msg}, args...)...) } +// NotEqualValuesf asserts that two objects are not equal even when converted to the same type +// +// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") +func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...) +} + // NotNilf asserts that the specified object is not nil. // // assert.NotNilf(t, err, "error message %s", "formatted") @@ -476,7 +498,7 @@ func NotPanicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bo // NotRegexpf asserts that a specified regexp does not match a string. // -// assert.NotRegexpf(t, regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting") +// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") // assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -552,7 +574,7 @@ func PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg str // Regexpf asserts that a specified regexp matches a string. // -// assert.Regexpf(t, regexp.MustCompile("start", "error message %s", "formatted"), "it's starting") +// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") // assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go index 75ecdcaa2..9db889427 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go @@ -169,7 +169,7 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// a.EqualValuesf(uint32(123, "error message %s", "formatted"), int32(123)) +// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -251,7 +251,7 @@ func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArg // Exactlyf asserts that two objects are equal in value and type. // -// a.Exactlyf(int32(123, "error message %s", "formatted"), int64(123)) +// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -370,7 +370,7 @@ func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, // Greaterf asserts that the first element is greater than the second // // a.Greaterf(2, 1, "error message %s", "formatted") -// a.Greaterf(float64(2, "error message %s", "formatted"), float64(1)) +// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") // a.Greaterf("b", "a", "error message %s", "formatted") func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { @@ -447,7 +447,7 @@ func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url stri // // a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -471,7 +471,7 @@ func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url s // // a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -479,6 +479,30 @@ func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url return HTTPRedirectf(a.t, handler, method, url, values, msg, args...) } +// HTTPStatusCode asserts that a specified handler returns a specified status code. +// +// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) +// +// Returns whether the assertion was successful (true) or not (false). +func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return HTTPStatusCode(a.t, handler, method, url, values, statuscode, msgAndArgs...) +} + +// HTTPStatusCodef asserts that a specified handler returns a specified status code. +// +// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// +// Returns whether the assertion was successful (true) or not (false). +func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return HTTPStatusCodef(a.t, handler, method, url, values, statuscode, msg, args...) +} + // HTTPSuccess asserts that a specified handler returns a success status code. // // a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) @@ -515,7 +539,7 @@ func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, // Implementsf asserts that an object is implemented by the specified interface. // -// a.Implementsf((*MyInterface, "error message %s", "formatted")(nil), new(MyObject)) +// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -706,7 +730,7 @@ func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, ar // Lessf asserts that the first element is less than the second // // a.Lessf(1, 2, "error message %s", "formatted") -// a.Lessf(float64(1, "error message %s", "formatted"), float64(2)) +// a.Lessf(float64(1), float64(2), "error message %s", "formatted") // a.Lessf("a", "b", "error message %s", "formatted") func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { @@ -884,6 +908,26 @@ func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndAr return NotEqual(a.t, expected, actual, msgAndArgs...) } +// NotEqualValues asserts that two objects are not equal even when converted to the same type +// +// a.NotEqualValues(obj1, obj2) +func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotEqualValues(a.t, expected, actual, msgAndArgs...) +} + +// NotEqualValuesf asserts that two objects are not equal even when converted to the same type +// +// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") +func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotEqualValuesf(a.t, expected, actual, msg, args...) +} + // NotEqualf asserts that the specified values are NOT equal. // // a.NotEqualf(obj1, obj2, "error message %s", "formatted") @@ -950,7 +994,7 @@ func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...in // NotRegexpf asserts that a specified regexp does not match a string. // -// a.NotRegexpf(regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting") +// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") // a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { @@ -1102,7 +1146,7 @@ func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...inter // Regexpf asserts that a specified regexp matches a string. // -// a.Regexpf(regexp.MustCompile("start", "error message %s", "formatted"), "it's starting") +// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") // a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go index bdd81389a..914a10d83 100644 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/vendor/github.com/stretchr/testify/assert/assertions.go @@ -19,7 +19,7 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/pmezard/go-difflib/difflib" - yaml "gopkg.in/yaml.v2" + yaml "gopkg.in/yaml.v3" ) //go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl" @@ -45,7 +45,7 @@ type BoolAssertionFunc func(TestingT, bool, ...interface{}) bool // for table driven tests. type ErrorAssertionFunc func(TestingT, error, ...interface{}) bool -// Comparison a custom function that returns true on success and false on failure +// Comparison is a custom function that returns true on success and false on failure type Comparison func() (success bool) /* @@ -104,11 +104,11 @@ the problem actually occurred in calling code.*/ // failed. func CallerInfo() []string { - pc := uintptr(0) - file := "" - line := 0 - ok := false - name := "" + var pc uintptr + var ok bool + var file string + var line int + var name string callers := []string{} for i := 0; ; i++ { @@ -429,14 +429,27 @@ func samePointers(first, second interface{}) bool { // to a type conversion in the Go grammar. func formatUnequalValues(expected, actual interface{}) (e string, a string) { if reflect.TypeOf(expected) != reflect.TypeOf(actual) { - return fmt.Sprintf("%T(%#v)", expected, expected), - fmt.Sprintf("%T(%#v)", actual, actual) + return fmt.Sprintf("%T(%s)", expected, truncatingFormat(expected)), + fmt.Sprintf("%T(%s)", actual, truncatingFormat(actual)) } switch expected.(type) { case time.Duration: return fmt.Sprintf("%v", expected), fmt.Sprintf("%v", actual) } - return fmt.Sprintf("%#v", expected), fmt.Sprintf("%#v", actual) + return truncatingFormat(expected), truncatingFormat(actual) +} + +// truncatingFormat formats the data and truncates it if it's too long. +// +// This helps keep formatted error messages lines from exceeding the +// bufio.MaxScanTokenSize max line length that the go testing framework imposes. +func truncatingFormat(data interface{}) string { + value := fmt.Sprintf("%#v", data) + max := bufio.MaxScanTokenSize - 100 // Give us some space the type info too if needed. + if len(value) > max { + value = value[0:max] + "<... truncated>" + } + return value } // EqualValues asserts that two objects are equal or convertable to the same types @@ -483,12 +496,12 @@ func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} // // assert.NotNil(t, err) func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } if !isNil(object) { return true } + if h, ok := t.(tHelper); ok { + h.Helper() + } return Fail(t, "Expected value not to be nil.", msgAndArgs...) } @@ -529,12 +542,12 @@ func isNil(object interface{}) bool { // // assert.Nil(t, err) func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } if isNil(object) { return true } + if h, ok := t.(tHelper); ok { + h.Helper() + } return Fail(t, fmt.Sprintf("Expected nil, but got: %#v", object), msgAndArgs...) } @@ -571,12 +584,11 @@ func isEmpty(object interface{}) bool { // // assert.Empty(t, obj) func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - pass := isEmpty(object) if !pass { + if h, ok := t.(tHelper); ok { + h.Helper() + } Fail(t, fmt.Sprintf("Should be empty, but was %v", object), msgAndArgs...) } @@ -591,12 +603,11 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { // assert.Equal(t, "two", obj[1]) // } func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - pass := !isEmpty(object) if !pass { + if h, ok := t.(tHelper); ok { + h.Helper() + } Fail(t, fmt.Sprintf("Should NOT be empty, but was %v", object), msgAndArgs...) } @@ -639,16 +650,10 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) // // assert.True(t, myBool) func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if h, ok := t.(interface { - Helper() - }); ok { - h.Helper() - } - - if value != true { + if !value { + if h, ok := t.(tHelper); ok { + h.Helper() + } return Fail(t, "Should be true", msgAndArgs...) } @@ -660,11 +665,10 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { // // assert.False(t, myBool) func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - - if value != false { + if value { + if h, ok := t.(tHelper); ok { + h.Helper() + } return Fail(t, "Should be false", msgAndArgs...) } @@ -695,6 +699,21 @@ func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{ } +// NotEqualValues asserts that two objects are not equal even when converted to the same type +// +// assert.NotEqualValues(t, obj1, obj2) +func NotEqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + + if ObjectsAreEqualValues(expected, actual) { + return Fail(t, fmt.Sprintf("Should not be: %#v\n", actual), msgAndArgs...) + } + + return true +} + // containsElement try loop over the list check if the list includes the element. // return (false, false) if impossible. // return (true, false) if element was not found. @@ -747,10 +766,10 @@ func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bo ok, found := includeElement(s, contains) if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", s), msgAndArgs...) + return Fail(t, fmt.Sprintf("%#v could not be applied builtin len()", s), msgAndArgs...) } if !found { - return Fail(t, fmt.Sprintf("\"%s\" does not contain \"%s\"", s, contains), msgAndArgs...) + return Fail(t, fmt.Sprintf("%#v does not contain %#v", s, contains), msgAndArgs...) } return true @@ -881,27 +900,39 @@ func ElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface return true } - aKind := reflect.TypeOf(listA).Kind() - bKind := reflect.TypeOf(listB).Kind() + if !isList(t, listA, msgAndArgs...) || !isList(t, listB, msgAndArgs...) { + return false + } - if aKind != reflect.Array && aKind != reflect.Slice { - return Fail(t, fmt.Sprintf("%q has an unsupported type %s", listA, aKind), msgAndArgs...) + extraA, extraB := diffLists(listA, listB) + + if len(extraA) == 0 && len(extraB) == 0 { + return true } - if bKind != reflect.Array && bKind != reflect.Slice { - return Fail(t, fmt.Sprintf("%q has an unsupported type %s", listB, bKind), msgAndArgs...) + return Fail(t, formatListDiff(listA, listB, extraA, extraB), msgAndArgs...) +} + +// isList checks that the provided value is array or slice. +func isList(t TestingT, list interface{}, msgAndArgs ...interface{}) (ok bool) { + kind := reflect.TypeOf(list).Kind() + if kind != reflect.Array && kind != reflect.Slice { + return Fail(t, fmt.Sprintf("%q has an unsupported type %s, expecting array or slice", list, kind), + msgAndArgs...) } + return true +} +// diffLists diffs two arrays/slices and returns slices of elements that are only in A and only in B. +// If some element is present multiple times, each instance is counted separately (e.g. if something is 2x in A and +// 5x in B, it will be 0x in extraA and 3x in extraB). The order of items in both lists is ignored. +func diffLists(listA, listB interface{}) (extraA, extraB []interface{}) { aValue := reflect.ValueOf(listA) bValue := reflect.ValueOf(listB) aLen := aValue.Len() bLen := bValue.Len() - if aLen != bLen { - return Fail(t, fmt.Sprintf("lengths don't match: %d != %d", aLen, bLen), msgAndArgs...) - } - // Mark indexes in bValue that we already used visited := make([]bool, bLen) for i := 0; i < aLen; i++ { @@ -918,11 +949,38 @@ func ElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface } } if !found { - return Fail(t, fmt.Sprintf("element %s appears more times in %s than in %s", element, aValue, bValue), msgAndArgs...) + extraA = append(extraA, element) } } - return true + for j := 0; j < bLen; j++ { + if visited[j] { + continue + } + extraB = append(extraB, bValue.Index(j).Interface()) + } + + return +} + +func formatListDiff(listA, listB interface{}, extraA, extraB []interface{}) string { + var msg bytes.Buffer + + msg.WriteString("elements differ") + if len(extraA) > 0 { + msg.WriteString("\n\nextra elements in list A:\n") + msg.WriteString(spewConfig.Sdump(extraA)) + } + if len(extraB) > 0 { + msg.WriteString("\n\nextra elements in list B:\n") + msg.WriteString(spewConfig.Sdump(extraB)) + } + msg.WriteString("\n\nlistA:\n") + msg.WriteString(spewConfig.Sdump(listA)) + msg.WriteString("\n\nlistB:\n") + msg.WriteString(spewConfig.Sdump(listB)) + + return msg.String() } // Condition uses a Comparison to assert a complex condition. @@ -1058,6 +1116,8 @@ func toFloat(x interface{}) (float64, bool) { xok := true switch xn := x.(type) { + case uint: + xf = float64(xn) case uint8: xf = float64(xn) case uint16: @@ -1079,7 +1139,7 @@ func toFloat(x interface{}) (float64, bool) { case float32: xf = float64(xn) case float64: - xf = float64(xn) + xf = xn case time.Duration: xf = float64(xn) default: @@ -1193,6 +1253,9 @@ func calcRelativeError(expected, actual interface{}) (float64, error) { if !aok { return 0, fmt.Errorf("expected value %q cannot be converted to float", expected) } + if math.IsNaN(af) { + return 0, errors.New("expected value must not be NaN") + } if af == 0 { return 0, fmt.Errorf("expected value must have a value other than zero to calculate the relative error") } @@ -1200,6 +1263,9 @@ func calcRelativeError(expected, actual interface{}) (float64, error) { if !bok { return 0, fmt.Errorf("actual value %q cannot be converted to float", actual) } + if math.IsNaN(bf) { + return 0, errors.New("actual value must not be NaN") + } return math.Abs(af-bf) / math.Abs(af), nil } @@ -1209,6 +1275,9 @@ func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAnd if h, ok := t.(tHelper); ok { h.Helper() } + if math.IsNaN(epsilon) { + return Fail(t, "epsilon must not be NaN") + } actualEpsilon, err := calcRelativeError(expected, actual) if err != nil { return Fail(t, err.Error(), msgAndArgs...) @@ -1256,10 +1325,10 @@ func InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, m // assert.Equal(t, expectedObj, actualObj) // } func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } if err != nil { + if h, ok := t.(tHelper); ok { + h.Helper() + } return Fail(t, fmt.Sprintf("Received unexpected error:\n%+v", err), msgAndArgs...) } @@ -1273,11 +1342,10 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { // assert.Equal(t, expectedError, err) // } func Error(t TestingT, err error, msgAndArgs ...interface{}) bool { - if h, ok := t.(tHelper); ok { - h.Helper() - } - if err == nil { + if h, ok := t.(tHelper); ok { + h.Helper() + } return Fail(t, "An error is expected but got nil.", msgAndArgs...) } @@ -1553,6 +1621,7 @@ var spewConfig = spew.ConfigState{ DisablePointerAddresses: true, DisableCapacities: true, SortKeys: true, + DisableMethods: true, } type tHelper interface { diff --git a/vendor/github.com/stretchr/testify/assert/http_assertions.go b/vendor/github.com/stretchr/testify/assert/http_assertions.go index df46fa777..4ed341dd2 100644 --- a/vendor/github.com/stretchr/testify/assert/http_assertions.go +++ b/vendor/github.com/stretchr/testify/assert/http_assertions.go @@ -33,7 +33,6 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, value code, err := httpCode(handler, method, url, values) if err != nil { Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) - return false } isSuccessCode := code >= http.StatusOK && code <= http.StatusPartialContent @@ -56,7 +55,6 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, valu code, err := httpCode(handler, method, url, values) if err != nil { Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) - return false } isRedirectCode := code >= http.StatusMultipleChoices && code <= http.StatusTemporaryRedirect @@ -79,7 +77,6 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values code, err := httpCode(handler, method, url, values) if err != nil { Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) - return false } isErrorCode := code >= http.StatusBadRequest @@ -90,6 +87,28 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values return isErrorCode } +// HTTPStatusCode asserts that a specified handler returns a specified status code. +// +// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) +// +// Returns whether the assertion was successful (true) or not (false). +func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + code, err := httpCode(handler, method, url, values) + if err != nil { + Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err)) + } + + successful := code == statuscode + if !successful { + Fail(t, fmt.Sprintf("Expected HTTP status code %d for %q but received %d", statuscode, url+"?"+values.Encode(), code)) + } + + return successful +} + // HTTPBody is a helper that returns HTTP body of the response. It returns // empty string if building a new request fails. func HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) string { diff --git a/vendor/github.com/stretchr/testify/require/require.go b/vendor/github.com/stretchr/testify/require/require.go index cf6c7b566..ec4624b28 100644 --- a/vendor/github.com/stretchr/testify/require/require.go +++ b/vendor/github.com/stretchr/testify/require/require.go @@ -212,7 +212,7 @@ func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArg // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// assert.EqualValuesf(t, uint32(123, "error message %s", "formatted"), int32(123)) +// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -315,7 +315,7 @@ func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs .. // Exactlyf asserts that two objects are equal in value and type. // -// assert.Exactlyf(t, int32(123, "error message %s", "formatted"), int64(123)) +// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -470,7 +470,7 @@ func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, arg // Greaterf asserts that the first element is greater than the second // // assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2, "error message %s", "formatted"), float64(1)) +// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") // assert.Greaterf(t, "b", "a", "error message %s", "formatted") func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -565,7 +565,7 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, // // assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -595,7 +595,7 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url strin // // assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -606,6 +606,36 @@ func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url stri t.FailNow() } +// HTTPStatusCode asserts that a specified handler returns a specified status code. +// +// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) +// +// Returns whether the assertion was successful (true) or not (false). +func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.HTTPStatusCode(t, handler, method, url, values, statuscode, msgAndArgs...) { + return + } + t.FailNow() +} + +// HTTPStatusCodef asserts that a specified handler returns a specified status code. +// +// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// +// Returns whether the assertion was successful (true) or not (false). +func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.HTTPStatusCodef(t, handler, method, url, values, statuscode, msg, args...) { + return + } + t.FailNow() +} + // HTTPSuccess asserts that a specified handler returns a success status code. // // assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) @@ -651,7 +681,7 @@ func Implements(t TestingT, interfaceObject interface{}, object interface{}, msg // Implementsf asserts that an object is implemented by the specified interface. // -// assert.Implementsf(t, (*MyInterface, "error message %s", "formatted")(nil), new(MyObject)) +// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -902,7 +932,7 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args . // Lessf asserts that the first element is less than the second // // assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1, "error message %s", "formatted"), float64(2)) +// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") // assert.Lessf(t, "a", "b", "error message %s", "formatted") func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1128,6 +1158,32 @@ func NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs . t.FailNow() } +// NotEqualValues asserts that two objects are not equal even when converted to the same type +// +// assert.NotEqualValues(t, obj1, obj2) +func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotEqualValues(t, expected, actual, msgAndArgs...) { + return + } + t.FailNow() +} + +// NotEqualValuesf asserts that two objects are not equal even when converted to the same type +// +// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") +func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotEqualValuesf(t, expected, actual, msg, args...) { + return + } + t.FailNow() +} + // NotEqualf asserts that the specified values are NOT equal. // // assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") @@ -1212,7 +1268,7 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf // NotRegexpf asserts that a specified regexp does not match a string. // -// assert.NotRegexpf(t, regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting") +// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") // assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1406,7 +1462,7 @@ func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface // Regexpf asserts that a specified regexp matches a string. // -// assert.Regexpf(t, regexp.MustCompile("start", "error message %s", "formatted"), "it's starting") +// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") // assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go b/vendor/github.com/stretchr/testify/require/require_forward.go index 5aac226df..103d7dcb6 100644 --- a/vendor/github.com/stretchr/testify/require/require_forward.go +++ b/vendor/github.com/stretchr/testify/require/require_forward.go @@ -170,7 +170,7 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn // EqualValuesf asserts that two objects are equal or convertable to the same types // and equal. // -// a.EqualValuesf(uint32(123, "error message %s", "formatted"), int32(123)) +// a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -252,7 +252,7 @@ func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArg // Exactlyf asserts that two objects are equal in value and type. // -// a.Exactlyf(int32(123, "error message %s", "formatted"), int64(123)) +// a.Exactlyf(int32(123), int64(123), "error message %s", "formatted") func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -371,7 +371,7 @@ func (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, // Greaterf asserts that the first element is greater than the second // // a.Greaterf(2, 1, "error message %s", "formatted") -// a.Greaterf(float64(2, "error message %s", "formatted"), float64(1)) +// a.Greaterf(float64(2), float64(1), "error message %s", "formatted") // a.Greaterf("b", "a", "error message %s", "formatted") func (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { @@ -448,7 +448,7 @@ func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url stri // // a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -472,7 +472,7 @@ func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url s // // a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // -// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false). +// Returns whether the assertion was successful (true) or not (false). func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -480,6 +480,30 @@ func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url HTTPRedirectf(a.t, handler, method, url, values, msg, args...) } +// HTTPStatusCode asserts that a specified handler returns a specified status code. +// +// a.HTTPStatusCode(myHandler, "GET", "/notImplemented", nil, 501) +// +// Returns whether the assertion was successful (true) or not (false). +func (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + HTTPStatusCode(a.t, handler, method, url, values, statuscode, msgAndArgs...) +} + +// HTTPStatusCodef asserts that a specified handler returns a specified status code. +// +// a.HTTPStatusCodef(myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// +// Returns whether the assertion was successful (true) or not (false). +func (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + HTTPStatusCodef(a.t, handler, method, url, values, statuscode, msg, args...) +} + // HTTPSuccess asserts that a specified handler returns a success status code. // // a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) @@ -516,7 +540,7 @@ func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, // Implementsf asserts that an object is implemented by the specified interface. // -// a.Implementsf((*MyInterface, "error message %s", "formatted")(nil), new(MyObject)) +// a.Implementsf((*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -707,7 +731,7 @@ func (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, ar // Lessf asserts that the first element is less than the second // // a.Lessf(1, 2, "error message %s", "formatted") -// a.Lessf(float64(1, "error message %s", "formatted"), float64(2)) +// a.Lessf(float64(1), float64(2), "error message %s", "formatted") // a.Lessf("a", "b", "error message %s", "formatted") func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { @@ -885,6 +909,26 @@ func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndAr NotEqual(a.t, expected, actual, msgAndArgs...) } +// NotEqualValues asserts that two objects are not equal even when converted to the same type +// +// a.NotEqualValues(obj1, obj2) +func (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotEqualValues(a.t, expected, actual, msgAndArgs...) +} + +// NotEqualValuesf asserts that two objects are not equal even when converted to the same type +// +// a.NotEqualValuesf(obj1, obj2, "error message %s", "formatted") +func (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotEqualValuesf(a.t, expected, actual, msg, args...) +} + // NotEqualf asserts that the specified values are NOT equal. // // a.NotEqualf(obj1, obj2, "error message %s", "formatted") @@ -951,7 +995,7 @@ func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...in // NotRegexpf asserts that a specified regexp does not match a string. // -// a.NotRegexpf(regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting") +// a.NotRegexpf(regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") // a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted") func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { @@ -1103,7 +1147,7 @@ func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...inter // Regexpf asserts that a specified regexp matches a string. // -// a.Regexpf(regexp.MustCompile("start", "error message %s", "formatted"), "it's starting") +// a.Regexpf(regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") // a.Regexpf("start...$", "it's not starting", "error message %s", "formatted") func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { diff --git a/vendor/go.mongodb.org/mongo-driver/LICENSE b/vendor/go.mongodb.org/mongo-driver/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/vendor/go.mongodb.org/mongo-driver/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bson.go b/vendor/go.mongodb.org/mongo-driver/bson/bson.go deleted file mode 100644 index 37bf9811f..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bson.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -// -// Based on gopkg.in/mgo.v2/bson by Gustavo Niemeyer -// See THIRD-PARTY-NOTICES for original license terms. - -// +build go1.9 - -package bson // import "go.mongodb.org/mongo-driver/bson" - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -// Zeroer allows custom struct types to implement a report of zero -// state. All struct types that don't implement Zeroer or where IsZero -// returns false are considered to be not zero. -type Zeroer interface { - IsZero() bool -} - -// D represents a BSON Document. This type can be used to represent BSON in a concise and readable -// manner. It should generally be used when serializing to BSON. For deserializing, the Raw or -// Document types should be used. -// -// Example usage: -// -// bson.D{{"foo", "bar"}, {"hello", "world"}, {"pi", 3.14159}} -// -// This type should be used in situations where order matters, such as MongoDB commands. If the -// order is not important, a map is more comfortable and concise. -type D = primitive.D - -// E represents a BSON element for a D. It is usually used inside a D. -type E = primitive.E - -// M is an unordered, concise representation of a BSON Document. It should generally be used to -// serialize BSON when the order of the elements of a BSON document do not matter. If the element -// order matters, use a D instead. -// -// Example usage: -// -// bson.M{"foo": "bar", "hello": "world", "pi": 3.14159} -// -// This type is handled in the encoders as a regular map[string]interface{}. The elements will be -// serialized in an undefined, random order, and the order will be different each time. -type M = primitive.M - -// An A represents a BSON array. This type can be used to represent a BSON array in a concise and -// readable manner. It should generally be used when serializing to BSON. For deserializing, the -// RawArray or Array types should be used. -// -// Example usage: -// -// bson.A{"bar", "world", 3.14159, bson.D{{"qux", 12345}}} -// -type A = primitive.A diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bson_1_8.go b/vendor/go.mongodb.org/mongo-driver/bson/bson_1_8.go deleted file mode 100644 index caf5f50a7..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bson_1_8.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -// +build !go1.9 - -package bson // import "go.mongodb.org/mongo-driver/bson" - -import ( - "math" - "strconv" - "strings" -) - -// Zeroer allows custom struct types to implement a report of zero -// state. All struct types that don't implement Zeroer or where IsZero -// returns false are considered to be not zero. -type Zeroer interface { - IsZero() bool -} - -// D represents a BSON Document. This type can be used to represent BSON in a concise and readable -// manner. It should generally be used when serializing to BSON. For deserializing, the Raw or -// Document types should be used. -// -// Example usage: -// -// primitive.D{{"foo", "bar"}, {"hello", "world"}, {"pi", 3.14159}} -// -// This type should be used in situations where order matters, such as MongoDB commands. If the -// order is not important, a map is more comfortable and concise. -type D []E - -// Map creates a map from the elements of the D. -func (d D) Map() M { - m := make(M, len(d)) - for _, e := range d { - m[e.Key] = e.Value - } - return m -} - -// E represents a BSON element for a D. It is usually used inside a D. -type E struct { - Key string - Value interface{} -} - -// M is an unordered, concise representation of a BSON Document. It should generally be used to -// serialize BSON when the order of the elements of a BSON document do not matter. If the element -// order matters, use a D instead. -// -// Example usage: -// -// primitive.M{"foo": "bar", "hello": "world", "pi": 3.14159} -// -// This type is handled in the encoders as a regular map[string]interface{}. The elements will be -// serialized in an undefined, random order, and the order will be different each time. -type M map[string]interface{} - -// An A represents a BSON array. This type can be used to represent a BSON array in a concise and -// readable manner. It should generally be used when serializing to BSON. For deserializing, the -// RawArray or Array types should be used. -// -// Example usage: -// -// primitive.A{"bar", "world", 3.14159, primitive.D{{"qux", 12345}}} -// -type A []interface{} - -func formatDouble(f float64) string { - var s string - if math.IsInf(f, 1) { - s = "Infinity" - } else if math.IsInf(f, -1) { - s = "-Infinity" - } else if math.IsNaN(f) { - s = "NaN" - } else { - // Print exactly one decimalType place for integers; otherwise, print as many are necessary to - // perfectly represent it. - s = strconv.FormatFloat(f, 'G', -1, 64) - if !strings.ContainsRune(s, '.') { - s += ".0" - } - } - - return s -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/bsoncodec.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/bsoncodec.go deleted file mode 100644 index 0ebc9a156..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/bsoncodec.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec // import "go.mongodb.org/mongo-driver/bson/bsoncodec" - -import ( - "fmt" - "reflect" - "strings" - - "go.mongodb.org/mongo-driver/bson/bsonrw" - "go.mongodb.org/mongo-driver/bson/bsontype" -) - -// Marshaler is an interface implemented by types that can marshal themselves -// into a BSON document represented as bytes. The bytes returned must be a valid -// BSON document if the error is nil. -type Marshaler interface { - MarshalBSON() ([]byte, error) -} - -// ValueMarshaler is an interface implemented by types that can marshal -// themselves into a BSON value as bytes. The type must be the valid type for -// the bytes returned. The bytes and byte type together must be valid if the -// error is nil. -type ValueMarshaler interface { - MarshalBSONValue() (bsontype.Type, []byte, error) -} - -// Unmarshaler is an interface implemented by types that can unmarshal a BSON -// document representation of themselves. The BSON bytes can be assumed to be -// valid. UnmarshalBSON must copy the BSON bytes if it wishes to retain the data -// after returning. -type Unmarshaler interface { - UnmarshalBSON([]byte) error -} - -// ValueUnmarshaler is an interface implemented by types that can unmarshal a -// BSON value representaiton of themselves. The BSON bytes and type can be -// assumed to be valid. UnmarshalBSONValue must copy the BSON value bytes if it -// wishes to retain the data after returning. -type ValueUnmarshaler interface { - UnmarshalBSONValue(bsontype.Type, []byte) error -} - -// ValueEncoderError is an error returned from a ValueEncoder when the provided value can't be -// encoded by the ValueEncoder. -type ValueEncoderError struct { - Name string - Types []reflect.Type - Kinds []reflect.Kind - Received reflect.Value -} - -func (vee ValueEncoderError) Error() string { - typeKinds := make([]string, 0, len(vee.Types)+len(vee.Kinds)) - for _, t := range vee.Types { - typeKinds = append(typeKinds, t.String()) - } - for _, k := range vee.Kinds { - if k == reflect.Map { - typeKinds = append(typeKinds, "map[string]*") - continue - } - typeKinds = append(typeKinds, k.String()) - } - received := vee.Received.Kind().String() - if vee.Received.IsValid() { - received = vee.Received.Type().String() - } - return fmt.Sprintf("%s can only encode valid %s, but got %s", vee.Name, strings.Join(typeKinds, ", "), received) -} - -// ValueDecoderError is an error returned from a ValueDecoder when the provided value can't be -// decoded by the ValueDecoder. -type ValueDecoderError struct { - Name string - Types []reflect.Type - Kinds []reflect.Kind - Received reflect.Value -} - -func (vde ValueDecoderError) Error() string { - typeKinds := make([]string, 0, len(vde.Types)+len(vde.Kinds)) - for _, t := range vde.Types { - typeKinds = append(typeKinds, t.String()) - } - for _, k := range vde.Kinds { - if k == reflect.Map { - typeKinds = append(typeKinds, "map[string]*") - continue - } - typeKinds = append(typeKinds, k.String()) - } - received := vde.Received.Kind().String() - if vde.Received.IsValid() { - received = vde.Received.Type().String() - } - return fmt.Sprintf("%s can only decode valid and settable %s, but got %s", vde.Name, strings.Join(typeKinds, ", "), received) -} - -// EncodeContext is the contextual information required for a Codec to encode a -// value. -type EncodeContext struct { - *Registry - MinSize bool -} - -// DecodeContext is the contextual information required for a Codec to decode a -// value. -type DecodeContext struct { - *Registry - Truncate bool - // Ancestor is the type of a containing document. This is mainly used to determine what type - // should be used when decoding an embedded document into an empty interface. For example, if - // Ancestor is a bson.M, BSON embedded document values being decoded into an empty interface - // will be decoded into a bson.M. - Ancestor reflect.Type -} - -// ValueCodec is the interface that groups the methods to encode and decode -// values. -type ValueCodec interface { - ValueEncoder - ValueDecoder -} - -// ValueEncoder is the interface implemented by types that can handle the encoding of a value. -type ValueEncoder interface { - EncodeValue(EncodeContext, bsonrw.ValueWriter, reflect.Value) error -} - -// ValueEncoderFunc is an adapter function that allows a function with the correct signature to be -// used as a ValueEncoder. -type ValueEncoderFunc func(EncodeContext, bsonrw.ValueWriter, reflect.Value) error - -// EncodeValue implements the ValueEncoder interface. -func (fn ValueEncoderFunc) EncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - return fn(ec, vw, val) -} - -// ValueDecoder is the interface implemented by types that can handle the decoding of a value. -type ValueDecoder interface { - DecodeValue(DecodeContext, bsonrw.ValueReader, reflect.Value) error -} - -// ValueDecoderFunc is an adapter function that allows a function with the correct signature to be -// used as a ValueDecoder. -type ValueDecoderFunc func(DecodeContext, bsonrw.ValueReader, reflect.Value) error - -// DecodeValue implements the ValueDecoder interface. -func (fn ValueDecoderFunc) DecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - return fn(dc, vr, val) -} - -// CodecZeroer is the interface implemented by Codecs that can also determine if -// a value of the type that would be encoded is zero. -type CodecZeroer interface { - IsTypeZero(interface{}) bool -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_decoders.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_decoders.go deleted file mode 100644 index 65cd1c0a5..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_decoders.go +++ /dev/null @@ -1,1014 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import ( - "encoding/json" - "errors" - "fmt" - "math" - "net/url" - "reflect" - "strconv" - "time" - - "go.mongodb.org/mongo-driver/bson/bsonrw" - "go.mongodb.org/mongo-driver/bson/bsontype" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/x/bsonx/bsoncore" -) - -var defaultValueDecoders DefaultValueDecoders - -// DefaultValueDecoders is a namespace type for the default ValueDecoders used -// when creating a registry. -type DefaultValueDecoders struct{} - -// RegisterDefaultDecoders will register the decoder methods attached to DefaultValueDecoders with -// the provided RegistryBuilder. -// -// There is no support for decoding map[string]interface{} becuase there is no decoder for -// interface{}, so users must either register this decoder themselves or use the -// EmptyInterfaceDecoder avaialble in the bson package. -func (dvd DefaultValueDecoders) RegisterDefaultDecoders(rb *RegistryBuilder) { - if rb == nil { - panic(errors.New("argument to RegisterDefaultDecoders must not be nil")) - } - - rb. - RegisterDecoder(tBinary, ValueDecoderFunc(dvd.BinaryDecodeValue)). - RegisterDecoder(tUndefined, ValueDecoderFunc(dvd.UndefinedDecodeValue)). - RegisterDecoder(tDateTime, ValueDecoderFunc(dvd.DateTimeDecodeValue)). - RegisterDecoder(tNull, ValueDecoderFunc(dvd.NullDecodeValue)). - RegisterDecoder(tRegex, ValueDecoderFunc(dvd.RegexDecodeValue)). - RegisterDecoder(tDBPointer, ValueDecoderFunc(dvd.DBPointerDecodeValue)). - RegisterDecoder(tTimestamp, ValueDecoderFunc(dvd.TimestampDecodeValue)). - RegisterDecoder(tMinKey, ValueDecoderFunc(dvd.MinKeyDecodeValue)). - RegisterDecoder(tMaxKey, ValueDecoderFunc(dvd.MaxKeyDecodeValue)). - RegisterDecoder(tJavaScript, ValueDecoderFunc(dvd.JavaScriptDecodeValue)). - RegisterDecoder(tSymbol, ValueDecoderFunc(dvd.SymbolDecodeValue)). - RegisterDecoder(tByteSlice, ValueDecoderFunc(dvd.ByteSliceDecodeValue)). - RegisterDecoder(tTime, ValueDecoderFunc(dvd.TimeDecodeValue)). - RegisterDecoder(tEmpty, ValueDecoderFunc(dvd.EmptyInterfaceDecodeValue)). - RegisterDecoder(tOID, ValueDecoderFunc(dvd.ObjectIDDecodeValue)). - RegisterDecoder(tDecimal, ValueDecoderFunc(dvd.Decimal128DecodeValue)). - RegisterDecoder(tJSONNumber, ValueDecoderFunc(dvd.JSONNumberDecodeValue)). - RegisterDecoder(tURL, ValueDecoderFunc(dvd.URLDecodeValue)). - RegisterDecoder(tValueUnmarshaler, ValueDecoderFunc(dvd.ValueUnmarshalerDecodeValue)). - RegisterDecoder(tUnmarshaler, ValueDecoderFunc(dvd.UnmarshalerDecodeValue)). - RegisterDecoder(tCoreDocument, ValueDecoderFunc(dvd.CoreDocumentDecodeValue)). - RegisterDecoder(tCodeWithScope, ValueDecoderFunc(dvd.CodeWithScopeDecodeValue)). - RegisterDefaultDecoder(reflect.Bool, ValueDecoderFunc(dvd.BooleanDecodeValue)). - RegisterDefaultDecoder(reflect.Int, ValueDecoderFunc(dvd.IntDecodeValue)). - RegisterDefaultDecoder(reflect.Int8, ValueDecoderFunc(dvd.IntDecodeValue)). - RegisterDefaultDecoder(reflect.Int16, ValueDecoderFunc(dvd.IntDecodeValue)). - RegisterDefaultDecoder(reflect.Int32, ValueDecoderFunc(dvd.IntDecodeValue)). - RegisterDefaultDecoder(reflect.Int64, ValueDecoderFunc(dvd.IntDecodeValue)). - RegisterDefaultDecoder(reflect.Uint, ValueDecoderFunc(dvd.UintDecodeValue)). - RegisterDefaultDecoder(reflect.Uint8, ValueDecoderFunc(dvd.UintDecodeValue)). - RegisterDefaultDecoder(reflect.Uint16, ValueDecoderFunc(dvd.UintDecodeValue)). - RegisterDefaultDecoder(reflect.Uint32, ValueDecoderFunc(dvd.UintDecodeValue)). - RegisterDefaultDecoder(reflect.Uint64, ValueDecoderFunc(dvd.UintDecodeValue)). - RegisterDefaultDecoder(reflect.Float32, ValueDecoderFunc(dvd.FloatDecodeValue)). - RegisterDefaultDecoder(reflect.Float64, ValueDecoderFunc(dvd.FloatDecodeValue)). - RegisterDefaultDecoder(reflect.Array, ValueDecoderFunc(dvd.ArrayDecodeValue)). - RegisterDefaultDecoder(reflect.Map, ValueDecoderFunc(dvd.MapDecodeValue)). - RegisterDefaultDecoder(reflect.Slice, ValueDecoderFunc(dvd.SliceDecodeValue)). - RegisterDefaultDecoder(reflect.String, ValueDecoderFunc(dvd.StringDecodeValue)). - RegisterDefaultDecoder(reflect.Struct, &StructCodec{cache: make(map[reflect.Type]*structDescription), parser: DefaultStructTagParser}). - RegisterDefaultDecoder(reflect.Ptr, NewPointerCodec()). - RegisterTypeMapEntry(bsontype.Double, tFloat64). - RegisterTypeMapEntry(bsontype.String, tString). - RegisterTypeMapEntry(bsontype.Array, tA). - RegisterTypeMapEntry(bsontype.Binary, tBinary). - RegisterTypeMapEntry(bsontype.Undefined, tUndefined). - RegisterTypeMapEntry(bsontype.ObjectID, tOID). - RegisterTypeMapEntry(bsontype.Boolean, tBool). - RegisterTypeMapEntry(bsontype.DateTime, tDateTime). - RegisterTypeMapEntry(bsontype.Regex, tRegex). - RegisterTypeMapEntry(bsontype.DBPointer, tDBPointer). - RegisterTypeMapEntry(bsontype.JavaScript, tJavaScript). - RegisterTypeMapEntry(bsontype.Symbol, tSymbol). - RegisterTypeMapEntry(bsontype.CodeWithScope, tCodeWithScope). - RegisterTypeMapEntry(bsontype.Int32, tInt32). - RegisterTypeMapEntry(bsontype.Int64, tInt64). - RegisterTypeMapEntry(bsontype.Timestamp, tTimestamp). - RegisterTypeMapEntry(bsontype.Decimal128, tDecimal). - RegisterTypeMapEntry(bsontype.MinKey, tMinKey). - RegisterTypeMapEntry(bsontype.MaxKey, tMaxKey). - RegisterTypeMapEntry(bsontype.Type(0), tD) -} - -// BooleanDecodeValue is the ValueDecoderFunc for bool types. -func (dvd DefaultValueDecoders) BooleanDecodeValue(dctx DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if vr.Type() != bsontype.Boolean { - return fmt.Errorf("cannot decode %v into a boolean", vr.Type()) - } - if !val.IsValid() || !val.CanSet() || val.Kind() != reflect.Bool { - return ValueDecoderError{Name: "BooleanDecodeValue", Kinds: []reflect.Kind{reflect.Bool}, Received: val} - } - - b, err := vr.ReadBoolean() - val.SetBool(b) - return err -} - -// IntDecodeValue is the ValueDecoderFunc for bool types. -func (dvd DefaultValueDecoders) IntDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - var i64 int64 - var err error - switch vr.Type() { - case bsontype.Int32: - i32, err := vr.ReadInt32() - if err != nil { - return err - } - i64 = int64(i32) - case bsontype.Int64: - i64, err = vr.ReadInt64() - if err != nil { - return err - } - case bsontype.Double: - f64, err := vr.ReadDouble() - if err != nil { - return err - } - if !dc.Truncate && math.Floor(f64) != f64 { - return errors.New("IntDecodeValue can only truncate float64 to an integer type when truncation is enabled") - } - if f64 > float64(math.MaxInt64) { - return fmt.Errorf("%g overflows int64", f64) - } - i64 = int64(f64) - default: - return fmt.Errorf("cannot decode %v into an integer type", vr.Type()) - } - - if !val.CanSet() { - return ValueDecoderError{ - Name: "IntDecodeValue", - Kinds: []reflect.Kind{reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int}, - Received: val, - } - } - - switch val.Kind() { - case reflect.Int8: - if i64 < math.MinInt8 || i64 > math.MaxInt8 { - return fmt.Errorf("%d overflows int8", i64) - } - case reflect.Int16: - if i64 < math.MinInt16 || i64 > math.MaxInt16 { - return fmt.Errorf("%d overflows int16", i64) - } - case reflect.Int32: - if i64 < math.MinInt32 || i64 > math.MaxInt32 { - return fmt.Errorf("%d overflows int32", i64) - } - case reflect.Int64: - case reflect.Int: - if int64(int(i64)) != i64 { // Can we fit this inside of an int - return fmt.Errorf("%d overflows int", i64) - } - default: - return ValueDecoderError{ - Name: "IntDecodeValue", - Kinds: []reflect.Kind{reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int}, - Received: val, - } - } - - val.SetInt(i64) - return nil -} - -// UintDecodeValue is the ValueDecoderFunc for uint types. -func (dvd DefaultValueDecoders) UintDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - var i64 int64 - var err error - switch vr.Type() { - case bsontype.Int32: - i32, err := vr.ReadInt32() - if err != nil { - return err - } - i64 = int64(i32) - case bsontype.Int64: - i64, err = vr.ReadInt64() - if err != nil { - return err - } - case bsontype.Double: - f64, err := vr.ReadDouble() - if err != nil { - return err - } - if !dc.Truncate && math.Floor(f64) != f64 { - return errors.New("UintDecodeValue can only truncate float64 to an integer type when truncation is enabled") - } - if f64 > float64(math.MaxInt64) { - return fmt.Errorf("%g overflows int64", f64) - } - i64 = int64(f64) - default: - return fmt.Errorf("cannot decode %v into an integer type", vr.Type()) - } - - if !val.CanSet() { - return ValueDecoderError{ - Name: "UintDecodeValue", - Kinds: []reflect.Kind{reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint}, - Received: val, - } - } - - switch val.Kind() { - case reflect.Uint8: - if i64 < 0 || i64 > math.MaxUint8 { - return fmt.Errorf("%d overflows uint8", i64) - } - case reflect.Uint16: - if i64 < 0 || i64 > math.MaxUint16 { - return fmt.Errorf("%d overflows uint16", i64) - } - case reflect.Uint32: - if i64 < 0 || i64 > math.MaxUint32 { - return fmt.Errorf("%d overflows uint32", i64) - } - case reflect.Uint64: - if i64 < 0 { - return fmt.Errorf("%d overflows uint64", i64) - } - case reflect.Uint: - if i64 < 0 || int64(uint(i64)) != i64 { // Can we fit this inside of an uint - return fmt.Errorf("%d overflows uint", i64) - } - default: - return ValueDecoderError{ - Name: "UintDecodeValue", - Kinds: []reflect.Kind{reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint}, - Received: val, - } - } - - val.SetUint(uint64(i64)) - return nil -} - -// FloatDecodeValue is the ValueDecoderFunc for float types. -func (dvd DefaultValueDecoders) FloatDecodeValue(ec DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - var f float64 - var err error - switch vr.Type() { - case bsontype.Int32: - i32, err := vr.ReadInt32() - if err != nil { - return err - } - f = float64(i32) - case bsontype.Int64: - i64, err := vr.ReadInt64() - if err != nil { - return err - } - f = float64(i64) - case bsontype.Double: - f, err = vr.ReadDouble() - if err != nil { - return err - } - default: - return fmt.Errorf("cannot decode %v into a float32 or float64 type", vr.Type()) - } - - if !val.CanSet() { - return ValueDecoderError{Name: "FloatDecodeValue", Kinds: []reflect.Kind{reflect.Float32, reflect.Float64}, Received: val} - } - - switch val.Kind() { - case reflect.Float32: - if !ec.Truncate && float64(float32(f)) != f { - return errors.New("FloatDecodeValue can only convert float64 to float32 when truncation is allowed") - } - case reflect.Float64: - default: - return ValueDecoderError{Name: "FloatDecodeValue", Kinds: []reflect.Kind{reflect.Float32, reflect.Float64}, Received: val} - } - - val.SetFloat(f) - return nil -} - -// StringDecodeValue is the ValueDecoderFunc for string types. -func (dvd DefaultValueDecoders) StringDecodeValue(dctx DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - var str string - var err error - switch vr.Type() { - // TODO(GODRIVER-577): Handle JavaScript and Symbol BSON types when allowed. - case bsontype.String: - str, err = vr.ReadString() - if err != nil { - return err - } - default: - return fmt.Errorf("cannot decode %v into a string type", vr.Type()) - } - if !val.CanSet() || val.Kind() != reflect.String { - return ValueDecoderError{Name: "StringDecodeValue", Kinds: []reflect.Kind{reflect.String}, Received: val} - } - - val.SetString(str) - return nil -} - -// JavaScriptDecodeValue is the ValueDecoderFunc for the primitive.JavaScript type. -func (DefaultValueDecoders) JavaScriptDecodeValue(dctx DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tJavaScript { - return ValueDecoderError{Name: "BinaryDecodeValue", Types: []reflect.Type{tJavaScript}, Received: val} - } - - if vr.Type() != bsontype.JavaScript { - return fmt.Errorf("cannot decode %v into a primitive.JavaScript", vr.Type()) - } - - js, err := vr.ReadJavascript() - if err != nil { - return err - } - - val.SetString(js) - return nil -} - -// SymbolDecodeValue is the ValueDecoderFunc for the primitive.Symbol type. -func (DefaultValueDecoders) SymbolDecodeValue(dctx DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tSymbol { - return ValueDecoderError{Name: "BinaryDecodeValue", Types: []reflect.Type{tSymbol}, Received: val} - } - - if vr.Type() != bsontype.Symbol { - return fmt.Errorf("cannot decode %v into a primitive.Symbol", vr.Type()) - } - - symbol, err := vr.ReadSymbol() - if err != nil { - return err - } - - val.SetString(symbol) - return nil -} - -// BinaryDecodeValue is the ValueDecoderFunc for Binary. -func (DefaultValueDecoders) BinaryDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tBinary { - return ValueDecoderError{Name: "BinaryDecodeValue", Types: []reflect.Type{tBinary}, Received: val} - } - - if vr.Type() != bsontype.Binary { - return fmt.Errorf("cannot decode %v into a Binary", vr.Type()) - } - - data, subtype, err := vr.ReadBinary() - if err != nil { - return err - } - - val.Set(reflect.ValueOf(primitive.Binary{Subtype: subtype, Data: data})) - return nil -} - -// UndefinedDecodeValue is the ValueDecoderFunc for Undefined. -func (DefaultValueDecoders) UndefinedDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tUndefined { - return ValueDecoderError{Name: "UndefinedDecodeValue", Types: []reflect.Type{tUndefined}, Received: val} - } - - if vr.Type() != bsontype.Undefined { - return fmt.Errorf("cannot decode %v into an Undefined", vr.Type()) - } - - val.Set(reflect.ValueOf(primitive.Undefined{})) - return vr.ReadUndefined() -} - -// ObjectIDDecodeValue is the ValueDecoderFunc for primitive.ObjectID. -func (dvd DefaultValueDecoders) ObjectIDDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tOID { - return ValueDecoderError{Name: "ObjectIDDecodeValue", Types: []reflect.Type{tOID}, Received: val} - } - - if vr.Type() != bsontype.ObjectID { - return fmt.Errorf("cannot decode %v into an ObjectID", vr.Type()) - } - oid, err := vr.ReadObjectID() - val.Set(reflect.ValueOf(oid)) - return err -} - -// DateTimeDecodeValue is the ValueDecoderFunc for DateTime. -func (DefaultValueDecoders) DateTimeDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tDateTime { - return ValueDecoderError{Name: "DateTimeDecodeValue", Types: []reflect.Type{tDateTime}, Received: val} - } - - if vr.Type() != bsontype.DateTime { - return fmt.Errorf("cannot decode %v into a DateTime", vr.Type()) - } - - dt, err := vr.ReadDateTime() - if err != nil { - return err - } - - val.Set(reflect.ValueOf(primitive.DateTime(dt))) - return nil -} - -// NullDecodeValue is the ValueDecoderFunc for Null. -func (DefaultValueDecoders) NullDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tNull { - return ValueDecoderError{Name: "NullDecodeValue", Types: []reflect.Type{tNull}, Received: val} - } - - if vr.Type() != bsontype.Null { - return fmt.Errorf("cannot decode %v into a Null", vr.Type()) - } - - val.Set(reflect.ValueOf(primitive.Null{})) - return vr.ReadNull() -} - -// RegexDecodeValue is the ValueDecoderFunc for Regex. -func (DefaultValueDecoders) RegexDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tRegex { - return ValueDecoderError{Name: "RegexDecodeValue", Types: []reflect.Type{tRegex}, Received: val} - } - - if vr.Type() != bsontype.Regex { - return fmt.Errorf("cannot decode %v into a Regex", vr.Type()) - } - - pattern, options, err := vr.ReadRegex() - if err != nil { - return err - } - - val.Set(reflect.ValueOf(primitive.Regex{Pattern: pattern, Options: options})) - return nil -} - -// DBPointerDecodeValue is the ValueDecoderFunc for DBPointer. -func (DefaultValueDecoders) DBPointerDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tDBPointer { - return ValueDecoderError{Name: "DBPointerDecodeValue", Types: []reflect.Type{tDBPointer}, Received: val} - } - - if vr.Type() != bsontype.DBPointer { - return fmt.Errorf("cannot decode %v into a DBPointer", vr.Type()) - } - - ns, pointer, err := vr.ReadDBPointer() - if err != nil { - return err - } - - val.Set(reflect.ValueOf(primitive.DBPointer{DB: ns, Pointer: pointer})) - return nil -} - -// TimestampDecodeValue is the ValueDecoderFunc for Timestamp. -func (DefaultValueDecoders) TimestampDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tTimestamp { - return ValueDecoderError{Name: "TimestampDecodeValue", Types: []reflect.Type{tTimestamp}, Received: val} - } - - if vr.Type() != bsontype.Timestamp { - return fmt.Errorf("cannot decode %v into a Timestamp", vr.Type()) - } - - t, incr, err := vr.ReadTimestamp() - if err != nil { - return err - } - - val.Set(reflect.ValueOf(primitive.Timestamp{T: t, I: incr})) - return nil -} - -// MinKeyDecodeValue is the ValueDecoderFunc for MinKey. -func (DefaultValueDecoders) MinKeyDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tMinKey { - return ValueDecoderError{Name: "MinKeyDecodeValue", Types: []reflect.Type{tMinKey}, Received: val} - } - - if vr.Type() != bsontype.MinKey { - return fmt.Errorf("cannot decode %v into a MinKey", vr.Type()) - } - - val.Set(reflect.ValueOf(primitive.MinKey{})) - return vr.ReadMinKey() -} - -// MaxKeyDecodeValue is the ValueDecoderFunc for MaxKey. -func (DefaultValueDecoders) MaxKeyDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tMaxKey { - return ValueDecoderError{Name: "MaxKeyDecodeValue", Types: []reflect.Type{tMaxKey}, Received: val} - } - - if vr.Type() != bsontype.MaxKey { - return fmt.Errorf("cannot decode %v into a MaxKey", vr.Type()) - } - - val.Set(reflect.ValueOf(primitive.MaxKey{})) - return vr.ReadMaxKey() -} - -// Decimal128DecodeValue is the ValueDecoderFunc for primitive.Decimal128. -func (dvd DefaultValueDecoders) Decimal128DecodeValue(dctx DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if vr.Type() != bsontype.Decimal128 { - return fmt.Errorf("cannot decode %v into a primitive.Decimal128", vr.Type()) - } - - if !val.CanSet() || val.Type() != tDecimal { - return ValueDecoderError{Name: "Decimal128DecodeValue", Types: []reflect.Type{tDecimal}, Received: val} - } - d128, err := vr.ReadDecimal128() - val.Set(reflect.ValueOf(d128)) - return err -} - -// JSONNumberDecodeValue is the ValueDecoderFunc for json.Number. -func (dvd DefaultValueDecoders) JSONNumberDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tJSONNumber { - return ValueDecoderError{Name: "JSONNumberDecodeValue", Types: []reflect.Type{tJSONNumber}, Received: val} - } - - switch vr.Type() { - case bsontype.Double: - f64, err := vr.ReadDouble() - if err != nil { - return err - } - val.Set(reflect.ValueOf(json.Number(strconv.FormatFloat(f64, 'g', -1, 64)))) - case bsontype.Int32: - i32, err := vr.ReadInt32() - if err != nil { - return err - } - val.Set(reflect.ValueOf(json.Number(strconv.FormatInt(int64(i32), 10)))) - case bsontype.Int64: - i64, err := vr.ReadInt64() - if err != nil { - return err - } - val.Set(reflect.ValueOf(json.Number(strconv.FormatInt(i64, 10)))) - default: - return fmt.Errorf("cannot decode %v into a json.Number", vr.Type()) - } - - return nil -} - -// URLDecodeValue is the ValueDecoderFunc for url.URL. -func (dvd DefaultValueDecoders) URLDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if vr.Type() != bsontype.String { - return fmt.Errorf("cannot decode %v into a *url.URL", vr.Type()) - } - - str, err := vr.ReadString() - if err != nil { - return err - } - - u, err := url.Parse(str) - if err != nil { - return err - } - - if !val.CanSet() || val.Type() != tURL { - return ValueDecoderError{Name: "URLDecodeValue", Types: []reflect.Type{tURL}, Received: val} - } - - val.Set(reflect.ValueOf(u).Elem()) - return nil -} - -// TimeDecodeValue is the ValueDecoderFunc for time.Time. -func (dvd DefaultValueDecoders) TimeDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if vr.Type() != bsontype.DateTime { - return fmt.Errorf("cannot decode %v into a time.Time", vr.Type()) - } - - dt, err := vr.ReadDateTime() - if err != nil { - return err - } - - if !val.CanSet() || val.Type() != tTime { - return ValueDecoderError{Name: "TimeDecodeValue", Types: []reflect.Type{tTime}, Received: val} - } - - val.Set(reflect.ValueOf(time.Unix(dt/1000, dt%1000*1000000).UTC())) - return nil -} - -// ByteSliceDecodeValue is the ValueDecoderFunc for []byte. -func (dvd DefaultValueDecoders) ByteSliceDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if vr.Type() != bsontype.Binary && vr.Type() != bsontype.Null { - return fmt.Errorf("cannot decode %v into a []byte", vr.Type()) - } - - if !val.CanSet() || val.Type() != tByteSlice { - return ValueDecoderError{Name: "ByteSliceDecodeValue", Types: []reflect.Type{tByteSlice}, Received: val} - } - - if vr.Type() == bsontype.Null { - val.Set(reflect.Zero(val.Type())) - return vr.ReadNull() - } - - data, subtype, err := vr.ReadBinary() - if err != nil { - return err - } - if subtype != 0x00 { - return fmt.Errorf("ByteSliceDecodeValue can only be used to decode subtype 0x00 for %s, got %v", bsontype.Binary, subtype) - } - - val.Set(reflect.ValueOf(data)) - return nil -} - -// MapDecodeValue is the ValueDecoderFunc for map[string]* types. -func (dvd DefaultValueDecoders) MapDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Kind() != reflect.Map || val.Type().Key().Kind() != reflect.String { - return ValueDecoderError{Name: "MapDecodeValue", Kinds: []reflect.Kind{reflect.Map}, Received: val} - } - - switch vr.Type() { - case bsontype.Type(0), bsontype.EmbeddedDocument: - case bsontype.Null: - val.Set(reflect.Zero(val.Type())) - return vr.ReadNull() - default: - return fmt.Errorf("cannot decode %v into a %s", vr.Type(), val.Type()) - } - - dr, err := vr.ReadDocument() - if err != nil { - return err - } - - if val.IsNil() { - val.Set(reflect.MakeMap(val.Type())) - } - - eType := val.Type().Elem() - decoder, err := dc.LookupDecoder(eType) - if err != nil { - return err - } - - if eType == tEmpty { - dc.Ancestor = val.Type() - } - - keyType := val.Type().Key() - for { - key, vr, err := dr.ReadElement() - if err == bsonrw.ErrEOD { - break - } - if err != nil { - return err - } - - elem := reflect.New(eType).Elem() - - err = decoder.DecodeValue(dc, vr, elem) - if err != nil { - return err - } - - val.SetMapIndex(reflect.ValueOf(key).Convert(keyType), elem) - } - return nil -} - -// ArrayDecodeValue is the ValueDecoderFunc for array types. -func (dvd DefaultValueDecoders) ArrayDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.IsValid() || val.Kind() != reflect.Array { - return ValueDecoderError{Name: "ArrayDecodeValue", Kinds: []reflect.Kind{reflect.Array}, Received: val} - } - - switch vr.Type() { - case bsontype.Array: - case bsontype.Type(0), bsontype.EmbeddedDocument: - if val.Type().Elem() != tE { - return fmt.Errorf("cannot decode document into %s", val.Type()) - } - default: - return fmt.Errorf("cannot decode %v into an array", vr.Type()) - } - - var elemsFunc func(DecodeContext, bsonrw.ValueReader, reflect.Value) ([]reflect.Value, error) - switch val.Type().Elem() { - case tE: - elemsFunc = dvd.decodeD - default: - elemsFunc = dvd.decodeDefault - } - - elems, err := elemsFunc(dc, vr, val) - if err != nil { - return err - } - - if len(elems) > val.Len() { - return fmt.Errorf("more elements returned in array than can fit inside %s", val.Type()) - } - - for idx, elem := range elems { - val.Index(idx).Set(elem) - } - - return nil -} - -// SliceDecodeValue is the ValueDecoderFunc for slice types. -func (dvd DefaultValueDecoders) SliceDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Kind() != reflect.Slice { - return ValueDecoderError{Name: "SliceDecodeValue", Kinds: []reflect.Kind{reflect.Slice}, Received: val} - } - - switch vr.Type() { - case bsontype.Array: - case bsontype.Null: - val.Set(reflect.Zero(val.Type())) - return vr.ReadNull() - case bsontype.Type(0), bsontype.EmbeddedDocument: - if val.Type().Elem() != tE { - return fmt.Errorf("cannot decode document into %s", val.Type()) - } - default: - return fmt.Errorf("cannot decode %v into a slice", vr.Type()) - } - - var elemsFunc func(DecodeContext, bsonrw.ValueReader, reflect.Value) ([]reflect.Value, error) - switch val.Type().Elem() { - case tE: - dc.Ancestor = val.Type() - elemsFunc = dvd.decodeD - default: - elemsFunc = dvd.decodeDefault - } - - elems, err := elemsFunc(dc, vr, val) - if err != nil { - return err - } - - if val.IsNil() { - val.Set(reflect.MakeSlice(val.Type(), 0, len(elems))) - } - - val.SetLen(0) - val.Set(reflect.Append(val, elems...)) - - return nil -} - -// ValueUnmarshalerDecodeValue is the ValueDecoderFunc for ValueUnmarshaler implementations. -func (dvd DefaultValueDecoders) ValueUnmarshalerDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.IsValid() || (!val.Type().Implements(tValueUnmarshaler) && !reflect.PtrTo(val.Type()).Implements(tValueUnmarshaler)) { - return ValueDecoderError{Name: "ValueUnmarshalerDecodeValue", Types: []reflect.Type{tValueUnmarshaler}, Received: val} - } - - if val.Kind() == reflect.Ptr && val.IsNil() { - if !val.CanSet() { - return ValueDecoderError{Name: "ValueUnmarshalerDecodeValue", Types: []reflect.Type{tValueUnmarshaler}, Received: val} - } - val.Set(reflect.New(val.Type().Elem())) - } - - if !val.Type().Implements(tValueUnmarshaler) { - if !val.CanAddr() { - return ValueDecoderError{Name: "ValueUnmarshalerDecodeValue", Types: []reflect.Type{tValueUnmarshaler}, Received: val} - } - val = val.Addr() // If they type doesn't implement the interface, a pointer to it must. - } - - t, src, err := bsonrw.Copier{}.CopyValueToBytes(vr) - if err != nil { - return err - } - - fn := val.Convert(tValueUnmarshaler).MethodByName("UnmarshalBSONValue") - errVal := fn.Call([]reflect.Value{reflect.ValueOf(t), reflect.ValueOf(src)})[0] - if !errVal.IsNil() { - return errVal.Interface().(error) - } - return nil -} - -// UnmarshalerDecodeValue is the ValueDecoderFunc for Unmarshaler implementations. -func (dvd DefaultValueDecoders) UnmarshalerDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.IsValid() || (!val.Type().Implements(tUnmarshaler) && !reflect.PtrTo(val.Type()).Implements(tUnmarshaler)) { - return ValueDecoderError{Name: "UnmarshalerDecodeValue", Types: []reflect.Type{tUnmarshaler}, Received: val} - } - - if val.Kind() == reflect.Ptr && val.IsNil() { - if !val.CanSet() { - return ValueDecoderError{Name: "UnmarshalerDecodeValue", Types: []reflect.Type{tUnmarshaler}, Received: val} - } - val.Set(reflect.New(val.Type().Elem())) - } - - if !val.Type().Implements(tUnmarshaler) { - if !val.CanAddr() { - return ValueDecoderError{Name: "UnmarshalerDecodeValue", Types: []reflect.Type{tUnmarshaler}, Received: val} - } - val = val.Addr() // If they type doesn't implement the interface, a pointer to it must. - } - - _, src, err := bsonrw.Copier{}.CopyValueToBytes(vr) - if err != nil { - return err - } - - fn := val.Convert(tUnmarshaler).MethodByName("UnmarshalBSON") - errVal := fn.Call([]reflect.Value{reflect.ValueOf(src)})[0] - if !errVal.IsNil() { - return errVal.Interface().(error) - } - return nil -} - -// EmptyInterfaceDecodeValue is the ValueDecoderFunc for interface{}. -func (dvd DefaultValueDecoders) EmptyInterfaceDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tEmpty { - return ValueDecoderError{Name: "EmptyInterfaceDecodeValue", Types: []reflect.Type{tEmpty}, Received: val} - } - - rtype, err := dc.LookupTypeMapEntry(vr.Type()) - if err != nil { - switch vr.Type() { - case bsontype.EmbeddedDocument: - if dc.Ancestor != nil { - rtype = dc.Ancestor - break - } - rtype = tD - case bsontype.Null: - val.Set(reflect.Zero(val.Type())) - return vr.ReadNull() - default: - return err - } - } - - decoder, err := dc.LookupDecoder(rtype) - if err != nil { - return err - } - - elem := reflect.New(rtype).Elem() - err = decoder.DecodeValue(dc, vr, elem) - if err != nil { - return err - } - - val.Set(elem) - return nil -} - -// CoreDocumentDecodeValue is the ValueDecoderFunc for bsoncore.Document. -func (DefaultValueDecoders) CoreDocumentDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tCoreDocument { - return ValueDecoderError{Name: "CoreDocumentDecodeValue", Types: []reflect.Type{tCoreDocument}, Received: val} - } - - if val.IsNil() { - val.Set(reflect.MakeSlice(val.Type(), 0, 0)) - } - - val.SetLen(0) - - cdoc, err := bsonrw.Copier{}.AppendDocumentBytes(val.Interface().(bsoncore.Document), vr) - val.Set(reflect.ValueOf(cdoc)) - return err -} - -func (dvd DefaultValueDecoders) decodeDefault(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) ([]reflect.Value, error) { - elems := make([]reflect.Value, 0) - - ar, err := vr.ReadArray() - if err != nil { - return nil, err - } - - eType := val.Type().Elem() - - decoder, err := dc.LookupDecoder(eType) - if err != nil { - return nil, err - } - - for { - vr, err := ar.ReadValue() - if err == bsonrw.ErrEOA { - break - } - if err != nil { - return nil, err - } - - elem := reflect.New(eType).Elem() - - err = decoder.DecodeValue(dc, vr, elem) - if err != nil { - return nil, err - } - elems = append(elems, elem) - } - - return elems, nil -} - -// CodeWithScopeDecodeValue is the ValueDecoderFunc for CodeWithScope. -func (dvd DefaultValueDecoders) CodeWithScopeDecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Type() != tCodeWithScope { - return ValueDecoderError{Name: "CodeWithScopeDecodeValue", Types: []reflect.Type{tCodeWithScope}, Received: val} - } - - if vr.Type() != bsontype.CodeWithScope { - return fmt.Errorf("cannot decode %v into a primitive.CodeWithScope", vr.Type()) - } - - code, dr, err := vr.ReadCodeWithScope() - if err != nil { - return err - } - - scope := reflect.New(tD).Elem() - - elems, err := dvd.decodeElemsFromDocumentReader(dc, dr) - if err != nil { - return err - } - - scope.Set(reflect.MakeSlice(tD, 0, len(elems))) - scope.Set(reflect.Append(scope, elems...)) - - val.Set(reflect.ValueOf(primitive.CodeWithScope{Code: primitive.JavaScript(code), Scope: scope.Interface().(primitive.D)})) - return nil -} - -func (dvd DefaultValueDecoders) decodeD(dc DecodeContext, vr bsonrw.ValueReader, _ reflect.Value) ([]reflect.Value, error) { - switch vr.Type() { - case bsontype.Type(0), bsontype.EmbeddedDocument: - default: - return nil, fmt.Errorf("cannot decode %v into a D", vr.Type()) - } - - dr, err := vr.ReadDocument() - if err != nil { - return nil, err - } - - return dvd.decodeElemsFromDocumentReader(dc, dr) -} - -func (DefaultValueDecoders) decodeElemsFromDocumentReader(dc DecodeContext, dr bsonrw.DocumentReader) ([]reflect.Value, error) { - decoder, err := dc.LookupDecoder(tEmpty) - if err != nil { - return nil, err - } - - elems := make([]reflect.Value, 0) - for { - key, vr, err := dr.ReadElement() - if err == bsonrw.ErrEOD { - break - } - if err != nil { - return nil, err - } - - val := reflect.New(tEmpty).Elem() - err = decoder.DecodeValue(dc, vr, val) - if err != nil { - return nil, err - } - - elems = append(elems, reflect.ValueOf(primitive.E{Key: key, Value: val.Interface()})) - } - - return elems, nil -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_encoders.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_encoders.go deleted file mode 100644 index 39ebfc7ec..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/default_value_encoders.go +++ /dev/null @@ -1,648 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import ( - "encoding/json" - "errors" - "fmt" - "math" - "net/url" - "reflect" - "sync" - "time" - - "go.mongodb.org/mongo-driver/bson/bsonrw" - "go.mongodb.org/mongo-driver/bson/bsontype" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/x/bsonx/bsoncore" -) - -var defaultValueEncoders DefaultValueEncoders - -var bvwPool = bsonrw.NewBSONValueWriterPool() - -var sliceWriterPool = sync.Pool{ - New: func() interface{} { - sw := make(bsonrw.SliceWriter, 0, 0) - return &sw - }, -} - -func encodeElement(ec EncodeContext, dw bsonrw.DocumentWriter, e primitive.E) error { - vw, err := dw.WriteDocumentElement(e.Key) - if err != nil { - return err - } - - if e.Value == nil { - return vw.WriteNull() - } - encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value)) - if err != nil { - return err - } - - err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value)) - if err != nil { - return err - } - return nil -} - -// DefaultValueEncoders is a namespace type for the default ValueEncoders used -// when creating a registry. -type DefaultValueEncoders struct{} - -// RegisterDefaultEncoders will register the encoder methods attached to DefaultValueEncoders with -// the provided RegistryBuilder. -func (dve DefaultValueEncoders) RegisterDefaultEncoders(rb *RegistryBuilder) { - if rb == nil { - panic(errors.New("argument to RegisterDefaultEncoders must not be nil")) - } - rb. - RegisterEncoder(tByteSlice, ValueEncoderFunc(dve.ByteSliceEncodeValue)). - RegisterEncoder(tTime, ValueEncoderFunc(dve.TimeEncodeValue)). - RegisterEncoder(tEmpty, ValueEncoderFunc(dve.EmptyInterfaceEncodeValue)). - RegisterEncoder(tOID, ValueEncoderFunc(dve.ObjectIDEncodeValue)). - RegisterEncoder(tDecimal, ValueEncoderFunc(dve.Decimal128EncodeValue)). - RegisterEncoder(tJSONNumber, ValueEncoderFunc(dve.JSONNumberEncodeValue)). - RegisterEncoder(tURL, ValueEncoderFunc(dve.URLEncodeValue)). - RegisterEncoder(tValueMarshaler, ValueEncoderFunc(dve.ValueMarshalerEncodeValue)). - RegisterEncoder(tMarshaler, ValueEncoderFunc(dve.MarshalerEncodeValue)). - RegisterEncoder(tProxy, ValueEncoderFunc(dve.ProxyEncodeValue)). - RegisterEncoder(tJavaScript, ValueEncoderFunc(dve.JavaScriptEncodeValue)). - RegisterEncoder(tSymbol, ValueEncoderFunc(dve.SymbolEncodeValue)). - RegisterEncoder(tBinary, ValueEncoderFunc(dve.BinaryEncodeValue)). - RegisterEncoder(tUndefined, ValueEncoderFunc(dve.UndefinedEncodeValue)). - RegisterEncoder(tDateTime, ValueEncoderFunc(dve.DateTimeEncodeValue)). - RegisterEncoder(tNull, ValueEncoderFunc(dve.NullEncodeValue)). - RegisterEncoder(tRegex, ValueEncoderFunc(dve.RegexEncodeValue)). - RegisterEncoder(tDBPointer, ValueEncoderFunc(dve.DBPointerEncodeValue)). - RegisterEncoder(tTimestamp, ValueEncoderFunc(dve.TimestampEncodeValue)). - RegisterEncoder(tMinKey, ValueEncoderFunc(dve.MinKeyEncodeValue)). - RegisterEncoder(tMaxKey, ValueEncoderFunc(dve.MaxKeyEncodeValue)). - RegisterEncoder(tCoreDocument, ValueEncoderFunc(dve.CoreDocumentEncodeValue)). - RegisterEncoder(tCodeWithScope, ValueEncoderFunc(dve.CodeWithScopeEncodeValue)). - RegisterDefaultEncoder(reflect.Bool, ValueEncoderFunc(dve.BooleanEncodeValue)). - RegisterDefaultEncoder(reflect.Int, ValueEncoderFunc(dve.IntEncodeValue)). - RegisterDefaultEncoder(reflect.Int8, ValueEncoderFunc(dve.IntEncodeValue)). - RegisterDefaultEncoder(reflect.Int16, ValueEncoderFunc(dve.IntEncodeValue)). - RegisterDefaultEncoder(reflect.Int32, ValueEncoderFunc(dve.IntEncodeValue)). - RegisterDefaultEncoder(reflect.Int64, ValueEncoderFunc(dve.IntEncodeValue)). - RegisterDefaultEncoder(reflect.Uint, ValueEncoderFunc(dve.UintEncodeValue)). - RegisterDefaultEncoder(reflect.Uint8, ValueEncoderFunc(dve.UintEncodeValue)). - RegisterDefaultEncoder(reflect.Uint16, ValueEncoderFunc(dve.UintEncodeValue)). - RegisterDefaultEncoder(reflect.Uint32, ValueEncoderFunc(dve.UintEncodeValue)). - RegisterDefaultEncoder(reflect.Uint64, ValueEncoderFunc(dve.UintEncodeValue)). - RegisterDefaultEncoder(reflect.Float32, ValueEncoderFunc(dve.FloatEncodeValue)). - RegisterDefaultEncoder(reflect.Float64, ValueEncoderFunc(dve.FloatEncodeValue)). - RegisterDefaultEncoder(reflect.Array, ValueEncoderFunc(dve.ArrayEncodeValue)). - RegisterDefaultEncoder(reflect.Map, ValueEncoderFunc(dve.MapEncodeValue)). - RegisterDefaultEncoder(reflect.Slice, ValueEncoderFunc(dve.SliceEncodeValue)). - RegisterDefaultEncoder(reflect.String, ValueEncoderFunc(dve.StringEncodeValue)). - RegisterDefaultEncoder(reflect.Struct, &StructCodec{cache: make(map[reflect.Type]*structDescription), parser: DefaultStructTagParser}). - RegisterDefaultEncoder(reflect.Ptr, NewPointerCodec()) -} - -// BooleanEncodeValue is the ValueEncoderFunc for bool types. -func (dve DefaultValueEncoders) BooleanEncodeValue(ectx EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Kind() != reflect.Bool { - return ValueEncoderError{Name: "BooleanEncodeValue", Kinds: []reflect.Kind{reflect.Bool}, Received: val} - } - return vw.WriteBoolean(val.Bool()) -} - -func fitsIn32Bits(i int64) bool { - return math.MinInt32 <= i && i <= math.MaxInt32 -} - -// IntEncodeValue is the ValueEncoderFunc for int types. -func (dve DefaultValueEncoders) IntEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - switch val.Kind() { - case reflect.Int8, reflect.Int16, reflect.Int32: - return vw.WriteInt32(int32(val.Int())) - case reflect.Int: - i64 := val.Int() - if fitsIn32Bits(i64) { - return vw.WriteInt32(int32(i64)) - } - return vw.WriteInt64(i64) - case reflect.Int64: - i64 := val.Int() - if ec.MinSize && fitsIn32Bits(i64) { - return vw.WriteInt32(int32(i64)) - } - return vw.WriteInt64(i64) - } - - return ValueEncoderError{ - Name: "IntEncodeValue", - Kinds: []reflect.Kind{reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int}, - Received: val, - } -} - -// UintEncodeValue is the ValueEncoderFunc for uint types. -func (dve DefaultValueEncoders) UintEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - switch val.Kind() { - case reflect.Uint8, reflect.Uint16: - return vw.WriteInt32(int32(val.Uint())) - case reflect.Uint, reflect.Uint32, reflect.Uint64: - u64 := val.Uint() - if ec.MinSize && u64 <= math.MaxInt32 { - return vw.WriteInt32(int32(u64)) - } - if u64 > math.MaxInt64 { - return fmt.Errorf("%d overflows int64", u64) - } - return vw.WriteInt64(int64(u64)) - } - - return ValueEncoderError{ - Name: "UintEncodeValue", - Kinds: []reflect.Kind{reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint}, - Received: val, - } -} - -// FloatEncodeValue is the ValueEncoderFunc for float types. -func (dve DefaultValueEncoders) FloatEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - switch val.Kind() { - case reflect.Float32, reflect.Float64: - return vw.WriteDouble(val.Float()) - } - - return ValueEncoderError{Name: "FloatEncodeValue", Kinds: []reflect.Kind{reflect.Float32, reflect.Float64}, Received: val} -} - -// StringEncodeValue is the ValueEncoderFunc for string types. -func (dve DefaultValueEncoders) StringEncodeValue(ectx EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if val.Kind() != reflect.String { - return ValueEncoderError{ - Name: "StringEncodeValue", - Kinds: []reflect.Kind{reflect.String}, - Received: val, - } - } - - return vw.WriteString(val.String()) -} - -// ObjectIDEncodeValue is the ValueEncoderFunc for primitive.ObjectID. -func (dve DefaultValueEncoders) ObjectIDEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tOID { - return ValueEncoderError{Name: "ObjectIDEncodeValue", Types: []reflect.Type{tOID}, Received: val} - } - return vw.WriteObjectID(val.Interface().(primitive.ObjectID)) -} - -// Decimal128EncodeValue is the ValueEncoderFunc for primitive.Decimal128. -func (dve DefaultValueEncoders) Decimal128EncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tDecimal { - return ValueEncoderError{Name: "Decimal128EncodeValue", Types: []reflect.Type{tDecimal}, Received: val} - } - return vw.WriteDecimal128(val.Interface().(primitive.Decimal128)) -} - -// JSONNumberEncodeValue is the ValueEncoderFunc for json.Number. -func (dve DefaultValueEncoders) JSONNumberEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tJSONNumber { - return ValueEncoderError{Name: "JSONNumberEncodeValue", Types: []reflect.Type{tJSONNumber}, Received: val} - } - jsnum := val.Interface().(json.Number) - - // Attempt int first, then float64 - if i64, err := jsnum.Int64(); err == nil { - return dve.IntEncodeValue(ec, vw, reflect.ValueOf(i64)) - } - - f64, err := jsnum.Float64() - if err != nil { - return err - } - - return dve.FloatEncodeValue(ec, vw, reflect.ValueOf(f64)) -} - -// URLEncodeValue is the ValueEncoderFunc for url.URL. -func (dve DefaultValueEncoders) URLEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tURL { - return ValueEncoderError{Name: "URLEncodeValue", Types: []reflect.Type{tURL}, Received: val} - } - u := val.Interface().(url.URL) - return vw.WriteString(u.String()) -} - -// TimeEncodeValue is the ValueEncoderFunc for time.TIme. -func (dve DefaultValueEncoders) TimeEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tTime { - return ValueEncoderError{Name: "TimeEncodeValue", Types: []reflect.Type{tTime}, Received: val} - } - tt := val.Interface().(time.Time) - return vw.WriteDateTime(tt.Unix()*1000 + int64(tt.Nanosecond()/1e6)) -} - -// ByteSliceEncodeValue is the ValueEncoderFunc for []byte. -func (dve DefaultValueEncoders) ByteSliceEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tByteSlice { - return ValueEncoderError{Name: "ByteSliceEncodeValue", Types: []reflect.Type{tByteSlice}, Received: val} - } - if val.IsNil() { - return vw.WriteNull() - } - return vw.WriteBinary(val.Interface().([]byte)) -} - -// MapEncodeValue is the ValueEncoderFunc for map[string]* types. -func (dve DefaultValueEncoders) MapEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Kind() != reflect.Map || val.Type().Key().Kind() != reflect.String { - return ValueEncoderError{Name: "MapEncodeValue", Kinds: []reflect.Kind{reflect.Map}, Received: val} - } - - if val.IsNil() { - // If we have a nill map but we can't WriteNull, that means we're probably trying to encode - // to a TopLevel document. We can't currently tell if this is what actually happened, but if - // there's a deeper underlying problem, the error will also be returned from WriteDocument, - // so just continue. The operations on a map reflection value are valid, so we can call - // MapKeys within mapEncodeValue without a problem. - err := vw.WriteNull() - if err == nil { - return nil - } - } - - dw, err := vw.WriteDocument() - if err != nil { - return err - } - - return dve.mapEncodeValue(ec, dw, val, nil) -} - -// mapEncodeValue handles encoding of the values of a map. The collisionFn returns -// true if the provided key exists, this is mainly used for inline maps in the -// struct codec. -func (dve DefaultValueEncoders) mapEncodeValue(ec EncodeContext, dw bsonrw.DocumentWriter, val reflect.Value, collisionFn func(string) bool) error { - - encoder, err := ec.LookupEncoder(val.Type().Elem()) - if err != nil { - return err - } - - keys := val.MapKeys() - for _, key := range keys { - if collisionFn != nil && collisionFn(key.String()) { - return fmt.Errorf("Key %s of inlined map conflicts with a struct field name", key) - } - vw, err := dw.WriteDocumentElement(key.String()) - if err != nil { - return err - } - - if enc, ok := encoder.(ValueEncoder); ok { - err = enc.EncodeValue(ec, vw, val.MapIndex(key)) - if err != nil { - return err - } - continue - } - err = encoder.EncodeValue(ec, vw, val.MapIndex(key)) - if err != nil { - return err - } - } - - return dw.WriteDocumentEnd() -} - -// ArrayEncodeValue is the ValueEncoderFunc for array types. -func (dve DefaultValueEncoders) ArrayEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Kind() != reflect.Array { - return ValueEncoderError{Name: "ArrayEncodeValue", Kinds: []reflect.Kind{reflect.Array}, Received: val} - } - - // If we have a []primitive.E we want to treat it as a document instead of as an array. - if val.Type().Elem() == tE { - dw, err := vw.WriteDocument() - if err != nil { - return err - } - - for idx := 0; idx < val.Len(); idx++ { - e := val.Index(idx).Interface().(primitive.E) - err = encodeElement(ec, dw, e) - if err != nil { - return err - } - } - - return dw.WriteDocumentEnd() - } - - aw, err := vw.WriteArray() - if err != nil { - return err - } - - encoder, err := ec.LookupEncoder(val.Type().Elem()) - if err != nil { - return err - } - - for idx := 0; idx < val.Len(); idx++ { - vw, err := aw.WriteArrayElement() - if err != nil { - return err - } - - err = encoder.EncodeValue(ec, vw, val.Index(idx)) - if err != nil { - return err - } - } - return aw.WriteArrayEnd() -} - -// SliceEncodeValue is the ValueEncoderFunc for slice types. -func (dve DefaultValueEncoders) SliceEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Kind() != reflect.Slice { - return ValueEncoderError{Name: "SliceEncodeValue", Kinds: []reflect.Kind{reflect.Slice}, Received: val} - } - - if val.IsNil() { - return vw.WriteNull() - } - - // If we have a []primitive.E we want to treat it as a document instead of as an array. - if val.Type().ConvertibleTo(tD) { - d := val.Convert(tD).Interface().(primitive.D) - - dw, err := vw.WriteDocument() - if err != nil { - return err - } - - for _, e := range d { - err = encodeElement(ec, dw, e) - if err != nil { - return err - } - } - - return dw.WriteDocumentEnd() - } - - aw, err := vw.WriteArray() - if err != nil { - return err - } - - encoder, err := ec.LookupEncoder(val.Type().Elem()) - if err != nil { - return err - } - - for idx := 0; idx < val.Len(); idx++ { - vw, err := aw.WriteArrayElement() - if err != nil { - return err - } - - err = encoder.EncodeValue(ec, vw, val.Index(idx)) - if err != nil { - return err - } - } - return aw.WriteArrayEnd() -} - -// EmptyInterfaceEncodeValue is the ValueEncoderFunc for interface{}. -func (dve DefaultValueEncoders) EmptyInterfaceEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tEmpty { - return ValueEncoderError{Name: "EmptyInterfaceEncodeValue", Types: []reflect.Type{tEmpty}, Received: val} - } - - if val.IsNil() { - return vw.WriteNull() - } - encoder, err := ec.LookupEncoder(val.Elem().Type()) - if err != nil { - return err - } - - return encoder.EncodeValue(ec, vw, val.Elem()) -} - -// ValueMarshalerEncodeValue is the ValueEncoderFunc for ValueMarshaler implementations. -func (dve DefaultValueEncoders) ValueMarshalerEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || !val.Type().Implements(tValueMarshaler) { - return ValueEncoderError{Name: "ValueMarshalerEncodeValue", Types: []reflect.Type{tValueMarshaler}, Received: val} - } - - fn := val.Convert(tValueMarshaler).MethodByName("MarshalBSONValue") - returns := fn.Call(nil) - if !returns[2].IsNil() { - return returns[2].Interface().(error) - } - t, data := returns[0].Interface().(bsontype.Type), returns[1].Interface().([]byte) - return bsonrw.Copier{}.CopyValueFromBytes(vw, t, data) -} - -// MarshalerEncodeValue is the ValueEncoderFunc for Marshaler implementations. -func (dve DefaultValueEncoders) MarshalerEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || !val.Type().Implements(tMarshaler) { - return ValueEncoderError{Name: "MarshalerEncodeValue", Types: []reflect.Type{tMarshaler}, Received: val} - } - - fn := val.Convert(tMarshaler).MethodByName("MarshalBSON") - returns := fn.Call(nil) - if !returns[1].IsNil() { - return returns[1].Interface().(error) - } - data := returns[0].Interface().([]byte) - return bsonrw.Copier{}.CopyValueFromBytes(vw, bsontype.EmbeddedDocument, data) -} - -// ProxyEncodeValue is the ValueEncoderFunc for Proxy implementations. -func (dve DefaultValueEncoders) ProxyEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || !val.Type().Implements(tProxy) { - return ValueEncoderError{Name: "ProxyEncodeValue", Types: []reflect.Type{tProxy}, Received: val} - } - - fn := val.Convert(tProxy).MethodByName("ProxyBSON") - returns := fn.Call(nil) - if !returns[1].IsNil() { - return returns[1].Interface().(error) - } - data := returns[0] - var encoder ValueEncoder - var err error - if data.Elem().IsValid() { - encoder, err = ec.LookupEncoder(data.Elem().Type()) - } else { - encoder, err = ec.LookupEncoder(nil) - } - if err != nil { - return err - } - return encoder.EncodeValue(ec, vw, data.Elem()) -} - -// JavaScriptEncodeValue is the ValueEncoderFunc for the primitive.JavaScript type. -func (DefaultValueEncoders) JavaScriptEncodeValue(ectx EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tJavaScript { - return ValueEncoderError{Name: "JavaScriptEncodeValue", Types: []reflect.Type{tJavaScript}, Received: val} - } - - return vw.WriteJavascript(val.String()) -} - -// SymbolEncodeValue is the ValueEncoderFunc for the primitive.Symbol type. -func (DefaultValueEncoders) SymbolEncodeValue(ectx EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tSymbol { - return ValueEncoderError{Name: "SymbolEncodeValue", Types: []reflect.Type{tSymbol}, Received: val} - } - - return vw.WriteSymbol(val.String()) -} - -// BinaryEncodeValue is the ValueEncoderFunc for Binary. -func (DefaultValueEncoders) BinaryEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tBinary { - return ValueEncoderError{Name: "BinaryEncodeValue", Types: []reflect.Type{tBinary}, Received: val} - } - b := val.Interface().(primitive.Binary) - - return vw.WriteBinaryWithSubtype(b.Data, b.Subtype) -} - -// UndefinedEncodeValue is the ValueEncoderFunc for Undefined. -func (DefaultValueEncoders) UndefinedEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tUndefined { - return ValueEncoderError{Name: "UndefinedEncodeValue", Types: []reflect.Type{tUndefined}, Received: val} - } - - return vw.WriteUndefined() -} - -// DateTimeEncodeValue is the ValueEncoderFunc for DateTime. -func (DefaultValueEncoders) DateTimeEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tDateTime { - return ValueEncoderError{Name: "DateTimeEncodeValue", Types: []reflect.Type{tDateTime}, Received: val} - } - - return vw.WriteDateTime(val.Int()) -} - -// NullEncodeValue is the ValueEncoderFunc for Null. -func (DefaultValueEncoders) NullEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tNull { - return ValueEncoderError{Name: "NullEncodeValue", Types: []reflect.Type{tNull}, Received: val} - } - - return vw.WriteNull() -} - -// RegexEncodeValue is the ValueEncoderFunc for Regex. -func (DefaultValueEncoders) RegexEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tRegex { - return ValueEncoderError{Name: "RegexEncodeValue", Types: []reflect.Type{tRegex}, Received: val} - } - - regex := val.Interface().(primitive.Regex) - - return vw.WriteRegex(regex.Pattern, regex.Options) -} - -// DBPointerEncodeValue is the ValueEncoderFunc for DBPointer. -func (DefaultValueEncoders) DBPointerEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tDBPointer { - return ValueEncoderError{Name: "DBPointerEncodeValue", Types: []reflect.Type{tDBPointer}, Received: val} - } - - dbp := val.Interface().(primitive.DBPointer) - - return vw.WriteDBPointer(dbp.DB, dbp.Pointer) -} - -// TimestampEncodeValue is the ValueEncoderFunc for Timestamp. -func (DefaultValueEncoders) TimestampEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tTimestamp { - return ValueEncoderError{Name: "TimestampEncodeValue", Types: []reflect.Type{tTimestamp}, Received: val} - } - - ts := val.Interface().(primitive.Timestamp) - - return vw.WriteTimestamp(ts.T, ts.I) -} - -// MinKeyEncodeValue is the ValueEncoderFunc for MinKey. -func (DefaultValueEncoders) MinKeyEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tMinKey { - return ValueEncoderError{Name: "MinKeyEncodeValue", Types: []reflect.Type{tMinKey}, Received: val} - } - - return vw.WriteMinKey() -} - -// MaxKeyEncodeValue is the ValueEncoderFunc for MaxKey. -func (DefaultValueEncoders) MaxKeyEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tMaxKey { - return ValueEncoderError{Name: "MaxKeyEncodeValue", Types: []reflect.Type{tMaxKey}, Received: val} - } - - return vw.WriteMaxKey() -} - -// CoreDocumentEncodeValue is the ValueEncoderFunc for bsoncore.Document. -func (DefaultValueEncoders) CoreDocumentEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tCoreDocument { - return ValueEncoderError{Name: "CoreDocumentEncodeValue", Types: []reflect.Type{tCoreDocument}, Received: val} - } - - cdoc := val.Interface().(bsoncore.Document) - - return bsonrw.Copier{}.CopyDocumentFromBytes(vw, cdoc) -} - -// CodeWithScopeEncodeValue is the ValueEncoderFunc for CodeWithScope. -func (dve DefaultValueEncoders) CodeWithScopeEncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Type() != tCodeWithScope { - return ValueEncoderError{Name: "CodeWithScopeEncodeValue", Types: []reflect.Type{tCodeWithScope}, Received: val} - } - - cws := val.Interface().(primitive.CodeWithScope) - - dw, err := vw.WriteCodeWithScope(string(cws.Code)) - if err != nil { - return err - } - - sw := sliceWriterPool.Get().(*bsonrw.SliceWriter) - defer sliceWriterPool.Put(sw) - *sw = (*sw)[:0] - - scopeVW := bvwPool.Get(sw) - defer bvwPool.Put(scopeVW) - - encoder, err := ec.LookupEncoder(reflect.TypeOf(cws.Scope)) - if err != nil { - return err - } - - err = encoder.EncodeValue(ec, scopeVW, reflect.ValueOf(cws.Scope)) - if err != nil { - return err - } - - err = bsonrw.Copier{}.CopyBytesToDocumentWriter(dw, *sw) - if err != nil { - return err - } - return dw.WriteDocumentEnd() -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/doc.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/doc.go deleted file mode 100644 index 978511cbf..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/doc.go +++ /dev/null @@ -1,61 +0,0 @@ -// Package bsoncodec provides a system for encoding values to BSON representations and decoding -// values from BSON representations. This package considers both binary BSON and ExtendedJSON as -// BSON representations. The types in this package enable a flexible system for handling this -// encoding and decoding. -// -// The codec system is composed of two parts: -// -// 1) ValueEncoders and ValueDecoders that handle encoding and decoding Go values to and from BSON -// representations. -// -// 2) A Registry that holds these ValueEncoders and ValueDecoders and provides methods for -// retrieving them. -// -// ValueEncoders and ValueDecoders -// -// The ValueEncoder interface is implemented by types that can encode a provided Go type to BSON. -// The value to encode is provided as a reflect.Value and a bsonrw.ValueWriter is used within the -// EncodeValue method to actually create the BSON representation. For convenience, ValueEncoderFunc -// is provided to allow use of a function with the correct signature as a ValueEncoder. An -// EncodeContext instance is provided to allow implementations to lookup further ValueEncoders and -// to provide configuration information. -// -// The ValueDecoder interface is the inverse of the ValueEncoder. Implementations should ensure that -// the value they receive is settable. Similar to ValueEncoderFunc, ValueDecoderFunc is provided to -// allow the use of a function with the correct signature as a ValueDecoder. A DecodeContext -// instance is provided and serves similar functionality to the EncodeContext. -// -// Registry and RegistryBuilder -// -// A Registry is an immutable store for ValueEncoders, ValueDecoders, and a type map. For looking up -// ValueEncoders and Decoders the Registry first attempts to find a ValueEncoder or ValueDecoder for -// the type provided; if one cannot be found it then checks to see if a registered ValueEncoder or -// ValueDecoder exists for an interface the type implements. Finally, the reflect.Kind of the type -// is used to lookup a default ValueEncoder or ValueDecoder for that kind. If no ValueEncoder or -// ValueDecoder can be found, an error is returned. -// -// The Registry also holds a type map. This allows users to retrieve the Go type that should be used -// when decoding a BSON value into an empty interface. This is primarily only used for the empty -// interface ValueDecoder. -// -// A RegistryBuilder is used to construct a Registry. The Register methods are used to associate -// either a reflect.Type or a reflect.Kind with a ValueEncoder or ValueDecoder. A RegistryBuilder -// returned from NewRegistryBuilder contains no registered ValueEncoders nor ValueDecoders and -// contains an empty type map. -// -// The RegisterTypeMapEntry method handles associating a BSON type with a Go type. For example, if -// you want to decode BSON int64 and int32 values into Go int instances, you would do the following: -// -// var regbuilder *RegistryBuilder = ... intType := reflect.TypeOf(int(0)) -// regbuilder.RegisterTypeMapEntry(bsontype.Int64, intType).RegisterTypeMapEntry(bsontype.Int32, -// intType) -// -// DefaultValueEncoders and DefaultValueDecoders -// -// The DefaultValueEncoders and DefaultValueDecoders types provide a full set of ValueEncoders and -// ValueDecoders for handling a wide range of Go types, including all of the types within the -// primitive package. To make registering these codecs easier, a helper method on each type is -// provided. For the DefaultValueEncoders type the method is called RegisterDefaultEncoders and for -// the DefaultValueDecoders type the method is called RegisterDefaultDecoders, this method also -// handles registering type map entries for each BSON type. -package bsoncodec diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/mode.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/mode.go deleted file mode 100644 index fbd9f0a9e..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/mode.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import "fmt" - -type mode int - -const ( - _ mode = iota - mTopLevel - mDocument - mArray - mValue - mElement - mCodeWithScope - mSpacer -) - -func (m mode) String() string { - var str string - - switch m { - case mTopLevel: - str = "TopLevel" - case mDocument: - str = "DocumentMode" - case mArray: - str = "ArrayMode" - case mValue: - str = "ValueMode" - case mElement: - str = "ElementMode" - case mCodeWithScope: - str = "CodeWithScopeMode" - case mSpacer: - str = "CodeWithScopeSpacerFrame" - default: - str = "UnknownMode" - } - - return str -} - -// TransitionError is an error returned when an invalid progressing a -// ValueReader or ValueWriter state machine occurs. -type TransitionError struct { - parent mode - current mode - destination mode -} - -func (te TransitionError) Error() string { - if te.destination == mode(0) { - return fmt.Sprintf("invalid state transition: cannot read/write value while in %s", te.current) - } - if te.parent == mode(0) { - return fmt.Sprintf("invalid state transition: %s -> %s", te.current, te.destination) - } - return fmt.Sprintf("invalid state transition: %s -> %s; parent %s", te.current, te.destination, te.parent) -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/pointer_codec.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/pointer_codec.go deleted file mode 100644 index 0d9502f21..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/pointer_codec.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import ( - "reflect" - "sync" - - "go.mongodb.org/mongo-driver/bson/bsonrw" - "go.mongodb.org/mongo-driver/bson/bsontype" -) - -var defaultPointerCodec = &PointerCodec{ - ecache: make(map[reflect.Type]ValueEncoder), - dcache: make(map[reflect.Type]ValueDecoder), -} - -var _ ValueEncoder = &PointerCodec{} -var _ ValueDecoder = &PointerCodec{} - -// PointerCodec is the Codec used for pointers. -type PointerCodec struct { - ecache map[reflect.Type]ValueEncoder - dcache map[reflect.Type]ValueDecoder - l sync.RWMutex -} - -// NewPointerCodec returns a PointerCodec that has been initialized. -func NewPointerCodec() *PointerCodec { - return &PointerCodec{ - ecache: make(map[reflect.Type]ValueEncoder), - dcache: make(map[reflect.Type]ValueDecoder), - } -} - -// EncodeValue handles encoding a pointer by either encoding it to BSON Null if the pointer is nil -// or looking up an encoder for the type of value the pointer points to. -func (pc *PointerCodec) EncodeValue(ec EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if val.Kind() != reflect.Ptr { - if !val.IsValid() { - return vw.WriteNull() - } - return ValueEncoderError{Name: "PointerCodec.EncodeValue", Kinds: []reflect.Kind{reflect.Ptr}, Received: val} - } - - if val.IsNil() { - return vw.WriteNull() - } - - pc.l.RLock() - enc, ok := pc.ecache[val.Type()] - pc.l.RUnlock() - if ok { - if enc == nil { - return ErrNoEncoder{Type: val.Type()} - } - return enc.EncodeValue(ec, vw, val.Elem()) - } - - enc, err := ec.LookupEncoder(val.Type().Elem()) - pc.l.Lock() - pc.ecache[val.Type()] = enc - pc.l.Unlock() - if err != nil { - return err - } - - return enc.EncodeValue(ec, vw, val.Elem()) -} - -// DecodeValue handles decoding a pointer by looking up a decoder for the type it points to and -// using that to decode. If the BSON value is Null, this method will set the pointer to nil. -func (pc *PointerCodec) DecodeValue(dc DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Kind() != reflect.Ptr { - return ValueDecoderError{Name: "PointerCodec.DecodeValue", Kinds: []reflect.Kind{reflect.Ptr}, Received: val} - } - - if vr.Type() == bsontype.Null { - val.Set(reflect.Zero(val.Type())) - return vr.ReadNull() - } - - if val.IsNil() { - val.Set(reflect.New(val.Type().Elem())) - } - - pc.l.RLock() - dec, ok := pc.dcache[val.Type()] - pc.l.RUnlock() - if ok { - if dec == nil { - return ErrNoDecoder{Type: val.Type()} - } - return dec.DecodeValue(dc, vr, val.Elem()) - } - - dec, err := dc.LookupDecoder(val.Type().Elem()) - pc.l.Lock() - pc.dcache[val.Type()] = dec - pc.l.Unlock() - if err != nil { - return err - } - - return dec.DecodeValue(dc, vr, val.Elem()) -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/proxy.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/proxy.go deleted file mode 100644 index 4cf2b01ab..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/proxy.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -// Proxy is an interface implemented by types that cannot themselves be directly encoded. Types -// that implement this interface with have ProxyBSON called during the encoding process and that -// value will be encoded in place for the implementer. -type Proxy interface { - ProxyBSON() (interface{}, error) -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/registry.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/registry.go deleted file mode 100644 index 42e362b6a..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/registry.go +++ /dev/null @@ -1,384 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import ( - "errors" - "reflect" - "sync" - - "go.mongodb.org/mongo-driver/bson/bsontype" -) - -// ErrNilType is returned when nil is passed to either LookupEncoder or LookupDecoder. -var ErrNilType = errors.New("cannot perform a decoder lookup on ") - -// ErrNotPointer is returned when a non-pointer type is provided to LookupDecoder. -var ErrNotPointer = errors.New("non-pointer provided to LookupDecoder") - -// ErrNoEncoder is returned when there wasn't an encoder available for a type. -type ErrNoEncoder struct { - Type reflect.Type -} - -func (ene ErrNoEncoder) Error() string { - if ene.Type == nil { - return "no encoder found for " - } - return "no encoder found for " + ene.Type.String() -} - -// ErrNoDecoder is returned when there wasn't a decoder available for a type. -type ErrNoDecoder struct { - Type reflect.Type -} - -func (end ErrNoDecoder) Error() string { - return "no decoder found for " + end.Type.String() -} - -// ErrNoTypeMapEntry is returned when there wasn't a type available for the provided BSON type. -type ErrNoTypeMapEntry struct { - Type bsontype.Type -} - -func (entme ErrNoTypeMapEntry) Error() string { - return "no type map entry found for " + entme.Type.String() -} - -// ErrNotInterface is returned when the provided type is not an interface. -var ErrNotInterface = errors.New("The provided type is not an interface") - -var defaultRegistry *Registry - -func init() { - defaultRegistry = buildDefaultRegistry() -} - -// A RegistryBuilder is used to build a Registry. This type is not goroutine -// safe. -type RegistryBuilder struct { - typeEncoders map[reflect.Type]ValueEncoder - interfaceEncoders []interfaceValueEncoder - kindEncoders map[reflect.Kind]ValueEncoder - - typeDecoders map[reflect.Type]ValueDecoder - interfaceDecoders []interfaceValueDecoder - kindDecoders map[reflect.Kind]ValueDecoder - - typeMap map[bsontype.Type]reflect.Type -} - -// A Registry is used to store and retrieve codecs for types and interfaces. This type is the main -// typed passed around and Encoders and Decoders are constructed from it. -type Registry struct { - typeEncoders map[reflect.Type]ValueEncoder - typeDecoders map[reflect.Type]ValueDecoder - - interfaceEncoders []interfaceValueEncoder - interfaceDecoders []interfaceValueDecoder - - kindEncoders map[reflect.Kind]ValueEncoder - kindDecoders map[reflect.Kind]ValueDecoder - - typeMap map[bsontype.Type]reflect.Type - - mu sync.RWMutex -} - -// NewRegistryBuilder creates a new empty RegistryBuilder. -func NewRegistryBuilder() *RegistryBuilder { - return &RegistryBuilder{ - typeEncoders: make(map[reflect.Type]ValueEncoder), - typeDecoders: make(map[reflect.Type]ValueDecoder), - - interfaceEncoders: make([]interfaceValueEncoder, 0), - interfaceDecoders: make([]interfaceValueDecoder, 0), - - kindEncoders: make(map[reflect.Kind]ValueEncoder), - kindDecoders: make(map[reflect.Kind]ValueDecoder), - - typeMap: make(map[bsontype.Type]reflect.Type), - } -} - -func buildDefaultRegistry() *Registry { - rb := NewRegistryBuilder() - defaultValueEncoders.RegisterDefaultEncoders(rb) - defaultValueDecoders.RegisterDefaultDecoders(rb) - return rb.Build() -} - -// RegisterCodec will register the provided ValueCodec for the provided type. -func (rb *RegistryBuilder) RegisterCodec(t reflect.Type, codec ValueCodec) *RegistryBuilder { - rb.RegisterEncoder(t, codec) - rb.RegisterDecoder(t, codec) - return rb -} - -// RegisterEncoder will register the provided ValueEncoder to the provided type. -// -// The type registered will be used directly, so an encoder can be registered for a type and a -// different encoder can be registered for a pointer to that type. -func (rb *RegistryBuilder) RegisterEncoder(t reflect.Type, enc ValueEncoder) *RegistryBuilder { - if t == tEmpty { - rb.typeEncoders[t] = enc - return rb - } - switch t.Kind() { - case reflect.Interface: - for idx, ir := range rb.interfaceEncoders { - if ir.i == t { - rb.interfaceEncoders[idx].ve = enc - return rb - } - } - - rb.interfaceEncoders = append(rb.interfaceEncoders, interfaceValueEncoder{i: t, ve: enc}) - default: - rb.typeEncoders[t] = enc - } - return rb -} - -// RegisterDecoder will register the provided ValueDecoder to the provided type. -// -// The type registered will be used directly, so a decoder can be registered for a type and a -// different decoder can be registered for a pointer to that type. -func (rb *RegistryBuilder) RegisterDecoder(t reflect.Type, dec ValueDecoder) *RegistryBuilder { - if t == nil { - rb.typeDecoders[nil] = dec - return rb - } - if t == tEmpty { - rb.typeDecoders[t] = dec - return rb - } - switch t.Kind() { - case reflect.Interface: - for idx, ir := range rb.interfaceDecoders { - if ir.i == t { - rb.interfaceDecoders[idx].vd = dec - return rb - } - } - - rb.interfaceDecoders = append(rb.interfaceDecoders, interfaceValueDecoder{i: t, vd: dec}) - default: - rb.typeDecoders[t] = dec - } - return rb -} - -// RegisterDefaultEncoder will registr the provided ValueEncoder to the provided -// kind. -func (rb *RegistryBuilder) RegisterDefaultEncoder(kind reflect.Kind, enc ValueEncoder) *RegistryBuilder { - rb.kindEncoders[kind] = enc - return rb -} - -// RegisterDefaultDecoder will register the provided ValueDecoder to the -// provided kind. -func (rb *RegistryBuilder) RegisterDefaultDecoder(kind reflect.Kind, dec ValueDecoder) *RegistryBuilder { - rb.kindDecoders[kind] = dec - return rb -} - -// RegisterTypeMapEntry will register the provided type to the BSON type. The primary usage for this -// mapping is decoding situations where an empty interface is used and a default type needs to be -// created and decoded into. -// -// NOTE: It is unlikely that registering a type for BSON Embedded Document is actually desired. By -// registering a type map entry for BSON Embedded Document the type registered will be used in any -// case where a BSON Embedded Document will be decoded into an empty interface. For example, if you -// register primitive.M, the EmptyInterface decoder will always use primitive.M, even if an ancestor -// was a primitive.D. -func (rb *RegistryBuilder) RegisterTypeMapEntry(bt bsontype.Type, rt reflect.Type) *RegistryBuilder { - rb.typeMap[bt] = rt - return rb -} - -// Build creates a Registry from the current state of this RegistryBuilder. -func (rb *RegistryBuilder) Build() *Registry { - registry := new(Registry) - - registry.typeEncoders = make(map[reflect.Type]ValueEncoder) - for t, enc := range rb.typeEncoders { - registry.typeEncoders[t] = enc - } - - registry.typeDecoders = make(map[reflect.Type]ValueDecoder) - for t, dec := range rb.typeDecoders { - registry.typeDecoders[t] = dec - } - - registry.interfaceEncoders = make([]interfaceValueEncoder, len(rb.interfaceEncoders)) - copy(registry.interfaceEncoders, rb.interfaceEncoders) - - registry.interfaceDecoders = make([]interfaceValueDecoder, len(rb.interfaceDecoders)) - copy(registry.interfaceDecoders, rb.interfaceDecoders) - - registry.kindEncoders = make(map[reflect.Kind]ValueEncoder) - for kind, enc := range rb.kindEncoders { - registry.kindEncoders[kind] = enc - } - - registry.kindDecoders = make(map[reflect.Kind]ValueDecoder) - for kind, dec := range rb.kindDecoders { - registry.kindDecoders[kind] = dec - } - - registry.typeMap = make(map[bsontype.Type]reflect.Type) - for bt, rt := range rb.typeMap { - registry.typeMap[bt] = rt - } - - return registry -} - -// LookupEncoder will inspect the registry for an encoder that satisfies the -// type provided. An encoder registered for a specific type will take -// precedence over an encoder registered for an interface the type satisfies, -// which takes precedence over an encoder for the reflect.Kind of the value. If -// no encoder can be found, an error is returned. -func (r *Registry) LookupEncoder(t reflect.Type) (ValueEncoder, error) { - encodererr := ErrNoEncoder{Type: t} - r.mu.RLock() - enc, found := r.lookupTypeEncoder(t) - r.mu.RUnlock() - if found { - if enc == nil { - return nil, ErrNoEncoder{Type: t} - } - return enc, nil - } - - enc, found = r.lookupInterfaceEncoder(t) - if found { - r.mu.Lock() - r.typeEncoders[t] = enc - r.mu.Unlock() - return enc, nil - } - - if t == nil { - r.mu.Lock() - r.typeEncoders[t] = nil - r.mu.Unlock() - return nil, encodererr - } - - enc, found = r.kindEncoders[t.Kind()] - if !found { - r.mu.Lock() - r.typeEncoders[t] = nil - r.mu.Unlock() - return nil, encodererr - } - - r.mu.Lock() - r.typeEncoders[t] = enc - r.mu.Unlock() - return enc, nil -} - -func (r *Registry) lookupTypeEncoder(t reflect.Type) (ValueEncoder, bool) { - enc, found := r.typeEncoders[t] - return enc, found -} - -func (r *Registry) lookupInterfaceEncoder(t reflect.Type) (ValueEncoder, bool) { - if t == nil { - return nil, false - } - for _, ienc := range r.interfaceEncoders { - if !t.Implements(ienc.i) { - continue - } - - return ienc.ve, true - } - return nil, false -} - -// LookupDecoder will inspect the registry for a decoder that satisfies the -// type provided. A decoder registered for a specific type will take -// precedence over a decoder registered for an interface the type satisfies, -// which takes precedence over a decoder for the reflect.Kind of the value. If -// no decoder can be found, an error is returned. -func (r *Registry) LookupDecoder(t reflect.Type) (ValueDecoder, error) { - if t == nil { - return nil, ErrNilType - } - decodererr := ErrNoDecoder{Type: t} - r.mu.RLock() - dec, found := r.lookupTypeDecoder(t) - r.mu.RUnlock() - if found { - if dec == nil { - return nil, ErrNoDecoder{Type: t} - } - return dec, nil - } - - dec, found = r.lookupInterfaceDecoder(t) - if found { - r.mu.Lock() - r.typeDecoders[t] = dec - r.mu.Unlock() - return dec, nil - } - - dec, found = r.kindDecoders[t.Kind()] - if !found { - r.mu.Lock() - r.typeDecoders[t] = nil - r.mu.Unlock() - return nil, decodererr - } - - r.mu.Lock() - r.typeDecoders[t] = dec - r.mu.Unlock() - return dec, nil -} - -func (r *Registry) lookupTypeDecoder(t reflect.Type) (ValueDecoder, bool) { - dec, found := r.typeDecoders[t] - return dec, found -} - -func (r *Registry) lookupInterfaceDecoder(t reflect.Type) (ValueDecoder, bool) { - for _, idec := range r.interfaceDecoders { - if !t.Implements(idec.i) && !reflect.PtrTo(t).Implements(idec.i) { - continue - } - - return idec.vd, true - } - return nil, false -} - -// LookupTypeMapEntry inspects the registry's type map for a Go type for the corresponding BSON -// type. If no type is found, ErrNoTypeMapEntry is returned. -func (r *Registry) LookupTypeMapEntry(bt bsontype.Type) (reflect.Type, error) { - t, ok := r.typeMap[bt] - if !ok || t == nil { - return nil, ErrNoTypeMapEntry{Type: bt} - } - return t, nil -} - -type interfaceValueEncoder struct { - i reflect.Type - ve ValueEncoder -} - -type interfaceValueDecoder struct { - i reflect.Type - vd ValueDecoder -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_codec.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_codec.go deleted file mode 100644 index 56eeff94b..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_codec.go +++ /dev/null @@ -1,367 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import ( - "errors" - "fmt" - "reflect" - "strings" - "sync" - - "go.mongodb.org/mongo-driver/bson/bsonrw" - "go.mongodb.org/mongo-driver/bson/bsontype" -) - -var defaultStructCodec = &StructCodec{ - cache: make(map[reflect.Type]*structDescription), - parser: DefaultStructTagParser, -} - -// Zeroer allows custom struct types to implement a report of zero -// state. All struct types that don't implement Zeroer or where IsZero -// returns false are considered to be not zero. -type Zeroer interface { - IsZero() bool -} - -// StructCodec is the Codec used for struct values. -type StructCodec struct { - cache map[reflect.Type]*structDescription - l sync.RWMutex - parser StructTagParser -} - -var _ ValueEncoder = &StructCodec{} -var _ ValueDecoder = &StructCodec{} - -// NewStructCodec returns a StructCodec that uses p for struct tag parsing. -func NewStructCodec(p StructTagParser) (*StructCodec, error) { - if p == nil { - return nil, errors.New("a StructTagParser must be provided to NewStructCodec") - } - - return &StructCodec{ - cache: make(map[reflect.Type]*structDescription), - parser: p, - }, nil -} - -// EncodeValue handles encoding generic struct types. -func (sc *StructCodec) EncodeValue(r EncodeContext, vw bsonrw.ValueWriter, val reflect.Value) error { - if !val.IsValid() || val.Kind() != reflect.Struct { - return ValueEncoderError{Name: "StructCodec.EncodeValue", Kinds: []reflect.Kind{reflect.Struct}, Received: val} - } - - sd, err := sc.describeStruct(r.Registry, val.Type()) - if err != nil { - return err - } - - dw, err := vw.WriteDocument() - if err != nil { - return err - } - var rv reflect.Value - for _, desc := range sd.fl { - if desc.inline == nil { - rv = val.Field(desc.idx) - } else { - rv = val.FieldByIndex(desc.inline) - } - - if desc.encoder == nil { - return ErrNoEncoder{Type: rv.Type()} - } - - encoder := desc.encoder - - iszero := sc.isZero - if iz, ok := encoder.(CodecZeroer); ok { - iszero = iz.IsTypeZero - } - - if desc.omitEmpty && iszero(rv.Interface()) { - continue - } - - vw2, err := dw.WriteDocumentElement(desc.name) - if err != nil { - return err - } - - ectx := EncodeContext{Registry: r.Registry, MinSize: desc.minSize} - err = encoder.EncodeValue(ectx, vw2, rv) - if err != nil { - return err - } - } - - if sd.inlineMap >= 0 { - rv := val.Field(sd.inlineMap) - collisionFn := func(key string) bool { - _, exists := sd.fm[key] - return exists - } - - return defaultValueEncoders.mapEncodeValue(r, dw, rv, collisionFn) - } - - return dw.WriteDocumentEnd() -} - -// DecodeValue implements the Codec interface. -// By default, map types in val will not be cleared. If a map has existing key/value pairs, it will be extended with the new ones from vr. -// For slices, the decoder will set the length of the slice to zero and append all elements. The underlying array will not be cleared. -func (sc *StructCodec) DecodeValue(r DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error { - if !val.CanSet() || val.Kind() != reflect.Struct { - return ValueDecoderError{Name: "StructCodec.DecodeValue", Kinds: []reflect.Kind{reflect.Struct}, Received: val} - } - - switch vr.Type() { - case bsontype.Type(0), bsontype.EmbeddedDocument: - default: - return fmt.Errorf("cannot decode %v into a %s", vr.Type(), val.Type()) - } - - sd, err := sc.describeStruct(r.Registry, val.Type()) - if err != nil { - return err - } - - var decoder ValueDecoder - var inlineMap reflect.Value - if sd.inlineMap >= 0 { - inlineMap = val.Field(sd.inlineMap) - if inlineMap.IsNil() { - inlineMap.Set(reflect.MakeMap(inlineMap.Type())) - } - decoder, err = r.LookupDecoder(inlineMap.Type().Elem()) - if err != nil { - return err - } - } - - dr, err := vr.ReadDocument() - if err != nil { - return err - } - - for { - name, vr, err := dr.ReadElement() - if err == bsonrw.ErrEOD { - break - } - if err != nil { - return err - } - - fd, exists := sd.fm[name] - if !exists { - // if the original name isn't found in the struct description, try again with the name in lowercase - // this could match if a BSON tag isn't specified because by default, describeStruct lowercases all field - // names - fd, exists = sd.fm[strings.ToLower(name)] - } - - if !exists { - if sd.inlineMap < 0 { - // The encoding/json package requires a flag to return on error for non-existent fields. - // This functionality seems appropriate for the struct codec. - err = vr.Skip() - if err != nil { - return err - } - continue - } - - elem := reflect.New(inlineMap.Type().Elem()).Elem() - err = decoder.DecodeValue(r, vr, elem) - if err != nil { - return err - } - inlineMap.SetMapIndex(reflect.ValueOf(name), elem) - continue - } - - var field reflect.Value - if fd.inline == nil { - field = val.Field(fd.idx) - } else { - field = val.FieldByIndex(fd.inline) - } - - if !field.CanSet() { // Being settable is a super set of being addressable. - return fmt.Errorf("cannot decode element '%s' into field %v; it is not settable", name, field) - } - if field.Kind() == reflect.Ptr && field.IsNil() { - field.Set(reflect.New(field.Type().Elem())) - } - field = field.Addr() - - dctx := DecodeContext{Registry: r.Registry, Truncate: fd.truncate || r.Truncate} - if fd.decoder == nil { - return ErrNoDecoder{Type: field.Elem().Type()} - } - - if decoder, ok := fd.decoder.(ValueDecoder); ok { - err = decoder.DecodeValue(dctx, vr, field.Elem()) - if err != nil { - return err - } - continue - } - err = fd.decoder.DecodeValue(dctx, vr, field) - if err != nil { - return err - } - } - - return nil -} - -func (sc *StructCodec) isZero(i interface{}) bool { - v := reflect.ValueOf(i) - - // check the value validity - if !v.IsValid() { - return true - } - - if z, ok := v.Interface().(Zeroer); ok && (v.Kind() != reflect.Ptr || !v.IsNil()) { - return z.IsZero() - } - - switch v.Kind() { - case reflect.Array, reflect.Map, reflect.Slice, reflect.String: - return v.Len() == 0 - case reflect.Bool: - return !v.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.Interface, reflect.Ptr: - return v.IsNil() - } - - return false -} - -type structDescription struct { - fm map[string]fieldDescription - fl []fieldDescription - inlineMap int -} - -type fieldDescription struct { - name string - idx int - omitEmpty bool - minSize bool - truncate bool - inline []int - encoder ValueEncoder - decoder ValueDecoder -} - -func (sc *StructCodec) describeStruct(r *Registry, t reflect.Type) (*structDescription, error) { - // We need to analyze the struct, including getting the tags, collecting - // information about inlining, and create a map of the field name to the field. - sc.l.RLock() - ds, exists := sc.cache[t] - sc.l.RUnlock() - if exists { - return ds, nil - } - - numFields := t.NumField() - sd := &structDescription{ - fm: make(map[string]fieldDescription, numFields), - fl: make([]fieldDescription, 0, numFields), - inlineMap: -1, - } - - for i := 0; i < numFields; i++ { - sf := t.Field(i) - if sf.PkgPath != "" { - // unexported, ignore - continue - } - - encoder, err := r.LookupEncoder(sf.Type) - if err != nil { - encoder = nil - } - decoder, err := r.LookupDecoder(sf.Type) - if err != nil { - decoder = nil - } - - description := fieldDescription{idx: i, encoder: encoder, decoder: decoder} - - stags, err := sc.parser.ParseStructTags(sf) - if err != nil { - return nil, err - } - if stags.Skip { - continue - } - description.name = stags.Name - description.omitEmpty = stags.OmitEmpty - description.minSize = stags.MinSize - description.truncate = stags.Truncate - - if stags.Inline { - switch sf.Type.Kind() { - case reflect.Map: - if sd.inlineMap >= 0 { - return nil, errors.New("(struct " + t.String() + ") multiple inline maps") - } - if sf.Type.Key() != tString { - return nil, errors.New("(struct " + t.String() + ") inline map must have a string keys") - } - sd.inlineMap = description.idx - case reflect.Struct: - inlinesf, err := sc.describeStruct(r, sf.Type) - if err != nil { - return nil, err - } - for _, fd := range inlinesf.fl { - if _, exists := sd.fm[fd.name]; exists { - return nil, fmt.Errorf("(struct %s) duplicated key %s", t.String(), fd.name) - } - if fd.inline == nil { - fd.inline = []int{i, fd.idx} - } else { - fd.inline = append([]int{i}, fd.inline...) - } - sd.fm[fd.name] = fd - sd.fl = append(sd.fl, fd) - } - default: - return nil, fmt.Errorf("(struct %s) inline fields must be either a struct or a map", t.String()) - } - continue - } - - if _, exists := sd.fm[description.name]; exists { - return nil, fmt.Errorf("struct %s) duplicated key %s", t.String(), description.name) - } - - sd.fm[description.name] = description - sd.fl = append(sd.fl, description) - } - - sc.l.Lock() - sc.cache[t] = sd - sc.l.Unlock() - - return sd, nil -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_tag_parser.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_tag_parser.go deleted file mode 100644 index 69d0ae4d0..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/struct_tag_parser.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import ( - "reflect" - "strings" -) - -// StructTagParser returns the struct tags for a given struct field. -type StructTagParser interface { - ParseStructTags(reflect.StructField) (StructTags, error) -} - -// StructTagParserFunc is an adapter that allows a generic function to be used -// as a StructTagParser. -type StructTagParserFunc func(reflect.StructField) (StructTags, error) - -// ParseStructTags implements the StructTagParser interface. -func (stpf StructTagParserFunc) ParseStructTags(sf reflect.StructField) (StructTags, error) { - return stpf(sf) -} - -// StructTags represents the struct tag fields that the StructCodec uses during -// the encoding and decoding process. -// -// In the case of a struct, the lowercased field name is used as the key for each exported -// field but this behavior may be changed using a struct tag. The tag may also contain flags to -// adjust the marshalling behavior for the field. -// -// The properties are defined below: -// -// OmitEmpty Only include the field if it's not set to the zero value for the type or to -// empty slices or maps. -// -// MinSize Marshal an integer of a type larger than 32 bits value as an int32, if that's -// feasible while preserving the numeric value. -// -// Truncate When unmarshaling a BSON double, it is permitted to lose precision to fit within -// a float32. -// -// Inline Inline the field, which must be a struct or a map, causing all of its fields -// or keys to be processed as if they were part of the outer struct. For maps, -// keys must not conflict with the bson keys of other struct fields. -// -// Skip This struct field should be skipped. This is usually denoted by parsing a "-" -// for the name. -// -// TODO(skriptble): Add tags for undefined as nil and for null as nil. -type StructTags struct { - Name string - OmitEmpty bool - MinSize bool - Truncate bool - Inline bool - Skip bool -} - -// DefaultStructTagParser is the StructTagParser used by the StructCodec by default. -// It will handle the bson struct tag. See the documentation for StructTags to see -// what each of the returned fields means. -// -// If there is no name in the struct tag fields, the struct field name is lowercased. -// The tag formats accepted are: -// -// "[][,[,]]" -// -// `(...) bson:"[][,[,]]" (...)` -// -// An example: -// -// type T struct { -// A bool -// B int "myb" -// C string "myc,omitempty" -// D string `bson:",omitempty" json:"jsonkey"` -// E int64 ",minsize" -// F int64 "myf,omitempty,minsize" -// } -// -// A struct tag either consisting entirely of '-' or with a bson key with a -// value consisting entirely of '-' will return a StructTags with Skip true and -// the remaining fields will be their default values. -var DefaultStructTagParser StructTagParserFunc = func(sf reflect.StructField) (StructTags, error) { - key := strings.ToLower(sf.Name) - tag, ok := sf.Tag.Lookup("bson") - if !ok && !strings.Contains(string(sf.Tag), ":") && len(sf.Tag) > 0 { - tag = string(sf.Tag) - } - var st StructTags - if tag == "-" { - st.Skip = true - return st, nil - } - - for idx, str := range strings.Split(tag, ",") { - if idx == 0 && str != "" { - key = str - } - switch str { - case "omitempty": - st.OmitEmpty = true - case "minsize": - st.MinSize = true - case "truncate": - st.Truncate = true - case "inline": - st.Inline = true - } - } - - st.Name = key - - return st, nil -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/types.go b/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/types.go deleted file mode 100644 index 77264876a..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsoncodec/types.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsoncodec - -import ( - "encoding/json" - "net/url" - "reflect" - "time" - - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/x/bsonx/bsoncore" -) - -var ptBool = reflect.TypeOf((*bool)(nil)) -var ptInt8 = reflect.TypeOf((*int8)(nil)) -var ptInt16 = reflect.TypeOf((*int16)(nil)) -var ptInt32 = reflect.TypeOf((*int32)(nil)) -var ptInt64 = reflect.TypeOf((*int64)(nil)) -var ptInt = reflect.TypeOf((*int)(nil)) -var ptUint8 = reflect.TypeOf((*uint8)(nil)) -var ptUint16 = reflect.TypeOf((*uint16)(nil)) -var ptUint32 = reflect.TypeOf((*uint32)(nil)) -var ptUint64 = reflect.TypeOf((*uint64)(nil)) -var ptUint = reflect.TypeOf((*uint)(nil)) -var ptFloat32 = reflect.TypeOf((*float32)(nil)) -var ptFloat64 = reflect.TypeOf((*float64)(nil)) -var ptString = reflect.TypeOf((*string)(nil)) - -var tBool = reflect.TypeOf(false) -var tFloat32 = reflect.TypeOf(float32(0)) -var tFloat64 = reflect.TypeOf(float64(0)) -var tInt = reflect.TypeOf(int(0)) -var tInt8 = reflect.TypeOf(int8(0)) -var tInt16 = reflect.TypeOf(int16(0)) -var tInt32 = reflect.TypeOf(int32(0)) -var tInt64 = reflect.TypeOf(int64(0)) -var tString = reflect.TypeOf("") -var tTime = reflect.TypeOf(time.Time{}) -var tUint = reflect.TypeOf(uint(0)) -var tUint8 = reflect.TypeOf(uint8(0)) -var tUint16 = reflect.TypeOf(uint16(0)) -var tUint32 = reflect.TypeOf(uint32(0)) -var tUint64 = reflect.TypeOf(uint64(0)) - -var tEmpty = reflect.TypeOf((*interface{})(nil)).Elem() -var tByteSlice = reflect.TypeOf([]byte(nil)) -var tByte = reflect.TypeOf(byte(0x00)) -var tURL = reflect.TypeOf(url.URL{}) -var tJSONNumber = reflect.TypeOf(json.Number("")) - -var tValueMarshaler = reflect.TypeOf((*ValueMarshaler)(nil)).Elem() -var tValueUnmarshaler = reflect.TypeOf((*ValueUnmarshaler)(nil)).Elem() -var tMarshaler = reflect.TypeOf((*Marshaler)(nil)).Elem() -var tUnmarshaler = reflect.TypeOf((*Unmarshaler)(nil)).Elem() -var tProxy = reflect.TypeOf((*Proxy)(nil)).Elem() - -var tBinary = reflect.TypeOf(primitive.Binary{}) -var tUndefined = reflect.TypeOf(primitive.Undefined{}) -var tOID = reflect.TypeOf(primitive.ObjectID{}) -var tDateTime = reflect.TypeOf(primitive.DateTime(0)) -var tNull = reflect.TypeOf(primitive.Null{}) -var tRegex = reflect.TypeOf(primitive.Regex{}) -var tCodeWithScope = reflect.TypeOf(primitive.CodeWithScope{}) -var tDBPointer = reflect.TypeOf(primitive.DBPointer{}) -var tJavaScript = reflect.TypeOf(primitive.JavaScript("")) -var tSymbol = reflect.TypeOf(primitive.Symbol("")) -var tTimestamp = reflect.TypeOf(primitive.Timestamp{}) -var tDecimal = reflect.TypeOf(primitive.Decimal128{}) -var tMinKey = reflect.TypeOf(primitive.MinKey{}) -var tMaxKey = reflect.TypeOf(primitive.MaxKey{}) -var tD = reflect.TypeOf(primitive.D{}) -var tA = reflect.TypeOf(primitive.A{}) -var tE = reflect.TypeOf(primitive.E{}) - -var tCoreDocument = reflect.TypeOf(bsoncore.Document{}) diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/copier.go b/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/copier.go deleted file mode 100644 index 02e3a7e3d..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/copier.go +++ /dev/null @@ -1,389 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsonrw - -import ( - "fmt" - "io" - - "go.mongodb.org/mongo-driver/bson/bsontype" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/x/bsonx/bsoncore" -) - -// Copier is a type that allows copying between ValueReaders, ValueWriters, and -// []byte values. -type Copier struct{} - -// NewCopier creates a new copier with the given registry. If a nil registry is provided -// a default registry is used. -func NewCopier() Copier { - return Copier{} -} - -// CopyDocument handles copying a document from src to dst. -func CopyDocument(dst ValueWriter, src ValueReader) error { - return Copier{}.CopyDocument(dst, src) -} - -// CopyDocument handles copying one document from the src to the dst. -func (c Copier) CopyDocument(dst ValueWriter, src ValueReader) error { - dr, err := src.ReadDocument() - if err != nil { - return err - } - - dw, err := dst.WriteDocument() - if err != nil { - return err - } - - return c.copyDocumentCore(dw, dr) -} - -// CopyDocumentFromBytes copies the values from a BSON document represented as a -// []byte to a ValueWriter. -func (c Copier) CopyDocumentFromBytes(dst ValueWriter, src []byte) error { - dw, err := dst.WriteDocument() - if err != nil { - return err - } - - err = c.CopyBytesToDocumentWriter(dw, src) - if err != nil { - return err - } - - return dw.WriteDocumentEnd() -} - -// CopyBytesToDocumentWriter copies the values from a BSON document represented as a []byte to a -// DocumentWriter. -func (c Copier) CopyBytesToDocumentWriter(dst DocumentWriter, src []byte) error { - // TODO(skriptble): Create errors types here. Anything thats a tag should be a property. - length, rem, ok := bsoncore.ReadLength(src) - if !ok { - return fmt.Errorf("couldn't read length from src, not enough bytes. length=%d", len(src)) - } - if len(src) < int(length) { - return fmt.Errorf("length read exceeds number of bytes available. length=%d bytes=%d", len(src), length) - } - rem = rem[:length-4] - - var t bsontype.Type - var key string - var val bsoncore.Value - for { - t, rem, ok = bsoncore.ReadType(rem) - if !ok { - return io.EOF - } - if t == bsontype.Type(0) { - if len(rem) != 0 { - return fmt.Errorf("document end byte found before end of document. remaining bytes=%v", rem) - } - break - } - - key, rem, ok = bsoncore.ReadKey(rem) - if !ok { - return fmt.Errorf("invalid key found. remaining bytes=%v", rem) - } - dvw, err := dst.WriteDocumentElement(key) - if err != nil { - return err - } - val, rem, ok = bsoncore.ReadValue(rem, t) - if !ok { - return fmt.Errorf("not enough bytes available to read type. bytes=%d type=%s", len(rem), t) - } - err = c.CopyValueFromBytes(dvw, t, val.Data) - if err != nil { - return err - } - } - return nil -} - -// CopyDocumentToBytes copies an entire document from the ValueReader and -// returns it as bytes. -func (c Copier) CopyDocumentToBytes(src ValueReader) ([]byte, error) { - return c.AppendDocumentBytes(nil, src) -} - -// AppendDocumentBytes functions the same as CopyDocumentToBytes, but will -// append the result to dst. -func (c Copier) AppendDocumentBytes(dst []byte, src ValueReader) ([]byte, error) { - if br, ok := src.(BytesReader); ok { - _, dst, err := br.ReadValueBytes(dst) - return dst, err - } - - vw := vwPool.Get().(*valueWriter) - defer vwPool.Put(vw) - - vw.reset(dst) - - err := c.CopyDocument(vw, src) - dst = vw.buf - return dst, err -} - -// CopyValueFromBytes will write the value represtend by t and src to dst. -func (c Copier) CopyValueFromBytes(dst ValueWriter, t bsontype.Type, src []byte) error { - if wvb, ok := dst.(BytesWriter); ok { - return wvb.WriteValueBytes(t, src) - } - - vr := vrPool.Get().(*valueReader) - defer vrPool.Put(vr) - - vr.reset(src) - vr.pushElement(t) - - return c.CopyValue(dst, vr) -} - -// CopyValueToBytes copies a value from src and returns it as a bsontype.Type and a -// []byte. -func (c Copier) CopyValueToBytes(src ValueReader) (bsontype.Type, []byte, error) { - return c.AppendValueBytes(nil, src) -} - -// AppendValueBytes functions the same as CopyValueToBytes, but will append the -// result to dst. -func (c Copier) AppendValueBytes(dst []byte, src ValueReader) (bsontype.Type, []byte, error) { - if br, ok := src.(BytesReader); ok { - return br.ReadValueBytes(dst) - } - - vw := vwPool.Get().(*valueWriter) - defer vwPool.Put(vw) - - start := len(dst) - - vw.reset(dst) - vw.push(mElement) - - err := c.CopyValue(vw, src) - if err != nil { - return 0, dst, err - } - - return bsontype.Type(vw.buf[start]), vw.buf[start+2:], nil -} - -// CopyValue will copy a single value from src to dst. -func (c Copier) CopyValue(dst ValueWriter, src ValueReader) error { - var err error - switch src.Type() { - case bsontype.Double: - var f64 float64 - f64, err = src.ReadDouble() - if err != nil { - break - } - err = dst.WriteDouble(f64) - case bsontype.String: - var str string - str, err = src.ReadString() - if err != nil { - return err - } - err = dst.WriteString(str) - case bsontype.EmbeddedDocument: - err = c.CopyDocument(dst, src) - case bsontype.Array: - err = c.copyArray(dst, src) - case bsontype.Binary: - var data []byte - var subtype byte - data, subtype, err = src.ReadBinary() - if err != nil { - break - } - err = dst.WriteBinaryWithSubtype(data, subtype) - case bsontype.Undefined: - err = src.ReadUndefined() - if err != nil { - break - } - err = dst.WriteUndefined() - case bsontype.ObjectID: - var oid primitive.ObjectID - oid, err = src.ReadObjectID() - if err != nil { - break - } - err = dst.WriteObjectID(oid) - case bsontype.Boolean: - var b bool - b, err = src.ReadBoolean() - if err != nil { - break - } - err = dst.WriteBoolean(b) - case bsontype.DateTime: - var dt int64 - dt, err = src.ReadDateTime() - if err != nil { - break - } - err = dst.WriteDateTime(dt) - case bsontype.Null: - err = src.ReadNull() - if err != nil { - break - } - err = dst.WriteNull() - case bsontype.Regex: - var pattern, options string - pattern, options, err = src.ReadRegex() - if err != nil { - break - } - err = dst.WriteRegex(pattern, options) - case bsontype.DBPointer: - var ns string - var pointer primitive.ObjectID - ns, pointer, err = src.ReadDBPointer() - if err != nil { - break - } - err = dst.WriteDBPointer(ns, pointer) - case bsontype.JavaScript: - var js string - js, err = src.ReadJavascript() - if err != nil { - break - } - err = dst.WriteJavascript(js) - case bsontype.Symbol: - var symbol string - symbol, err = src.ReadSymbol() - if err != nil { - break - } - err = dst.WriteSymbol(symbol) - case bsontype.CodeWithScope: - var code string - var srcScope DocumentReader - code, srcScope, err = src.ReadCodeWithScope() - if err != nil { - break - } - - var dstScope DocumentWriter - dstScope, err = dst.WriteCodeWithScope(code) - if err != nil { - break - } - err = c.copyDocumentCore(dstScope, srcScope) - case bsontype.Int32: - var i32 int32 - i32, err = src.ReadInt32() - if err != nil { - break - } - err = dst.WriteInt32(i32) - case bsontype.Timestamp: - var t, i uint32 - t, i, err = src.ReadTimestamp() - if err != nil { - break - } - err = dst.WriteTimestamp(t, i) - case bsontype.Int64: - var i64 int64 - i64, err = src.ReadInt64() - if err != nil { - break - } - err = dst.WriteInt64(i64) - case bsontype.Decimal128: - var d128 primitive.Decimal128 - d128, err = src.ReadDecimal128() - if err != nil { - break - } - err = dst.WriteDecimal128(d128) - case bsontype.MinKey: - err = src.ReadMinKey() - if err != nil { - break - } - err = dst.WriteMinKey() - case bsontype.MaxKey: - err = src.ReadMaxKey() - if err != nil { - break - } - err = dst.WriteMaxKey() - default: - err = fmt.Errorf("Cannot copy unknown BSON type %s", src.Type()) - } - - return err -} - -func (c Copier) copyArray(dst ValueWriter, src ValueReader) error { - ar, err := src.ReadArray() - if err != nil { - return err - } - - aw, err := dst.WriteArray() - if err != nil { - return err - } - - for { - vr, err := ar.ReadValue() - if err == ErrEOA { - break - } - if err != nil { - return err - } - - vw, err := aw.WriteArrayElement() - if err != nil { - return err - } - - err = c.CopyValue(vw, vr) - if err != nil { - return err - } - } - - return aw.WriteArrayEnd() -} - -func (c Copier) copyDocumentCore(dw DocumentWriter, dr DocumentReader) error { - for { - key, vr, err := dr.ReadElement() - if err == ErrEOD { - break - } - if err != nil { - return err - } - - vw, err := dw.WriteDocumentElement(key) - if err != nil { - return err - } - - err = c.CopyValue(vw, vr) - if err != nil { - return err - } - } - - return dw.WriteDocumentEnd() -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/doc.go b/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/doc.go deleted file mode 100644 index 750b0d2af..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -// Package bsonrw contains abstractions for reading and writing -// BSON and BSON like types from sources. -package bsonrw // import "go.mongodb.org/mongo-driver/bson/bsonrw" diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_parser.go b/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_parser.go deleted file mode 100644 index 9e223edf9..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_parser.go +++ /dev/null @@ -1,731 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsonrw - -import ( - "errors" - "fmt" - "io" - - "go.mongodb.org/mongo-driver/bson/bsontype" -) - -const maxNestingDepth = 200 - -// ErrInvalidJSON indicates the JSON input is invalid -var ErrInvalidJSON = errors.New("invalid JSON input") - -type jsonParseState byte - -const ( - jpsStartState jsonParseState = iota - jpsSawBeginObject - jpsSawEndObject - jpsSawBeginArray - jpsSawEndArray - jpsSawColon - jpsSawComma - jpsSawKey - jpsSawValue - jpsDoneState - jpsInvalidState -) - -type jsonParseMode byte - -const ( - jpmInvalidMode jsonParseMode = iota - jpmObjectMode - jpmArrayMode -) - -type extJSONValue struct { - t bsontype.Type - v interface{} -} - -type extJSONObject struct { - keys []string - values []*extJSONValue -} - -type extJSONParser struct { - js *jsonScanner - s jsonParseState - m []jsonParseMode - k string - v *extJSONValue - - err error - canonical bool - depth int - maxDepth int - - emptyObject bool -} - -// newExtJSONParser returns a new extended JSON parser, ready to to begin -// parsing from the first character of the argued json input. It will not -// perform any read-ahead and will therefore not report any errors about -// malformed JSON at this point. -func newExtJSONParser(r io.Reader, canonical bool) *extJSONParser { - return &extJSONParser{ - js: &jsonScanner{r: r}, - s: jpsStartState, - m: []jsonParseMode{}, - canonical: canonical, - maxDepth: maxNestingDepth, - } -} - -// peekType examines the next value and returns its BSON Type -func (ejp *extJSONParser) peekType() (bsontype.Type, error) { - var t bsontype.Type - var err error - - ejp.advanceState() - switch ejp.s { - case jpsSawValue: - t = ejp.v.t - case jpsSawBeginArray: - t = bsontype.Array - case jpsInvalidState: - err = ejp.err - case jpsSawComma: - // in array mode, seeing a comma means we need to progress again to actually observe a type - if ejp.peekMode() == jpmArrayMode { - return ejp.peekType() - } - case jpsSawEndArray: - // this would only be a valid state if we were in array mode, so return end-of-array error - err = ErrEOA - case jpsSawBeginObject: - // peek key to determine type - ejp.advanceState() - switch ejp.s { - case jpsSawEndObject: // empty embedded document - t = bsontype.EmbeddedDocument - ejp.emptyObject = true - case jpsInvalidState: - err = ejp.err - case jpsSawKey: - t = wrapperKeyBSONType(ejp.k) - - if t == bsontype.JavaScript { - // just saw $code, need to check for $scope at same level - _, err := ejp.readValue(bsontype.JavaScript) - - if err != nil { - break - } - - switch ejp.s { - case jpsSawEndObject: // type is TypeJavaScript - case jpsSawComma: - ejp.advanceState() - if ejp.s == jpsSawKey && ejp.k == "$scope" { - t = bsontype.CodeWithScope - } else { - err = fmt.Errorf("invalid extended JSON: unexpected key %s in CodeWithScope object", ejp.k) - } - case jpsInvalidState: - err = ejp.err - default: - err = ErrInvalidJSON - } - } - } - } - - return t, err -} - -// readKey parses the next key and its type and returns them -func (ejp *extJSONParser) readKey() (string, bsontype.Type, error) { - if ejp.emptyObject { - ejp.emptyObject = false - return "", 0, ErrEOD - } - - // advance to key (or return with error) - switch ejp.s { - case jpsStartState: - ejp.advanceState() - if ejp.s == jpsSawBeginObject { - ejp.advanceState() - } - case jpsSawBeginObject: - ejp.advanceState() - case jpsSawValue, jpsSawEndObject, jpsSawEndArray: - ejp.advanceState() - switch ejp.s { - case jpsSawBeginObject, jpsSawComma: - ejp.advanceState() - case jpsSawEndObject: - return "", 0, ErrEOD - case jpsDoneState: - return "", 0, io.EOF - case jpsInvalidState: - return "", 0, ejp.err - default: - return "", 0, ErrInvalidJSON - } - case jpsSawKey: // do nothing (key was peeked before) - default: - return "", 0, invalidRequestError("key") - } - - // read key - var key string - - switch ejp.s { - case jpsSawKey: - key = ejp.k - case jpsSawEndObject: - return "", 0, ErrEOD - case jpsInvalidState: - return "", 0, ejp.err - default: - return "", 0, invalidRequestError("key") - } - - // check for colon - ejp.advanceState() - if err := ensureColon(ejp.s, key); err != nil { - return "", 0, err - } - - // peek at the value to determine type - t, err := ejp.peekType() - if err != nil { - return "", 0, err - } - - return key, t, nil -} - -// readValue returns the value corresponding to the Type returned by peekType -func (ejp *extJSONParser) readValue(t bsontype.Type) (*extJSONValue, error) { - if ejp.s == jpsInvalidState { - return nil, ejp.err - } - - var v *extJSONValue - - switch t { - case bsontype.Null, bsontype.Boolean, bsontype.String: - if ejp.s != jpsSawValue { - return nil, invalidRequestError(t.String()) - } - v = ejp.v - case bsontype.Int32, bsontype.Int64, bsontype.Double: - // relaxed version allows these to be literal number values - if ejp.s == jpsSawValue { - v = ejp.v - break - } - fallthrough - case bsontype.Decimal128, bsontype.Symbol, bsontype.ObjectID, bsontype.MinKey, bsontype.MaxKey, bsontype.Undefined: - switch ejp.s { - case jpsSawKey: - // read colon - ejp.advanceState() - if err := ensureColon(ejp.s, ejp.k); err != nil { - return nil, err - } - - // read value - ejp.advanceState() - if ejp.s != jpsSawValue || !ejp.ensureExtValueType(t) { - return nil, invalidJSONErrorForType("value", t) - } - - v = ejp.v - - // read end object - ejp.advanceState() - if ejp.s != jpsSawEndObject { - return nil, invalidJSONErrorForType("} after value", t) - } - default: - return nil, invalidRequestError(t.String()) - } - case bsontype.Binary, bsontype.Regex, bsontype.Timestamp, bsontype.DBPointer: - if ejp.s != jpsSawKey { - return nil, invalidRequestError(t.String()) - } - // read colon - ejp.advanceState() - if err := ensureColon(ejp.s, ejp.k); err != nil { - return nil, err - } - - ejp.advanceState() - if t == bsontype.Binary && ejp.s == jpsSawValue { - // convert legacy $binary format - base64 := ejp.v - - ejp.advanceState() - if ejp.s != jpsSawComma { - return nil, invalidJSONErrorForType(",", bsontype.Binary) - } - - ejp.advanceState() - key, t, err := ejp.readKey() - if err != nil { - return nil, err - } - if key != "$type" { - return nil, invalidJSONErrorForType("$type", bsontype.Binary) - } - - subType, err := ejp.readValue(t) - if err != nil { - return nil, err - } - - ejp.advanceState() - if ejp.s != jpsSawEndObject { - return nil, invalidJSONErrorForType("2 key-value pairs and then }", bsontype.Binary) - } - - v = &extJSONValue{ - t: bsontype.EmbeddedDocument, - v: &extJSONObject{ - keys: []string{"base64", "subType"}, - values: []*extJSONValue{base64, subType}, - }, - } - break - } - - // read KV pairs - if ejp.s != jpsSawBeginObject { - return nil, invalidJSONErrorForType("{", t) - } - - keys, vals, err := ejp.readObject(2, true) - if err != nil { - return nil, err - } - - ejp.advanceState() - if ejp.s != jpsSawEndObject { - return nil, invalidJSONErrorForType("2 key-value pairs and then }", t) - } - - v = &extJSONValue{t: bsontype.EmbeddedDocument, v: &extJSONObject{keys: keys, values: vals}} - - case bsontype.DateTime: - switch ejp.s { - case jpsSawValue: - v = ejp.v - case jpsSawKey: - // read colon - ejp.advanceState() - if err := ensureColon(ejp.s, ejp.k); err != nil { - return nil, err - } - - ejp.advanceState() - switch ejp.s { - case jpsSawBeginObject: - keys, vals, err := ejp.readObject(1, true) - if err != nil { - return nil, err - } - v = &extJSONValue{t: bsontype.EmbeddedDocument, v: &extJSONObject{keys: keys, values: vals}} - case jpsSawValue: - if ejp.canonical { - return nil, invalidJSONError("{") - } - v = ejp.v - default: - if ejp.canonical { - return nil, invalidJSONErrorForType("object", t) - } - return nil, invalidJSONErrorForType("ISO-8601 Internet Date/Time Format as decribed in RFC-3339", t) - } - - ejp.advanceState() - if ejp.s != jpsSawEndObject { - return nil, invalidJSONErrorForType("value and then }", t) - } - default: - return nil, invalidRequestError(t.String()) - } - case bsontype.JavaScript: - switch ejp.s { - case jpsSawKey: - // read colon - ejp.advanceState() - if err := ensureColon(ejp.s, ejp.k); err != nil { - return nil, err - } - - // read value - ejp.advanceState() - if ejp.s != jpsSawValue { - return nil, invalidJSONErrorForType("value", t) - } - v = ejp.v - - // read end object or comma and just return - ejp.advanceState() - case jpsSawEndObject: - v = ejp.v - default: - return nil, invalidRequestError(t.String()) - } - case bsontype.CodeWithScope: - if ejp.s == jpsSawKey && ejp.k == "$scope" { - v = ejp.v // this is the $code string from earlier - - // read colon - ejp.advanceState() - if err := ensureColon(ejp.s, ejp.k); err != nil { - return nil, err - } - - // read { - ejp.advanceState() - if ejp.s != jpsSawBeginObject { - return nil, invalidJSONError("$scope to be embedded document") - } - } else { - return nil, invalidRequestError(t.String()) - } - case bsontype.EmbeddedDocument, bsontype.Array: - return nil, invalidRequestError(t.String()) - } - - return v, nil -} - -// readObject is a utility method for reading full objects of known (or expected) size -// it is useful for extended JSON types such as binary, datetime, regex, and timestamp -func (ejp *extJSONParser) readObject(numKeys int, started bool) ([]string, []*extJSONValue, error) { - keys := make([]string, numKeys) - vals := make([]*extJSONValue, numKeys) - - if !started { - ejp.advanceState() - if ejp.s != jpsSawBeginObject { - return nil, nil, invalidJSONError("{") - } - } - - for i := 0; i < numKeys; i++ { - key, t, err := ejp.readKey() - if err != nil { - return nil, nil, err - } - - switch ejp.s { - case jpsSawKey: - v, err := ejp.readValue(t) - if err != nil { - return nil, nil, err - } - - keys[i] = key - vals[i] = v - case jpsSawValue: - keys[i] = key - vals[i] = ejp.v - default: - return nil, nil, invalidJSONError("value") - } - } - - ejp.advanceState() - if ejp.s != jpsSawEndObject { - return nil, nil, invalidJSONError("}") - } - - return keys, vals, nil -} - -// advanceState reads the next JSON token from the scanner and transitions -// from the current state based on that token's type -func (ejp *extJSONParser) advanceState() { - if ejp.s == jpsDoneState || ejp.s == jpsInvalidState { - return - } - - jt, err := ejp.js.nextToken() - - if err != nil { - ejp.err = err - ejp.s = jpsInvalidState - return - } - - valid := ejp.validateToken(jt.t) - if !valid { - ejp.err = unexpectedTokenError(jt) - ejp.s = jpsInvalidState - return - } - - switch jt.t { - case jttBeginObject: - ejp.s = jpsSawBeginObject - ejp.pushMode(jpmObjectMode) - ejp.depth++ - - if ejp.depth > ejp.maxDepth { - ejp.err = nestingDepthError(jt.p, ejp.depth) - ejp.s = jpsInvalidState - } - case jttEndObject: - ejp.s = jpsSawEndObject - ejp.depth-- - - if ejp.popMode() != jpmObjectMode { - ejp.err = unexpectedTokenError(jt) - ejp.s = jpsInvalidState - } - case jttBeginArray: - ejp.s = jpsSawBeginArray - ejp.pushMode(jpmArrayMode) - case jttEndArray: - ejp.s = jpsSawEndArray - - if ejp.popMode() != jpmArrayMode { - ejp.err = unexpectedTokenError(jt) - ejp.s = jpsInvalidState - } - case jttColon: - ejp.s = jpsSawColon - case jttComma: - ejp.s = jpsSawComma - case jttEOF: - ejp.s = jpsDoneState - if len(ejp.m) != 0 { - ejp.err = unexpectedTokenError(jt) - ejp.s = jpsInvalidState - } - case jttString: - switch ejp.s { - case jpsSawComma: - if ejp.peekMode() == jpmArrayMode { - ejp.s = jpsSawValue - ejp.v = extendJSONToken(jt) - return - } - fallthrough - case jpsSawBeginObject: - ejp.s = jpsSawKey - ejp.k = jt.v.(string) - return - } - fallthrough - default: - ejp.s = jpsSawValue - ejp.v = extendJSONToken(jt) - } -} - -var jpsValidTransitionTokens = map[jsonParseState]map[jsonTokenType]bool{ - jpsStartState: { - jttBeginObject: true, - jttBeginArray: true, - jttInt32: true, - jttInt64: true, - jttDouble: true, - jttString: true, - jttBool: true, - jttNull: true, - jttEOF: true, - }, - jpsSawBeginObject: { - jttEndObject: true, - jttString: true, - }, - jpsSawEndObject: { - jttEndObject: true, - jttEndArray: true, - jttComma: true, - jttEOF: true, - }, - jpsSawBeginArray: { - jttBeginObject: true, - jttBeginArray: true, - jttEndArray: true, - jttInt32: true, - jttInt64: true, - jttDouble: true, - jttString: true, - jttBool: true, - jttNull: true, - }, - jpsSawEndArray: { - jttEndObject: true, - jttEndArray: true, - jttComma: true, - jttEOF: true, - }, - jpsSawColon: { - jttBeginObject: true, - jttBeginArray: true, - jttInt32: true, - jttInt64: true, - jttDouble: true, - jttString: true, - jttBool: true, - jttNull: true, - }, - jpsSawComma: { - jttBeginObject: true, - jttBeginArray: true, - jttInt32: true, - jttInt64: true, - jttDouble: true, - jttString: true, - jttBool: true, - jttNull: true, - }, - jpsSawKey: { - jttColon: true, - }, - jpsSawValue: { - jttEndObject: true, - jttEndArray: true, - jttComma: true, - jttEOF: true, - }, - jpsDoneState: {}, - jpsInvalidState: {}, -} - -func (ejp *extJSONParser) validateToken(jtt jsonTokenType) bool { - switch ejp.s { - case jpsSawEndObject: - // if we are at depth zero and the next token is a '{', - // we can consider it valid only if we are not in array mode. - if jtt == jttBeginObject && ejp.depth == 0 { - return ejp.peekMode() != jpmArrayMode - } - case jpsSawComma: - switch ejp.peekMode() { - // the only valid next token after a comma inside a document is a string (a key) - case jpmObjectMode: - return jtt == jttString - case jpmInvalidMode: - return false - } - } - - _, ok := jpsValidTransitionTokens[ejp.s][jtt] - return ok -} - -// ensureExtValueType returns true if the current value has the expected -// value type for single-key extended JSON types. For example, -// {"$numberInt": v} v must be TypeString -func (ejp *extJSONParser) ensureExtValueType(t bsontype.Type) bool { - switch t { - case bsontype.MinKey, bsontype.MaxKey: - return ejp.v.t == bsontype.Int32 - case bsontype.Undefined: - return ejp.v.t == bsontype.Boolean - case bsontype.Int32, bsontype.Int64, bsontype.Double, bsontype.Decimal128, bsontype.Symbol, bsontype.ObjectID: - return ejp.v.t == bsontype.String - default: - return false - } -} - -func (ejp *extJSONParser) pushMode(m jsonParseMode) { - ejp.m = append(ejp.m, m) -} - -func (ejp *extJSONParser) popMode() jsonParseMode { - l := len(ejp.m) - if l == 0 { - return jpmInvalidMode - } - - m := ejp.m[l-1] - ejp.m = ejp.m[:l-1] - - return m -} - -func (ejp *extJSONParser) peekMode() jsonParseMode { - l := len(ejp.m) - if l == 0 { - return jpmInvalidMode - } - - return ejp.m[l-1] -} - -func extendJSONToken(jt *jsonToken) *extJSONValue { - var t bsontype.Type - - switch jt.t { - case jttInt32: - t = bsontype.Int32 - case jttInt64: - t = bsontype.Int64 - case jttDouble: - t = bsontype.Double - case jttString: - t = bsontype.String - case jttBool: - t = bsontype.Boolean - case jttNull: - t = bsontype.Null - default: - return nil - } - - return &extJSONValue{t: t, v: jt.v} -} - -func ensureColon(s jsonParseState, key string) error { - if s != jpsSawColon { - return fmt.Errorf("invalid JSON input: missing colon after key \"%s\"", key) - } - - return nil -} - -func invalidRequestError(s string) error { - return fmt.Errorf("invalid request to read %s", s) -} - -func invalidJSONError(expected string) error { - return fmt.Errorf("invalid JSON input; expected %s", expected) -} - -func invalidJSONErrorForType(expected string, t bsontype.Type) error { - return fmt.Errorf("invalid JSON input; expected %s for %s", expected, t) -} - -func unexpectedTokenError(jt *jsonToken) error { - switch jt.t { - case jttInt32, jttInt64, jttDouble: - return fmt.Errorf("invalid JSON input; unexpected number (%v) at position %d", jt.v, jt.p) - case jttString: - return fmt.Errorf("invalid JSON input; unexpected string (\"%v\") at position %d", jt.v, jt.p) - case jttBool: - return fmt.Errorf("invalid JSON input; unexpected boolean literal (%v) at position %d", jt.v, jt.p) - case jttNull: - return fmt.Errorf("invalid JSON input; unexpected null literal at position %d", jt.p) - case jttEOF: - return fmt.Errorf("invalid JSON input; unexpected end of input at position %d", jt.p) - default: - return fmt.Errorf("invalid JSON input; unexpected %c at position %d", jt.v.(byte), jt.p) - } -} - -func nestingDepthError(p, depth int) error { - return fmt.Errorf("invalid JSON input; nesting too deep (%d levels) at position %d", depth, p) -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_reader.go b/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_reader.go deleted file mode 100644 index dd560c96f..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_reader.go +++ /dev/null @@ -1,659 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package bsonrw - -import ( - "fmt" - "io" - "sync" - - "go.mongodb.org/mongo-driver/bson/bsontype" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -// ExtJSONValueReaderPool is a pool for ValueReaders that read ExtJSON. -type ExtJSONValueReaderPool struct { - pool sync.Pool -} - -// NewExtJSONValueReaderPool instantiates a new ExtJSONValueReaderPool. -func NewExtJSONValueReaderPool() *ExtJSONValueReaderPool { - return &ExtJSONValueReaderPool{ - pool: sync.Pool{ - New: func() interface{} { - return new(extJSONValueReader) - }, - }, - } -} - -// Get retrieves a ValueReader from the pool and uses src as the underlying ExtJSON. -func (bvrp *ExtJSONValueReaderPool) Get(r io.Reader, canonical bool) (ValueReader, error) { - vr := bvrp.pool.Get().(*extJSONValueReader) - return vr.reset(r, canonical) -} - -// Put inserts a ValueReader into the pool. If the ValueReader is not a ExtJSON ValueReader nothing -// is inserted into the pool and ok will be false. -func (bvrp *ExtJSONValueReaderPool) Put(vr ValueReader) (ok bool) { - bvr, ok := vr.(*extJSONValueReader) - if !ok { - return false - } - - bvr, _ = bvr.reset(nil, false) - bvrp.pool.Put(bvr) - return true -} - -type ejvrState struct { - mode mode - vType bsontype.Type - depth int -} - -// extJSONValueReader is for reading extended JSON. -type extJSONValueReader struct { - p *extJSONParser - - stack []ejvrState - frame int -} - -// NewExtJSONValueReader creates a new ValueReader from a given io.Reader -// It will interpret the JSON of r as canonical or relaxed according to the -// given canonical flag -func NewExtJSONValueReader(r io.Reader, canonical bool) (ValueReader, error) { - return newExtJSONValueReader(r, canonical) -} - -func newExtJSONValueReader(r io.Reader, canonical bool) (*extJSONValueReader, error) { - ejvr := new(extJSONValueReader) - return ejvr.reset(r, canonical) -} - -func (ejvr *extJSONValueReader) reset(r io.Reader, canonical bool) (*extJSONValueReader, error) { - p := newExtJSONParser(r, canonical) - typ, err := p.peekType() - - if err != nil { - return nil, ErrInvalidJSON - } - - var m mode - switch typ { - case bsontype.EmbeddedDocument: - m = mTopLevel - case bsontype.Array: - m = mArray - default: - m = mValue - } - - stack := make([]ejvrState, 1, 5) - stack[0] = ejvrState{ - mode: m, - vType: typ, - } - return &extJSONValueReader{ - p: p, - stack: stack, - }, nil -} - -func (ejvr *extJSONValueReader) advanceFrame() { - if ejvr.frame+1 >= len(ejvr.stack) { // We need to grow the stack - length := len(ejvr.stack) - if length+1 >= cap(ejvr.stack) { - // double it - buf := make([]ejvrState, 2*cap(ejvr.stack)+1) - copy(buf, ejvr.stack) - ejvr.stack = buf - } - ejvr.stack = ejvr.stack[:length+1] - } - ejvr.frame++ - - // Clean the stack - ejvr.stack[ejvr.frame].mode = 0 - ejvr.stack[ejvr.frame].vType = 0 - ejvr.stack[ejvr.frame].depth = 0 -} - -func (ejvr *extJSONValueReader) pushDocument() { - ejvr.advanceFrame() - - ejvr.stack[ejvr.frame].mode = mDocument - ejvr.stack[ejvr.frame].depth = ejvr.p.depth -} - -func (ejvr *extJSONValueReader) pushCodeWithScope() { - ejvr.advanceFrame() - - ejvr.stack[ejvr.frame].mode = mCodeWithScope -} - -func (ejvr *extJSONValueReader) pushArray() { - ejvr.advanceFrame() - - ejvr.stack[ejvr.frame].mode = mArray -} - -func (ejvr *extJSONValueReader) push(m mode, t bsontype.Type) { - ejvr.advanceFrame() - - ejvr.stack[ejvr.frame].mode = m - ejvr.stack[ejvr.frame].vType = t -} - -func (ejvr *extJSONValueReader) pop() { - switch ejvr.stack[ejvr.frame].mode { - case mElement, mValue: - ejvr.frame-- - case mDocument, mArray, mCodeWithScope: - ejvr.frame -= 2 // we pop twice to jump over the vrElement: vrDocument -> vrElement -> vrDocument/TopLevel/etc... - } -} - -func (ejvr *extJSONValueReader) skipDocument() error { - // read entire document until ErrEOD (using readKey and readValue) - _, typ, err := ejvr.p.readKey() - for err == nil { - _, err = ejvr.p.readValue(typ) - if err != nil { - break - } - - _, typ, err = ejvr.p.readKey() - } - - return err -} - -func (ejvr *extJSONValueReader) skipArray() error { - // read entire array until ErrEOA (using peekType) - _, err := ejvr.p.peekType() - for err == nil { - _, err = ejvr.p.peekType() - } - - return err -} - -func (ejvr *extJSONValueReader) invalidTransitionErr(destination mode, name string, modes []mode) error { - te := TransitionError{ - name: name, - current: ejvr.stack[ejvr.frame].mode, - destination: destination, - modes: modes, - action: "read", - } - if ejvr.frame != 0 { - te.parent = ejvr.stack[ejvr.frame-1].mode - } - return te -} - -func (ejvr *extJSONValueReader) typeError(t bsontype.Type) error { - return fmt.Errorf("positioned on %s, but attempted to read %s", ejvr.stack[ejvr.frame].vType, t) -} - -func (ejvr *extJSONValueReader) ensureElementValue(t bsontype.Type, destination mode, callerName string, addModes ...mode) error { - switch ejvr.stack[ejvr.frame].mode { - case mElement, mValue: - if ejvr.stack[ejvr.frame].vType != t { - return ejvr.typeError(t) - } - default: - modes := []mode{mElement, mValue} - if addModes != nil { - modes = append(modes, addModes...) - } - return ejvr.invalidTransitionErr(destination, callerName, modes) - } - - return nil -} - -func (ejvr *extJSONValueReader) Type() bsontype.Type { - return ejvr.stack[ejvr.frame].vType -} - -func (ejvr *extJSONValueReader) Skip() error { - switch ejvr.stack[ejvr.frame].mode { - case mElement, mValue: - default: - return ejvr.invalidTransitionErr(0, "Skip", []mode{mElement, mValue}) - } - - defer ejvr.pop() - - t := ejvr.stack[ejvr.frame].vType - switch t { - case bsontype.Array: - // read entire array until ErrEOA - err := ejvr.skipArray() - if err != ErrEOA { - return err - } - case bsontype.EmbeddedDocument: - // read entire doc until ErrEOD - err := ejvr.skipDocument() - if err != ErrEOD { - return err - } - case bsontype.CodeWithScope: - // read the code portion and set up parser in document mode - _, err := ejvr.p.readValue(t) - if err != nil { - return err - } - - // read until ErrEOD - err = ejvr.skipDocument() - if err != ErrEOD { - return err - } - default: - _, err := ejvr.p.readValue(t) - if err != nil { - return err - } - } - - return nil -} - -func (ejvr *extJSONValueReader) ReadArray() (ArrayReader, error) { - switch ejvr.stack[ejvr.frame].mode { - case mTopLevel: // allow reading array from top level - case mArray: - return ejvr, nil - default: - if err := ejvr.ensureElementValue(bsontype.Array, mArray, "ReadArray", mTopLevel, mArray); err != nil { - return nil, err - } - } - - ejvr.pushArray() - - return ejvr, nil -} - -func (ejvr *extJSONValueReader) ReadBinary() (b []byte, btype byte, err error) { - if err := ejvr.ensureElementValue(bsontype.Binary, 0, "ReadBinary"); err != nil { - return nil, 0, err - } - - v, err := ejvr.p.readValue(bsontype.Binary) - if err != nil { - return nil, 0, err - } - - b, btype, err = v.parseBinary() - - ejvr.pop() - return b, btype, err -} - -func (ejvr *extJSONValueReader) ReadBoolean() (bool, error) { - if err := ejvr.ensureElementValue(bsontype.Boolean, 0, "ReadBoolean"); err != nil { - return false, err - } - - v, err := ejvr.p.readValue(bsontype.Boolean) - if err != nil { - return false, err - } - - if v.t != bsontype.Boolean { - return false, fmt.Errorf("expected type bool, but got type %s", v.t) - } - - ejvr.pop() - return v.v.(bool), nil -} - -func (ejvr *extJSONValueReader) ReadDocument() (DocumentReader, error) { - switch ejvr.stack[ejvr.frame].mode { - case mTopLevel: - return ejvr, nil - case mElement, mValue: - if ejvr.stack[ejvr.frame].vType != bsontype.EmbeddedDocument { - return nil, ejvr.typeError(bsontype.EmbeddedDocument) - } - - ejvr.pushDocument() - return ejvr, nil - default: - return nil, ejvr.invalidTransitionErr(mDocument, "ReadDocument", []mode{mTopLevel, mElement, mValue}) - } -} - -func (ejvr *extJSONValueReader) ReadCodeWithScope() (code string, dr DocumentReader, err error) { - if err = ejvr.ensureElementValue(bsontype.CodeWithScope, 0, "ReadCodeWithScope"); err != nil { - return "", nil, err - } - - v, err := ejvr.p.readValue(bsontype.CodeWithScope) - if err != nil { - return "", nil, err - } - - code, err = v.parseJavascript() - - ejvr.pushCodeWithScope() - return code, ejvr, err -} - -func (ejvr *extJSONValueReader) ReadDBPointer() (ns string, oid primitive.ObjectID, err error) { - if err = ejvr.ensureElementValue(bsontype.DBPointer, 0, "ReadDBPointer"); err != nil { - return "", primitive.NilObjectID, err - } - - v, err := ejvr.p.readValue(bsontype.DBPointer) - if err != nil { - return "", primitive.NilObjectID, err - } - - ns, oid, err = v.parseDBPointer() - - ejvr.pop() - return ns, oid, err -} - -func (ejvr *extJSONValueReader) ReadDateTime() (int64, error) { - if err := ejvr.ensureElementValue(bsontype.DateTime, 0, "ReadDateTime"); err != nil { - return 0, err - } - - v, err := ejvr.p.readValue(bsontype.DateTime) - if err != nil { - return 0, err - } - - d, err := v.parseDateTime() - - ejvr.pop() - return d, err -} - -func (ejvr *extJSONValueReader) ReadDecimal128() (primitive.Decimal128, error) { - if err := ejvr.ensureElementValue(bsontype.Decimal128, 0, "ReadDecimal128"); err != nil { - return primitive.Decimal128{}, err - } - - v, err := ejvr.p.readValue(bsontype.Decimal128) - if err != nil { - return primitive.Decimal128{}, err - } - - d, err := v.parseDecimal128() - - ejvr.pop() - return d, err -} - -func (ejvr *extJSONValueReader) ReadDouble() (float64, error) { - if err := ejvr.ensureElementValue(bsontype.Double, 0, "ReadDouble"); err != nil { - return 0, err - } - - v, err := ejvr.p.readValue(bsontype.Double) - if err != nil { - return 0, err - } - - d, err := v.parseDouble() - - ejvr.pop() - return d, err -} - -func (ejvr *extJSONValueReader) ReadInt32() (int32, error) { - if err := ejvr.ensureElementValue(bsontype.Int32, 0, "ReadInt32"); err != nil { - return 0, err - } - - v, err := ejvr.p.readValue(bsontype.Int32) - if err != nil { - return 0, err - } - - i, err := v.parseInt32() - - ejvr.pop() - return i, err -} - -func (ejvr *extJSONValueReader) ReadInt64() (int64, error) { - if err := ejvr.ensureElementValue(bsontype.Int64, 0, "ReadInt64"); err != nil { - return 0, err - } - - v, err := ejvr.p.readValue(bsontype.Int64) - if err != nil { - return 0, err - } - - i, err := v.parseInt64() - - ejvr.pop() - return i, err -} - -func (ejvr *extJSONValueReader) ReadJavascript() (code string, err error) { - if err = ejvr.ensureElementValue(bsontype.JavaScript, 0, "ReadJavascript"); err != nil { - return "", err - } - - v, err := ejvr.p.readValue(bsontype.JavaScript) - if err != nil { - return "", err - } - - code, err = v.parseJavascript() - - ejvr.pop() - return code, err -} - -func (ejvr *extJSONValueReader) ReadMaxKey() error { - if err := ejvr.ensureElementValue(bsontype.MaxKey, 0, "ReadMaxKey"); err != nil { - return err - } - - v, err := ejvr.p.readValue(bsontype.MaxKey) - if err != nil { - return err - } - - err = v.parseMinMaxKey("max") - - ejvr.pop() - return err -} - -func (ejvr *extJSONValueReader) ReadMinKey() error { - if err := ejvr.ensureElementValue(bsontype.MinKey, 0, "ReadMinKey"); err != nil { - return err - } - - v, err := ejvr.p.readValue(bsontype.MinKey) - if err != nil { - return err - } - - err = v.parseMinMaxKey("min") - - ejvr.pop() - return err -} - -func (ejvr *extJSONValueReader) ReadNull() error { - if err := ejvr.ensureElementValue(bsontype.Null, 0, "ReadNull"); err != nil { - return err - } - - v, err := ejvr.p.readValue(bsontype.Null) - if err != nil { - return err - } - - if v.t != bsontype.Null { - return fmt.Errorf("expected type null but got type %s", v.t) - } - - ejvr.pop() - return nil -} - -func (ejvr *extJSONValueReader) ReadObjectID() (primitive.ObjectID, error) { - if err := ejvr.ensureElementValue(bsontype.ObjectID, 0, "ReadObjectID"); err != nil { - return primitive.ObjectID{}, err - } - - v, err := ejvr.p.readValue(bsontype.ObjectID) - if err != nil { - return primitive.ObjectID{}, err - } - - oid, err := v.parseObjectID() - - ejvr.pop() - return oid, err -} - -func (ejvr *extJSONValueReader) ReadRegex() (pattern string, options string, err error) { - if err = ejvr.ensureElementValue(bsontype.Regex, 0, "ReadRegex"); err != nil { - return "", "", err - } - - v, err := ejvr.p.readValue(bsontype.Regex) - if err != nil { - return "", "", err - } - - pattern, options, err = v.parseRegex() - - ejvr.pop() - return pattern, options, err -} - -func (ejvr *extJSONValueReader) ReadString() (string, error) { - if err := ejvr.ensureElementValue(bsontype.String, 0, "ReadString"); err != nil { - return "", err - } - - v, err := ejvr.p.readValue(bsontype.String) - if err != nil { - return "", err - } - - if v.t != bsontype.String { - return "", fmt.Errorf("expected type string but got type %s", v.t) - } - - ejvr.pop() - return v.v.(string), nil -} - -func (ejvr *extJSONValueReader) ReadSymbol() (symbol string, err error) { - if err = ejvr.ensureElementValue(bsontype.Symbol, 0, "ReadSymbol"); err != nil { - return "", err - } - - v, err := ejvr.p.readValue(bsontype.Symbol) - if err != nil { - return "", err - } - - symbol, err = v.parseSymbol() - - ejvr.pop() - return symbol, err -} - -func (ejvr *extJSONValueReader) ReadTimestamp() (t uint32, i uint32, err error) { - if err = ejvr.ensureElementValue(bsontype.Timestamp, 0, "ReadTimestamp"); err != nil { - return 0, 0, err - } - - v, err := ejvr.p.readValue(bsontype.Timestamp) - if err != nil { - return 0, 0, err - } - - t, i, err = v.parseTimestamp() - - ejvr.pop() - return t, i, err -} - -func (ejvr *extJSONValueReader) ReadUndefined() error { - if err := ejvr.ensureElementValue(bsontype.Undefined, 0, "ReadUndefined"); err != nil { - return err - } - - v, err := ejvr.p.readValue(bsontype.Undefined) - if err != nil { - return err - } - - err = v.parseUndefined() - - ejvr.pop() - return err -} - -func (ejvr *extJSONValueReader) ReadElement() (string, ValueReader, error) { - switch ejvr.stack[ejvr.frame].mode { - case mTopLevel, mDocument, mCodeWithScope: - default: - return "", nil, ejvr.invalidTransitionErr(mElement, "ReadElement", []mode{mTopLevel, mDocument, mCodeWithScope}) - } - - name, t, err := ejvr.p.readKey() - - if err != nil { - if err == ErrEOD { - if ejvr.stack[ejvr.frame].mode == mCodeWithScope { - _, err := ejvr.p.peekType() - if err != nil { - return "", nil, err - } - } - - ejvr.pop() - } - - return "", nil, err - } - - ejvr.push(mElement, t) - return name, ejvr, nil -} - -func (ejvr *extJSONValueReader) ReadValue() (ValueReader, error) { - switch ejvr.stack[ejvr.frame].mode { - case mArray: - default: - return nil, ejvr.invalidTransitionErr(mValue, "ReadValue", []mode{mArray}) - } - - t, err := ejvr.p.peekType() - if err != nil { - if err == ErrEOA { - ejvr.pop() - } - - return nil, err - } - - ejvr.push(mValue, t) - return ejvr, nil -} diff --git a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_tables.go b/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_tables.go deleted file mode 100644 index ba39c9601..000000000 --- a/vendor/go.mongodb.org/mongo-driver/bson/bsonrw/extjson_tables.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -// -// Based on github.com/golang/go by The Go Authors -// See THIRD-PARTY-NOTICES for original license terms. - -package bsonrw - -import "unicode/utf8" - -// safeSet holds the value true if the ASCII character with the given array -// position can be represented inside a JSON string without any further -// escaping. -// -// All values are true except for the ASCII control characters (0-31), the -// double quote ("), and the backslash character ("\"). -var safeSet = [utf8.RuneSelf]bool{ - ' ': true, - '!': true, - '"': false, - '#': true, - '$': true, - '%': true, - '&': true, - '\'': true, - '(': true, - ')': true, - '*': true, - '+': true, - ',': true, - '-': true, - '.': true, - '/': true, - '0': true, - '1': true, - '2': true, - '3': true, - '4': true, - '5': true, - '6': true, - '7': true, - '8': true, - '9': true, - ':': true, - ';': true, - '<': true, - '=': true, - '>': true, - '?': true, - '@': true, - 'A': true, - 'B': true, - 'C': true, - 'D': true, - 'E': true, - 'F': true, - 'G': true, - 'H': true, - 'I': true, - 'J': true, - 'K': true, - 'L': true, - 'M': true, - 'N': true, - 'O': true, - 'P': true, - 'Q': true, - 'R': true, - 'S': true, - 'T': true, - 'U': true, - 'V': true, - 'W': true, - 'X': true, - 'Y': true, - 'Z': true, - '[': true, - '\\': false, - ']': true, - '^': true, - '_': true, - '`': true, - 'a': true, - 'b': true, - 'c': true, - 'd': true, - 'e': true, - 'f': true, - 'g': true, - 'h': true, - 'i': true, - 'j': true, - 'k': true, - 'l': true, - 'm': true, - 'n': true, - 'o': true, - 'p': true, - 'q': true, - 'r': true, - 's': true, - 't': true, - 'u': true, - 'v': true, - 'w': true, - 'x': true, - 'y': true, - 'z': true, - '{': true, - '|': true, - '}': true, - '~': true, - '\u007f': true, -} - -// htmlSafeSet holds the value true if the ASCII character with the given -// array position can be safely represented inside a JSON string, embedded -// inside of HTML