From 125a2f1f761af101e4cd2659c7148e6ca6c223cc Mon Sep 17 00:00:00 2001 From: Marc Falzon Date: Fri, 7 Aug 2020 16:15:09 +0200 Subject: [PATCH 1/6] Remove "exoscale-import" post-processor This change removes the `exoscale-import` post-processor from the upstream Packer repository, following extraction as a standalone plugin in a dedicated repository (https://github.com/exoscale/packer-post-processor-exoscale-import) --- CODEOWNERS | 1 - command/plugin.go | 2 - post-processor/exoscale-import/artifact.go | 31 -- .../exoscale-import/post-processor.go | 270 -------------- .../post-processor.hcl2spec.go | 69 ---- .../exoscale-import/version/version.go | 13 - website/data/docs-navigation.js | 335 ++++++++++++++++++ 7 files changed, 335 insertions(+), 386 deletions(-) delete mode 100644 post-processor/exoscale-import/artifact.go delete mode 100644 post-processor/exoscale-import/post-processor.go delete mode 100644 post-processor/exoscale-import/post-processor.hcl2spec.go delete mode 100644 post-processor/exoscale-import/version/version.go create mode 100644 website/data/docs-navigation.js diff --git a/CODEOWNERS b/CODEOWNERS index e11e01cab..5fd90ba79 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -87,7 +87,6 @@ /post-processor/alicloud-import/ dongxiao.zzh@alibaba-inc.com /post-processor/checksum/ v.tolstov@selfip.ru -/post-processor/exoscale-import/ @falzm @mcorbin /post-processor/googlecompute-export/ crunkleton@google.com /post-processor/yandex-export/ @GennadySpb /post-processor/yandex-import/ @GennadySpb diff --git a/command/plugin.go b/command/plugin.go index 2e039ed6c..b5c08b185 100644 --- a/command/plugin.go +++ b/command/plugin.go @@ -72,7 +72,6 @@ import ( checksumpostprocessor "github.com/hashicorp/packer/post-processor/checksum" compresspostprocessor "github.com/hashicorp/packer/post-processor/compress" digitaloceanimportpostprocessor "github.com/hashicorp/packer/post-processor/digitalocean-import" - exoscaleimportpostprocessor "github.com/hashicorp/packer/post-processor/exoscale-import" googlecomputeexportpostprocessor "github.com/hashicorp/packer/post-processor/googlecompute-export" googlecomputeimportpostprocessor "github.com/hashicorp/packer/post-processor/googlecompute-import" manifestpostprocessor "github.com/hashicorp/packer/post-processor/manifest" @@ -190,7 +189,6 @@ var PostProcessors = map[string]packersdk.PostProcessor{ "checksum": new(checksumpostprocessor.PostProcessor), "compress": new(compresspostprocessor.PostProcessor), "digitalocean-import": new(digitaloceanimportpostprocessor.PostProcessor), - "exoscale-import": new(exoscaleimportpostprocessor.PostProcessor), "googlecompute-export": new(googlecomputeexportpostprocessor.PostProcessor), "googlecompute-import": new(googlecomputeimportpostprocessor.PostProcessor), "manifest": new(manifestpostprocessor.PostProcessor), diff --git a/post-processor/exoscale-import/artifact.go b/post-processor/exoscale-import/artifact.go deleted file mode 100644 index cd3f9797b..000000000 --- a/post-processor/exoscale-import/artifact.go +++ /dev/null @@ -1,31 +0,0 @@ -package exoscaleimport - -const BuilderId = "packer.post-processor.exoscale-import" - -type Artifact struct { - id string -} - -func (a *Artifact) BuilderId() string { - return BuilderId -} - -func (a *Artifact) Id() string { - return a.id -} - -func (a *Artifact) Files() []string { - return nil -} - -func (a *Artifact) String() string { - return a.id -} - -func (a *Artifact) State(name string) interface{} { - return nil -} - -func (a *Artifact) Destroy() error { - return nil -} diff --git a/post-processor/exoscale-import/post-processor.go b/post-processor/exoscale-import/post-processor.go deleted file mode 100644 index 1045bf906..000000000 --- a/post-processor/exoscale-import/post-processor.go +++ /dev/null @@ -1,270 +0,0 @@ -//go:generate mapstructure-to-hcl2 -type Config - -package exoscaleimport - -import ( - "context" - "crypto/md5" - "encoding/base64" - "fmt" - "io" - "os" - "path/filepath" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/s3" - "github.com/aws/aws-sdk-go/service/s3/s3manager" - "github.com/exoscale/egoscale" - "github.com/hashicorp/hcl/v2/hcldec" - "github.com/hashicorp/packer-plugin-sdk/common" - packersdk "github.com/hashicorp/packer-plugin-sdk/packer" - "github.com/hashicorp/packer-plugin-sdk/template/config" - "github.com/hashicorp/packer/builder/file" - "github.com/hashicorp/packer/builder/qemu" - "github.com/hashicorp/packer/post-processor/artifice" - "github.com/hashicorp/packer/post-processor/exoscale-import/version" -) - -var ( - defaultTemplateZone = "ch-gva-2" - defaultAPIEndpoint = "https://api.exoscale.com/compute" - defaultSOSEndpoint = "https://sos-" + defaultTemplateZone + ".exo.io" -) - -type Config struct { - common.PackerConfig `mapstructure:",squash"` - SkipClean bool `mapstructure:"skip_clean"` - - SOSEndpoint string `mapstructure:"sos_endpoint"` - APIEndpoint string `mapstructure:"api_endpoint"` - APIKey string `mapstructure:"api_key"` - APISecret string `mapstructure:"api_secret"` - ImageBucket string `mapstructure:"image_bucket"` - TemplateZone string `mapstructure:"template_zone"` - TemplateName string `mapstructure:"template_name"` - TemplateDescription string `mapstructure:"template_description"` - TemplateUsername string `mapstructure:"template_username"` - TemplateDisablePassword bool `mapstructure:"template_disable_password"` - TemplateDisableSSHKey bool `mapstructure:"template_disable_sshkey"` -} - -func init() { - egoscale.UserAgent = "Packer-Exoscale/" + version.ExoscaleImportPluginVersion.FormattedVersion() + " " + egoscale.UserAgent -} - -type PostProcessor struct { - config Config -} - -func (p *PostProcessor) ConfigSpec() hcldec.ObjectSpec { return p.config.FlatMapstructure().HCL2Spec() } - -func (p *PostProcessor) Configure(raws ...interface{}) error { - p.config.TemplateZone = defaultTemplateZone - p.config.APIEndpoint = defaultAPIEndpoint - p.config.SOSEndpoint = defaultSOSEndpoint - - if err := config.Decode(&p.config, nil, raws...); err != nil { - return err - } - - if p.config.APIKey == "" { - p.config.APIKey = os.Getenv("EXOSCALE_API_KEY") - } - - if p.config.APISecret == "" { - p.config.APISecret = os.Getenv("EXOSCALE_API_SECRET") - } - - requiredArgs := map[string]*string{ - "api_key": &p.config.APIKey, - "api_secret": &p.config.APISecret, - "api_endpoint": &p.config.APIEndpoint, - "sos_endpoint": &p.config.SOSEndpoint, - "image_bucket": &p.config.ImageBucket, - "template_zone": &p.config.TemplateZone, - "template_name": &p.config.TemplateName, - "template_description": &p.config.TemplateDescription, - } - - errs := new(packersdk.MultiError) - for k, v := range requiredArgs { - if *v == "" { - errs = packersdk.MultiErrorAppend( - errs, fmt.Errorf("%s must be set", k)) - } - } - - if len(errs.Errors) > 0 { - return errs - } - - packersdk.LogSecretFilter.Set(p.config.APIKey, p.config.APISecret) - - return nil -} - -func (p *PostProcessor) PostProcess(ctx context.Context, ui packersdk.Ui, a packersdk.Artifact) (packersdk.Artifact, bool, bool, error) { - switch a.BuilderId() { - case qemu.BuilderId, file.BuilderId, artifice.BuilderId: - break - - default: - err := fmt.Errorf( - "Unknown artifact type: %s\nCan only import from QEMU/file builders and Artifice post-processor artifacts.", - a.BuilderId()) - return nil, false, false, err - } - - ui.Message("Uploading template image") - url, md5sum, err := p.uploadImage(ctx, ui, a) - if err != nil { - return nil, false, false, fmt.Errorf("unable to upload image: %s", err) - } - - ui.Message("Registering template") - id, err := p.registerTemplate(ctx, ui, url, md5sum) - if err != nil { - return nil, false, false, fmt.Errorf("unable to register template: %s", err) - } - - if !p.config.SkipClean { - ui.Message("Deleting uploaded template image") - if err = p.deleteImage(ctx, ui, a); err != nil { - return nil, false, false, fmt.Errorf("unable to delete uploaded template image: %s", err) - } - } - - return &Artifact{id}, false, false, nil -} - -func (p *PostProcessor) uploadImage(ctx context.Context, ui packersdk.Ui, a packersdk.Artifact) (string, string, error) { - var ( - imageFile = a.Files()[0] - bucketFile = filepath.Base(imageFile) - ) - - f, err := os.Open(imageFile) - if err != nil { - return "", "", err - } - defer f.Close() - - fileInfo, err := f.Stat() - if err != nil { - return "", "", err - } - - // For tracking image file upload progress - pf := ui.TrackProgress(imageFile, 0, fileInfo.Size(), f) - defer pf.Close() - - hash := md5.New() - if _, err := io.Copy(hash, f); err != nil { - return "", "", fmt.Errorf("image checksumming failed: %s", err) - } - if _, err := f.Seek(0, 0); err != nil { - return "", "", err - } - - sess := session.Must(session.NewSessionWithOptions(session.Options{Config: aws.Config{ - Region: aws.String(p.config.TemplateZone), - Endpoint: aws.String(p.config.SOSEndpoint), - Credentials: credentials.NewStaticCredentials(p.config.APIKey, p.config.APISecret, "")}})) - - uploader := s3manager.NewUploader(sess) - output, err := uploader.UploadWithContext(ctx, &s3manager.UploadInput{ - Body: pf, - Bucket: aws.String(p.config.ImageBucket), - Key: aws.String(bucketFile), - ContentMD5: aws.String(base64.StdEncoding.EncodeToString(hash.Sum(nil))), - ACL: aws.String("public-read"), - }) - if err != nil { - return "", "", err - } - - return output.Location, fmt.Sprintf("%x", hash.Sum(nil)), nil -} - -func (p *PostProcessor) deleteImage(ctx context.Context, ui packersdk.Ui, a packersdk.Artifact) error { - var ( - imageFile = a.Files()[0] - bucketFile = filepath.Base(imageFile) - ) - - sess := session.Must(session.NewSessionWithOptions(session.Options{Config: aws.Config{ - Region: aws.String(p.config.TemplateZone), - Endpoint: aws.String(p.config.SOSEndpoint), - Credentials: credentials.NewStaticCredentials(p.config.APIKey, p.config.APISecret, "")}})) - - svc := s3.New(sess) - if _, err := svc.DeleteObject(&s3.DeleteObjectInput{ - Bucket: aws.String(p.config.ImageBucket), - Key: aws.String(bucketFile), - }); err != nil { - return err - } - - return nil -} - -func (p *PostProcessor) registerTemplate(ctx context.Context, ui packersdk.Ui, url, md5sum string) (string, error) { - var ( - passwordEnabled = !p.config.TemplateDisablePassword - sshkeyEnabled = !p.config.TemplateDisableSSHKey - regErr error - ) - - exo := egoscale.NewClient(p.config.APIEndpoint, p.config.APIKey, p.config.APISecret) - exo.RetryStrategy = egoscale.FibonacciRetryStrategy - - zone := egoscale.Zone{Name: p.config.TemplateZone} - if resp, err := exo.GetWithContext(ctx, &zone); err != nil { - return "", fmt.Errorf("template zone lookup failed: %s", err) - } else { - zone.ID = resp.(*egoscale.Zone).ID - } - - req := egoscale.RegisterCustomTemplate{ - URL: url, - ZoneID: zone.ID, - Name: p.config.TemplateName, - Displaytext: p.config.TemplateDescription, - PasswordEnabled: &passwordEnabled, - SSHKeyEnabled: &sshkeyEnabled, - Details: map[string]string{"username": p.config.TemplateUsername}, - Checksum: md5sum, - } - - res := make([]egoscale.Template, 0) - - exo.AsyncRequestWithContext(ctx, req, func(jobRes *egoscale.AsyncJobResult, err error) bool { - if err != nil { - regErr = fmt.Errorf("request failed: %s", err) - return false - } else if jobRes.JobStatus == egoscale.Pending { - // Job is not completed yet - ui.Message("template registration in progress") - return true - } - - if err := jobRes.Result(&res); err != nil { - regErr = err - return false - } - - if len(res) != 1 { - regErr = fmt.Errorf("unexpected response from API (expected 1 item, got %d)", len(res)) - return false - } - - return false - }) - if regErr != nil { - return "", regErr - } - - return res[0].ID.String(), nil -} diff --git a/post-processor/exoscale-import/post-processor.hcl2spec.go b/post-processor/exoscale-import/post-processor.hcl2spec.go deleted file mode 100644 index e10719ab4..000000000 --- a/post-processor/exoscale-import/post-processor.hcl2spec.go +++ /dev/null @@ -1,69 +0,0 @@ -// Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT. - -package exoscaleimport - -import ( - "github.com/hashicorp/hcl/v2/hcldec" - "github.com/zclconf/go-cty/cty" -) - -// FlatConfig is an auto-generated flat version of Config. -// Where the contents of a field with a `mapstructure:,squash` tag are bubbled up. -type FlatConfig struct { - PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name" hcl:"packer_build_name"` - PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type" hcl:"packer_builder_type"` - PackerCoreVersion *string `mapstructure:"packer_core_version" cty:"packer_core_version" hcl:"packer_core_version"` - PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug" hcl:"packer_debug"` - PackerForce *bool `mapstructure:"packer_force" cty:"packer_force" hcl:"packer_force"` - PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error" hcl:"packer_on_error"` - PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables" hcl:"packer_user_variables"` - PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables" hcl:"packer_sensitive_variables"` - SkipClean *bool `mapstructure:"skip_clean" cty:"skip_clean" hcl:"skip_clean"` - SOSEndpoint *string `mapstructure:"sos_endpoint" cty:"sos_endpoint" hcl:"sos_endpoint"` - APIEndpoint *string `mapstructure:"api_endpoint" cty:"api_endpoint" hcl:"api_endpoint"` - APIKey *string `mapstructure:"api_key" cty:"api_key" hcl:"api_key"` - APISecret *string `mapstructure:"api_secret" cty:"api_secret" hcl:"api_secret"` - ImageBucket *string `mapstructure:"image_bucket" cty:"image_bucket" hcl:"image_bucket"` - TemplateZone *string `mapstructure:"template_zone" cty:"template_zone" hcl:"template_zone"` - TemplateName *string `mapstructure:"template_name" cty:"template_name" hcl:"template_name"` - TemplateDescription *string `mapstructure:"template_description" cty:"template_description" hcl:"template_description"` - TemplateUsername *string `mapstructure:"template_username" cty:"template_username" hcl:"template_username"` - TemplateDisablePassword *bool `mapstructure:"template_disable_password" cty:"template_disable_password" hcl:"template_disable_password"` - TemplateDisableSSHKey *bool `mapstructure:"template_disable_sshkey" cty:"template_disable_sshkey" hcl:"template_disable_sshkey"` -} - -// FlatMapstructure returns a new FlatConfig. -// FlatConfig is an auto-generated flat version of Config. -// Where the contents a fields with a `mapstructure:,squash` tag are bubbled up. -func (*Config) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec } { - return new(FlatConfig) -} - -// HCL2Spec returns the hcl spec of a Config. -// This spec is used by HCL to read the fields of Config. -// The decoded values from this spec will then be applied to a FlatConfig. -func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec { - s := map[string]hcldec.Spec{ - "packer_build_name": &hcldec.AttrSpec{Name: "packer_build_name", Type: cty.String, Required: false}, - "packer_builder_type": &hcldec.AttrSpec{Name: "packer_builder_type", Type: cty.String, Required: false}, - "packer_core_version": &hcldec.AttrSpec{Name: "packer_core_version", Type: cty.String, Required: false}, - "packer_debug": &hcldec.AttrSpec{Name: "packer_debug", Type: cty.Bool, Required: false}, - "packer_force": &hcldec.AttrSpec{Name: "packer_force", Type: cty.Bool, Required: false}, - "packer_on_error": &hcldec.AttrSpec{Name: "packer_on_error", Type: cty.String, Required: false}, - "packer_user_variables": &hcldec.AttrSpec{Name: "packer_user_variables", Type: cty.Map(cty.String), Required: false}, - "packer_sensitive_variables": &hcldec.AttrSpec{Name: "packer_sensitive_variables", Type: cty.List(cty.String), Required: false}, - "skip_clean": &hcldec.AttrSpec{Name: "skip_clean", Type: cty.Bool, Required: false}, - "sos_endpoint": &hcldec.AttrSpec{Name: "sos_endpoint", Type: cty.String, Required: false}, - "api_endpoint": &hcldec.AttrSpec{Name: "api_endpoint", Type: cty.String, Required: false}, - "api_key": &hcldec.AttrSpec{Name: "api_key", Type: cty.String, Required: false}, - "api_secret": &hcldec.AttrSpec{Name: "api_secret", Type: cty.String, Required: false}, - "image_bucket": &hcldec.AttrSpec{Name: "image_bucket", Type: cty.String, Required: false}, - "template_zone": &hcldec.AttrSpec{Name: "template_zone", Type: cty.String, Required: false}, - "template_name": &hcldec.AttrSpec{Name: "template_name", Type: cty.String, Required: false}, - "template_description": &hcldec.AttrSpec{Name: "template_description", Type: cty.String, Required: false}, - "template_username": &hcldec.AttrSpec{Name: "template_username", Type: cty.String, Required: false}, - "template_disable_password": &hcldec.AttrSpec{Name: "template_disable_password", Type: cty.Bool, Required: false}, - "template_disable_sshkey": &hcldec.AttrSpec{Name: "template_disable_sshkey", Type: cty.Bool, Required: false}, - } - return s -} diff --git a/post-processor/exoscale-import/version/version.go b/post-processor/exoscale-import/version/version.go deleted file mode 100644 index 0da76884d..000000000 --- a/post-processor/exoscale-import/version/version.go +++ /dev/null @@ -1,13 +0,0 @@ -package version - -import ( - "github.com/hashicorp/packer-plugin-sdk/version" - packerVersion "github.com/hashicorp/packer/version" -) - -var ExoscaleImportPluginVersion *version.PluginVersion - -func init() { - ExoscaleImportPluginVersion = version.InitializePluginVersion( - packerVersion.Version, packerVersion.VersionPrerelease) -} diff --git a/website/data/docs-navigation.js b/website/data/docs-navigation.js new file mode 100644 index 000000000..a65fd5c5a --- /dev/null +++ b/website/data/docs-navigation.js @@ -0,0 +1,335 @@ +// The root folder for this documentation category is `pages/docs` +// +// - A string refers to the name of a file +// - A "category" value refers to the name of a directory +// - All directories must have an "index.mdx" file to serve as +// the landing page for the category + +export default [ + '--------', + 'terminology', + { + category: 'commands', + content: ['init', 'build', 'console', 'fix', 'fmt', 'inspect', 'validate', 'hcl2_upgrade'], + }, + { + category: 'templates', + content: [ + { + category: 'hcl_templates', + content: [ + { + category: 'blocks', + content: [ + { + category: 'build', + content: [ + 'source', + 'provisioner', + 'post-processor', + 'post-processors', + ], + }, + 'locals', + 'source', + 'variable', + 'packer', + 'data' + ], + }, + { + category: 'functions', + content: [ + { + category: 'contextual', + content: [ + 'aws_secretsmanager', + 'consul', + 'env', + 'vault', + ], + }, + { + category: 'numeric', + content: [ + 'abs', + 'ceil', + 'floor', + 'log', + 'max', + 'min', + 'parseint', + 'pow', + 'signum', + ], + }, + { + category: 'string', + content: [ + 'chomp', + 'format', + 'formatlist', + 'indent', + 'join', + 'lower', + 'replace', + 'regex_replace', + 'regex', + 'regexall', + 'split', + 'strrev', + 'substr', + 'title', + 'trim', + 'trimprefix', + 'trimsuffix', + 'trimspace', + 'upper', + ], + }, + { + category: 'collection', + content: [ + 'chunklist', + 'coalesce', + 'coalescelist', + 'compact', + 'concat', + 'contains', + 'distinct', + 'element', + 'flatten', + 'keys', + 'length', + 'lookup', + 'merge', + 'range', + 'reverse', + 'setintersection', + 'setproduct', + 'setunion', + 'slice', + 'sort', + 'values', + 'zipmap', + ], + }, + { + category: 'encoding', + content: [ + 'base64decode', + 'base64encode', + 'csvdecode', + 'jsondecode', + 'jsonencode', + 'urlencode', + 'yamldecode', + 'yamlencode', + ], + }, + { + category: 'file', + content: [ + 'abspath', + 'basename', + 'dirname', + 'file', + 'fileexists', + 'fileset', + 'pathexpand', + ], + }, + { + category: 'datetime', + content: ['formatdate', 'timeadd', 'timestamp'], + }, + { + category: 'crypto', + content: [ + 'bcrypt', + 'md5', + 'rsadecrypt', + 'sha1', + 'sha256', + 'sha512', + ], + }, + { + category: 'uuid', + content: ['uuidv4', 'uuidv5'], + }, + { + category: 'ipnet', + content: ['cidrhost', 'cidrnetmask', 'cidrsubnet'], + }, + { + category: 'conversion', + content: ['can', 'convert', 'try'], + }, + ], + }, + 'variables', + 'locals', + 'contextual-variables', + 'datasources', + 'path-variables', + 'syntax', + 'onlyexcept', + 'expressions', + 'syntax-json', + ], + }, + { + category: "legacy_json_templates", + content: [ + 'builders', + 'communicator', + 'engine', + 'post-processors', + 'provisioners', + 'user-variables', + ] + }, + ], + }, + '----------', + {category: 'communicators', content: ['ssh', 'winrm']}, + { + category: 'builders', + content: [ + 'alicloud-ecs', + { + category: 'amazon', + content: ['chroot', 'ebs', 'ebssurrogate', 'ebsvolume', 'instance'], + }, + { + category: 'azure', + content: ['arm', 'chroot'], + }, + 'cloudstack', + 'digitalocean', + 'docker', + 'file', + 'googlecompute', + 'hetzner-cloud', + 'hyperone', + {category: 'hyperv', content: ['iso', 'vmcx']}, + 'linode', + 'lxc', + 'lxd', + 'ncloud', + 'null', + 'oneandone', + 'openstack', + {category: 'oracle', content: ['classic', 'oci']}, + { + category: 'outscale', + content: ['chroot', 'bsu', 'bsusurrogate', 'bsuvolume'], + }, + {category: 'parallels', content: ['iso', 'pvm']}, + 'profitbricks', + {category: 'proxmox', content: ['iso', 'clone']}, + 'qemu', + 'scaleway', + 'tencentcloud-cvm', + 'jdcloud', + 'triton', + 'ucloud-uhost', + 'vagrant', + { + category: 'virtualbox', + content: ['iso', 'ovf', 'vm'], + }, + { + category: 'vmware', + content: ['iso', 'vmx', 'vsphere-iso', 'vsphere-clone'], + }, + 'yandex', + 'custom', + 'community-supported', + ], + }, + { + category: 'datasources', + content: [ + { + category: 'amazon', + content: [ + 'ami', + 'secretsmanager' + ], + }, + ] + }, + { + category: 'provisioners', + content: [ + 'ansible-local', + 'ansible', + 'breakpoint', + 'chef-client', + 'chef-solo', + 'converge', + 'file', + 'inspec', + 'powershell', + 'puppet-masterless', + 'puppet-server', + 'salt-masterless', + 'shell', + 'shell-local', + 'windows-shell', + 'windows-restart', + 'custom', + 'community-supported', + ], + }, + { + category: 'post-processors', + content: [ + 'alicloud-import', + 'amazon-import', + 'artifice', + 'compress', + 'checksum', + 'digitalocean-import', + 'docker-import', + 'docker-push', + 'docker-save', + 'docker-tag', + 'googlecompute-export', + 'googlecompute-import', + 'manifest', + 'shell-local', + 'ucloud-import', + 'vagrant', + 'vagrant-cloud', + 'vsphere', + 'vsphere-template', + 'yandex-export', + 'yandex-import', + 'community-supported', + ], + }, + '----------', + 'install', + 'configure', + '----------', + { + category: 'plugins', + content: [ + { + category: 'creation', + content: [ + 'custom-builders', + 'custom-post-processors', + 'custom-provisioners', + 'custom-datasources', + ], + }, + ], + }, + + '---------', + 'debugging', +] From 9a1f2d0c9769e482389939c0023bebfbbab08d81 Mon Sep 17 00:00:00 2001 From: Marc Falzon Date: Mon, 10 Aug 2020 08:41:43 +0200 Subject: [PATCH 2/6] fixup! Remove "exoscale-import" post-processor --- go.mod | 1 - go.sum | 2 - .../exoscale/egoscale/.codeclimate.yml | 31 - .../github.com/exoscale/egoscale/.gitignore | 5 - .../exoscale/egoscale/.golangci.yml | 27 - .../exoscale/egoscale/.gometalinter.json | 25 - .../github.com/exoscale/egoscale/.travis.yml | 49 -- vendor/github.com/exoscale/egoscale/AUTHORS | 9 - .../github.com/exoscale/egoscale/CHANGELOG.md | 457 ------------- vendor/github.com/exoscale/egoscale/LICENSE | 201 ------ vendor/github.com/exoscale/egoscale/README.md | 27 - .../github.com/exoscale/egoscale/accounts.go | 80 --- .../exoscale/egoscale/accounts_response.go | 43 -- .../github.com/exoscale/egoscale/addresses.go | 179 ----- .../exoscale/egoscale/affinity_groups.go | 158 ----- .../egoscale/affinitygroups_response.go | 43 -- vendor/github.com/exoscale/egoscale/apis.go | 48 -- .../exoscale/egoscale/async_jobs.go | 138 ---- .../exoscale/egoscale/asyncjobs_response.go | 43 -- vendor/github.com/exoscale/egoscale/cidr.go | 62 -- vendor/github.com/exoscale/egoscale/client.go | 418 ------------ .../exoscale/egoscale/cserrorcode_string.go | 47 -- vendor/github.com/exoscale/egoscale/dns.go | 364 ----------- vendor/github.com/exoscale/egoscale/doc.go | 180 ----- .../exoscale/egoscale/errorcode_string.go | 37 -- vendor/github.com/exoscale/egoscale/events.go | 76 --- .../exoscale/egoscale/events_response.go | 43 -- .../exoscale/egoscale/eventtypes_response.go | 43 -- vendor/github.com/exoscale/egoscale/go.mod | 3 - vendor/github.com/exoscale/egoscale/go.sum | 2 - .../github.com/exoscale/egoscale/gopher.png | Bin 63065 -> 0 bytes .../exoscale/egoscale/instance_groups.go | 71 -- .../egoscale/instancegroups_response.go | 43 -- vendor/github.com/exoscale/egoscale/isos.go | 94 --- .../exoscale/egoscale/isos_response.go | 43 -- .../exoscale/egoscale/jobstatustype_string.go | 16 - .../exoscale/egoscale/macaddress.go | 63 -- .../exoscale/egoscale/network_offerings.go | 91 --- .../egoscale/networkofferings_response.go | 43 -- .../github.com/exoscale/egoscale/networks.go | 229 ------- .../exoscale/egoscale/networks_response.go | 43 -- vendor/github.com/exoscale/egoscale/nics.go | 120 ---- .../exoscale/egoscale/nics_response.go | 43 -- .../egoscale/oscategories_response.go | 43 -- .../egoscale/publicipaddresses_response.go | 43 -- .../exoscale/egoscale/record_string.go | 16 - .../github.com/exoscale/egoscale/request.go | 405 ------------ .../exoscale/egoscale/request_type.go | 184 ------ .../exoscale/egoscale/resource_limits.go | 100 --- .../exoscale/egoscale/resource_metadata.go | 41 -- .../egoscale/resourcedetails_response.go | 43 -- .../egoscale/resourcelimits_response.go | 43 -- .../exoscale/egoscale/reversedns.go | 83 --- .../github.com/exoscale/egoscale/runstatus.go | 131 ---- .../exoscale/egoscale/runstatus_event.go | 37 -- .../exoscale/egoscale/runstatus_incident.go | 175 ----- .../egoscale/runstatus_maintenance.go | 208 ------ .../exoscale/egoscale/runstatus_page.go | 168 ----- .../exoscale/egoscale/runstatus_service.go | 201 ------ .../exoscale/egoscale/security_groups.go | 226 ------- .../egoscale/securitygroups_response.go | 43 -- .../exoscale/egoscale/serialization.go | 402 ------------ .../exoscale/egoscale/service_offerings.go | 77 --- .../egoscale/serviceofferings_response.go | 43 -- .../github.com/exoscale/egoscale/snapshots.go | 139 ---- .../exoscale/egoscale/snapshots_response.go | 43 -- .../exoscale/egoscale/ssh_keypairs.go | 105 --- .../exoscale/egoscale/sshkeypairs_response.go | 43 -- vendor/github.com/exoscale/egoscale/tags.go | 84 --- .../exoscale/egoscale/tags_response.go | 43 -- .../github.com/exoscale/egoscale/templates.go | 163 ----- .../exoscale/egoscale/templates_response.go | 43 -- vendor/github.com/exoscale/egoscale/users.go | 63 -- .../exoscale/egoscale/users_response.go | 43 -- vendor/github.com/exoscale/egoscale/uuid.go | 79 --- .../github.com/exoscale/egoscale/version.go | 4 - .../exoscale/egoscale/virtual_machines.go | 613 ------------------ .../egoscale/virtualmachines_response.go | 43 -- .../github.com/exoscale/egoscale/volumes.go | 113 ---- .../exoscale/egoscale/volumes_response.go | 43 -- vendor/github.com/exoscale/egoscale/zones.go | 62 -- .../exoscale/egoscale/zones_response.go | 43 -- vendor/modules.txt | 4 +- 83 files changed, 1 insertion(+), 8224 deletions(-) delete mode 100644 vendor/github.com/exoscale/egoscale/.codeclimate.yml delete mode 100644 vendor/github.com/exoscale/egoscale/.gitignore delete mode 100644 vendor/github.com/exoscale/egoscale/.golangci.yml delete mode 100644 vendor/github.com/exoscale/egoscale/.gometalinter.json delete mode 100644 vendor/github.com/exoscale/egoscale/.travis.yml delete mode 100644 vendor/github.com/exoscale/egoscale/AUTHORS delete mode 100644 vendor/github.com/exoscale/egoscale/CHANGELOG.md delete mode 100644 vendor/github.com/exoscale/egoscale/LICENSE delete mode 100644 vendor/github.com/exoscale/egoscale/README.md delete mode 100644 vendor/github.com/exoscale/egoscale/accounts.go delete mode 100644 vendor/github.com/exoscale/egoscale/accounts_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/addresses.go delete mode 100644 vendor/github.com/exoscale/egoscale/affinity_groups.go delete mode 100644 vendor/github.com/exoscale/egoscale/affinitygroups_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/apis.go delete mode 100644 vendor/github.com/exoscale/egoscale/async_jobs.go delete mode 100644 vendor/github.com/exoscale/egoscale/asyncjobs_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/cidr.go delete mode 100644 vendor/github.com/exoscale/egoscale/client.go delete mode 100644 vendor/github.com/exoscale/egoscale/cserrorcode_string.go delete mode 100644 vendor/github.com/exoscale/egoscale/dns.go delete mode 100644 vendor/github.com/exoscale/egoscale/doc.go delete mode 100644 vendor/github.com/exoscale/egoscale/errorcode_string.go delete mode 100644 vendor/github.com/exoscale/egoscale/events.go delete mode 100644 vendor/github.com/exoscale/egoscale/events_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/eventtypes_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/go.mod delete mode 100644 vendor/github.com/exoscale/egoscale/go.sum delete mode 100644 vendor/github.com/exoscale/egoscale/gopher.png delete mode 100644 vendor/github.com/exoscale/egoscale/instance_groups.go delete mode 100644 vendor/github.com/exoscale/egoscale/instancegroups_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/isos.go delete mode 100644 vendor/github.com/exoscale/egoscale/isos_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/jobstatustype_string.go delete mode 100644 vendor/github.com/exoscale/egoscale/macaddress.go delete mode 100644 vendor/github.com/exoscale/egoscale/network_offerings.go delete mode 100644 vendor/github.com/exoscale/egoscale/networkofferings_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/networks.go delete mode 100644 vendor/github.com/exoscale/egoscale/networks_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/nics.go delete mode 100644 vendor/github.com/exoscale/egoscale/nics_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/oscategories_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/publicipaddresses_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/record_string.go delete mode 100644 vendor/github.com/exoscale/egoscale/request.go delete mode 100644 vendor/github.com/exoscale/egoscale/request_type.go delete mode 100644 vendor/github.com/exoscale/egoscale/resource_limits.go delete mode 100644 vendor/github.com/exoscale/egoscale/resource_metadata.go delete mode 100644 vendor/github.com/exoscale/egoscale/resourcedetails_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/resourcelimits_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/reversedns.go delete mode 100644 vendor/github.com/exoscale/egoscale/runstatus.go delete mode 100644 vendor/github.com/exoscale/egoscale/runstatus_event.go delete mode 100644 vendor/github.com/exoscale/egoscale/runstatus_incident.go delete mode 100644 vendor/github.com/exoscale/egoscale/runstatus_maintenance.go delete mode 100644 vendor/github.com/exoscale/egoscale/runstatus_page.go delete mode 100644 vendor/github.com/exoscale/egoscale/runstatus_service.go delete mode 100644 vendor/github.com/exoscale/egoscale/security_groups.go delete mode 100644 vendor/github.com/exoscale/egoscale/securitygroups_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/serialization.go delete mode 100644 vendor/github.com/exoscale/egoscale/service_offerings.go delete mode 100644 vendor/github.com/exoscale/egoscale/serviceofferings_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/snapshots.go delete mode 100644 vendor/github.com/exoscale/egoscale/snapshots_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/ssh_keypairs.go delete mode 100644 vendor/github.com/exoscale/egoscale/sshkeypairs_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/tags.go delete mode 100644 vendor/github.com/exoscale/egoscale/tags_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/templates.go delete mode 100644 vendor/github.com/exoscale/egoscale/templates_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/users.go delete mode 100644 vendor/github.com/exoscale/egoscale/users_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/uuid.go delete mode 100644 vendor/github.com/exoscale/egoscale/version.go delete mode 100644 vendor/github.com/exoscale/egoscale/virtual_machines.go delete mode 100644 vendor/github.com/exoscale/egoscale/virtualmachines_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/volumes.go delete mode 100644 vendor/github.com/exoscale/egoscale/volumes_response.go delete mode 100644 vendor/github.com/exoscale/egoscale/zones.go delete mode 100644 vendor/github.com/exoscale/egoscale/zones_response.go diff --git a/go.mod b/go.mod index 858ad2f70..b3a97053b 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,6 @@ require ( github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/digitalocean/go-qemu v0.0.0-20201211181942-d361e7b4965f github.com/digitalocean/godo v1.11.1 - github.com/exoscale/egoscale v0.18.1 github.com/fatih/camelcase v1.0.0 github.com/fatih/structtag v1.0.0 github.com/go-ini/ini v1.25.4 diff --git a/go.sum b/go.sum index ca566554a..2c3abd6fe 100644 --- a/go.sum +++ b/go.sum @@ -176,7 +176,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/exoscale/egoscale v0.18.1 h1:1FNZVk8jHUx0AvWhOZxLEDNlacTU0chMXUUNkm9EZaI= github.com/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSYdCF3rnBKXE= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= @@ -381,7 +380,6 @@ github.com/hashicorp/packer v1.6.7-0.20210217093213-201869d627bf/go.mod h1:+EWPP github.com/hashicorp/packer-plugin-docker v0.0.2 h1:j/hQTogaN2pZfZohlZTRu5YvNZg2/qtYYHkxPBxv2Oo= github.com/hashicorp/packer-plugin-docker v0.0.2/go.mod h1:A2p9qztS4n88KsNF+qBM7BWw2HndW636GpFIjNSvbKM= github.com/hashicorp/packer-plugin-sdk v0.0.6/go.mod h1:Nvh28f+Jmpp2rcaN79bULTouNkGNDRfHckhHKTAXtyU= -github.com/hashicorp/packer-plugin-sdk v0.0.6/go.mod h1:Nvh28f+Jmpp2rcaN79bULTouNkGNDRfHckhHKTAXtyU= github.com/hashicorp/packer-plugin-sdk v0.0.7-0.20210111224258-fd30ebb797f0/go.mod h1:YdWTt5w6cYfaQG7IOi5iorL+3SXnz8hI0gJCi8Db/LI= github.com/hashicorp/packer-plugin-sdk v0.0.7-0.20210120105339-f6fd68d2570a/go.mod h1:exN0C+Pe+3zu18l4nxueNjX5cfmslxUX/m/xk4IVmZQ= github.com/hashicorp/packer-plugin-sdk v0.0.7-0.20210122130548-45a6ca0a9365/go.mod h1:K7VsU0lfJBDyiUrSNnS/j+zMxSRwwH9WC9QvHv32KsU= diff --git a/vendor/github.com/exoscale/egoscale/.codeclimate.yml b/vendor/github.com/exoscale/egoscale/.codeclimate.yml deleted file mode 100644 index dc2b688a4..000000000 --- a/vendor/github.com/exoscale/egoscale/.codeclimate.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: "2" - -checks: - argument-count: - enabled: false - complex-logic: - enabled: false - file-lines: - enabled: false - method-complexity: - enabled: false - method-count: - enabled: false - method-lines: - enabled: false - nested-control-flow: - enabled: false - return-statements: - enabled: false - similar-code: - enabled: false - identical-code: - enabled: false - -plugins: - gofmt: - enabled: true - golint: - enabled: true - govet: - enabled: true diff --git a/vendor/github.com/exoscale/egoscale/.gitignore b/vendor/github.com/exoscale/egoscale/.gitignore deleted file mode 100644 index 800fe1da7..000000000 --- a/vendor/github.com/exoscale/egoscale/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.token -dist -ops.asc -vendor -listApis.json \ No newline at end of file diff --git a/vendor/github.com/exoscale/egoscale/.golangci.yml b/vendor/github.com/exoscale/egoscale/.golangci.yml deleted file mode 100644 index da5e91dff..000000000 --- a/vendor/github.com/exoscale/egoscale/.golangci.yml +++ /dev/null @@ -1,27 +0,0 @@ -linters-settings: - golint: - min-confidence: 0.3 - gocyclo: - min-complexity: 28 - goimports: - local-prefixes: github.com - -linters: - enable: - - deadcode - - dupl - - errcheck - - gocyclo - - goimports - - golint - - gosimple - - govet - - ineffassign - - megacheck - - nakedret - - scopelint - - staticcheck - - structcheck - - unused - - varcheck - disable-all: true diff --git a/vendor/github.com/exoscale/egoscale/.gometalinter.json b/vendor/github.com/exoscale/egoscale/.gometalinter.json deleted file mode 100644 index c685c4603..000000000 --- a/vendor/github.com/exoscale/egoscale/.gometalinter.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "Test": false, - "Enable": [ - "deadcode", - "errcheck", - "golint", - "gosimple", - "gotype", - "ineffassign", - "interfacer", - "misspell", - "structcheck", - "unconvert", - "varcheck", - "vet", - "vetshadow" - ], - "Disable": [ - "goconst", - "gocyclo", - "gosec", - "maligned" - ], - "Skip": ["vendor"] -} diff --git a/vendor/github.com/exoscale/egoscale/.travis.yml b/vendor/github.com/exoscale/egoscale/.travis.yml deleted file mode 100644 index 94b2f19c8..000000000 --- a/vendor/github.com/exoscale/egoscale/.travis.yml +++ /dev/null @@ -1,49 +0,0 @@ -language: go - -dist: xenial -sudo: required - -go: -- "1.7.x" -- "1.8.x" -- "1.9.x" -- "1.10.x" -- "1.11.x" -- "1.12.x" -- tip - -env: - - GOLANGCI_LINT_VERSION=1.15.0 GO111MODULES=on - -cache: apt - -addons: - apt: - update: true - packages: - - rpm - -install: - - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $GOPATH/bin v${GOLANGCI_LINT_VERSION} - - npm i codeclimate-test-reporter - - '[ "$(echo "$TRAVIS_GO_VERSION" | perl -pe "s/\\.[x\\d]+$//")" = "1.11" ] && go mod vendor || go get -u github.com/gofrs/uuid' - -before_script: - - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter - - chmod +x ./cc-test-reporter - - ./cc-test-reporter before-build - -script: - - go test -race -coverprofile=c.out -covermode=atomic . - -after_script: - - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT - -jobs: - include: - - stage: golangci-lint - go: 1.10.x - if: type = pull_request - script: - - go get -u github.com/gofrs/uuid - - golangci-lint run . diff --git a/vendor/github.com/exoscale/egoscale/AUTHORS b/vendor/github.com/exoscale/egoscale/AUTHORS deleted file mode 100644 index 5c12a2a17..000000000 --- a/vendor/github.com/exoscale/egoscale/AUTHORS +++ /dev/null @@ -1,9 +0,0 @@ -Pierre-Yves Ritschard -Vincent Bernat -Chris Baumbauer -Marc-Aurèle Brothier -Sebastien Goasguen -Yoan Blanc -Stefano Marengo -Pierre-Emmanuel Jacquier -Fabrizio Steiner diff --git a/vendor/github.com/exoscale/egoscale/CHANGELOG.md b/vendor/github.com/exoscale/egoscale/CHANGELOG.md deleted file mode 100644 index c222673c6..000000000 --- a/vendor/github.com/exoscale/egoscale/CHANGELOG.md +++ /dev/null @@ -1,457 +0,0 @@ -Changelog -========= - -0.18.1 ------- - -- change: make the "User-Agent" HTTP request header more informative and exposed - -0.18.0 ------- - -- feature: add method `DeepCopy` on type `AsyncJobResult` (#403) - -0.17.2 ------- - -- remove: remove the `IsFeatured` parameter from call `RegisterCustomTemplate` (#402) - -0.17.1 ------- - -- feature: add parameter `RescueProfile` to call `StartVirtualMachine` (#401) - -0.17.0 ------- - -- feature: add new call `RegisterCustomTemplate` (#400) -- feature: add new call `DeleteTemplate` (#399) - -0.16.0 ------- - -- feature: Add `Healthcheck*` parameters to call `UpdateIPAddress` -- change: Replace satori/go.uuid by gofrs/uuid - -0.15.0 ------- - -- change: prefix the healthcheck-related params with `Healthcheck` on call `AssociateIPAddress` -- EIP: the healthcheck should be a pointer -- ip addresses: Add the Healthcheck parameters -- readme: point to new lego org (#395) -- dns: user_id is not sent back (#394) - -0.14.3 ------- - -- fix: `AffinityGroup` lists virtual machines with `UUID` rather than string - -0.14.2 ------- - -- fix: `ListVirtualMachines` by `IDs` to accept `UUID` rather than string - -0.14.1 ------- - -- fix: `GetRunstatusPage` to always contain the subresources -- fix: `ListRunstatus*` to fetch all the subresources -- feature: `PaginateRunstatus*` used by list - -0.14.0 ------- - -- change: all DNS calls require a context -- fix: `CreateAffinityGroup` allows empty `name` - -0.13.3 ------- - -- fix: runstatus unmarshalling errors -- feature: `UUID` implements DeepCopy, DeepCopyInto -- change: export `BooleanResponse` - -0.13.2 ------- - -- feat: initial Runstatus API support -- feat: `admin` namespace containing `ListVirtualMachines` for admin usage - -0.13.1 ------- - -- feat: `Iso` support `ListIsos`, `AttachIso`, and `DetachIso` - -0.13.0 ------- - -- change: `Paginate` to accept `Listable` -- change: `ListCommand` is also `Listable` -- change: `client.Get` doesn't modify the given resource, returns a new one -- change: `Command` and `AsyncCommand` are fully public, thus extensible -- remove: `Gettable` - -0.12.5 ------- - -- fix: `AuthorizeSecurityGroupEgress` could return `authorizeSecurityGroupIngress` as name - -0.12.4 ------- - -- feat: `Snapshot` is `Listable` - -0.12.3 ------- - -- change: replace dep by Go modules -- change: remove domainid,domain,regionid,listall,isrecursive,... fields -- remove: `MigrateVirtualMachine`, `CreateUser`, `EnableAccount`, and other admin calls - -0.12.2 ------- - -- fix: `ListNics` has no virtualmachineid limitations anymore -- fix: `PCIDevice` ids are not UUIDs - -0.12.1 ------- - -- fix: `UpdateVMNicIP` is async - -0.12.0 ------- - -- feat: new VM state `Moving` -- feat: `UpdateNetwork` with `startip`, `endip`, `netmask` -- feat: `NetworkOffering` is `Listable` -- feat: when it fails parsing the body, it shows it -- fix: `Snapshot.State` is a string, rather than an scalar -- change: signature are now using the v3 version with expires by default - -0.11.6 ------- - -- fix: `Network.ListRequest` accepts a `Name` argument -- change: `SecurityGroup` and the rules aren't `Taggable` anymore - -0.11.5 ------- - -- feat: addition of `UpdateVMNicIP` -- fix: `UpdateVMAffinityGroup` expected response - -0.11.4 ------- - -*no changes in the core library* - -0.11.3 ------- - -*no changes in the core library* - -0.11.2 ------- - -- fix: empty list responses - -0.11.1 ------- - -- fix: `client.Sign` handles correctly the brackets (kudos to @stffabi) -- change: `client.Payload` returns a `url.Values` - -0.11.0 ------- - -- feat: `listOSCategories` and `OSCategory` type -- feat: `listApis` supports recursive response structures -- feat: `GetRecordsWithFilters` to list records with name or record_type filters -- fix: better `DNSErrorResponse` -- fix: `ListResourceLimits` type -- change: use UUID everywhere - -0.10.5 ------- - -- feat: `Client.Logger` to plug in any `*log.Logger` -- feat: `Client.TraceOn`/`ClientTraceOff` to toggle the HTTP tracing - -0.10.4 ------- - -- feat: `CIDR` to replace string string -- fix: prevent panic on nil - -0.10.3 ------- - -- feat: `Account` is Listable -- feat: `MACAddress` to replace string type -- fix: Go 1.7 support - -0.10.2 ------- - -- fix: ActivateIP6 response - -0.10.1 ------- - -- feat: expose `SyncRequest` and `SyncRequestWithContext` -- feat: addition of reverse DNS calls -- feat: addition of `SecurityGroup.UserSecurityGroup` - -0.10.0 ------- - -- global: cloudstack documentation links are moved into cs -- global: removal of all the `...Response` types -- feat: `Network` is `Listable` -- feat: addition of `deleteUser` -- feat: addition of `listHosts` -- feat: addition of `updateHost` -- feat: exo cmd (kudos to @pierre-emmanuelJ) -- change: refactor `Gettable` to use `ListRequest` - -0.9.31 ------- - -- fix: `IPAddress`.`ListRequest` with boolean fields -- fix: `Network`.`ListRequest` with boolean fields -- fix: `ServiceOffering`.`ListRequest` with boolean fields - -0.9.30 ------- - -- fix: `VirtualMachine` `PCIDevice` representation was incomplete - -0.9.29 ------- - -- change: `DNSErrorResponse` is a proper `error` - -0.9.28 ------- - -- feat: addition of `GetDomains` -- fix: `UpdateDomain` may contain more empty fields than `CreateDomain` - -0.9.27 ------- - -- fix: expects body to be `application/json` - -0.9.26 ------- - -- change: async timeout strategy wait two seconds and not fib(n) seconds - -0.9.25 ------- - -- fix: `GetVirtualUserData` response with `Decode` method handling base64 and gzip - -0.9.24 ------- - -- feat: `Template` is `Gettable` -- feat: `ServiceOffering` is `Gettable` -- feat: addition of `GetAPILimit` -- feat: addition of `CreateTemplate`, `PrepareTemplate`, `CopyTemplate`, `UpdateTemplate`, `RegisterTemplate` -- feat: addition of `MigrateVirtualMachine` -- feat: cmd cli -- change: remove useless fields related to Project and VPC - -0.9.23 ------- - -- feat: `booleanResponse` supports true booleans: https://github.com/apache/cloudstack/pull/2428 - -0.9.22 ------- - -- feat: `ListUsers`, `CreateUser`, `UpdateUser` -- feat: `ListResourceDetails` -- feat: `SecurityGroup` helper `RuleByID` -- feat: `Sign` signs the payload -- feat: `UpdateNetworkOffering` -- feat: `GetVirtualMachineUserData` -- feat: `EnableAccount` and `DisableAccount` (admin stuff) -- feat: `AsyncRequest` and `AsyncRequestWithContext` to examine the polling -- fix: `AuthorizeSecurityGroupIngress` support for ICMPv6 -- change: move `APIName()` into the `Client`, nice godoc -- change: `Payload` doesn't sign the request anymore -- change: `Client` exposes more of its underlying data -- change: requests are sent as GET unless it body size is too big - -0.9.21 ------- - -- feat: `Network` is `Listable` -- feat: `Zone` is `Gettable` -- feat: `Client.Payload` to help preview the HTTP parameters -- feat: generate command utility -- fix: `CreateSnapshot` was missing the `Name` attribute -- fix: `ListSnapshots` was missing the `IDs` attribute -- fix: `ListZones` was missing the `NetworkType` attribute -- fix: `ListAsyncJobs` was missing the `ListAll` attribute -- change: ICMP Type/Code are uint8 and TCP/UDP port are uint16 - -0.9.20 ------- - -- feat: `Template` is `Listable` -- feat: `IPAddress` is `Listable` -- change: `List` and `Paginate` return pointers -- fix: `Template` was missing `tags` - -0.9.19 ------- - -- feat: `SSHKeyPair` is `Listable` - -0.9.18 ------- - -- feat: `VirtualMachine` is `Listable` -- feat: new `Client.Paginate` and `Client.PaginateWithContext` -- change: the inner logic of `Listable` -- remove: not working `Client.AsyncList` - -0.9.17 ------- - -- fix: `AuthorizeSecurityGroup(In|E)gress` startport may be zero - -0.9.16 ------- - -- feat: new `Listable` interface -- feat: `Nic` is `Listable` -- feat: `Volume` is `Listable` -- feat: `Zone` is `Listable` -- feat: `AffinityGroup` is `Listable` -- remove: deprecated methods `ListNics`, `AddIPToNic`, and `RemoveIPFromNic` -- remove: deprecated method `GetRootVolumeForVirtualMachine` - -0.9.15 ------- - -- feat: `IPAddress` is `Gettable` and `Deletable` -- fix: serialization of *bool - -0.9.14 ------- - -- fix: `GetVMPassword` response -- remove: deprecated `GetTopology`, `GetImages`, and al - -0.9.13 ------- - -- feat: IP4 and IP6 flags to DeployVirtualMachine -- feat: add ActivateIP6 -- fix: error message was gobbled on 40x - -0.9.12 ------- - -- feat: add `BooleanRequestWithContext` -- feat: add `client.Get`, `client.GetWithContext` to fetch a resource -- feat: add `cleint.Delete`, `client.DeleteWithContext` to delete a resource -- feat: `SSHKeyPair` is `Gettable` and `Deletable` -- feat: `VirtualMachine` is `Gettable` and `Deletable` -- feat: `AffinityGroup` is `Gettable` and `Deletable` -- feat: `SecurityGroup` is `Gettable` and `Deletable` -- remove: deprecated methods `CreateAffinityGroup`, `DeleteAffinityGroup` -- remove: deprecated methods `CreateKeypair`, `DeleteKeypair`, `RegisterKeypair` -- remove: deprecated method `GetSecurityGroupID` - -0.9.11 ------- - -- feat: CloudStack API name is now public `APIName()` -- feat: enforce the mutual exclusivity of some fields -- feat: add `context.Context` to `RequestWithContext` -- change: `AsyncRequest` and `BooleanAsyncRequest` are gone, use `Request` and `BooleanRequest` instead. -- change: `AsyncInfo` is no more - -0.9.10 ------- - -- fix: typo made ListAll required in ListPublicIPAddresses -- fix: all bool are now *bool, respecting CS default value -- feat: (*VM).DefaultNic() to obtain the main Nic - -0.9.9 ------ - -- fix: affinity groups virtualmachineIds attribute -- fix: uuidList is not a list of strings - -0.9.8 ------ - -- feat: add RootDiskSize to RestoreVirtualMachine -- fix: monotonic polling using Context - -0.9.7 ------ - -- feat: add Taggable interface to expose ResourceType -- feat: add (Create|Update|Delete|List)InstanceGroup(s) -- feat: add RegisterUserKeys -- feat: add ListResourceLimits -- feat: add ListAccounts - -0.9.6 ------ - -- fix: update UpdateVirtualMachine userdata -- fix: Network's name/displaytext might be empty - -0.9.5 ------ - -- fix: serialization of slice - -0.9.4 ------ - -- fix: constants - -0.9.3 ------ - -- change: userdata expects a string -- change: no pointer in sub-struct's - -0.9.2 ------ - -- bug: createNetwork is a sync call -- bug: typo in listVirtualMachines' domainid -- bug: serialization of map[string], e.g. UpdateVirtualMachine -- change: IPAddress's use net.IP type -- feat: helpers VM.NicsByType, VM.NicByNetworkID, VM.NicByID -- feat: addition of CloudStack ApiErrorCode constants - -0.9.1 ------ - -- bug: sync calls returns succes as a string rather than a bool -- change: unexport BooleanResponse types -- feat: original CloudStack error response can be obtained - -0.9.0 ------ - -Big refactoring, addition of the documentation, compliance to golint. - -0.1.0 ------ - -Initial library diff --git a/vendor/github.com/exoscale/egoscale/LICENSE b/vendor/github.com/exoscale/egoscale/LICENSE deleted file mode 100644 index 327ecb823..000000000 --- a/vendor/github.com/exoscale/egoscale/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 2014 exoscale(tm) - - 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/exoscale/egoscale/README.md b/vendor/github.com/exoscale/egoscale/README.md deleted file mode 100644 index bc40ec6b0..000000000 --- a/vendor/github.com/exoscale/egoscale/README.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Egoscale -description: the Go library for Exoscale ---- - - - -[![Build Status](https://travis-ci.org/exoscale/egoscale.svg?branch=master)](https://travis-ci.org/exoscale/egoscale) [![Maintainability](https://api.codeclimate.com/v1/badges/fcab3b624b7d3ca96a9d/maintainability)](https://codeclimate.com/github/exoscale/egoscale/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/fcab3b624b7d3ca96a9d/test_coverage)](https://codeclimate.com/github/exoscale/egoscale/test_coverage) [![GoDoc](https://godoc.org/github.com/exoscale/egoscale?status.svg)](https://godoc.org/github.com/exoscale/egoscale) [![Go Report Card](https://goreportcard.com/badge/github.com/exoscale/egoscale)](https://goreportcard.com/report/github.com/exoscale/egoscale) - -A wrapper for the [Exoscale public cloud](https://www.exoscale.com) API. - -## Known users - -- [Exoscale CLI](https://github.com/exoscale/cli) -- [Exoscale Terraform provider](https://github.com/exoscale/terraform-provider-exoscale) -- [ExoIP](https://github.com/exoscale/exoip): IP Watchdog -- [Lego](https://github.com/go-acme/lego): Let's Encrypt and ACME library -- Kubernetes Incubator: [External DNS](https://github.com/kubernetes-incubator/external-dns) -- [Docker machine](https://docs.docker.com/machine/drivers/exoscale/) -- [etc.](https://godoc.org/github.com/exoscale/egoscale?importers) - -## License - -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 diff --git a/vendor/github.com/exoscale/egoscale/accounts.go b/vendor/github.com/exoscale/egoscale/accounts.go deleted file mode 100644 index 9bcdec608..000000000 --- a/vendor/github.com/exoscale/egoscale/accounts.go +++ /dev/null @@ -1,80 +0,0 @@ -package egoscale - -// Account provides the detailed account information -type Account struct { - AccountDetails map[string]string `json:"accountdetails,omitempty" doc:"details for the account"` - CPUAvailable string `json:"cpuavailable,omitempty" doc:"the total number of cpu cores available to be created for this account"` - CPULimit string `json:"cpulimit,omitempty" doc:"the total number of cpu cores the account can own"` - CPUTotal int64 `json:"cputotal,omitempty" doc:"the total number of cpu cores owned by account"` - DefaultZoneID *UUID `json:"defaultzoneid,omitempty" doc:"the default zone of the account"` - EipLimit string `json:"eiplimit,omitempty" doc:"the total number of public elastic ip addresses this account can acquire"` - Groups []string `json:"groups,omitempty" doc:"the list of acl groups that account belongs to"` - ID *UUID `json:"id,omitempty" doc:"the id of the account"` - IPAvailable string `json:"ipavailable,omitempty" doc:"the total number of public ip addresses available for this account to acquire"` - IPLimit string `json:"iplimit,omitempty" doc:"the total number of public ip addresses this account can acquire"` - IPTotal int64 `json:"iptotal,omitempty" doc:"the total number of public ip addresses allocated for this account"` - IsCleanupRequired bool `json:"iscleanuprequired,omitempty" doc:"true if the account requires cleanup"` - IsDefault bool `json:"isdefault,omitempty" doc:"true if account is default, false otherwise"` - MemoryAvailable string `json:"memoryavailable,omitempty" doc:"the total memory (in MB) available to be created for this account"` - MemoryLimit string `json:"memorylimit,omitempty" doc:"the total memory (in MB) the account can own"` - MemoryTotal int64 `json:"memorytotal,omitempty" doc:"the total memory (in MB) owned by account"` - Name string `json:"name,omitempty" doc:"the name of the account"` - NetworkAvailable string `json:"networkavailable,omitempty" doc:"the total number of networks available to be created for this account"` - NetworkDomain string `json:"networkdomain,omitempty" doc:"the network domain"` - NetworkLimit string `json:"networklimit,omitempty" doc:"the total number of networks the account can own"` - NetworkTotal int64 `json:"networktotal,omitempty" doc:"the total number of networks owned by account"` - PrimaryStorageAvailable string `json:"primarystorageavailable,omitempty" doc:"the total primary storage space (in GiB) available to be used for this account"` - PrimaryStorageLimit string `json:"primarystoragelimit,omitempty" doc:"the total primary storage space (in GiB) the account can own"` - PrimaryStorageTotal int64 `json:"primarystoragetotal,omitempty" doc:"the total primary storage space (in GiB) owned by account"` - ProjectAvailable string `json:"projectavailable,omitempty" doc:"the total number of projects available for administration by this account"` - ProjectLimit string `json:"projectlimit,omitempty" doc:"the total number of projects the account can own"` - ProjectTotal int64 `json:"projecttotal,omitempty" doc:"the total number of projects being administrated by this account"` - SecondaryStorageAvailable string `json:"secondarystorageavailable,omitempty" doc:"the total secondary storage space (in GiB) available to be used for this account"` - SecondaryStorageLimit string `json:"secondarystoragelimit,omitempty" doc:"the total secondary storage space (in GiB) the account can own"` - SecondaryStorageTotal int64 `json:"secondarystoragetotal,omitempty" doc:"the total secondary storage space (in GiB) owned by account"` - SMTP bool `json:"smtp,omitempty" doc:"if SMTP outbound is allowed"` - SnapshotAvailable string `json:"snapshotavailable,omitempty" doc:"the total number of snapshots available for this account"` - SnapshotLimit string `json:"snapshotlimit,omitempty" doc:"the total number of snapshots which can be stored by this account"` - SnapshotTotal int64 `json:"snapshottotal,omitempty" doc:"the total number of snapshots stored by this account"` - State string `json:"state,omitempty" doc:"the state of the account"` - TemplateAvailable string `json:"templateavailable,omitempty" doc:"the total number of templates available to be created by this account"` - TemplateLimit string `json:"templatelimit,omitempty" doc:"the total number of templates which can be created by this account"` - TemplateTotal int64 `json:"templatetotal,omitempty" doc:"the total number of templates which have been created by this account"` - User []User `json:"user,omitempty" doc:"the list of users associated with account"` - VMAvailable string `json:"vmavailable,omitempty" doc:"the total number of virtual machines available for this account to acquire"` - VMLimit string `json:"vmlimit,omitempty" doc:"the total number of virtual machines that can be deployed by this account"` - VMRunning int `json:"vmrunning,omitempty" doc:"the total number of virtual machines running for this account"` - VMStopped int `json:"vmstopped,omitempty" doc:"the total number of virtual machines stopped for this account"` - VMTotal int64 `json:"vmtotal,omitempty" doc:"the total number of virtual machines deployed by this account"` - VolumeAvailable string `json:"volumeavailable,omitempty" doc:"the total volume available for this account"` - VolumeLimit string `json:"volumelimit,omitempty" doc:"the total volume which can be used by this account"` - VolumeTotal int64 `json:"volumetotal,omitempty" doc:"the total volume being used by this account"` -} - -// ListRequest builds the ListAccountsGroups request -func (a Account) ListRequest() (ListCommand, error) { - return &ListAccounts{ - ID: a.ID, - State: a.State, - }, nil -} - -//go:generate go run generate/main.go -interface=Listable ListAccounts - -// ListAccounts represents a query to display the accounts -type ListAccounts struct { - ID *UUID `json:"id,omitempty" doc:"List account by account ID"` - IsCleanUpRequired *bool `json:"iscleanuprequired,omitempty" doc:"list accounts by cleanuprequired attribute (values are true or false)"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"List account by account name"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - State string `json:"state,omitempty" doc:"List accounts by state. Valid states are enabled, disabled, and locked."` - _ bool `name:"listAccounts" description:"Lists accounts and provides detailed account information for listed accounts"` -} - -// ListAccountsResponse represents a list of accounts -type ListAccountsResponse struct { - Count int `json:"count"` - Account []Account `json:"account"` -} diff --git a/vendor/github.com/exoscale/egoscale/accounts_response.go b/vendor/github.com/exoscale/egoscale/accounts_response.go deleted file mode 100644 index 106daca32..000000000 --- a/vendor/github.com/exoscale/egoscale/accounts_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListAccounts) Response() interface{} { - return new(ListAccountsResponse) -} - -// ListRequest returns itself -func (ls *ListAccounts) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListAccounts) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListAccounts) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListAccounts) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListAccountsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListAccountsResponse was expected, got %T", resp)) - return - } - - for i := range items.Account { - if !callback(&items.Account[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/addresses.go b/vendor/github.com/exoscale/egoscale/addresses.go deleted file mode 100644 index d828f52e0..000000000 --- a/vendor/github.com/exoscale/egoscale/addresses.go +++ /dev/null @@ -1,179 +0,0 @@ -package egoscale - -import ( - "context" - "fmt" - "net" -) - -// Healthcheck represents an Healthcheck attached to an IP -type Healthcheck struct { - Interval int64 `json:"interval,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 10, minimum: 5"` - Mode string `json:"mode,omitempty" doc:"healthcheck definition: healthcheck mode can be either 'tcp' or 'http'"` - Path string `json:"path,omitempty" doc:"healthcheck definition: the path against which the 'http' healthcheck will be performed. Required if mode is 'http', ignored otherwise."` - Port int64 `json:"port,omitempty" doc:"healthcheck definition: the port against which the healthcheck will be performed. Required if a 'mode' is provided."` - StrikesFail int64 `json:"strikes-fail,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'dead'. Default: 3"` - StrikesOk int64 `json:"strikes-ok,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'alive'. Default: 2"` - Timeout int64 `json:"timeout,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 2, cannot be greater than interval."` -} - -// IPAddress represents an IP Address -type IPAddress struct { - Allocated string `json:"allocated,omitempty" doc:"date the public IP address was acquired"` - Associated string `json:"associated,omitempty" doc:"date the public IP address was associated"` - AssociatedNetworkID *UUID `json:"associatednetworkid,omitempty" doc:"the ID of the Network associated with the IP address"` - AssociatedNetworkName string `json:"associatednetworkname,omitempty" doc:"the name of the Network associated with the IP address"` - ForVirtualNetwork bool `json:"forvirtualnetwork,omitempty" doc:"the virtual network for the IP address"` - Healthcheck *Healthcheck `json:"healthcheck,omitempty" doc:"The IP healthcheck configuration"` - ID *UUID `json:"id,omitempty" doc:"public IP address id"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"public IP address"` - IsElastic bool `json:"iselastic,omitempty" doc:"is an elastic ip"` - IsPortable bool `json:"isportable,omitempty" doc:"is public IP portable across the zones"` - IsSourceNat bool `json:"issourcenat,omitempty" doc:"true if the IP address is a source nat address, false otherwise"` - IsStaticNat *bool `json:"isstaticnat,omitempty" doc:"true if this ip is for static nat, false otherwise"` - IsSystem bool `json:"issystem,omitempty" doc:"true if this ip is system ip (was allocated as a part of deployVm or createLbRule)"` - NetworkID *UUID `json:"networkid,omitempty" doc:"the ID of the Network where ip belongs to"` - PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"the physical network this belongs to"` - Purpose string `json:"purpose,omitempty" doc:"purpose of the IP address. In Acton this value is not null for Ips with isSystem=true, and can have either StaticNat or LB value"` - ReverseDNS []ReverseDNS `json:"reversedns,omitempty" doc:"the list of PTR record(s) associated with the ip address"` - State string `json:"state,omitempty" doc:"State of the ip address. Can be: Allocatin, Allocated and Releasing"` - Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with ip address"` - VirtualMachineDisplayName string `json:"virtualmachinedisplayname,omitempty" doc:"virtual machine display name the ip address is assigned to (not null only for static nat Ip)"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"virtual machine id the ip address is assigned to (not null only for static nat Ip)"` - VirtualMachineName string `json:"virtualmachinename,omitempty" doc:"virtual machine name the ip address is assigned to (not null only for static nat Ip)"` - VlanID *UUID `json:"vlanid,omitempty" doc:"the ID of the VLAN associated with the IP address. This parameter is visible to ROOT admins only"` - VlanName string `json:"vlanname,omitempty" doc:"the VLAN associated with the IP address"` - VMIPAddress net.IP `json:"vmipaddress,omitempty" doc:"virtual machine (dnat) ip address (not null only for static nat Ip)"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the zone the public IP address belongs to"` - ZoneName string `json:"zonename,omitempty" doc:"the name of the zone the public IP address belongs to"` -} - -// ResourceType returns the type of the resource -func (IPAddress) ResourceType() string { - return "PublicIpAddress" -} - -// ListRequest builds the ListAdresses request -func (ipaddress IPAddress) ListRequest() (ListCommand, error) { - req := &ListPublicIPAddresses{ - AssociatedNetworkID: ipaddress.AssociatedNetworkID, - ID: ipaddress.ID, - IPAddress: ipaddress.IPAddress, - PhysicalNetworkID: ipaddress.PhysicalNetworkID, - VlanID: ipaddress.VlanID, - ZoneID: ipaddress.ZoneID, - } - if ipaddress.IsElastic { - req.IsElastic = &ipaddress.IsElastic - } - if ipaddress.IsSourceNat { - req.IsSourceNat = &ipaddress.IsSourceNat - } - if ipaddress.ForVirtualNetwork { - req.ForVirtualNetwork = &ipaddress.ForVirtualNetwork - } - - return req, nil -} - -// Delete removes the resource -func (ipaddress IPAddress) Delete(ctx context.Context, client *Client) error { - if ipaddress.ID == nil { - return fmt.Errorf("an IPAddress may only be deleted using ID") - } - - return client.BooleanRequestWithContext(ctx, &DisassociateIPAddress{ - ID: ipaddress.ID, - }) -} - -// AssociateIPAddress (Async) represents the IP creation -type AssociateIPAddress struct { - HealthcheckInterval int64 `json:"interval,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 10, minimum: 5"` - HealthcheckMode string `json:"mode,omitempty" doc:"healthcheck definition: healthcheck mode can be either 'tcp' or 'http'"` - HealthcheckPath string `json:"path,omitempty" doc:"healthcheck definition: the path against which the 'http' healthcheck will be performed. Required if mode is 'http', ignored otherwise."` - HealthcheckPort int64 `json:"port,omitempty" doc:"healthcheck definition: the port against which the healthcheck will be performed. Required if a 'mode' is provided."` - HealthcheckStrikesFail int64 `json:"strikes-fail,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'dead'. Default: 3"` - HealthcheckStrikesOk int64 `json:"strikes-ok,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'alive'. Default: 2"` - HealthcheckTimeout int64 `json:"timeout,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 2, cannot be greater than interval."` - ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the availability zone you want to acquire a public IP address from"` - _ bool `name:"associateIpAddress" description:"Acquires and associates a public IP to an account."` -} - -// Response returns the struct to unmarshal -func (AssociateIPAddress) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (AssociateIPAddress) AsyncResponse() interface{} { - return new(IPAddress) -} - -// DisassociateIPAddress (Async) represents the IP deletion -type DisassociateIPAddress struct { - ID *UUID `json:"id" doc:"the id of the public ip address to disassociate"` - _ bool `name:"disassociateIpAddress" description:"Disassociates an ip address from the account."` -} - -// Response returns the struct to unmarshal -func (DisassociateIPAddress) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DisassociateIPAddress) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// UpdateIPAddress (Async) represents the IP modification -type UpdateIPAddress struct { - HealthcheckInterval int64 `json:"interval,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 10, minimum: 5"` - HealthcheckMode string `json:"mode,omitempty" doc:"healthcheck definition: healthcheck mode can be either 'tcp' or 'http'"` - HealthcheckPath string `json:"path,omitempty" doc:"healthcheck definition: the path against which the 'http' healthcheck will be performed. Required if mode is 'http', ignored otherwise."` - HealthcheckPort int64 `json:"port,omitempty" doc:"healthcheck definition: the port against which the healthcheck will be performed. Required if a 'mode' is provided."` - HealthcheckStrikesFail int64 `json:"strikes-fail,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'dead'. Default: 3"` - HealthcheckStrikesOk int64 `json:"strikes-ok,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'alive'. Default: 2"` - HealthcheckTimeout int64 `json:"timeout,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 2, cannot be greater than interval."` - ID *UUID `json:"id" doc:"the id of the public IP address to update"` - _ bool `name:"updateIpAddress" description:"Updates an IP address"` -} - -// Response returns the struct to unmarshal -func (UpdateIPAddress) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (UpdateIPAddress) AsyncResponse() interface{} { - return new(IPAddress) -} - -//go:generate go run generate/main.go -interface=Listable ListPublicIPAddresses - -// ListPublicIPAddresses represents a search for public IP addresses -type ListPublicIPAddresses struct { - AllocatedOnly *bool `json:"allocatedonly,omitempty" doc:"limits search results to allocated public IP addresses"` - AssociatedNetworkID *UUID `json:"associatednetworkid,omitempty" doc:"lists all public IP addresses associated to the network specified"` - ForLoadBalancing *bool `json:"forloadbalancing,omitempty" doc:"list only ips used for load balancing"` - ForVirtualNetwork *bool `json:"forvirtualnetwork,omitempty" doc:"the virtual network for the IP address"` - ID *UUID `json:"id,omitempty" doc:"lists ip address by id"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"lists the specified IP address"` - IsElastic *bool `json:"iselastic,omitempty" doc:"list only elastic ip addresses"` - IsSourceNat *bool `json:"issourcenat,omitempty" doc:"list only source nat ip addresses"` - IsStaticNat *bool `json:"isstaticnat,omitempty" doc:"list only static nat ip addresses"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"lists all public IP addresses by physical network id"` - Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"` - VlanID *UUID `json:"vlanid,omitempty" doc:"lists all public IP addresses by VLAN ID"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"lists all public IP addresses by Zone ID"` - _ bool `name:"listPublicIpAddresses" description:"Lists all public ip addresses"` -} - -// ListPublicIPAddressesResponse represents a list of public IP addresses -type ListPublicIPAddressesResponse struct { - Count int `json:"count"` - PublicIPAddress []IPAddress `json:"publicipaddress"` -} diff --git a/vendor/github.com/exoscale/egoscale/affinity_groups.go b/vendor/github.com/exoscale/egoscale/affinity_groups.go deleted file mode 100644 index 61b979a28..000000000 --- a/vendor/github.com/exoscale/egoscale/affinity_groups.go +++ /dev/null @@ -1,158 +0,0 @@ -package egoscale - -import ( - "context" - "fmt" - "net/url" -) - -// AffinityGroup represents an (anti-)affinity group -// -// Affinity and Anti-Affinity groups provide a way to influence where VMs should run. -// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/stable/virtual_machines.html#affinity-groups -type AffinityGroup struct { - Account string `json:"account,omitempty" doc:"the account owning the affinity group"` - Description string `json:"description,omitempty" doc:"the description of the affinity group"` - ID *UUID `json:"id,omitempty" doc:"the ID of the affinity group"` - Name string `json:"name,omitempty" doc:"the name of the affinity group"` - Type string `json:"type,omitempty" doc:"the type of the affinity group"` - VirtualMachineIDs []UUID `json:"virtualmachineIds,omitempty" doc:"virtual machine Ids associated with this affinity group"` -} - -// ListRequest builds the ListAffinityGroups request -func (ag AffinityGroup) ListRequest() (ListCommand, error) { - return &ListAffinityGroups{ - ID: ag.ID, - Name: ag.Name, - }, nil -} - -// Delete removes the given Affinity Group -func (ag AffinityGroup) Delete(ctx context.Context, client *Client) error { - if ag.ID == nil && ag.Name == "" { - return fmt.Errorf("an Affinity Group may only be deleted using ID or Name") - } - - req := &DeleteAffinityGroup{} - - if ag.ID != nil { - req.ID = ag.ID - } else { - req.Name = ag.Name - } - - return client.BooleanRequestWithContext(ctx, req) -} - -// AffinityGroupType represent an affinity group type -type AffinityGroupType struct { - Type string `json:"type,omitempty" doc:"the type of the affinity group"` -} - -// CreateAffinityGroup (Async) represents a new (anti-)affinity group -type CreateAffinityGroup struct { - Description string `json:"description,omitempty" doc:"Optional description of the affinity group"` - Name string `json:"name,omitempty" doc:"Name of the affinity group"` - Type string `json:"type" doc:"Type of the affinity group from the available affinity/anti-affinity group types"` - _ bool `name:"createAffinityGroup" description:"Creates an affinity/anti-affinity group"` -} - -func (req CreateAffinityGroup) onBeforeSend(params url.Values) error { - // Name must be set, but can be empty - if req.Name == "" { - params.Set("name", "") - } - return nil -} - -// Response returns the struct to unmarshal -func (CreateAffinityGroup) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (CreateAffinityGroup) AsyncResponse() interface{} { - return new(AffinityGroup) -} - -// UpdateVMAffinityGroup (Async) represents a modification of a (anti-)affinity group -type UpdateVMAffinityGroup struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - AffinityGroupIDs []UUID `json:"affinitygroupids,omitempty" doc:"comma separated list of affinity groups id that are going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter"` - AffinityGroupNames []string `json:"affinitygroupnames,omitempty" doc:"comma separated list of affinity groups names that are going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter"` - _ bool `name:"updateVMAffinityGroup" description:"Updates the affinity/anti-affinity group associations of a virtual machine. The VM has to be stopped and restarted for the new properties to take effect."` -} - -func (req UpdateVMAffinityGroup) onBeforeSend(params url.Values) error { - // Either AffinityGroupIDs or AffinityGroupNames must be set - if len(req.AffinityGroupIDs) == 0 && len(req.AffinityGroupNames) == 0 { - params.Set("affinitygroupids", "") - } - return nil -} - -// Response returns the struct to unmarshal -func (UpdateVMAffinityGroup) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (UpdateVMAffinityGroup) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// DeleteAffinityGroup (Async) represents an (anti-)affinity group to be deleted -type DeleteAffinityGroup struct { - ID *UUID `json:"id,omitempty" doc:"The ID of the affinity group. Mutually exclusive with name parameter"` - Name string `json:"name,omitempty" doc:"The name of the affinity group. Mutually exclusive with ID parameter"` - _ bool `name:"deleteAffinityGroup" description:"Deletes affinity group"` -} - -// Response returns the struct to unmarshal -func (DeleteAffinityGroup) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DeleteAffinityGroup) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -//go:generate go run generate/main.go -interface=Listable ListAffinityGroups - -// ListAffinityGroups represents an (anti-)affinity groups search -type ListAffinityGroups struct { - ID *UUID `json:"id,omitempty" doc:"List the affinity group by the ID provided"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"Lists affinity groups by name"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - Type string `json:"type,omitempty" doc:"Lists affinity groups by type"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"Lists affinity groups by virtual machine ID"` - _ bool `name:"listAffinityGroups" description:"Lists affinity groups"` -} - -// ListAffinityGroupsResponse represents a list of (anti-)affinity groups -type ListAffinityGroupsResponse struct { - Count int `json:"count"` - AffinityGroup []AffinityGroup `json:"affinitygroup"` -} - -// ListAffinityGroupTypes represents an (anti-)affinity groups search -type ListAffinityGroupTypes struct { - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - _ bool `name:"listAffinityGroupTypes" description:"Lists affinity group types available"` -} - -// Response returns the struct to unmarshal -func (ListAffinityGroupTypes) Response() interface{} { - return new(ListAffinityGroupTypesResponse) -} - -// ListAffinityGroupTypesResponse represents a list of (anti-)affinity group types -type ListAffinityGroupTypesResponse struct { - Count int `json:"count"` - AffinityGroupType []AffinityGroupType `json:"affinitygrouptype"` -} diff --git a/vendor/github.com/exoscale/egoscale/affinitygroups_response.go b/vendor/github.com/exoscale/egoscale/affinitygroups_response.go deleted file mode 100644 index 12c5bd747..000000000 --- a/vendor/github.com/exoscale/egoscale/affinitygroups_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListAffinityGroups) Response() interface{} { - return new(ListAffinityGroupsResponse) -} - -// ListRequest returns itself -func (ls *ListAffinityGroups) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListAffinityGroups) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListAffinityGroups) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListAffinityGroups) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListAffinityGroupsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListAffinityGroupsResponse was expected, got %T", resp)) - return - } - - for i := range items.AffinityGroup { - if !callback(&items.AffinityGroup[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/apis.go b/vendor/github.com/exoscale/egoscale/apis.go deleted file mode 100644 index 098a03761..000000000 --- a/vendor/github.com/exoscale/egoscale/apis.go +++ /dev/null @@ -1,48 +0,0 @@ -package egoscale - -// API represents an API service -type API struct { - Description string `json:"description,omitempty" doc:"description of the api"` - IsAsync bool `json:"isasync" doc:"true if api is asynchronous"` - Name string `json:"name,omitempty" doc:"the name of the api command"` - Related string `json:"related,omitempty" doc:"comma separated related apis"` - Since string `json:"since,omitempty" doc:"version of CloudStack the api was introduced in"` - Type string `json:"type,omitempty" doc:"response field type"` - Params []APIParam `json:"params,omitempty" doc:"the list params the api accepts"` - Response []APIField `json:"response,omitempty" doc:"api response fields"` -} - -// APIParam represents an API parameter field -type APIParam struct { - Description string `json:"description"` - Length int64 `json:"length"` - Name string `json:"name"` - Required bool `json:"required"` - Since string `json:"since,omitempty"` - Type string `json:"type"` -} - -// APIField represents an API response field -type APIField struct { - Description string `json:"description"` - Name string `json:"name"` - Response []APIField `json:"response,omitempty"` - Type string `json:"type"` -} - -// ListAPIs represents a query to list the api -type ListAPIs struct { - Name string `json:"name,omitempty" doc:"API name"` - _ bool `name:"listApis" description:"lists all available apis on the server"` -} - -// ListAPIsResponse represents a list of API -type ListAPIsResponse struct { - Count int `json:"count"` - API []API `json:"api"` -} - -// Response returns the struct to unmarshal -func (*ListAPIs) Response() interface{} { - return new(ListAPIsResponse) -} diff --git a/vendor/github.com/exoscale/egoscale/async_jobs.go b/vendor/github.com/exoscale/egoscale/async_jobs.go deleted file mode 100644 index ab4b52cff..000000000 --- a/vendor/github.com/exoscale/egoscale/async_jobs.go +++ /dev/null @@ -1,138 +0,0 @@ -package egoscale - -import ( - "encoding/json" - "errors" -) - -// AsyncJobResult represents an asynchronous job result -type AsyncJobResult struct { - AccountID *UUID `json:"accountid,omitempty" doc:"the account that executed the async command"` - Cmd string `json:"cmd,omitempty" doc:"the async command executed"` - Created string `json:"created,omitempty" doc:"the created date of the job"` - JobID *UUID `json:"jobid" doc:"extra field for the initial async call"` - JobInstanceID *UUID `json:"jobinstanceid,omitempty" doc:"the unique ID of the instance/entity object related to the job"` - JobInstanceType string `json:"jobinstancetype,omitempty" doc:"the instance/entity object related to the job"` - JobProcStatus int `json:"jobprocstatus,omitempty" doc:"the progress information of the PENDING job"` - JobResult *json.RawMessage `json:"jobresult,omitempty" doc:"the result reason"` - JobResultCode int `json:"jobresultcode,omitempty" doc:"the result code for the job"` - JobResultType string `json:"jobresulttype,omitempty" doc:"the result type"` - JobStatus JobStatusType `json:"jobstatus,omitempty" doc:"the current job status-should be 0 for PENDING"` - UserID *UUID `json:"userid,omitempty" doc:"the user that executed the async command"` -} - -// DeepCopy create a true copy of the receiver. -func (a *AsyncJobResult) DeepCopy() *AsyncJobResult { - if a == nil { - return nil - } - - return &AsyncJobResult{ - AccountID: a.AccountID.DeepCopy(), - Cmd: a.Cmd, - Created: a.Created, - JobID: a.JobID.DeepCopy(), - JobInstanceID: a.JobInstanceID.DeepCopy(), - JobInstanceType: a.JobInstanceType, - JobProcStatus: a.JobProcStatus, - JobResult: a.JobResult, - JobResultCode: a.JobResultCode, - JobResultType: a.JobResultType, - JobStatus: a.JobStatus, - UserID: a.UserID.DeepCopy(), - } -} - -// DeepCopyInto copies the receiver into out. -// -// In (a) must be non nil. out must be non nil -func (a *AsyncJobResult) DeepCopyInto(out *AsyncJobResult) { - *out = AsyncJobResult{ - AccountID: a.AccountID.DeepCopy(), - Cmd: a.Cmd, - Created: a.Created, - JobID: a.JobID.DeepCopy(), - JobInstanceID: a.JobInstanceID.DeepCopy(), - JobInstanceType: a.JobInstanceType, - JobProcStatus: a.JobProcStatus, - JobResult: a.JobResult, - JobResultCode: a.JobResultCode, - JobResultType: a.JobResultType, - JobStatus: a.JobStatus, - UserID: a.UserID.DeepCopy(), - } -} - -// ListRequest buils the (empty) ListAsyncJobs request -func (a AsyncJobResult) ListRequest() (ListCommand, error) { - req := &ListAsyncJobs{ - StartDate: a.Created, - } - - return req, nil -} - -// Error builds an error message from the result -func (a AsyncJobResult) Error() error { - r := new(ErrorResponse) - if e := json.Unmarshal(*a.JobResult, r); e != nil { - return e - } - return r -} - -// QueryAsyncJobResult represents a query to fetch the status of async job -type QueryAsyncJobResult struct { - JobID *UUID `json:"jobid" doc:"the ID of the asynchronous job"` - _ bool `name:"queryAsyncJobResult" description:"Retrieves the current status of asynchronous job."` -} - -// Response returns the struct to unmarshal -func (QueryAsyncJobResult) Response() interface{} { - return new(AsyncJobResult) -} - -//go:generate go run generate/main.go -interface=Listable ListAsyncJobs - -// ListAsyncJobs list the asynchronous jobs -type ListAsyncJobs struct { - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - StartDate string `json:"startdate,omitempty" doc:"the start date of the async job"` - _ bool `name:"listAsyncJobs" description:"Lists all pending asynchronous jobs for the account."` -} - -// ListAsyncJobsResponse represents a list of job results -type ListAsyncJobsResponse struct { - Count int `json:"count"` - AsyncJob []AsyncJobResult `json:"asyncjobs"` -} - -// Result unmarshals the result of an AsyncJobResult into the given interface -func (a AsyncJobResult) Result(i interface{}) error { - if a.JobStatus == Failure { - return a.Error() - } - - if a.JobStatus == Success { - m := map[string]json.RawMessage{} - err := json.Unmarshal(*(a.JobResult), &m) - - if err == nil { - if len(m) >= 1 { - if _, ok := m["success"]; ok { - return json.Unmarshal(*(a.JobResult), i) - } - - // otherwise, pick the first key - for k := range m { - return json.Unmarshal(m[k], i) - } - } - return errors.New("empty response") - } - } - - return nil -} diff --git a/vendor/github.com/exoscale/egoscale/asyncjobs_response.go b/vendor/github.com/exoscale/egoscale/asyncjobs_response.go deleted file mode 100644 index e4744e8bd..000000000 --- a/vendor/github.com/exoscale/egoscale/asyncjobs_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListAsyncJobs) Response() interface{} { - return new(ListAsyncJobsResponse) -} - -// ListRequest returns itself -func (ls *ListAsyncJobs) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListAsyncJobs) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListAsyncJobs) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListAsyncJobs) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListAsyncJobsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListAsyncJobsResponse was expected, got %T", resp)) - return - } - - for i := range items.AsyncJob { - if !callback(&items.AsyncJob[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/cidr.go b/vendor/github.com/exoscale/egoscale/cidr.go deleted file mode 100644 index 74c054b71..000000000 --- a/vendor/github.com/exoscale/egoscale/cidr.go +++ /dev/null @@ -1,62 +0,0 @@ -package egoscale - -import ( - "bytes" - "encoding/json" - "fmt" - "net" -) - -// CIDR represents a nicely JSON serializable net.IPNet -type CIDR struct { - net.IPNet -} - -// UnmarshalJSON unmarshals the raw JSON into the MAC address -func (cidr *CIDR) UnmarshalJSON(b []byte) error { - var s string - if err := json.Unmarshal(b, &s); err != nil { - return err - } - c, err := ParseCIDR(s) - if err != nil { - return err - } - *cidr = CIDR{c.IPNet} - - return nil -} - -// MarshalJSON converts the CIDR to a string representation -func (cidr CIDR) MarshalJSON() ([]byte, error) { - return []byte(fmt.Sprintf("%q", cidr)), nil -} - -// String returns the string representation of a CIDR -func (cidr CIDR) String() string { - return cidr.IPNet.String() -} - -// ParseCIDR parses a CIDR from a string -func ParseCIDR(s string) (*CIDR, error) { - _, net, err := net.ParseCIDR(s) - if err != nil { - return nil, err - } - return &CIDR{*net}, nil -} - -// MustParseCIDR forces parseCIDR or panics -func MustParseCIDR(s string) *CIDR { - cidr, err := ParseCIDR(s) - if err != nil { - panic(err) - } - - return cidr -} - -// Equal compare two CIDR -func (cidr CIDR) Equal(c CIDR) bool { - return (cidr.IPNet.IP.Equal(c.IPNet.IP) && bytes.Equal(cidr.IPNet.Mask, c.IPNet.Mask)) -} diff --git a/vendor/github.com/exoscale/egoscale/client.go b/vendor/github.com/exoscale/egoscale/client.go deleted file mode 100644 index 81c5f07b6..000000000 --- a/vendor/github.com/exoscale/egoscale/client.go +++ /dev/null @@ -1,418 +0,0 @@ -package egoscale - -import ( - "context" - "fmt" - "io/ioutil" - "log" - "net/http" - "net/http/httputil" - "os" - "reflect" - "runtime" - "strings" - "time" -) - -// UserAgent is the "User-Agent" HTTP request header added to outgoing HTTP requests. -var UserAgent = fmt.Sprintf("egoscale/%s (%s; %s/%s)", - Version, - runtime.Version(), - runtime.GOOS, - runtime.GOARCH) - -// Taggable represents a resource to which tags can be attached -// -// This is a helper to fill the resourcetype of a CreateTags call -type Taggable interface { - // ResourceType is the name of the Taggable type - ResourceType() string -} - -// Deletable represents an Interface that can be "Delete" by the client -type Deletable interface { - // Delete removes the given resource(s) or throws - Delete(context context.Context, client *Client) error -} - -// Listable represents an Interface that can be "List" by the client -type Listable interface { - // ListRequest builds the list command - ListRequest() (ListCommand, error) -} - -// Client represents the API client -type Client struct { - // HTTPClient holds the HTTP client - HTTPClient *http.Client - // Endpoint is the HTTP URL - Endpoint string - // APIKey is the API identifier - APIKey string - // apisecret is the API secret, hence non exposed - apiSecret string - // PageSize represents the default size for a paginated result - PageSize int - // Timeout represents the default timeout for the async requests - Timeout time.Duration - // Expiration representation how long a signed payload may be used - Expiration time.Duration - // RetryStrategy represents the waiting strategy for polling the async requests - RetryStrategy RetryStrategyFunc - // Logger contains any log, plug your own - Logger *log.Logger -} - -// RetryStrategyFunc represents a how much time to wait between two calls to the API -type RetryStrategyFunc func(int64) time.Duration - -// IterateItemFunc represents the callback to iterate a list of results, if false stops -type IterateItemFunc func(interface{}, error) bool - -// WaitAsyncJobResultFunc represents the callback to wait a results of an async request, if false stops -type WaitAsyncJobResultFunc func(*AsyncJobResult, error) bool - -// NewClient creates an API client with default timeout (60) -// -// Timeout is set to both the HTTP client and the client itself. -func NewClient(endpoint, apiKey, apiSecret string) *Client { - timeout := 60 * time.Second - expiration := 10 * time.Minute - - httpClient := &http.Client{ - Transport: http.DefaultTransport, - } - - client := &Client{ - HTTPClient: httpClient, - Endpoint: endpoint, - APIKey: apiKey, - apiSecret: apiSecret, - PageSize: 50, - Timeout: timeout, - Expiration: expiration, - RetryStrategy: MonotonicRetryStrategyFunc(2), - Logger: log.New(ioutil.Discard, "", 0), - } - - if prefix, ok := os.LookupEnv("EXOSCALE_TRACE"); ok { - client.Logger = log.New(os.Stderr, prefix, log.LstdFlags) - client.TraceOn() - } - - return client -} - -// Get populates the given resource or fails -func (client *Client) Get(ls Listable) (interface{}, error) { - ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) - defer cancel() - - return client.GetWithContext(ctx, ls) -} - -// GetWithContext populates the given resource or fails -func (client *Client) GetWithContext(ctx context.Context, ls Listable) (interface{}, error) { - gs, err := client.ListWithContext(ctx, ls) - if err != nil { - return nil, err - } - - count := len(gs) - if count != 1 { - req, err := ls.ListRequest() - if err != nil { - return nil, err - } - params, err := client.Payload(req) - if err != nil { - return nil, err - } - - // removing sensitive/useless informations - params.Del("expires") - params.Del("response") - params.Del("signature") - params.Del("signatureversion") - - // formatting the query string nicely - payload := params.Encode() - payload = strings.Replace(payload, "&", ", ", -1) - - if count == 0 { - return nil, &ErrorResponse{ - CSErrorCode: ServerAPIException, - ErrorCode: ParamError, - ErrorText: fmt.Sprintf("not found, query: %s", payload), - } - } - return nil, fmt.Errorf("more than one element found: %s", payload) - } - - return gs[0], nil -} - -// Delete removes the given resource of fails -func (client *Client) Delete(g Deletable) error { - ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) - defer cancel() - - return client.DeleteWithContext(ctx, g) -} - -// DeleteWithContext removes the given resource of fails -func (client *Client) DeleteWithContext(ctx context.Context, g Deletable) error { - return g.Delete(ctx, client) -} - -// List lists the given resource (and paginate till the end) -func (client *Client) List(g Listable) ([]interface{}, error) { - ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) - defer cancel() - - return client.ListWithContext(ctx, g) -} - -// ListWithContext lists the given resources (and paginate till the end) -func (client *Client) ListWithContext(ctx context.Context, g Listable) (s []interface{}, err error) { - s = make([]interface{}, 0) - - defer func() { - if e := recover(); e != nil { - if g == nil || reflect.ValueOf(g).IsNil() { - err = fmt.Errorf("g Listable shouldn't be nil, got %#v", g) - return - } - - panic(e) - } - }() - - req, e := g.ListRequest() - if e != nil { - err = e - return - } - client.PaginateWithContext(ctx, req, func(item interface{}, e error) bool { - if item != nil { - s = append(s, item) - return true - } - err = e - return false - }) - - return -} - -// AsyncListWithContext lists the given resources (and paginate till the end) -// -// -// // NB: goroutine may leak if not read until the end. Create a proper context! -// ctx, cancel := context.WithCancel(context.Background()) -// defer cancel() -// -// outChan, errChan := client.AsyncListWithContext(ctx, new(egoscale.VirtualMachine)) -// -// for { -// select { -// case i, ok := <- outChan: -// if ok { -// vm := i.(egoscale.VirtualMachine) -// // ... -// } else { -// outChan = nil -// } -// case err, ok := <- errChan: -// if ok { -// // do something -// } -// // Once an error has been received, you can expect the channels to be closed. -// errChan = nil -// } -// if errChan == nil && outChan == nil { -// break -// } -// } -// -func (client *Client) AsyncListWithContext(ctx context.Context, g Listable) (<-chan interface{}, <-chan error) { - outChan := make(chan interface{}, client.PageSize) - errChan := make(chan error) - - go func() { - defer close(outChan) - defer close(errChan) - - req, err := g.ListRequest() - if err != nil { - errChan <- err - return - } - client.PaginateWithContext(ctx, req, func(item interface{}, e error) bool { - if item != nil { - outChan <- item - return true - } - errChan <- e - return false - }) - }() - - return outChan, errChan -} - -// Paginate runs the ListCommand and paginates -func (client *Client) Paginate(g Listable, callback IterateItemFunc) { - ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) - defer cancel() - - client.PaginateWithContext(ctx, g, callback) -} - -// PaginateWithContext runs the ListCommand as long as the ctx is valid -func (client *Client) PaginateWithContext(ctx context.Context, g Listable, callback IterateItemFunc) { - req, err := g.ListRequest() - if err != nil { - callback(nil, err) - return - } - - pageSize := client.PageSize - - page := 1 - - for { - req.SetPage(page) - req.SetPageSize(pageSize) - resp, err := client.RequestWithContext(ctx, req) - if err != nil { - // in case of 431, the response is knowingly empty - if errResponse, ok := err.(*ErrorResponse); ok && page == 1 && errResponse.ErrorCode == ParamError { - break - } - - callback(nil, err) - break - } - - size := 0 - didErr := false - req.Each(resp, func(element interface{}, err error) bool { - // If the context was cancelled, kill it in flight - if e := ctx.Err(); e != nil { - element = nil - err = e - } - - if callback(element, err) { - size++ - return true - } - - didErr = true - return false - }) - - if size < pageSize || didErr { - break - } - - page++ - } -} - -// APIName returns the name of the given command -func (client *Client) APIName(command Command) string { - // This is due to a limitation of Go<=1.7 - _, ok := command.(*AuthorizeSecurityGroupEgress) - _, okPtr := command.(AuthorizeSecurityGroupEgress) - if ok || okPtr { - return "authorizeSecurityGroupEgress" - } - - info, err := info(command) - if err != nil { - panic(err) - } - return info.Name -} - -// APIDescription returns the description of the given command -func (client *Client) APIDescription(command Command) string { - info, err := info(command) - if err != nil { - return "*missing description*" - } - return info.Description -} - -// Response returns the response structure of the given command -func (client *Client) Response(command Command) interface{} { - switch c := command.(type) { - case AsyncCommand: - return c.AsyncResponse() - default: - return command.Response() - } -} - -// TraceOn activates the HTTP tracer -func (client *Client) TraceOn() { - if _, ok := client.HTTPClient.Transport.(*traceTransport); !ok { - client.HTTPClient.Transport = &traceTransport{ - transport: client.HTTPClient.Transport, - logger: client.Logger, - } - } -} - -// TraceOff deactivates the HTTP tracer -func (client *Client) TraceOff() { - if rt, ok := client.HTTPClient.Transport.(*traceTransport); ok { - client.HTTPClient.Transport = rt.transport - } -} - -// traceTransport contains the original HTTP transport to enable it to be reverted -type traceTransport struct { - transport http.RoundTripper - logger *log.Logger -} - -// RoundTrip executes a single HTTP transaction -func (t *traceTransport) RoundTrip(req *http.Request) (*http.Response, error) { - if dump, err := httputil.DumpRequest(req, true); err == nil { - t.logger.Printf("%s", dump) - } - - resp, err := t.transport.RoundTrip(req) - if err != nil { - return nil, err - } - - if dump, err := httputil.DumpResponse(resp, true); err == nil { - t.logger.Printf("%s", dump) - } - - return resp, nil -} - -// MonotonicRetryStrategyFunc returns a function that waits for n seconds for each iteration -func MonotonicRetryStrategyFunc(seconds int) RetryStrategyFunc { - return func(iteration int64) time.Duration { - return time.Duration(seconds) * time.Second - } -} - -// FibonacciRetryStrategy waits for an increasing amount of time following the Fibonacci sequence -func FibonacciRetryStrategy(iteration int64) time.Duration { - var a, b, i, tmp int64 - a = 0 - b = 1 - for i = 0; i < iteration; i++ { - tmp = a + b - a = b - b = tmp - } - return time.Duration(a) * time.Second -} diff --git a/vendor/github.com/exoscale/egoscale/cserrorcode_string.go b/vendor/github.com/exoscale/egoscale/cserrorcode_string.go deleted file mode 100644 index 4711d5425..000000000 --- a/vendor/github.com/exoscale/egoscale/cserrorcode_string.go +++ /dev/null @@ -1,47 +0,0 @@ -// Code generated by "stringer -type CSErrorCode"; DO NOT EDIT. - -package egoscale - -import "strconv" - -const _CSErrorCode_name = "CloudRuntimeExceptionExecutionExceptionHypervisorVersionChangedExceptionCloudExceptionAccountLimitExceptionAgentUnavailableExceptionCloudAuthenticationExceptionConcurrentOperationExceptionConflictingNetworkSettingsExceptionDiscoveredWithErrorExceptionHAStateExceptionInsufficientAddressCapacityExceptionInsufficientCapacityExceptionInsufficientNetworkCapacityExceptionInsufficientServerCapacityExceptionInsufficientStorageCapacityExceptionInternalErrorExceptionInvalidParameterValueExceptionManagementServerExceptionNetworkRuleConflictExceptionPermissionDeniedExceptionResourceAllocationExceptionResourceInUseExceptionResourceUnavailableExceptionStorageUnavailableExceptionUnsupportedServiceExceptionVirtualMachineMigrationExceptionAsyncCommandQueuedRequestLimitExceptionServerAPIException" - -var _CSErrorCode_map = map[CSErrorCode]string{ - 4250: _CSErrorCode_name[0:21], - 4260: _CSErrorCode_name[21:39], - 4265: _CSErrorCode_name[39:72], - 4275: _CSErrorCode_name[72:86], - 4280: _CSErrorCode_name[86:107], - 4285: _CSErrorCode_name[107:132], - 4290: _CSErrorCode_name[132:160], - 4300: _CSErrorCode_name[160:188], - 4305: _CSErrorCode_name[188:223], - 4310: _CSErrorCode_name[223:251], - 4315: _CSErrorCode_name[251:267], - 4320: _CSErrorCode_name[267:303], - 4325: _CSErrorCode_name[303:332], - 4330: _CSErrorCode_name[332:368], - 4335: _CSErrorCode_name[368:403], - 4340: _CSErrorCode_name[403:439], - 4345: _CSErrorCode_name[439:461], - 4350: _CSErrorCode_name[461:491], - 4355: _CSErrorCode_name[491:516], - 4360: _CSErrorCode_name[516:544], - 4365: _CSErrorCode_name[544:569], - 4370: _CSErrorCode_name[569:596], - 4375: _CSErrorCode_name[596:618], - 4380: _CSErrorCode_name[618:646], - 4385: _CSErrorCode_name[646:673], - 4390: _CSErrorCode_name[673:700], - 4395: _CSErrorCode_name[700:732], - 4540: _CSErrorCode_name[732:750], - 4545: _CSErrorCode_name[750:771], - 9999: _CSErrorCode_name[771:789], -} - -func (i CSErrorCode) String() string { - if str, ok := _CSErrorCode_map[i]; ok { - return str - } - return "CSErrorCode(" + strconv.FormatInt(int64(i), 10) + ")" -} diff --git a/vendor/github.com/exoscale/egoscale/dns.go b/vendor/github.com/exoscale/egoscale/dns.go deleted file mode 100644 index 3d3af4078..000000000 --- a/vendor/github.com/exoscale/egoscale/dns.go +++ /dev/null @@ -1,364 +0,0 @@ -package egoscale - -import ( - "context" - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "net/url" - "strconv" - "strings" -) - -// DNSDomain represents a domain -type DNSDomain struct { - ID int64 `json:"id"` - Name string `json:"name"` - UnicodeName string `json:"unicode_name"` - Token string `json:"token"` - State string `json:"state"` - Language string `json:"language,omitempty"` - Lockable bool `json:"lockable"` - AutoRenew bool `json:"auto_renew"` - WhoisProtected bool `json:"whois_protected"` - RecordCount int64 `json:"record_count"` - ServiceCount int64 `json:"service_count"` - ExpiresOn string `json:"expires_on,omitempty"` - CreatedAt string `json:"created_at"` - UpdatedAt string `json:"updated_at"` -} - -// DNSDomainResponse represents a domain creation response -type DNSDomainResponse struct { - Domain *DNSDomain `json:"domain"` -} - -// DNSRecord represents a DNS record -type DNSRecord struct { - ID int64 `json:"id,omitempty"` - DomainID int64 `json:"domain_id,omitempty"` - Name string `json:"name"` - TTL int `json:"ttl,omitempty"` - CreatedAt string `json:"created_at,omitempty"` - UpdatedAt string `json:"updated_at,omitempty"` - Content string `json:"content"` - RecordType string `json:"record_type"` - Prio int `json:"prio,omitempty"` -} - -// DNSRecordResponse represents the creation of a DNS record -type DNSRecordResponse struct { - Record DNSRecord `json:"record"` -} - -// UpdateDNSRecord represents a DNS record -type UpdateDNSRecord struct { - ID int64 `json:"id,omitempty"` - DomainID int64 `json:"domain_id,omitempty"` - Name string `json:"name,omitempty"` - TTL int `json:"ttl,omitempty"` - CreatedAt string `json:"created_at,omitempty"` - UpdatedAt string `json:"updated_at,omitempty"` - Content string `json:"content,omitempty"` - RecordType string `json:"record_type,omitempty"` - Prio int `json:"prio,omitempty"` -} - -// UpdateDNSRecordResponse represents the creation of a DNS record -type UpdateDNSRecordResponse struct { - Record UpdateDNSRecord `json:"record"` -} - -// DNSErrorResponse represents an error in the API -type DNSErrorResponse struct { - Message string `json:"message,omitempty"` - Errors map[string][]string `json:"errors"` -} - -// Record represent record type -type Record int - -//go:generate stringer -type=Record -const ( - // A record type - A Record = iota - // AAAA record type - AAAA - // ALIAS record type - ALIAS - // CNAME record type - CNAME - // HINFO record type - HINFO - // MX record type - MX - // NAPTR record type - NAPTR - // NS record type - NS - // POOL record type - POOL - // SPF record type - SPF - // SRV record type - SRV - // SSHFP record type - SSHFP - // TXT record type - TXT - // URL record type - URL -) - -// Error formats the DNSerror into a string -func (req *DNSErrorResponse) Error() string { - if len(req.Errors) > 0 { - errs := []string{} - for name, ss := range req.Errors { - if len(ss) > 0 { - errs = append(errs, fmt.Sprintf("%s: %s", name, strings.Join(ss, ", "))) - } - } - return fmt.Sprintf("dns error: %s (%s)", req.Message, strings.Join(errs, "; ")) - } - return fmt.Sprintf("dns error: %s", req.Message) -} - -// CreateDomain creates a DNS domain -func (client *Client) CreateDomain(ctx context.Context, name string) (*DNSDomain, error) { - m, err := json.Marshal(DNSDomainResponse{ - Domain: &DNSDomain{ - Name: name, - }, - }) - if err != nil { - return nil, err - } - - resp, err := client.dnsRequest(ctx, "/v1/domains", nil, string(m), "POST") - if err != nil { - return nil, err - } - - var d *DNSDomainResponse - if err := json.Unmarshal(resp, &d); err != nil { - return nil, err - } - - return d.Domain, nil -} - -// GetDomain gets a DNS domain -func (client *Client) GetDomain(ctx context.Context, name string) (*DNSDomain, error) { - resp, err := client.dnsRequest(ctx, "/v1/domains/"+name, nil, "", "GET") - if err != nil { - return nil, err - } - - var d *DNSDomainResponse - if err := json.Unmarshal(resp, &d); err != nil { - return nil, err - } - - return d.Domain, nil -} - -// GetDomains gets DNS domains -func (client *Client) GetDomains(ctx context.Context) ([]DNSDomain, error) { - resp, err := client.dnsRequest(ctx, "/v1/domains", nil, "", "GET") - if err != nil { - return nil, err - } - - var d []DNSDomainResponse - if err := json.Unmarshal(resp, &d); err != nil { - return nil, err - } - - domains := make([]DNSDomain, len(d)) - for i := range d { - domains[i] = *d[i].Domain - } - return domains, nil -} - -// DeleteDomain delets a DNS domain -func (client *Client) DeleteDomain(ctx context.Context, name string) error { - _, err := client.dnsRequest(ctx, "/v1/domains/"+name, nil, "", "DELETE") - return err -} - -// GetRecord returns a DNS record -func (client *Client) GetRecord(ctx context.Context, domain string, recordID int64) (*DNSRecord, error) { - id := strconv.FormatInt(recordID, 10) - resp, err := client.dnsRequest(ctx, "/v1/domains/"+domain+"/records/"+id, nil, "", "GET") - if err != nil { - return nil, err - } - - var r DNSRecordResponse - if err = json.Unmarshal(resp, &r); err != nil { - return nil, err - } - - return &(r.Record), nil -} - -// GetRecords returns the DNS records -func (client *Client) GetRecords(ctx context.Context, domain string) ([]DNSRecord, error) { - resp, err := client.dnsRequest(ctx, "/v1/domains/"+domain+"/records", nil, "", "GET") - if err != nil { - return nil, err - } - - var r []DNSRecordResponse - if err = json.Unmarshal(resp, &r); err != nil { - return nil, err - } - - records := make([]DNSRecord, 0, len(r)) - for _, rec := range r { - records = append(records, rec.Record) - } - - return records, nil -} - -// GetRecordsWithFilters returns the DNS records (filters can be empty) -func (client *Client) GetRecordsWithFilters(ctx context.Context, domain, name, recordType string) ([]DNSRecord, error) { - - filters := url.Values{} - if name != "" { - filters.Add("name", name) - } - if recordType != "" { - filters.Add("record_type", recordType) - } - - resp, err := client.dnsRequest(ctx, "/v1/domains/"+domain+"/records", filters, "", "GET") - if err != nil { - return nil, err - } - - var r []DNSRecordResponse - if err = json.Unmarshal(resp, &r); err != nil { - return nil, err - } - - records := make([]DNSRecord, 0, len(r)) - for _, rec := range r { - records = append(records, rec.Record) - } - - return records, nil -} - -// CreateRecord creates a DNS record -func (client *Client) CreateRecord(ctx context.Context, name string, rec DNSRecord) (*DNSRecord, error) { - body, err := json.Marshal(DNSRecordResponse{ - Record: rec, - }) - if err != nil { - return nil, err - } - - resp, err := client.dnsRequest(ctx, "/v1/domains/"+name+"/records", nil, string(body), "POST") - if err != nil { - return nil, err - } - - var r DNSRecordResponse - if err = json.Unmarshal(resp, &r); err != nil { - return nil, err - } - - return &(r.Record), nil -} - -// UpdateRecord updates a DNS record -func (client *Client) UpdateRecord(ctx context.Context, name string, rec UpdateDNSRecord) (*DNSRecord, error) { - body, err := json.Marshal(UpdateDNSRecordResponse{ - Record: rec, - }) - if err != nil { - return nil, err - } - - id := strconv.FormatInt(rec.ID, 10) - resp, err := client.dnsRequest(ctx, "/v1/domains/"+name+"/records/"+id, nil, string(body), "PUT") - if err != nil { - return nil, err - } - - var r DNSRecordResponse - if err = json.Unmarshal(resp, &r); err != nil { - return nil, err - } - - return &(r.Record), nil -} - -// DeleteRecord deletes a record -func (client *Client) DeleteRecord(ctx context.Context, name string, recordID int64) error { - id := strconv.FormatInt(recordID, 10) - _, err := client.dnsRequest(ctx, "/v1/domains/"+name+"/records/"+id, nil, "", "DELETE") - - return err -} - -func (client *Client) dnsRequest(ctx context.Context, uri string, urlValues url.Values, params, method string) (json.RawMessage, error) { - rawURL := client.Endpoint + uri - url, err := url.Parse(rawURL) - if err != nil { - return nil, err - } - - q := url.Query() - for k, vs := range urlValues { - for _, v := range vs { - q.Add(k, v) - } - } - url.RawQuery = q.Encode() - - req, err := http.NewRequest(method, url.String(), strings.NewReader(params)) - if err != nil { - return nil, err - } - - var hdr = make(http.Header) - hdr.Add("X-DNS-TOKEN", client.APIKey+":"+client.apiSecret) - hdr.Add("User-Agent", UserAgent) - hdr.Add("Accept", "application/json") - if params != "" { - hdr.Add("Content-Type", "application/json") - } - req.Header = hdr - - resp, err := client.HTTPClient.Do(req.WithContext(ctx)) - if err != nil { - return nil, err - } - defer resp.Body.Close() // nolint: errcheck - - contentType := resp.Header.Get("content-type") - if !strings.Contains(contentType, "application/json") { - return nil, fmt.Errorf(`response content-type expected to be "application/json", got %q`, contentType) - } - - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - if resp.StatusCode >= 400 { - e := new(DNSErrorResponse) - if err := json.Unmarshal(b, e); err != nil { - return nil, err - } - return nil, e - } - - return b, nil -} diff --git a/vendor/github.com/exoscale/egoscale/doc.go b/vendor/github.com/exoscale/egoscale/doc.go deleted file mode 100644 index 0d9997efa..000000000 --- a/vendor/github.com/exoscale/egoscale/doc.go +++ /dev/null @@ -1,180 +0,0 @@ -/* - -Package egoscale is a mapping for the Exoscale API (https://community.exoscale.com/api/compute/). - -Requests and Responses - -To build a request, construct the adequate struct. This library expects a pointer for efficiency reasons only. The response is a struct corresponding to the data at stake. E.g. DeployVirtualMachine gives a VirtualMachine, as a pointer as well to avoid big copies. - -Then everything within the struct is not a pointer. Find below some examples of how egoscale may be used. If anything feels odd or unclear, please let us know: https://github.com/exoscale/egoscale/issues - - req := &egoscale.DeployVirtualMachine{ - Size: 10, - ServiceOfferingID: egoscale.MustParseUUID("..."), - TemplateID: egoscale.MustParseUUID("..."), - ZoneID: egoscale.MastParseUUID("..."), - } - - fmt.Println("Deployment started") - resp, err := cs.Request(req) - if err != nil { - panic(err) - } - - vm := resp.(*egoscale.VirtualMachine) - fmt.Printf("Virtual Machine ID: %s\n", vm.ID) - -This example deploys a virtual machine while controlling the job status as it goes. It enables a finer control over errors, e.g. HTTP timeout, and eventually a way to kill it of (from the client side). - - req := &egoscale.DeployVirtualMachine{ - Size: 10, - ServiceOfferingID: egoscale.MustParseUUID("..."), - TemplateID: egoscale.MustParseUUID("..."), - ZoneID: egoscale.MustParseUUID("..."), - } - vm := &egoscale.VirtualMachine{} - - fmt.Println("Deployment started") - cs.AsyncRequest(req, func(jobResult *egoscale.AsyncJobResult, err error) bool { - if err != nil { - // any kind of error - panic(err) - } - - // Keep waiting - if jobResult.JobStatus == egoscale.Pending { - fmt.Println("wait...") - return true - } - - // Unmarshal the response into the response struct - if err := jobResult.Response(vm); err != nil { - // JSON unmarshaling error - panic(err) - } - - // Stop waiting - return false - }) - - fmt.Printf("Virtual Machine ID: %s\n", vm.ID) - -Debugging and traces - -As this library is mostly an HTTP client, you can reuse all the existing tools around it. - - cs := egoscale.NewClient("https://api.exoscale.com/compute", "EXO...", "...") - // sets a logger on stderr - cs.Logger = log.New(os.Stderr, "prefix", log.LstdFlags) - // activates the HTTP traces - cs.TraceOn() - -Nota bene: when running the tests or the egoscale library via another tool, e.g. the exo cli, the environment variable EXOSCALE_TRACE=prefix does the above configuration for you. As a developer using egoscale as a library, you'll find it more convenient to plug your favorite io.Writer as it's a Logger. - - -APIs - -All the available APIs on the server and provided by the API Discovery plugin. - - cs := egoscale.NewClient("https://api.exoscale.com/compute", "EXO...", "...") - - resp, err := cs.Request(&egoscale.ListAPIs{}) - if err != nil { - panic(err) - } - - for _, api := range resp.(*egoscale.ListAPIsResponse).API { - fmt.Printf("%s %s\n", api.Name, api.Description) - } - // Output: - // listNetworks Lists all available networks - // ... - -Security Groups - -Security Groups provide a way to isolate traffic to VMs. Rules are added via the two Authorization commands. - - resp, err := cs.Request(&egoscale.CreateSecurityGroup{ - Name: "Load balancer", - Description: "Open HTTP/HTTPS ports from the outside world", - }) - securityGroup := resp.(*egoscale.SecurityGroup) - - resp, err = cs.Request(&egoscale.AuthorizeSecurityGroupIngress{ - Description: "SSH traffic", - SecurityGroupID: securityGroup.ID, - CidrList: []CIDR{ - *egoscale.MustParseCIDR("0.0.0.0/0"), - *egoscale.MustParseCIDR("::/0"), - }, - Protocol: "tcp", - StartPort: 22, - EndPort: 22, - }) - // The modified SecurityGroup is returned - securityGroup := resp.(*egoscale.SecurityGroup) - - // ... - err = client.BooleanRequest(&egoscale.DeleteSecurityGroup{ - ID: securityGroup.ID, - }) - // ... - -Security Group also implement the generic List, Get and Delete interfaces (Listable and Deletable). - - // List all Security Groups - sgs, _ := cs.List(&egoscale.SecurityGroup{}) - for _, s := range sgs { - sg := s.(egoscale.SecurityGroup) - // ... - } - - // Get a Security Group - sgQuery := &egoscale.SecurityGroup{Name: "Load balancer"} - resp, err := cs.Get(sgQuery); err != nil { - ... - } - sg := resp.(*egoscale.SecurityGroup) - - if err := cs.Delete(sg); err != nil { - ... - } - // The SecurityGroup has been deleted - -See: https://community.exoscale.com/documentation/compute/security-groups/ - -Zones - -A Zone corresponds to a Data Center. You may list them. Zone implements the Listable interface, which let you perform a list in two different ways. The first exposes the underlying request while the second one hide them and you only manipulate the structs of your interest. - - // Using ListZones request - req := &egoscale.ListZones{} - resp, err := client.Request(req) - if err != nil { - panic(err) - } - - for _, zone := range resp.(*egoscale.ListZonesResponse) { - ... - } - - // Using client.List - zone := &egoscale.Zone{} - zones, err := client.List(zone) - if err != nil { - panic(err) - } - - for _, z := range zones { - zone := z.(egoscale.Zone) - ... - } - -Elastic IPs - -An Elastic IP is a way to attach an IP address to many Virtual Machines. The API side of the story configures the external environment, like the routing. Some work is required within the machine to properly configure the interfaces. - -See: https://community.exoscale.com/documentation/compute/eip/ - -*/ -package egoscale diff --git a/vendor/github.com/exoscale/egoscale/errorcode_string.go b/vendor/github.com/exoscale/egoscale/errorcode_string.go deleted file mode 100644 index 19711257e..000000000 --- a/vendor/github.com/exoscale/egoscale/errorcode_string.go +++ /dev/null @@ -1,37 +0,0 @@ -// Code generated by "stringer -type ErrorCode"; DO NOT EDIT. - -package egoscale - -import "strconv" - -const ( - _ErrorCode_name_0 = "Unauthorized" - _ErrorCode_name_1 = "MethodNotAllowed" - _ErrorCode_name_2 = "UnsupportedActionError" - _ErrorCode_name_3 = "APILimitExceededMalformedParameterErrorParamError" - _ErrorCode_name_4 = "InternalErrorAccountErrorAccountResourceLimitErrorInsufficientCapacityErrorResourceUnavailableErrorResourceAllocationErrorResourceInUseErrorNetworkRuleConflictError" -) - -var ( - _ErrorCode_index_3 = [...]uint8{0, 16, 39, 49} - _ErrorCode_index_4 = [...]uint8{0, 13, 25, 50, 75, 99, 122, 140, 164} -) - -func (i ErrorCode) String() string { - switch { - case i == 401: - return _ErrorCode_name_0 - case i == 405: - return _ErrorCode_name_1 - case i == 422: - return _ErrorCode_name_2 - case 429 <= i && i <= 431: - i -= 429 - return _ErrorCode_name_3[_ErrorCode_index_3[i]:_ErrorCode_index_3[i+1]] - case 530 <= i && i <= 537: - i -= 530 - return _ErrorCode_name_4[_ErrorCode_index_4[i]:_ErrorCode_index_4[i+1]] - default: - return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")" - } -} diff --git a/vendor/github.com/exoscale/egoscale/events.go b/vendor/github.com/exoscale/egoscale/events.go deleted file mode 100644 index c6adbfd69..000000000 --- a/vendor/github.com/exoscale/egoscale/events.go +++ /dev/null @@ -1,76 +0,0 @@ -package egoscale - -// Event represents an event in the system -type Event struct { - Account string `json:"account,omitempty" doc:"the account name for the account that owns the object being acted on in the event (e.g. the owner of the virtual machine, ip address, or security group)"` - Created string `json:"created,omitempty" doc:"the date the event was created"` - Description string `json:"description,omitempty" doc:"a brief description of the event"` - ID *UUID `json:"id" doc:"the ID of the event"` - Level string `json:"level,omitempty" doc:"the event level (INFO, WARN, ERROR)"` - ParentID *UUID `json:"parentid,omitempty" doc:"whether the event is parented"` - State string `json:"state,omitempty" doc:"the state of the event"` - Type string `json:"type,omitempty" doc:"the type of the event (see event types)"` - UserName string `json:"username,omitempty" doc:"the name of the user who performed the action (can be different from the account if an admin is performing an action for a user, e.g. starting/stopping a user's virtual machine)"` -} - -// ListRequest builds the ListEvents request -func (event Event) ListRequest() (ListCommand, error) { - req := &ListEvents{ - ID: event.ID, - Level: event.Level, - Type: event.Type, - } - - return req, nil -} - -// EventType represent a type of event -type EventType struct { - Name string `json:"name,omitempty" doc:"Event Type"` -} - -// ListRequest builds the ListEventTypes request -func (EventType) ListRequest() (ListCommand, error) { - req := &ListEventTypes{} - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListEvents - -// ListEvents list the events -type ListEvents struct { - Duration int `json:"duration,omitempty" doc:"the duration of the event"` - EndDate string `json:"enddate,omitempty" doc:"the end date range of the list you want to retrieve (use format \"yyyy-MM-dd\" or the new format \"yyyy-MM-dd HH:mm:ss\")"` - EntryTime int `json:"entrytime,omitempty" doc:"the time the event was entered"` - ID *UUID `json:"id,omitempty" doc:"the ID of the event"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Level string `json:"level,omitempty" doc:"the event level (INFO, WARN, ERROR)"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - StartDate string `json:"startdate,omitempty" doc:"the start date range of the list you want to retrieve (use format \"yyyy-MM-dd\" or the new format \"yyyy-MM-dd HH:mm:ss\")"` - Type string `json:"type,omitempty" doc:"the event type (see event types)"` - _ bool `name:"listEvents" description:"A command to list events."` -} - -// ListEventsResponse represents a response of a list query -type ListEventsResponse struct { - Count int `json:"count"` - Event []Event `json:"event"` -} - -//go:generate go run generate/main.go -interface=Listable ListEventTypes - -// ListEventTypes list the event types -type ListEventTypes struct { - Page int `json:"page,omitempty"` // fake - PageSize int `json:"pagesize,omitempty"` // fake - _ bool `name:"listEventTypes" description:"List Event Types"` -} - -// ListEventTypesResponse represents a response of a list query -type ListEventTypesResponse struct { - Count int `json:"count"` - EventType []EventType `json:"eventtype"` - _ bool `name:"listEventTypes" description:"List Event Types"` -} diff --git a/vendor/github.com/exoscale/egoscale/events_response.go b/vendor/github.com/exoscale/egoscale/events_response.go deleted file mode 100644 index 2af10cf45..000000000 --- a/vendor/github.com/exoscale/egoscale/events_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListEvents) Response() interface{} { - return new(ListEventsResponse) -} - -// ListRequest returns itself -func (ls *ListEvents) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListEvents) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListEvents) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListEvents) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListEventsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListEventsResponse was expected, got %T", resp)) - return - } - - for i := range items.Event { - if !callback(&items.Event[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/eventtypes_response.go b/vendor/github.com/exoscale/egoscale/eventtypes_response.go deleted file mode 100644 index 073d9648f..000000000 --- a/vendor/github.com/exoscale/egoscale/eventtypes_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListEventTypes) Response() interface{} { - return new(ListEventTypesResponse) -} - -// ListRequest returns itself -func (ls *ListEventTypes) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListEventTypes) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListEventTypes) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListEventTypes) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListEventTypesResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListEventTypesResponse was expected, got %T", resp)) - return - } - - for i := range items.EventType { - if !callback(&items.EventType[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/go.mod b/vendor/github.com/exoscale/egoscale/go.mod deleted file mode 100644 index c31a038a2..000000000 --- a/vendor/github.com/exoscale/egoscale/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/exoscale/egoscale - -require github.com/gofrs/uuid v3.2.0+incompatible diff --git a/vendor/github.com/exoscale/egoscale/go.sum b/vendor/github.com/exoscale/egoscale/go.sum deleted file mode 100644 index f27a0746d..000000000 --- a/vendor/github.com/exoscale/egoscale/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= diff --git a/vendor/github.com/exoscale/egoscale/gopher.png b/vendor/github.com/exoscale/egoscale/gopher.png deleted file mode 100644 index 16420a6182749705d4fbf20d89baecfa266aaad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63065 zcmdpd1y@{6ur2QH4hfpz?hu^d6Br=4ySuw<5`qV}1b2tQ-3b!hZGgdD?j+y6??=1^ zvsj#S=ssP&YuB#oB3eyF4ik+G4F(1V^P{}zf3&g#{JypI z1}+9sB8H~p9p#KXO~;DR<)bOvmz5QAIJz%km)_alDBKWx?#qc=(S1>fAPq{$|Bv5{ z?_z$yNeFEEbC4gvW58?$*>}0n5HG?WxMUzm;2`Af;vu)g9Aid#oHgR7!DFPT)Bm*t zYm!|qN8A@=N5U=^LG!@>>93bjG_(VZ4{O==9TPl&{bE=fP8>kk_VN(3GC7(ZdD0Xk{ zbgnpu>|H<5Hm&CCj_s-CcVamW9TFhq@i7P@hB&QwQIKf*%2_C&<%m2JoY&OkF6d+x zgX73JF+dBWA-l{W>x`&Oa4Ey@2oW}6O8+jGjSh}@el3p)Z9(7dO_q@RPv$-3Gp`oU z`FK6IJ<@JDf(^~CcO^iauqA9H37m|a*kCQ#Z2bh3bGd2oizgm09+%2_SfWhO5fO0RBm@HJ z;5tG)*MwXde*dPp=|^+AdAEHyUn6yvC$NDg*bzb#m5bhU{w6&4s=^crlTJ+Rw0iy? zc7~fmKgPdq1zjxI>9@628pki z|3(U#68S;hZhDm)9N#zrJH=D`cx9mt66==B4;prXdH{|DaoFB|xzL_Zn+M&%0L6XV z@8;%5PY~u>nUPsSY|1PP%G-kw8Xjug4}K?+{pj;z)$>Y3$9;gO^(P%01r{+?T~1E zNy_y1B|13LQ-~5)Vo38ZiE}1J>Y96B5&ICQ1({Q%a2R@2)B18|^7|eEbAf zno}4t!=I9@@2B)t+WsOUWU9Uo2_pZ|>aE1>Bk6pT>Q7qhAfQUefA`#em*syWpkC); z^91Eo>bK1=+jFIVgUi4^=9E=H z|Bb<;Erse+&fR*5unH*&ylq{o_|SJ)AZJhnrjjuP$yWX^oDhh7Ixx6!adDMzQ8P5z zOMC$zQO`L!Q)};2d5S#6TmD0452p!gl#f0|LUG*`Z~U>x3HW49>l0e*3rA3PomOSo zzbTzC(j?J*)bqh^Cu)XMp2Rx^;0N=EJ>Fpjix@rBf7`W5@~D}`d!V2m7*aefRuItt zd!-{hczc8r=3&6yh4+8WcA)G2kUD3Bc*XFH6WbDyms+wO5Xsu+89K}ZT&|w@b#+Xu zCG`(t0t(+ZUd;K@Gj%4NTlC*xc*f6Gwnsca-deuLy>WJV_uqgF^;4`w>azhM{XK*0 z0n`_2D%}Q^E&B$@4hwYtlUQ|nSpU7;!E~tdO>x~T;gbWur|66HB7-4|_7L}LIyWNF zeWVB{tT8ce1u@Ti3T|1#FQ6jYry@P3mTTgv=sBxxuyMe*OMsGsR^t5QOjLSy^ z2^J{E6J`=BX%EC+Ytj!bxTWRly!z2pKsQ32`mM*+?4KK)@n3y>Cq!X1>*Ch`!&E`d z)U!LQ8+F=PZfP!$vdV+MZ|LS2qgqQv!Fm-D~`^HiX-=C0?eMR;?d^eHa12>E0{ing3OSF3IwPTAnGri zKk}{^unQt0+O4$4=ge2_gZmYk%6?)z8gouhmp^QXZvB{6YJX@d*9N_59(FPMsYe72 zBN75!La@S|aNA@n8o;>0Ov$b0eoRh;kpe}um{1B!`CSjEs zHL8!3kv$s3p9vnP^dN_N=>2|dR4^|bxnrnHqY%bXHx<59eG--2{7jK+p=&) zi`9W2lOPna3+xT77N!5ZzSj@+2f$bE$Lz4Ls)($n&3oY796@Sol6rM&i2oxK8*@Q^ zX$)BtISddOUA-Kg82yIzUG&7~bh`e2T(H|W5@N;gv)11YuOG1=Wm2kiCx;Z-2DO?h zkgJEy@xmG-S(FIFinn=;q|YXFEhjeW&$qjP%#hZZp&GYp-arJ!$ySf!uI9YZdy9`* z*GHNgCPoQ*Y!X(wLqcv6R;}IVjzMWl!oHTCo2R-KbA*@hlB;PaBvH}v<~?VdKd+Io z1HX*Y|6{B*p7-N;vw3mh*I#yxUtGRrtpWeqd4v#$~#+V!~pqfs$SIQN*`AEE&i z9j$H-zx_O2QGH%vpFhUMVv3o-sU#~h{2T1|{?P^{_oO&--LRVpC^_G0{?0k?;aR@L z>_4MD2WZIg3Y(ctF$zES1#(xVzB3*Co#dU{rpNc+JZ#rW8&D&;O^gVguaE6R1DQl# z0v(LA%i({nDiv30`tlyFqpl7>OTqY(c_@U7dM>?q(k*9#l5zPTuc~-F%pYpRNWN07 zc2zaRIhI(v*=SAb;=oFe6yg5^0oFAAq9o*dI;sykuA4sNyUuLSRW$9L8PtE=87YrO zbhUHmRnYl)RLza$y5IyDaxsqnZv``nNAFv|j>$N_i>XxGc0q<*!Hc!H{kJ&nd%Ev3 zesI1mBQe+HA-An?nKb`dSW<5A|JttJgo6xMMaQuZ6N4NUDP z!Vjcs2n0wk5V+Fd_qlkztL!L$-@je}E$9aMT5n-^y(zJC1eL%oDLOyjU(auuk{~rX z+@^-!C{H+;Dwvhr3b_#W7c8vm&Z4OIBm7o2_72=~@OYPwQNfDXza_DTS9DdwzfQYl zWeK*#S9!1f)~?vu+u^vmNVi*0!Y>V{!Z|DYAlF5;SU!Fgj|ZolsPl+5wy6ah8-yL4 z_|@D0@1};~4?PIk`~uspG-CeVrpV7{@)9*zdwo)5Yk5}1Y($X#vEk}rgoBH&glz|d z9<&h5&arYm=i>WsGbq?okkKF5g*_=jLI;}6cYb4!#<;4J-jS-H$Ig3kbzrv{+#Es% zH4o*JaxI#Jp3x=zWpGtce;1d|)JVX;=^KZ!yMY1~W-XnGkhWB96>^m$e0v ztF6)UrS|lg(o&@H3t46p6EwGDq;yJ}0!q3fDHARM({3}Ys1_R~=7ZLn`{w~oeb`5| zJPvFZ&z@|`YI|-1LW8TkQ+h^4C8kFjg<%b4S{Om?bp1$W5uq0_?(5i1xU%C_GJt1 zG*+lJ5XE0nMgxO*#U&=NhW>cdL2llhaYZP0N;^pWr+$oR&RkC@OX5ie+KF=pf2VB- zBn>Z)SyXGE9WPH_xP$MUuWeE)4Mr>5MLhQQ!gWJ56U*2I5EeEX$ z#b7I)?Xt#rGL9hP(@fdquVbjW%z5mE`jHpX2lZjA6539Da6O-lppHm5;JRgF!~^2pSZI=AH&(%dReq zjf|0o9>;W`p9eq1HGn`UGD)UE;(_fKXb}k%us~o0)4bzYnxaLu)$WK;o2sBA8A$Bz zeG6}Pio2|`MfD#{#pepk&E-iNPvYMil&8tULCZmo@Ne1wQ4R&}zEN|)iTn38yKe9$ z-yyO&9i!_&+Vl@DHYj;0Xx0jo8 z(VX3p-!4+9wNh)c@UYxWt|KlOcYqaxEQ9%X=L!DGcLBV&oGYiI8QbHtNlEDe1BZHE zdxvh2sjn!Jlx5={R)4fjtN%oS#nWbDVnW*}h`70_eSS2lbbNQI2xq_6B%t-G%Ewsq zMKtica#Ba6GQ#J8r=2UOssF6xf`*Xy@o`ouPUJu?{Eu1BX7zSl9G#$8Fe+_?>uB7l z_e9E`u|m3IK4ylb!y#6iI?`3}Zf4Oa*6D>cS%E3#4pz>G8XN0-%g?}W zD%jq^-Xi`F!0^o&&$b@@B#n)SAlN!0)F1eLlEes`9P{_%B;W$_w3}u6`{@$Nv@AWFt~4tB9NAti z9p%athKiYRNHKN!x{#~LEAKimWd|J*sQS{#rgs_%|5|RSM;;)AM*`Cae@Id!hdl%G z^^CZMD7JG)TwWn#_OewK09_3Q=mQFoBSl*bb{gtf!%1WxjziWZS;m+TM86BF@Ib9fGX|I|F z#|B?=r2OKQS90S)6!(i2eVczOa*K*3G8>$_{u*QpX=$2x(PewU6n?$Hpl(&FKdL`u zNcw7VGhw^2-!D7RHf7bt6NkVXGIa#lB|wpsKPDMAsYF^EWV*cPbpo39QEYq_UyE6_ zKriHIZm!V(iIif zFH)1I{*Z3MqC7fz-OIecs&33n7f2-E!rzP$?|My<9IV{b@fi5Ichf9FjQE$*{rlkX zIrR=RgX=iCI(dIup*l}>pevCf&z6t{A2ihHR6L#bSYtAJTf-6^-{pmZchg@TrW3EK z>${mNz+dKY#SGyW)*Pe<76#*LK5dHTcDP~xdqJ_UT@_uaB$d~wk-id-7|j=wUgy+j zhql#srfIjNaU>dsO@o-EN;ZQD%5`Jqq=^2~uK_qM0DgFAZ{oMUm zJE1SV;nHwiw{bgLrp2zrfWM|giw7E%I-EF}a)z<;S#F2-GdK_?$-akKd*TKh6a_ zbL$ARk)_J>tpND@IqULj08CkO=V~qZsC_~4JX=55ebt^sAGr)O;Fi(r3R7MlYi!u4!avU!)GK!cyHXAi%uJfywD{nmYC zq{oj25ghTVAWUrD}A;@Q3dda;Mow5!nv70guy#B z!zu9ftny2>#dTePX@`7{&Lz#=SN#u%qbuZ~nKRo--O=fc`$!7AWX=jQ6^Oh&J88S} z{4sv$mK+i+OvSfyetn2g4lk?7j}K*%Jnus!5oABCzA&3FILKQ12)3OOB{^_ySp{s< zdDanFzn#$qC@S{ttjP|CG0T$!@0|r4hw_%TH}UK0Dg6wZA2hvOu-IGjO?S&vyRlm7(wk+;e&FKZJ zO1>J9I9xL@FYv}xcerL;}$r7rFj1&Ir;oQbiUxdrWuVGy%e z_Q>NtAyu?~i~n17VGYIYa@Yt_L*6#s+$%F4#3SLVKBR8*VD3XAZPxXKIEdb4qt6 zDDG$FsIsz6gVcQ4!#q;akSG*+)RCJ`n{5l7_9sew2@EYO1~N~Co8~08o(a?#O?}gq}YdGbbqQdaa{Mm-kyL#UX9XBY-+6|n%#`O=DQ}3 z5*lma8Z{s-@i=Cbq-;6YdR<{k*;HD~$PQXNEyrlS_E~K2iV{W{ErE0)_8Px1;!F=T zC|&jzEp(eYM%Z$qYGY{^#iIRXc&`UI5L|&IUz;;Sc_#Mr1MJ-3A^9PPpV4zybCcNf*wF6U zOz1X?1yQBm=Y?nE@JdQs%m_WFHNk2Rv6TQ(Y1uIEs@F~oP!5tftJU(?Glx{b@7)&c zH>}JWu?bxwae8O}^pk`LYP(X@!%hrZP6w9i%Us&*fUgKEUz)%G)6%ERXLIxR+g&|c zj7}NdA42PF&%Y+v$_Q(P0iO1q=q9Gn5Y*d)ohz5h0cm=%yxYd`I#3lBn5S#|h2#|qHn zU~-xE+3ZD%w*?`h9pBpH5%ZJ8uhRi6@iBD?ThIbl1FV`B_O}-(g5()$>ynLE!hJcXnOMl2 zcdPv&Pf<(2@!QuIkHZlh`w_)>6t5=oh&bzlrc$i001gkXavivE?{3T=T^ezBi5)Wy z;T9)bE@)vyvV0uG1vs*l$9#8Z^a9)8Qx;+yPlJwe=!Io5$%Z0TMO8kTm^}AE20xE6 zzi0N|+12{{Irjo1lcyF%(%pXx%Ts$KpaWqbXby0b;@yeZ4qF)|w^y=8L!epx(~Sw|L^UI*0_Qa5)KswGR!O>4~k^sg+9 zK=K&kLa1<5C0QhoxC;GA*F}uuAs!!_%inA1x_O+A$zP{iK{wFva{m3Dp4c_Z!_}!d z#gxr+T5oz^sgKp=0-INFjHG7<LRK%rA4@KRS_|E zgDOZ`Kxi)({vcVn?L-a+D(MGhZmhJi2=o{1z+nDY;$r37&a+g;yw~c+!w}DfuIHw% zR7kjx4%!%u7^X;U5k?s_%GL|{z=Dw35b$)CQ~A?r*an8&#e7io{Mdd7eGRp(pB5nT z)2gLTsR$9K4w)lY8M{4MLal70C{_u%GINsV-7vO_V2oQwRs|u|Swvdn?}iD#!V>GD z0txMpQOiQs(F3y(b0$#ddf@fY+SwETsxd3fv|#xSzm3Tc`vrKPfc=Fe4pu+_fH0h? zEUP|E;8VV7bYfJ`p%adAjj^V3nlb~lKurZoRcOkb$#{PQOit3$Q8ES!>U70d90~;} z_g2{+$Q?d3EXR2tfY~D1DB}o98So<+E>5bC<-Bf`y&&AQSQFd!KB}%XYzci{X=1!* z{&+y3vf4=Q0;;$bk18b5$?fTp?*)=rA26^rRpz5Yc@{_vy zJ0>O+Zx$h;jF=cc<6iqNFrtsJ-UAy&7 zJ~|rSSGvNgxhw23_-8YGQ}ZW99)kYr3?6adZqZK4iKXYcm#10eO~e( z!>$Mprm!NeBRQc}B~VaMn`-qJWK1xhLr6M*?**^%lAaH|ULd2iaC{M(J*skOBqZq8 z5YxRL>5g?k0UKIDbFAp=>(llV0~r8;q&KK3DJil60RgrTpBIb^?N4kMOX9cdEByuO z+lZx>%#-%w=s8C|N=ox+w$ake`#d|{6m&i&2W>1Y@rawxB_CIn8U+Fog=5k0jh7iZ zAKfX*(QYXISPeL6gH0o#8A|R#S5Wn%K(nTSr<6l*O+-gCfeRW94HrVwMt6P;Mvw28NhcUPj#xZ3@z^!zs3N>D)!gxmP}2`8sC5qj;5$6`=6hK`9TpY5{>xb3@%P4KG{dPJ{4jWHzncr09w5NWFv93OrMq zYCx|G1Fw@|C)O7Xk>4TytRW~5!xFNxI&wguBOC*)Xy)CCVvu?3MBwe|xbG@>u3?a> zEos@|@iF?Lr3ALgly1c8i}kY{SH-$hgy(_6lTf=;nKWgaTV3p!%f52pHVA2F|YXO zj$%w!9;=@4voV)FbKoo}Ayppbv%amB1x#;Q-yT$a|Nfoe=5*Ef!3>K(`5E@rK$@SbnZd9J<=&9y)ggZ?D2k<~&w)jsJ?q+H2t1!w+ zdtMD9ksYuWwp`;7co@4lKB^#I(#Yh2@|pDAvdm~y032YU)_k=hFad0vgl>WL!`8QN zAz8eF2x`fu&zoHqE9)9FA5mP`W=iQ&V^|c%>A4PT1&|3R^GE zZUMCbvYX>*S%fx|tsSS<_iCR}X9JKgJF#aip3kmvUT(`|A zVOT^&L^HF(>rVu`tTKQH-ib6}we@ z_KEdUAnBuiIg`Te07}c?c7AC)-cdmFPUi}?W64*xO#OIb|6V7xcPv#gd_#qgU@w-ul;3}SRUnvKN&6o0W zo||J_0I`JQo5GS3DDwpx)wd}DzUN`umWNb=we7GTu&9QooGqt175RUhqb?pN=xDYi zlnuzpSaS*rH`UslHS{d1x5M7#wZxrlbwKG-)hel22T7G56FLi$1~cI*E0Zg+U8+m#hS}U5Wv36s}UCx6-{mzp^XO0 z%4R471k?e)ErY*rKY`KQ^m9(n?}&+rPVG;BNkAbv1ZDX^qVM1y%3JRafwu*RqFxBJ zDw&e&-34mOL@Sl={lutSHO1$C<})#s#tfSc>^T{IQrbCQ>6wA-)jD5uH9G3V=D$xH zPw7Sd5MK%A-`UyeAR_silmohz4>V!l_#Agpd@UapxA!n@>2zCYy=d1sUvpeu^x2Gv zeA&hG;%Teu&ShHx>WN~jW+LCmxTNMgO#m<@r9>SQ@(bfC!A)A4nqmez zI;X_M?I=F6G_ZzBnqqS<>UtRjSmM_2@&$)xc~4RmcgN@&CZ zP>WfOYCcS;G(QSyw+IxnnIIG!Bz`rnq=H650wN+R4zW|XT_UpdvyT9bs{DoRfo+fN z>t+Cuu&zJG=F_x0C1^5oVY}as)3jl^<_`t3;R4Fb$+hOHo|@Ww%^;MAXj)cQ%%qPW z)d+S?jWm8HY?M|OPkxzRxnCS5fH2$5@TRvGZ^x-_w5h(1mZ`2p&e;gBJU+VX2Uge4 zcp91&%8ZVW+m8+E;X7P8YAUbzKOjDN&p2{4^}i)!?Q_WidGmq-Au<81W5RaGRAM*= z0T@1JO`EPJ5oL}MT5G7TE2PMd6OlJr%PA#8K={BHO21d{W};ZQP{>Rxk{nt~i|inSaNhROKFzbFM&|v%(re0FjDw{BO#uk>CM&B5^iQutg1yozf;h^fB9|I z7ROWkoQ(bv4WL}i@JiKMxfvBz%n^vqF6M(R%vaHCQ%AMO``|7p=soEPS<4w2ncLY3 zv$H^^LU7ns8<-7sQ&8GGcdarz`r^D%nnIrcnN^*e>1@6ha<_n;Q^)2>JQo?Q+H8cj z;=+n?1b-tRC*5O@$|&-}^t4N@Mrh*=>V>@(MaM6u^38rFx(w5dvw8uoJ80OT+duD_ zXxQp%+T-cCkMP%0<@}Gl7pumYC!zcBOAR+vZpug)G_%+ zb;3^4(!p?`O2huA#Jy_kaV~{ev>NRS%ss3r9(x@JhnH8MtAoB`<>jJv>NY7wD;7dR zSsT@o*?V!BUy#;M1c-8GJPT{*Fbs91Md>WsGJv!Dc4^r`j*H*Ji?mtgI!}~DWxVAL zl}saMCEP-uk2kDkCZ@ulG&RXq`a%GQhZ$<29hZ-o+ga&NT=lN1rtdPQ+7HOA$o!Yx zH)FcDNmeSk4aV1vg42|BH{x$MOXiGtC8|1usn#?xH2LF5kV1WWwa_J_S|^d$17Qix zIXu2Oqc?^BqNyVtP>v|%(Y{drX>P9)S5(Ls+56HlxlhZ@?f<>Blsa^#BCqMjyTeO_ zDk4ER^wM%|NHFy^;iY%L#8p~N|MN#>cS5n8Tcew%4a_dcB|u$2ysR~5u~|AIE>rq7 z&$L?b?Vt7=OC<|+smWT`{DOkcrA~iU2MY_b-QDDw+kQ#$04Q{nfdtpvQ}Zp6?}!b? zo4MJ$a7o>NH#8&?0D*u1`sI3IxmtS+Q?yU7wK6L+DM`Faw~6iPVsw6KP}7Jm`RCyH z_QY1rrA5Ai&>(({>SbM7^OsC9uW)ugo_3dEo8W|#%|m2p4-728k=Yn4c+7=%BA9a1 z1mzJcIPiI42)U{uSp-F>To<-U4~hPF=9UgI_91hYqUFN>bSK@1}`eEZv zt8C$`OX+ON*}DBKjbPKwoB{ zHS7MP=3LKXTfe!q%t>07668<`HuE@^)UjaHWYrI<4A)s2r=z~p#TTKG`WpIT&3wu>FCJA8jp+->KY4$npbOoOW6y>cbz3}03_T9VW zccRG7_g`u>yjROd{@~uw3*UCFKsLs2C0u)>BuKvES1i(2WEibD3AodZ-7`rCwJpFa zf+FL~jK}&KH}j`>Og}H5sptAS-rZb&X*uaIV4s_l%?<9|%q?yIz9uEhxm_%7>M6bD z+*YkqA>H4{tLt7554c4A_)A(^w#IlD@Ap)MY)EBYL4Ll8jETwHxw(8Wbibu#!ku0F z`ve?e9+1&n+ln(j?&~X<*a#g6wHD*z?uxvjM{w6?d_zy^D@~BOz=BO`R0>wp*5>&Q zS>TfTya#%^H*`}_Nov@wD1x>uo#O(OPWVI0BH}F7jj`@`>Aj@JK0ojl+}vrQZ>(2I z`qkI0j2DuPZt60h)NNc?pIu|C)rp%AxM zf}8amMn*?Sc+XiX+s*mrk|RrVWTXXa1S!VX7Tom!@5_v63a zgDy|P;4cW3#*tyUpo$`U!%iVCV_GlRf(u!QK0e7JFebd1d z<#L_IsQeH;Xnycf(&hac5}bj%axZCS*HTV^(PTn}+3k^>GH@5bI(+Tj;Wl(S9FaWA z^nOTCpou!HrM-PC@a>-5Vf|P2DS_JBna5zR#M}_1*5a>oMdZY;I-1Bl z71ju=W_+eK+SAkL&3e$rp23rWrJ&?IYqFSpm;Jf@tzW+i+w;HG)?WCW_g7T2rTQX!Ysm z)yGIJY=YQ(lj^!p(3X{W)6+cqua!FP6zqaa6S}1ZO}#d$Z_iE!T{+T~+^7XYd|$7r zM{bCD(>RLXbpO%%K1rFH^-)Q3h@~D;ET_yr;3eSK1s##k<))jgrv|~ULKl%8uVp=0 zDe*-rL=PauP=^>h?lI;dnz`D&a{JmF+BCKi>uEq=XG)CsY33IbtAmp_H04iIV)(?h zRCBlN4Gn|8ZIkdQN5AR5sAx*oMtPGD*wk`(Z^&1Ya#2<7SsDTn>E||+ya-MrJ;lTK z*Esf8?KPv^f>wtCggXMbbS2&Hsa@>L#-leJb@J$YJ;l6JEy#t1P4UgRGMwet&Xyle z9hgS=zn%V`_0PgA3ou!egKS(rM8&Jp2r*PnTo$yJhA_Uk(4K!BUOdL~urnB)s!4Jh z7@(fx;@4mJsHCzxSS8-Q?Gfp+ZX1(7!OC9sJqB8W8JBZ&bJLOmurdC0sIEa0$*lB8 zn)4=MiV0cYr`;l1D99YMxbT4N{Q6TDZKC=q+f8JhRQ8t%#|sH6m#ci zpvTKgF*+6z5>k9$tsUnaR+{0|X2UeL9$K2gw7Txpd3RK*VBmEurpJ4oW5%xU2Vdd= zVK)ij%Cp_L{sMKgxn5P%Zsps{?eRcUHO+k_Lrr~n@yejV>_~3*$goq6OP#y(!Jx?z z$Us4Uv)7J8R4nS{cFe`*OQx{~ zQTr9i@fy-xazt~}-cd*l8vbOsOxtEmW*n>{ie9CSo3a#uAm+lAX=K^;%=;72VBnpl z^5AZ%*dBe$#A35kwhTT~^bB|6+7SWSrN|UvQ+^nm>*l3byj#qhW811hDQjok^XPXH zt}3#eb?`FSY6N<7Krc}TXd&UD``!-G(oST$#<>}u*0OAMVqV#nlrMmbs)=07ofn#x zISgf_W+&VsJon$^KO7O~u8v6D0)4PBQn%$_XuOWd%X z1c0E?K}T^nn0LE1A-^;(nHE_RvKz=aqnIG2KL16zoOC}lMN!c+!Rwa^Ptzc5T9$D)N3^NX>1oAs z@Web3GOu&KR@G+V)0pd9TUkZkuhsze1J&aPPkK(Hx=y1uBE54i{GK$ zKuW&Omx=@xp>bPudpr20V{^O&+JNNLKdwf=7T2{MLBCF>>xR+CK%&^o@QQ?#Ai$Gv zZLPSjF<0FKoWnWyGzfARmpXi@_FuQ~bh?q@u356P3W!%OOWC^g!mbpD2pW-0Pmq+B zm8vC7pP2Avl4rcHSFj|IaI`?rdM}fQ7FEW*q>)=&i=jN*Q^dnFQ|lvoyqqZ|=^{k` z7}NZ+0?^RXobsJQsqEO6*uqPSR#ocPSJ!7;lm>J`uBTgk#WmUWqxwzg%$V3&i;FeC zU%-0$DFf;61>3w|uPx6JSU*SCFM02NTgN9p#7KYt2?s0TZE$mxe1ylr$nwGyHM^$f z*?}kZ~yxnFlhLAiknp+=+{6)C{hG6v9Cq0@Aum|+_^o7P>Gz9QFUAj zv1p>B4!=8IdqHoSOdH$a#3ylH`h0c3PokyFJC{s|Y`E{SF!f80`bmsE#zcA^oRQPf z;wwLFrN!9XXV<{>I(s{`3Irj{DH0p1La_A7^)lb1T=%Vl-^@5z-uxa-_urH8>#!!w zDc7A)ZELE1Z|OTkP=~qc(M!BeLjJ)F;p!Brqg4`e`XvM5@Yfdt>313myyB`(L)zK!vwZvSZh85N*HyGXiqnf14uqHnu z+SVLGwHdEYVBsGn7ZRo_xa+|v0&qR2*m(D}gnpPzk?I582gb6%)<21)e=ZZESjpp0 zMsMS2TA4~}WMqSB@xINz>45hAlPQjD;n8p{kpLDcB3XRLEw%rM<#47N8ldgctJM>u zxzLCs-w=KP(rW-o3__8h%`H7P4bCIqFVkH%F=pz7U}QZ$PI2lgwZC4dOABGkU==rk zrTtuV(zNqvJCfZ>-;bU@`lW%9_wR#E4xON2RR{7X1!(8y=d9Lm zb=z8FM9dj`B^=`WxoONXl0b9BDzR&)jzr3NvCPlgli!|>CGq1O;(ggTxib2OtdPt+ zb`qlZ>p=N&O`1<#nao7hT$a9FFrq@XmE|joSk)%1?H3NKe5f^FR#98sI2x}shEVLR zhX+1%`5~wZXoUl8=1+pHElIyVy>ac~M*>lgD8yA1xtDzk8PthVU^|EC&pA;qJ@x)4v%&68CZ<2{QV^lW}%;ic$BSXAePnrR`z&pmOt< zD%;OVZJ`~z<^;eLz-ejsx-=>3ZEDX;aOnNvGC&U9@*TVNo&{=16i9z9g)IDNdTKWZKiA;X5^yugH6!4Tm4JzJ5<^BTw$HLg* zFsw8nVcD>qodq{v5@OkK+^S8#Lj&ok1J;4P#n4ZPxx zO3`TLe804Pnte*s;P%Na_^knSnX9;+u2k1D@OpxsXR8uEOeM@5Iz=`py%uYLv$xS* zh=DU;_hnXmSIWWit0%?94cYYq zllD-(?d`^4&DTU<5^`>`$pV7!1WVoBmjZN~<}?AetBdb9kZ_Yl@o2)1MI90+@1C7K zjr~uXL%)QrJl=clNbHF9tvs$(EnGGj2Dl;lpGAaxA*9#LZOXasm`v5YnR_Vo#U1Xn zNP~aP48r-)dpp8WcDLi6G4~*vUbkA$&lO z6w+ljuToLF+p|_n zmCZu<<+j!8n|L-FV<)5&9$Zo=|A(fl0II5a`!tuX3tSqcySrOJNu@gk1nCCJOLqt& z(kd+>-JME^beD94H2nAdX1|>1f%CIKn{%L$ zr2!$#{hXJf5~0sG9G32^tkO>Prh?iqCo+L3k4Rt~iyS|q50Q8v?K<&uFNSR7SnQ?e zhsKR1y%Up|P*K@J*8AJ{k(M5$zyPyRY7vt z3#N}ho2vdUnAZ_^OZu>g%^RMq%$UgtkRLfcXqV}k!_Z_q@UQ~i$iC%B&~S{DaJ<%{ zg@^^5+@4?GZg{tlN-5G47+>uVBsqI~M$Qa%u?nJU;!`Ai(Az;7a7(gL@pO$XV5!nS zKRwvET8-U$icl)j!#b1DF*5STA%3R1(}vWrAew_;^QcMHPYXR+>qmczyO-Oh3(X-Q z*u6OMsJD99(>T41!CO7|@QR$r<7KcW)5?@}mtUfz;rLnz9sXpYWj7kKl!mOAK+NU- z^9RjaP6gLMx`-{}XVPQoBAfaTh@5OMaMDqI5Cw4reXM%k-rH^n>$eq2Y)O-8iQ(Fs zxQM>_Wdu=4$31;R7J=Hs2ksfWClo)_yb}*heF+n)6Hm{sg(<|2nXurMNSV&W;IT0C z&O{fMsOKzkE+QzrS;8pn zLsEg#DHW2vBd5nkj_6&Mw}iW2<+^H!Ok{A5xLw_C=~H8a8DZIUFq?sGkV0oCVCPia zx4`{`V-|Ezjm>1GddClitiq!wUH+zg9c&O?uM^_Eten`>thSNNd4Es+kt5w{!}8~5 zroPYG@7Wta2}n2+z9NCP040C32rk^B(^aAzHGCD7Q(wsITVLTYJ}xSrKnyWzKPCHj z39H|TJwI^W9Mvl;-d#6VRpA5w;?*~n{42~7XC`=@mVbrEy2s~^3pBXA@(i`o`m_tr z&cMRcHG93YF?!g9NANQ`c<07x-j7Ln=``w#y}DKe&ViotNvrw1wT}jT}$PHM}u_aks4Zt^zT~h6XaiM0;j82vicI@SJsDG z0ud`rv)+DYgBnESO<4`SZpiboW-UnOf%MRlV{Am5nc#G%IB^H#BULQp^PBhXglNfa znWNF&iQ;2g8-%bnAS6m%O(Ux13y4WhS3W{DBwhF~&y;QVgE83;xyz_PBj$g}l zq~o6n*Uelg5pi|gJR<+Yq``qI$~xuXE>0;&+eyn5VU*OCA)sB z2JXI`vx*^)C20qTeQvLoisFi|6+3C;{)j}(2}(LTw!A$&Wr(wQfs&NC7G1s>mbdn{ z*3fh{RD*Pjn$0}70g~3ogX6WsJ%o`O2nv#&!~Wp&aZu?53^@hJso>YS&JCs zb^?Yw*h)JaW@3c|eqk7XVFZTRQjh!|<8M7dEjtNC$RX`Kmk==}D)W2Ef>0+UP`6Jy zM!_WXQ^gWGVF#UXfvvgVuW3S(HCZ0t_dV=iw(tgGwT9n?^%;h_Cla3um`(sm>6JTQXb>jnWvy{=3#QWA>u{<{%jI{6KjKeYTuoE&q7Ci%4$u+^_1o zG|Tnx`UnB$br(L`FPu7`_0cjbWXD&5+=|JzQ`15LiqbDZRYlACg_e*?mQI|5I;bs} zXqaNX_>>VuM;=f8u(6!otdDjStT2;LCv~xa|5urR9HA?o$Nw6WiZj<`lv`Ltj zkc%l>7OrlKFmhh)MU;R{`jqqf&N*lQ@9O(r$|t8M)qf9gZBdeC*0~_m-jMt$IAYaP zu1xuFA#xmg@@QH@40>{0dhnAF^BEMopsoZFr_O&u-zfa{Q(JMxd_^<+V2E}cR?azyW{)qC4UtpB>5jNRL*`)Ha; zz*l_Y!{1DMPruJWbDkf?{JB0W%F94f9r1(|@sj;6kKFEepO#QMisKFL(zDrAX5x(4VW+$h>EzLn*{E`6yA0vhg{LcUlz1W>l7i$M9dpcwhdZ{{Z>jJg${}f{Z|D zoj?1@*3mot*VU*FrNeYKlqR%;KZw_vGae|~eN)A$%7vNVcql z2B1&OGpp+z44C)2V`Bt%Sf3$+?06^-Z)P$h#*LSrH&h0ZHuhOT3M65plaC`5G3e?A zPH-3U47aSU5kE``EVDe0jgaPMF+*QfjJC1oz?@0CiKJxf>0Fo!DRX+lQB{Y{NPgJ0 zBjz5d@!4pSF0efJHh&dk2BCw5hkgv4H_-PRd9QM}cJ+FeZ%Kg=7nJ}5od9E?b>2<@ zo0mMCMafFC{*IXJFj1dZt6VX1L!?RqFK5O>4;PD^vsO$JmLAS=JmSy(V0VH=_od}m zl#M74c36En)2no6#jS*j*(NJ~L-IW^_Av?dBvBJ~iH}cen3Ukr$!n=gEsE+kx}UAp z>RbG=%iBWT5kUmdt@Cu1j6`BU)?B|TdT%$(kiv#hSC4j>upk9q45hdric!J`wKOVX z4J&ed=TO1ZAB%0_Q&m|Vf%vDl69gwTr*~B?=oULs+MnI}ML+VL*B*tk$H*TWc|Qz2 zYJEc%;G2{FSGV#4eJj{5(@k^JG1s_ee5cmu?}Y!!gI+GeX?I6j2dR9L*-rnTxpN-Z zeo8w}Ke&9CK5;vPg;}yWhnuZCl*%&dsIro<5`&ymxAGbx$bS=eQ~&%=T#JxFf2OCW z=gRK|S&X)svz$NK9hoW`XweQ4_Fkv8SHTn&px|K;#3`)C!V^08b(M2|g|PB#bTzW_ z^E6sBd=87D8{uQnlB*Y1@5ff;%0aWTLQ@xs`<@`=(>zab;)j3YOMrPxfQg15Ule7n zxQiR+&VkPJ!qMkNYn^(Luv}T<(1)QEEO<T0eSgl?V=#Hy8B(b;N!# zeq5po@uwIw%Y!sB$Te=q!Pm}RbqDU|ys7n1ip(KaWK+;D1uQgE)6=;snc;+fK_|bD z>EIGy{(WLm;yp}5{TOtlsI0ydgQSx{Ow;~IsM~(Wy%Wzgl}n6?;<9HD>$)b`AeZt* zKU}P*;70|Sc!QJ7>ptBB)|Hs_Z+?R*vz*s4ztuQJU4PSIBPVQiI@GdIyCNwiWQS^P zFco&L9sOIpd+(zQ#*7atDn#V(eWUC65XdR?aDwCIv?Q|HGcp}O@#d!}5i_?w%64A< z5*mG9`zU^d&BVlX=$?tVW`j5B+p7aPc~8cGWiFN)D7~3tg8v*wF6od18=?Kjht^vK zk2nh$XvolJwES^FnAa7)2pUd!OCyS51vT74)666~(y0;Bs`R|cm=TJ((cBV<LFQf1D4*>Baf<5q9Oy~XyfyQZB)lcCqWQzQnnZ#(z>*^G3d`rA##~| zhnH7YNaa5)Y;~3Ja<<76xp{uUGPMYX#zAyWcuT}OoB~nQGUsIJ{iwohu{k^Bg2Nip zWgW6?x0l1dl$#8h`ay}Vs0F-_5TLeLfbsjUyeJ#-cjx1G=j+!!o)Sh(?_G@V;(!ke zxfrDtb1qzkIUD;b$s&n?Rj8a%E%J~dqKBm>4sZs|&dBfex(D;^1h2&#EUy0jI`I{= zMEON20^6RAN+mr1d8HQ1ikXz<+_RdZ#X>ELcH>2w<9lEVLCUzeiu#&m=yI5yXs$2^ z|FSD*kOHWh-1uH9IUV*$LDP3~yoWPOms5i?wvMae`T5%>`3P*e*RKUx!0?I2#C%pm zIO9WD8>hg6_sAN*AE1YcxnUy(nkmUGO)o}m=d|K!e)*DP#z5XT$V&t`RzdYQ%$jEd z%9>1Q))zr6HI!KU?3h16)r^fS^x1@AQ%I8Zs4>fo+a*#US?H5EN)UHdaon5Y%^Q+W zEdPclOp|!j*5$Q*C8Mf%X$Od?tv`FS*nFa$wTnhqN>-#q78R-&vm>rBX0{V_)}*Q> zW|f5;J9`?gvrb>y~l-7WC|QoSN3C05;d925QDN z2VG}_$#N8eZ2*<4T0*;1Ey2M{yRArbvMSbwLLS*xK=r3!-w%04tZOiwPYhMd6pe%M>}?l zuc?Sy6W@C?ru%OH{%Z1tiTg6W;S@pl4Ofpk^~&6c$6j9vM&QNMi<66q!T+kimd~IH zL3^;XFPArRrx#lQ(Wz4js&^o%2)S*oCMXItGkh}3AvNdulrKzXF;8WtF1jX4q zFQ|xdRSQ~Iio+o_O7FRZk1SEvS8Bb*In#V~2;#sg1odII@t;~i+Zl4L&>uS3iI;yB zI%zl#iUPd_N7Eij+RMxkO`hTcBPfJCyHq{ZhV0knl+R9oZ2rXCRMg!ZLdBa5F{+}2 zIeFo4+H%L}E+Uk6c6Py2Zw1M*n=ug*tgRhJhkA$`BvG=}J1RTGF+efT@mqZ(@JcUq zBYgSmq!a3QO2U`on#HLd%aaj`j*mjI7?T?PtXM%vku9)RTI?73*0`Vhy;m8eeoOw` z2;SR)<`xpJ2sAiTH~yw7c+FzLY~?DWg&z-}c%>IFSSHo$ZT4M;XBBxtqxE>1#~O^4 z%O%x+lf3uKnzw9WI3st^ipeV|?5AksrEO8q}DDGQVKq-b{dt_Nv0q6#t~lVQeEyBV$01;9q(7Yba_B zhdi{;N3azsTOA#IDs-{Jx)9oy5x_6m>R7Vl9>@CX9JSBmOoRWDYG$upx6Bjog!dh z{gFrx|KzUfdN_;c&2JTR{qHSDHY<0@vYj%8lOY?vAKlMRZhv$P#CV&AFI%gpSm`~! z($NVbYI98+zhgwhVUzRp#94IO{t8dpMsV57`3A{ejyumVOFi}dUp+ll z^RQ>o25og8TY3vKBvSswr+IvOI;6BzQorL7-EpBFXKHF{XKydG%RE@AP=!4^?_Z97 zf_z{;(MC~rT+_BOxD<$1-0zX+t_r< zeHtAuG1g-_6y9eUGUo{PyHUHjxtR+YnG5vC*~KeOR(!HTbBE?@B1oAbP-~FRFDy(< zOduu}VM*oUnV6WI__dv8?--s)1R?BRp-k{|U|p>ee&*R#NP8)UVc52YpJ<{51?|hx zpaacW>TW=v?(<%h-q*||JC&C&V`sM56ild=N|i9$XnMebq95?xOwP_3lNbrqzPA(8 zt1`>PkdmQ3NR^xYz|0N0$Svf06I)>em4$Szc7^e}ZL++`62h_SPoonSCS^)xbuxdh zT&MhL+jqx942B)yM8E1{_wJpnq9STKw^>4E$0Me=cmG?;oJ^x1 z<+*7UzjcQu{8egwn*T9d^$&}sCg4whElZ5K0f|!sMPHx1macBZ@88-Yl_Mug1sbpA-;wE;~1 zV{IYw_`xym;E}EFC<1z(zP6rR~{y(Fq+?)G)OVi2rfAR2#L z$C@toCGqdyHvzZ1Mfz>G?2dCar~vWWIXfRG;C?BxvsR!dNJ~o?*p+UF(f7YV;kMgZ zbiwrO8{na(Ew23DJ3l7Xtw+-l>%#NVanwhfELw@)97aMC3wAi6!UXJil;U8~H8p&3 z+}Py`(M~qwYP_d z`SvJgz};cP^=jBvwbK&tF0tOFs2bF{69|aKab&?!rJJDg$_b)86|%{ft0L4U+3)mk zj`$q)&shQR-)K6&u;wN~!s~Ksu)4k2{V3u}7=c59mN9~wI)t6GO{a1<&oh}Up0nK& zZw*%DyPyB8PfY~K6^)E2O3TWs{jazjms`oq-d{2fj{wCY++2X1|JjuS)l2mpoUcUR zx<02ydYj&ed!WhJ1Zn59oVCu+N4$;g3;q6`%a4pTp9U|d8Ts-O$3+D5l5*gIs z@`sIq5(~7u%A&{RsA=2cXi;=Y?hf1(&d7dGsbK+1Ex7|UZjkz(Z(rAbKx7E;#q`}iQ~CuI-MdfVDVu4+lw`|H!j z>vc8W!24^b9#I|NWE(Qdfi63NZficz5fkU(i~<&*stO7UUT>x*o({8Df^m+CduDYf z&WxZ^S4daDGVBS~33uaCI8efT-Bou6SYu+0xsk6~gXv>5)KX9qHq7e`!S|zZn6{#9 z^vB2gUU!)rQa2W`EGcB4pe1}`sc4v(osA+j3qU+>yW%1zC&!Og_^mAl#EY6C{;Hh< z2Xk*y`iXYMWSf`-eBh3(huMs6EQ~#3B}fNci)o#dOxT$>EbzMj<+#5d*tWPnSv$FV zi2By_g_)P;8G-7|+d7`CU-rt`eneYaTl)0}f&r&}q{S5#A!FP7k4uS!$J2lQWXn50 zW4zb^r3SgK4(IeZyMq>f&q}1N!4fx=%DhoK`PcmRB31L10HgpG{;}WX6MP#?$aPM; z=A+Mxr!nd2BphasbjtzfIOQfSLY!d?){u`y6n_`jOujm+9pvcx!6_yl1U8_Bqj6(bU@(thEGEWHI~` ztB2c5{U$d?sarcyHa0d|NOhOIa&Y`wl|Wfj(}Y^veTzcdbr~{GsMjXHE z)(5?AC-30cu^o-8c81L{MxLn|Xq_}J$@hvfxn2i_tee_xmx`9zwX75Q%HPH3b)mWtqSS-&rheVEB z&t2#3t3}Z={|8QA~)m+WY$ySD0zwMH{{byn!oZLa0VAMLFIwuWIVeMTLvv)H1qIN@r3XjYa=LtO@Yk=GEmJQ5UZ^wFuh6xt zn=h~2Oi*~H|Kp9|QS-j~D_z}h<;1{N4^@h#F>yit%h9~rXkf3J{OPBSN_UNIU?feu zDJn0yN)wkpR1r+=MUTl}BA0(A&4scina)tE$*|Ej|Nf;GZaU3@4{US^uatN7;7P|F zE;M{K+T7NGZjFJf^+vv%4`B5}eyZ2 zri<2!BNxt$SV?q;ha$G#1|_aXPL<)d_-blFdY>h=l>oU^X{B=@zZP_%DAQylE;o;$@nfp+Vk^i3cM{#ei ze+MOU!2A*``>bIOdjs~88lU%(I?S7Jp+gy`O=N)1HU`!lB7&k~LK%id4!UO2o^QuW zA}SWi>QT#a-=C7n-|d~z6W_rgfv|($roB1nC?9#P(1hO2!*6eIzvxuK(iMS3?b9Nr zDddYL*|?z+;z~)r|8G5fWhwHEQ(ERZuaGD{#C$l7wejf@-SupU*%oT52So)ZLxXQ+ zN{t@Q#dH*+AmNh0;>y4>3%o&<%O7838pEN7-w#^zRj#x&H2aOylFrYI?Z{H2?o>!% zGB9;F87Gv%B78ABEnfaJa%v*B&8}nlfftPr=7$IOtNcOi_H2N_PgRW}Mk%v6~qH|I~ zO%02y?Sjy8wn{2Hv`JU7%eSu1(+vEHyszP0j``Gn+}&F>J^Pnk-~*s_oW)1d>i>^?9zTqkRIzy3cb+B0cPL%zI3`nGJhBU^frlL8G>KUk}hIp{wvW=`= zdRSguv;M)_9{`9BXaqi|cvppQG*DqmCLe}suq$+9W4YT=gqN>J;*=ToJ;WM~xjroq zcMlcPNb8~Y~jcqVJKYPtn!s3-cAKe~`4zi)NT%gy3)Z|dYGphWJ(P;SsNb*Ob=|I+EJwK_(d9@qv1=~%&QSny=*Nm@aCZWuxz z^Gsd*9qv)bQy`Q?j5cPM6&hi&>LOzI{Rn2h-mAjG%G#CX+@8#L-|n!W1f9)>33zN0 zaJJ`*crmP9`JJrO91Sd+ETod~0tV8ulrTUOgha%wuIlj0ZGFX+5*=W^!incwmFOz}-V`Z` zuS5u75s8z|u<_js`vwK@okf!>@&N<*^vVgnjjkIfk9Wt+75$9x)w@bP3!hz-&4ujR zuNAp6aY`qnBTtdPRsuhy!K@9GEG+1#{SPp(X{6Spw2cSO+ru8C?(YMB<_3wiKi;y} z*42IGOA~;vLVwI%8B8s_sZ)XN*M8&-+1%MF)U$gPfH6vzt_rU_1AT z=>B%b+j}fTeSjY{dKa;5?(xmTy02tX72@I zOb->Npi&8C9lE@uhDt{9S`CA#ce?CSE}TkpL+a>=wmtoc`vv$M1D#YLp7U*AYkj&KlCwIzdYcd=YH;yY02UMOX>R#hea z-M>Wu5H_;Qyf=n8x7ZIGj$bP@Et_rwgpd!^`ZU2j*j`RIh|Uss{?Aj2RsSL+rKZM4 z(gdRP_4Sd3&vBAqot>YT++Pw3kmIO}ZoLA>zfb|3Q9@mZWL-Yzc(3v9ojik9hk`7| zL)4m^==kz-$fEIxBs^&(Rgx4plGp#Aqr~;9vkXK<{HGINCP2NrvR8E9)Uz>j$H1St zmTk+9x2blxQ-X@2=iALbAFNTps~}xFbR6h-Jk|oxxg<~uNJ2%EYwdTBG~Zrie$qnx zJm(nk>rG+g;>fB9uI*=6rs;}1k`}MS7tMt^_I{2bX8tNB{{*;;#|($dnDf5pf1 z^@u%c1N6d`_%U+qEB=b7=Sa(bYh$ywJ>*lS=kT@rLHdq9fbo7iVSTV61J8|xg(WX? zG4e~hc^BDi`+EwngV|)ZqQI0n$I_KLhhsb;BWf{m$%~VeV5YbfzrS98riD7UYVa%! z&fc#`YDEo6x~&cdpjL^m65SWZZq* z5OYYY{QB1gp-sZ!iBw59*tmQcG@1MGRSY9|t`tzxc?*`}K$c zexJK=_*wh)Yvha(S-b>7zc>E{v?lE*3A)=+WHMgx0-&@0Zz1SIvK!!Dp!L=w6y?%M zOVd=g-x@j+84+%2x8L{&JWZ+k=?@t4@^b7s{9Bdgmipi^7sD~~Uw0d9~-UsDB;fK;fE|)Wd(mO z0=F5v$9?JP|Jn>x3q?gmpNols{K;Lux2&}bhqYs^G{Z|f6U?j9PrmGH$z_sn=;1C* zsVC8MpUcMW-O|PC4#HP0mp}jA^y?Rv+QqGtS)tkp&t0=+|fJio$)p8>voPmBIp(NmC|5Fc(qXZ zwdGK|NcSeu$@AEao41~iE~uRE!jtS{y1xVJP?`VwI5M<9;7a%jx7h1-4yw79zj_M8 z&uno#+uZl+N1XzH`fKbskI9TnYP{jJ8WcG<)SYCSgx$GCu?VAt*!D!H`r z)K2S|cq7jiDm?-@b&Y?55V|^5pv0;2ZG1G?S10K&^mjBnL+g_oJ_>;1ew_~w=i4HSe*5oO zxTrs|#jmgXK0YDjwYMizlQVjF9xR*SWQ_1e;r|V>9zzL}HTK>5z`{zFGeh;JwAjP0O}ewig$=Lj;eh$htFw`Opb z7?IOnqH60Q)F_2+dv>B9b1&rI53o`PoXBo&ZIzHa$2{98OI!(GQMPt1WUs{QcY)z^y|zLN!~Xj6FOXw*J$}~?x<(Ocd`hfQ>weN1fS!Kx7+m}YJL~==4S!$%; zDQ6_)UDm=$JGb1*C>%r4*q42AOb#n(|JaFJMkVu1m*0bY4i78uiswuvLG+hgVOv;) zx}`({!QIc}hzUD&#@xgvW1;r?^nc%UeIS7(3v!0BTjpD3WIB}mU>cf-I~#}x#R38OOYBnb46B9Py3%A0l@!-$gIFG) zlhwEaT7V4=E7GY?T;p`qMN!?iM^$zc3A&e%dX+qN{;Ts<95?c8+=q+qV8e$D18`bZ78dz4&ko7;Xc^IVg zdhQ9tk?Ew@dvlHOff32>7m?A_)($PJY-j3A7qqm2ov9%dS2`EKb3kURLW5=B0ik#_ z6zCw0hxH4S)aC@|{|vw~(NUo^|0o?Kr7q$6Y0ppHAie6QW$MJsb3AN#P~5gUU=B-V z##X6N%h>AS3_Q-k6nzv%&4o_p`rn|##|tRQ^Pq5LaEB9=M14b z8rfl|8v{j>y&we(PU9Ib{f7u%i&N#XOT4!S$A9&~SyuiRwVx)Lf~1$@HOWgAZQ?Z- zSS(4lCrmN0*jpW41V;j2&Sikg``f%{5K<3M(cGcex|fdJn5sy&7m_(O!W28uqg;j< zGr(qtq6%7{oFd6>WElUOp9(4}DujH=C%;M)?dtqLCD~w5Ob2Gx)|lW6{KpUpu+e@$ zW`b!jyn@j8S=3!qH=XTL&S|w#7eSsi-m}%{3HJY+2rtD@$6aH+iD#F^1j`o+=S53&^WdQutMV# za5Oh35 zQjdTAJs*0jlaBAEQ8N>#B(L;-J9^k_FB>la(0trNrFh+6+pZFkmu8i60_14L89BzM zJlO3I2OTPAG(zPlU@rdLvHiU>+Zj2z+uI#(%UEIm4F1zyP-j!+h7p^I6KXBHG0Z^p#iBt@1V+c1lw%3)urO5h^v#cucZZg0A$Sy_E4 zV&~?N4qxdjJ!tr_S^6rVmZ}C{e%AbanKu3d`F$J2( zv?En6YX(E-EiqvKMLVjDq=%r3MB;IWafpll`z(@yQ-B$qlv+l?P%nW~30+!ZtL!EW zR4)1HtP^^)K7ME#EBBx)pO#3#cT1ml0BX{7xd9-vWS8xKH#ap^M))`k+(P!M=oGc8 ziUP3irJBQE;?yu$ffd(TdXb}+0te99@?f@FKujqa3U2UyDT$EqNX?J`hU3D|LIPom z4h3WnV@b`D_G&1R;+2qP^At7bB5uyNdIT(BRp=K&jHAy%bc*KMd7DRXf0oe`4A2tmDT!4hJZ`9#Wcc) zhDRNzRj6dMNd1uXojtdST*OfrQk(g6cCj{R+W zP-J8YZu5g#*U|~H2#ZwQmqTxS#1|%BH3;wSyZ`<9(jP&@?vm8{Tnes zCuxsbq5L+*C5IY)4wzJckJ1ks4>782?2NBK{!=uVn}uG5bD#wSZ$fnk83$NL7=k?P zbNslGR9qSC@51FE`8O>b1HjXo65b~Wea--1S`ZGgu@`@h^y{(?Qugyrh7B1o?D+Rc z@^`snevCDAsdUV}AXR7V*Z8OQf0HO#6x)Vy3_BOFeL?A2#_bl*$=zd{?69 z6OgxMUUUt4_=D>tLJ>AvKU$Dd7(%t?6pAM7G`0C84sY-%2PQ1|pa{WW`h6+=>f-Xb z9@gmv?h=KU4;?~Rit3uL3DGIafvBizWU|D7h3x)nYJ`f4O26rh2>2T$;@(GcIy&?q z8A*VvOshf&p~FW(1bQ8ABr?5HT=!?uqO~~w(J!wjAFxAd&96@gu7OyHd)bSjsaHp| z@$FXx3a`Uhl!g95$!zIf2zyK@c&X#gC7MEEa_y!@+0^f1bW{X$pfI>J8QZ;mtKC9G zF2@r=c#9A=X)lcAQqo2et>E%oh54(b6JLIBB3yre@9pWVRpL6J{YoN~5ezCxHe~Q5 z`9M=1m;x=njFlC=kkevR!?GWdqGH%dFOkM-FHw<>%8~L%J{vaOO4Ij)q4-Fl&21kH zG^BtwI#Z8h{`zb?8q-^Lb&~1AO7Jc}KOYe&kBsg2XIOv0p*C%8$Ur}o7^7z%`0v{P z)5Csd3F9#l;oMwd5yp<;`93{dO%;42mm3@`7mYnQ#fJ$88w+j$WQbKXnfZ^8L=NJU zGZr;oR#tX;F&Q+#KPG{buz?GUNLHOY*0`wQuo}ye1Wk<#1R_Wq0S~gbFqQ5Ck{m&_ z0&YbaEegmSB`NThjVY%v{5h^b>7n+UDV$*GPoT=0;QNxJ>aF;U09dc)H)p`{awHRS zUjAc3)5G%i~~*;_5J#`d^Rp;WFfNZ>bSkdA1BiLX48dn9Co1Ph%xIy&=urIAgEuzdhWVZE_d>_v-b=QsQGIk?qf)*S0krSU|n+iya$K zrg^Uro{yK5k%1n|$Q*s7OwiN0>4tOv%fUc)N7sQG`GaQ(hO=<0Yb6GrlkG7V>u_EO}y zoxtF)*Lo}kFxm0rU-Lhbtub;Eyoym-tPLW1)&^PR`dy9t;nbMnC*$&XYu#Af!CiLU zX1TtI9qo5cAoe>!jM}PYe$X53b5kdLnu^6GQSem^WEZ5LZtAW9=PH)D-~*x>IQdk- z#F7CH+uuWb{99K(n7{84iW^+&%LG9JVH*B_ajD@N?CjnfxBEc}-@ku%;>%#b=uwT> z@DB3B?CVkPvW`-G6qiIyb6$=za&9N66P!}66;uUwVQVlD55S4yzrOw0x`S|xJmcnW ziljcV;m#i^fN0oK{9*bF_PpHRBTX&(X>)JpS=M;~Iv~9EaJ3SqM8A5^NV5mL-rdK?E7)ph_HX&67EMW)% z%90m|2y!qSgx9;j-`0_7d{+IN4RDzMaT_|2==O9)s^cA*?(f?0c;EgMfrO&1vEV24 zch_zdsSm7}`Cv3n7gD@z1m+RQk%X&ynHls`qL)pTs_xV<&_OY+8zPtIzN`Op#gjA$ zlq9-Qi(vn*AJee%hzE-R%T2%a8c8A5de)kZXJ4>!wLop{>Ml`c2H$b9k)X2e9~*Iu zsbH}vlw@8ffD85sXFG{e)I$*=Z+KpU+q$)y)xhT@oHVBg$dW#tDC|I=yrT|)iIV92 zt}CZk`mnAXJ1Sbb1U9?l<-Y&N%9*s!E^GPm%LIW+3O-I`az)mJjh4dr@$1V{kbkHfi4p-av&w*t83G0D9j4sGD{F)o z9|g9G{T#?5^5M$^aGAmsMfZSU^@nE#dK|-o%A@l zqg`lk+tqT5e#6m%ymiVp>it8Bbbi|svY>MAMsT9u`v^~m8A`3>y+G;@COxawWmQ0P8}+7|L zj^yR^uBb6US7;OUVD)XL)A9}ca#j@aUsnS)RAs(R4k4iaEu+x8*GGs!+lkj?SC6HDmsf4s>X=R zCwwvYGskb{C}OyHF?8-S*70~-(=%#C3(qSoq}p$PKwBxlxed0^k`yhN**@3m+F|^1 z`x7ICiDH!2NWvqA=VQ5?p;OXYa|84$CH+UlY4iK!bTsMf{Mb{cM}i|9;d*T z+-zg@(DUnH;6jC4B*({b4UEyx)x~A&jVW@4cG0r2Pnzjv*;5#6ko!UQt8`uh6E({}#Z;pY=X@X;d7CZK4ENPxmNW?NqpZ<9DxO#~d$ z+x!ax?K*6?&j=}BdA;2}dgtsOz+ag<^S};-f4~Uk-C6w9NPk>l*KEFLD@l|8MqF{n zt+VEf3qCjjra1e zc=OA`?;sYPrvcL>eXbl?wI^x#q2IYQlqU?c-BHLN4RaoM3L0B+h zH$8)I6FZWWR;{QtY?p^chf=_Dq`V`cs-}T3!uLKPQ}IP6U!57t4@WqI%Fe;TtJf?b zIyt_V)K(fHgI}w%HMDX1r6P)0QKiXg)^bSJ$;qjs5igZl1Hh24-4kkgI($DO$NR1` zF!N*a`!24MXI{PC5o% z{8C{#&htJVY~aN4ot0~E4dS3711|r2+xNnpC#o-&`%CD=h;0rB_BWQ8G#uNcm+tDggYygGeQYFGCCz?4JMjG(tAk^I3-BlzEXj2i0oWMluOYRiZWx&@!L5$ z4Y6znR>{8S0d`H)=g*&|&VS42;{)I>20?mfu>aD-%j-+C@*yCoxX*?-YC#?yZ;G-h z5*I=GZcY)TGF^u6m#ceAigF@8f2L%cdXLhvlIwBsJ#V7hyvBN~2_FI5!V>LF+bM}BW*a4XW{?_6G$v0%o;#=0*1O6SW>jDQV}&k1(v-p#q78OZIZ!Ze#- znOxZk*tBTzg%`Yekbb--de7(g8aRL;%a=#E6nWw!v9qIj1zx0$1@1?@D1tyHB=mDY zRx^?%3@{z}lrOby9x5rg`|r&>r=~y@v+d|Bk(|qfBI%@4s+5e8ky^}{qJ05eO49?A z&LY@@>3qCx`R89wW~{qkIg%6^rhfL7;miMZlY?F=??sFsKpTeb4xyoy6bYcDU*R%>=W=3@+NlyxI_dk zDm8&X7y3tAj)oR&B#1$3U1gPAg@vYfkQ$D{>S}_avPBhQ#tXzP#ym1M4jMOS83wE<20BP(DCy?T|#OtvS#%EEReeBO5# zGr_15;qV;8`U9#E<$%S^_n2A-Y^b7&cm*Q_$<$|!(b!{xF-pNN=MSR_eCllp~{0jRBXpeiCYv9*dIsc14QvvuNMDS z*nd=UTlxtVWM%l+h8_?=a8Aj{=q^8*P!W+E;(|k+-Udn@2$jWf^k}^*7kiUw0Xvwl zqey=4$3T_!loLo-2AtQzM5&0C$A1&E$G_#zV9^Soh}s3*pJM*}B$$OMM*}#y6&6vYdry+c4SI-MW?AeD(To@Usyho{x6PcNKG3L=*Sd z<$e7sSaG4%eCA!X7I?FzR_%4@{ZabK1L*r6iOIhh_>!I%&K=?|0)MCa?Nm|K!r`m` z(R9^OQFdR~Lb_8x5Ex1t=@g{9Vdxq{x*J3g1f)w^kPuM1^QB|xk?!v9{;t2ZKG&MR zTrQvIx%ZxX&OUqZgK|S+XJ-dg19BJ6!cUBN(mzc6R@Nj?lScXcWB{2d^x|R)Yh9tq z8f3x$IK=sxPqZ{Nf&(6J?V9dRh`tM?Y_6Ur(HyKQIDDyg{1M`C2$gXa`g-_8*$;SOx!Tb+< zbz1E<1Mu;`_nk?dh#namdzQto{XY)0^w!y*U zCBNlRieZgIjX7_#wm3S~-%m1xxT-i3dHSj)3~$0GJ;$@Cr`B@}zeE_UwG%#N49|Wc zE-NmOYd14w&oi69U!~sCDr#XlZEk5H&x2EO+GNPIv^SJ~owRxScbF!4T#qob5MwyA z+5=8f6}%P+e^tIh^0_>qik10c zt*eARU$J(jqZ7gLbc>r?v#P3!DtL-UcI?wz&c^v6rqZSX0LXAMzmM)R1w2ixYkoO- z`TCok;(tGA?SUeN_ZAg^XYv-_-Ug!C9L#y?gB_*sJ}vFY7p|TbB{dDm8poc>O0;Gk z4M1NeGQr>>*jq7|oUCQX^CE?)+x4wjU2(h)L_(SCa~Xzh(d+0%9~mk> z)BYCulnmMKUBB{aK2;DE_(mogwx2e+{>^iLs{FaZWGF#%93;$~GYn^?>>GYE{0n?N zr>H2rP`!W%`|OrrBrP?S9fOAQ2XA%Ni-=GDzh&g*DP>10|GN%tDX}Kqoh+r~fv3Ts zovX*VUZ|&=Y{n0FNbmE-EC1Mu9($5QwSb>O*G2MWSkuLf4S&Hos)?$)C{n?!AX+un zv%!P^@@K+aJw|4lLNAgmbT7HfYpt2=27R^;Z0RW?s4GUFK*jqX+A%mII%#4d35yS)WYR`Ky{`;vnt^ zb7IUy9fy>psLDM1nrGi5KDD^-r}`S(KWXgg*PZGf>z0qJMoUPiP`0sQy1lH$LrK7x z*6SN`rm&u3W5Nmz3JK|68T8GP8PGg8Pdbr@Nog_>RROx^3$*@hQGL|fjEaTok;y}oqYVxBs!iSr~y)Ao3Uf>C#+Xk z_tZb4?ZPCe0Z)m=$ei99I&nk&gE9yYZQJ4HGdW)NH@JUxU+zx)0i0u(5Xt#exx6yw zVwnTZmw7*b1`Ve1ZZ132zVqtVhgh3$ipQBlUQyf+1|0u2qJaD!Sm#W0%Qm33+j;2`<`)r0t9LG&Gr$Z_T9X;R!8_@cEP1 zocDJQE%iy$m6q7kzm(|W{UmK9U!|Q)=;>{3ZFTORZ+P>wz7PbT{o5-7QeJ!VQLBQd z)CJWRwKl)?>z#Yg;-MUhE>nn^aA(`zi9ZgN9*3FfpAOIyR5?ogrw$9JUrRIyUiX*< ztZYQ5w;2WaP=+gdO@3t1(3Bk4c(`fIa#@v(@Y;x7jQ!f9!hQRzN>;$Yu;?S1_v*{% zqPJO(cRgkQK_|~I&EKf0Mo~cPoncfF&X)4>Ha55;(Hz$M^XgQdT(#1W(Z7Es7`TKU z0&V4?s@<7F7gJ_l!hK-F$uWf(BAWp1Q)zMm<+bpo@4D2(xvvUyrZ=v}%!~iEj1`}^xz^J_nps- zLMhqutL0cu)$h1N-)#Yk`>d=neAH!UpAa`JTG@U`(HC$lD8M_p27_Lve9IjfJaEL@ zx8J0HJU+bJkG@We?rK&4w7G;-!c_kQn15? z=Dqnww$i5z!JZ_>yA!V^--}L|w|(Y+A{dOr@A7tfC4Bj9i>rX2glA5K^I1RT!;#?1 z@!a@Qg{j#Bs=PB6^{b=Cif@pW;z3redZOOkKMn(mWngyOgUUHGb!_D{?qgQZMe_rVC3I% z%^q4=T~v&(ZQt|zZq9f4cYjxg3SBcYWvgtJ70*YUJj5D3-e~hT%fKrDcPzKYgfoQ0 z)1Eg&?ik@PC;savVFBC#N5Aq3=y5vnX8`FNkRYTMnN~9L8L;l90^XiruUX%-pE%DD z>@vFo#}c1Cg_M+)v6p3nWw^p2vQsCY+(O)SmM z4VI{OE1NQ6Y_3TZbFBDNiaf_}Xr=emgntruiB9@Ep0zK;hCk}-`7OUID;Mb8w8^`S z`>wxe3=lphc5i8>NE=Kd9;ke;ucZr^#p>UuMr7PHxoHERD1|;(M1UAxm#zeSg-`-b zNc=>n+ku}BPP3t-q!)iACZ<*r(c~UeBJACW#;U7%OB%a7^3K z2J4`^uB++zTRPosx?JIo&hs}Y^V0! z^OaKCr!6yOCB3{BT0I)(eqYUI$#$EucZ$80!!nap)v#dGPj`9!6yycnATJ21X3JLj z<;m9*1GHta7Z(@4yuXn|q z{tmR++ihs_n`>(P(A^vN#-EOcx+uPZY7~A)mc7mkrW9Zw;ggbC+kTHZ9=r9b6h|?K z=2um@>L8i8E1LBTWiT`wH<=*l7W8YeI@oW}wl;=RI{q@MJCm_|0@K7U+TU4SWUt@a z_5bIElyAcB_khZmULv%h9W!3MNHVbiu4q%I9THpw7qt4LW;RDdX%NBhKd<%TkGdg0 zYHNEis5;fJpWK5Sv!J-xX3DSuCuanuHK*y3M(}ReXt>;Av1M+dxCj2Z%MxQ|hV}_m z)pI>7deyb@G|1}%4OSzK1M9-!Iu1xkKcp#Yf~)E|jPNgy(vWqGOdRM23S~|P4O^?c>Mq;J zC0@U0D%bh8nPsH zTl-%%m9B5E#}wxa*$yCS1gdt0I_3(?d6Ln<`R*wUJzuMWs=zzPQBJWH`+!7&bg#@uOxt==FPW7OJhsLkZk_2lJA)16K z;K!uppAY($f^mCgAIFPKLg#5^a~c~PxAG{>@WLeOc1sR%P+mB<9569jwlP{_6kh71 zpcl+$#Lvqltt%M)(YX2s-B^yqOzb^#P)=umS_}UIgX-k>1zxy=AcEjZbwBJ*>JUtV zgn>2rXB94MjT8qVeBmw|Hv+Qx5HV{>LiJ7NcCN^D8=&H}e|Wg0cj5~nVu^>PfC|Qx z^`0cDrslcOwYmQZ6;Wac~_bT zMxRH^>Ej7rA4$W|t4*Vjo?Xhgo{uSX>*Li^`}NnOU~d*TI$}!eDo3LUrkara{reYK z=@k_@|7Zqm@a?UwH+Wbyn^!Gy%$23qWQ#X<^mV5p@UM~`b;2#5?L1O^eWDIim0V`L zfH<=zy>u2ROYSyBvEaKz;sl3_9L$#sw}{W%bcm`0vSOQe-A@g+{(FAi6h3Jb5D8FG z+@?|q>R5)FQF59JvmWY^-Lc_xc0co=aRw@h(=8OCe1lzxky%pH3DvD&Af*5aZELB zb{~M{rCGeWmBMpxms5Xvl!uqWE{yXvHTS=Dj!R8y%V3W!jg3A!KXpI?5N4fvcTw94 zh6O?Mf!CT*gyML}9>?r!rH8{>QTn;@sDuJLMPSLpa|pl9OyTL{+jhMvlfLwxx8E2{ z>DWtoXKia`yjf!Kfz*>a_3X5FSLc&{JVE$?AVQySR2fL{>0lI+UaSk~XgI^Ebr)`mIrO*kkh} zy#!76XXA7Qy6O62#?{C*G(UN~Seal~T~S+Q;iXG;0|P}%OM0N&>hKYza^y3R=r9nv zE2caSD)qO2AKifStN@-^%k$s^?`bvEo}R{`m>SI3@By>Bi> zl0XpAit95!aLOv`XS6i>iV(ii;D)M}F-Hs=xC=Ox24JQQ@-SG*#YyNYS6=^N(aBFK zSRrp;X76UdsXi4p^6=m-Egf2_zyF~(Xc|9=wZK^ zXTQ75na&xC)<@bzQr>Tc0% z!uUzDkTc{!9NAa^Y9hokCoJl>#Pw^O2 zdudZxF|Fb5Fx&noi!aNS6SSwvo&QQvtBbYxZDO^@vWHV+KXHdwZ0+n($I6(uFLj(v zRPx`B+f1&wZus-aqsToIDSF%gRqEZU+^JvqyuIao5#im|E^mDJtu3)kDm_MI4@dMgT)Gy*)zBe3iTEWMbg`6m9**tw%7^?_S2>p;) z?k{68oC$hfJ_=dGWT3`w*Kai=5vX8xS_z}ajHoYa<&=ZqS*7x<@efOSIlw^iIOo)} z?RI!)nmmR0$=YmsioxF)Q^LV zZF3cBkjg$&R7d9K;?k7l#h7rIdcXT{@5K~K3v$G;lg8VY9xuy`{@>g2UVi&@;;{@- zLe2lB&Wma5p*xg#$4bf%cON*Ot3TMtWyxUB zM%}pF^vLdv41;vX_G8cH7Tf?W&Xmr5_vo+7#SDj;ovTgC00 z%Gz3E3~OYT&sAr%Z`=^qNK+fB$zWzn6xGRu{mD!tlvmNjjgEX+r*)& zsXoq+SWn_}F?wb%^64fV=Dx;07rG5_{3Y0acyLQGt_hQ=7`U4GSaQ83dDe+rBgpcI+AaT93#1ZVZ+(y2puUU%aA-fRNa3{8d-(S|;%( zRX`B~-(dHg!X4K{b;0lYte|uqTq4&OLpb7hdJsI!iN6{+k=+rWM3VCI^V26L>=B!% zQna!S43mehZf>f&y4`@pD0Ro5ZyhHC0dy%z718kZ;eZExu#JXYyj|KWj*$B6j+s0N z&n^hMq?+jawM&{`C~7(rS3eCgQ3Ew+B4x{`(;@x#sQKHi1FUQUPX}m{Y+hWIM->7; z`Z7Nk2?Z6J6k}e`CXpcnVP`>ySBxO6frsE=+ncl+TPkua?45Gb{JspMra;M4i?|(2 z+pUncl!DCO;2Yf<+gVv{kAq79`y@3hcA9YzWq9*|q0Fjwkd=D=Nfv~;z8}qPY7Op= zt+aqdpnRMJ07k-d$~=!(Oh%h54zqez89(3L$~;`u_IMt(A*1i5csA76uTvN+1bN|( z_|W>G_=+eOLu5CfXx1le0eBjSqp_FHy`?qkS!LC5|3*7|0WL=UaW@&x=XAqjX1MRw z%rJrvWz`?v`Q23{Dv^mc$DSMwM=t_=!tBin8n&d~xBfdwFR2_;6oUQ;i$hr9zPR=2u^Z z1Ovf36K_B&tbm0s@h81VtO7@Qc~l-fTTXpmWWMm=ubuZQwX?5nXX}UpJ9E^B#g+3$ zBDtg%M0`*KtodhoTT|l2hAb-onOTsM(X-o3{HChplmjGO62I6A>R*)i;4z>rce_Z^ zKT`ASxJV#ZIw z5Nk7o1WUD$+^wIcJulf%oS6vT$cEUU=m9sW-UvxN0ibVqCxG7zZs|eLE0oAl9TM^5 zAkOk2vYy|1hw}wzAcG&wW#yc(o%+lplcvQJfMtw|j^N_J0ASxc(U1jRB5pxvx3YK1 z+sjx^kI}7zeLcg&@a@c}GWd$)e5Zf$r|&M@1sa^=8K+-kEg06O0tZo5{t^-Vwy%<> zAvf~<#ajnfKUwN{m0w6Kk82y5ZI9)>covvV{OaOeQM2KpN$oA+dT&2qKDFInJ_;PB z5Q@)HV$>{TISquzUxa^J0GWJ<3{Y~|gYj0Y?`2tO#{k^ockgL2@SP*)S^aNwVWecZ z=8N;6??HwNK$}g_=r?N%glPL66ennEtRvw-Rlj~|sK33~b=)kh1tqp6n{W#HFn^>> z?&ceBO^`%l2F;|twNS{AL1bFsh5h|nG#Sbyj-r6bsVVwwbbpn`H8Ht{bQ&nat?#=4 z6}oIMb`24qawZWf${(w8dqdx(r2CgD#}FmAP>RgBabpY-}m{K9lrB_yj@&JV(S>W-a0ojJvf#}BWkY~ z7HM%`T}OfU76vOI*6Qlt@gMHxb*`eCL;F`Hbzj^WZVYEeA(ofkOA{~4xJvx~5|kzR z^&C=W!vmsVm+x}7^3tW(C^{kh^+${+`6kY7`~~G72fb$m1d!9Mfh1+X~s%>3hs%AKRoxTjDb@(|ybL*IQO@L@v6 z%9bNrDW)HXmp-b5 zU#iKFYwl&^B!q~%I2AUsd|$R#$k5><(N}AZbC(4y+KXo(zjQ@6k1PY-;aF=#K4NN$ z&(^H7g4wiOr#$bB0eBX7M)DdOIksowtTcjTv}b3hC`=;!6L@X%xYshvr(O(kImP$fMA-e4md+^5qy z#I1P>3kKEGj*aOF$w}TaeqYgt_#^SMk~Q86f870;LUd}OY`I=+ zvxSAp?2FjL;%U7W*fjJe3|Ev?GmrCNKz%2^ZRO275cNV1D+U=t=A|M)vO+42;F zRC&@Z1EDM$xsLHjZaW!;Jtm^Op#8)ZVm+_<*tyVpJYRZ?6+ zd>-PRBcld}B-`@TI2iV1`TG;gWj^BrfM-$B%7Rb8P@U5_jfES=i)RVIMTf1==M5Rp z@69-QR#q;7sWN6KHTJ2B{F0IokPxoq5DK5&sp;ze0fir}@d();1~e8HF@08gK+hzt zF8tVMj%P6G)HvT&lS=aj{LK*Ptv56@oP_9L8f;c5&kw9rvNE7-#1sNp+)G$lWD9m>?I^4kr=5Du5}CKD}6NH>3m7YJu#|d^kKhFu3ujM z$ZHO4{cviU&ZQtNsnzR#xO|wDk4`IW_fvXn4nuHbqfXPFZ!nHks#e*1B^@Hd)sIem z^R}~1JeDHDf_?|rn~z<{qMjmAh7HrP5<3_j|LwaIv%wn~K+`6IwISx<;GpSJ4aJ{2 z_^NqwxAJov^>^Z@emIPb$2TzO4fWEi{zJW_u76z%$7LtLwf+_!m+-H#Hm&{CXka%o z({`pR7S4LhZeWn%wM!U`!z_G>H`I7HBPI+W9gzS=(c2B;(fF`*2;MPIYynDdFZ;?`~;pH@&DACJ;(_wasy1Sg`WNo{C&iyvy-G!BpgirlQ-plc`|5kHJ8|-fJyREz4 z7{<09I(Gzs+Qs3bvb40clMB{|%zy_kk+W=hG@$iC7`InJeQ)F!JGY%T(`WsD)d`7Y z`ki6dHMgXH(#1RCaFe46;c$M>s~DexpySBSu5sv}iS75JMCJEyvo)6-+IBjeuRs6c zc8Vl-y3y-XEl^~!8BXR<&{RQpD9~G>ppHH2q zc?RgMAP0FJ1$?x(zh-(5XeLgh;h#j-X!}sN^0QYj)`kP$hPMNDD$pi0Mt?0p%+D*b zlRz?*h-R ziuCZEnWj~n%F2<_hMiSFl|LvG-vs&;V2JVBeI}Oy8JJkE-RzcH=^X+U(FYphUXNK`{JvGw8n5h&fIr7|E=N$V{*#(d@|O= z_Xby7Mcp6}zD+K}Nz(_eS@hH|4uYNTHdnzEhQC~MDLO`tFO zi|S4)J=m>p$OnYbv{2dr4djE?Zyn%EMd_wI&yE3564aMLk`CFQK)L7yOtOyudwxlL zv4oj%6Nb1N*k7bm;c3c|>as91LTD{m--+;XvX^ILNxr%!EM{iQ>pbk>`g6H2fP4SkSMbzb_I#^$$8WLiFDGTs1u+JO0CIAa;^ z*OJ{izspO{gZcn0Gi-_2?>|wtXyPjLcd7eoTF7teZcz1a`i6F>T?Kgbap{Vxa z9rs5vy7fQYpgZiy2Oe>=Zapc$a=yV0WdFE6yI~Tafw^QuVLK%5wAb#h*UoZ^qD+tQNf4NErr)gtcMkrCQ&eUnTh0>+s~$jWio+;kyM< zXPk&GAkfJJ4{#6V<3_8npHKUzu(>-c5EYv||BU2VX#N>S*$~cD(hB;R!lolt%n=gG z%0sQS(**kV^fX?U9bDi}Gt=#nTBH3_5O&__qRUz|A4?U6du{i$b~w6&yRHDV;s**KX3^*PVg z$bak+Y1<>YiC*B)xwp`qCIjKLXg_KwIRz)j1vm$uT+BL9!JSQ_<>TsZT#VLpic2WV zEf*G7-?<7G5SR3#?Vw!hRWrJ}hp0pa^3TUXM#l;1Ch#fCCX#SGeFF!Y8OkiG+pU zF2$C|d!MTgN`FyL3CLyQnP5hEab29`d&(%QHIuKEg`}zT{7ZOQr_06AioKlAncwG2 zj=R|W12;2oH-F&{6R3Se#v%tU2jCz@LDx;8L~PAx)Rfn~usLTqaW4jLJQ@Q*&{+S+ zlE!^KW|7UD&+i69%coFG2tDoA9Ohq#RhUg0#`S5G2EH*L{(^Jri4;yLy?70oGF>_uV9=P{r%;F$dlV4nHw}&56>c!4fuZ0vJ#g8()q6M zNxb&y8A2I^4QX3XOX$wU!Mr>Ozah)F+qqzKzFNFpxI|m9ESL>KtheFuPY%9x29;kd zb%BZK@wJelY+MOa;ls$JzCESyV#>&5>SsaWd|aG9zA z*^+dXxUe4PA_DQDBAN15Cv~aDMjO9&(Vq->Zbbt!$?%WmMh)trIeew{)U?*_;KE8N z#nJxo_6bazsmjy+r=P69)4eND%7HAA9aBi1WCZtP^-;Y{V z^_FSA5AUeOZu#c^rr_lSIhICR(kXjUQHD)xSvq+Ajq1`3<|KH?V!+u?%7598eIqEP zb*a*t`9Kr~y&DDsY8;fM%iG1;+js@K`rVSotE|WRR_w1KYL1?xn!FWzanUqP{lB~w z!*f8_B*uk-5zfAi6&jm+gByAd+;zAVy;o2ncqp9-}!$pWT-94+a%Bm}O3@FYQ~d zPnq@Hv49cd>wnQvvYzu&_+MLP+3|aLIGTP*`MNP3o@~oiSHNZ;eHJsxdD*lE>;0PI z0KW+%Q>HKE5Q@|OHtN5BVY4LrrJB-vZEisx79&Ne?%Dd~sK&ZSWcYN|&HA&-3_HLN zHUb3bwFy0kpSihf2B?FtLd1N01n1}HUp#v{XMgz%@t1;ey0tZtkV(t&a(@2{@gsGyg z+1A(So1wEkTMUyfn(aS&uy+b5{9|e-TcfPEyn3oEFsm&yy;8vi*r&)l-?`Ey z4@y2#4x<(m5W#z2HfKjWtUXV})2 zoZM-CxjD3m*;E5}Bov=ogBJDjy$u=HpkbLJOYxGZ|EiskZ)<;Q;&Ap_xtyjZtSdZV zbix0Vp8Yj7Ix)p%35Ibj1Qo&cueC~mw(Q6UfO6noL!(vZ!B+v!Keq6hWv2HIV~y?f zxA_ASf&mt|coHlr(}S_V=m@vy;|?f-lCqPu&lurOT=#Yc7-;8avJ)V74noK~8UP__q!dK(AfXESk?o+0QWe zJza(bkaVuZ{tC4nn;uYGb|i#hDx{6|c7}M9r%G`q(#0y6LMH@cKO27NC@HF&SIYF+ z=5Bd3dJIb49NH=*h)7CTwDuwtF7G{>Y_D*v7iI_-hx|1d=^z&WG5uQKb^Tl+RV0)+ z%R3>e=1oyj>#2n1c+1z3vuyY?lW=vb*eNkehPQO5WYD z0Rju(*}A_gj3?#ue_)PE6HH5WA_UAY0%#i^QJ+K{H(Bk`Y^%`F#OsvfeEzJ$%P66v zOYY8`P-Qb)C{gy1`uI!f!0_zuVz1t596bK)+E?GP4axTgF$r3v*lD-G z4o;tyIPm?_*Xrt)*^`kE0j5AGcy@M%F=KZU2rpUwjV?N~dG#wbLvvVoh^^Iw-q7ex zkBE*34{xo1!B-7%mB#@}Kza_t7&^HwGlT4ausxy z4<#kLAFPu)?@BJf`|>FgL;CgWqoMwjTZ-R(HPB2zvs)o{Sz;fuR@4a01y0FY4V-! zIP=A`Bky_sU9^fZe9X$b)(3_A&O$H71nHc9>Sflr56jSGh;32-OyZ+?S3Gw7)+=vU zg-JJn#QIpg#Gaxly2A2vKf3L`F z1mnPuWUKA8_jp&Qm7bJP#0gGp;T>)O3W#+Im1VR=D=-xi%**JrSxI zY4?xAKOafwGm!rsw5g+Rc?kZo@A&xh1L?Pk?VG2-kqhr16a!w#9I*Iu)e3RvrynFU zl>nAU6K|-ddH!ptR+`!b&>L|5ui-{xf2%5u)6@aRjPQt&vdUw@HUt)5+(v^$Y{`vWx09oengL#{_=D0}Bp9cy*t!>K> zN#Qv^b_Lj4?>M7{FSI904CM7@{ei}9(Fa@e`c=bFReg^Wm@Su6;)LcNdMdnIUpuW~ z7_bcWf5@0UMv`+TB}jsqsN24HCK8p#8=s<1ud20js5$Wrju%X=dU0T5vfo{6Wi9-k zGee3OBcZL=Ii$)0Z1eL#hsS0i0*$C(0F>m=4}I<`aJhD?U1DPtG|jS1eOWH^)m*u0 ziDY6grG_~In5tw3oR}==UcM}{pd9m#SXhx)L;!07%Z-5)eeZ1;IHNf&>DSAy7`+wW z1}%WKGzbt%1*gLBda{twOB#udR!Z+J<-6nP0Q2F@dBFQ-7fiZ+Ivu3DkS;vz-Z zij3@MPvvyUg3Q50-UTc?K7HvHEt&=VpY(X7&ab}YFxW2M(G5Q=9-?@7U^d?lS9 zT?0TdhyhELlTP9Lr%^H%zI30odqGgt&)b6wHpiMYH6Qb62^qn5oe8SYpihDsN&rCw zy!1oqBp853+5#Rg*??$|;>4@)SIPQM-nsD7+;4GX;ps>n;wW*)B(=V_uUM6p+J}0; z&NkHe-_9QY&}tBu`_xq`$@*k;*J1S=x`@zTj8A}#;M{!I;=>X8f-ejyqy)S0O%InM z=p`DKCez9%{qrb!=XGLURNMo!^P^mt29wfrYVSxXe0VUjWFTL=a)2~&Y-Xk(FjAqd z{?CELfrcE5Mi$S#(NBj$zPpU0Z1(kE<<#yR^`VX2%AuYENAmKW^Vl4%(;+*dqg98o z^43?Hn&=18?wBtLs!%!1A1;||0lwwgEYc5W`UUuFJAb!@&PK9s-UH88m&^G}$Nm-d zuk?8L6Gq~b2tSvW%Y%715E8ryVtElX=;y;TR%t@|(px~$%Z(nd*WiN-yC;8=u^h*qB9J*WB`XxQ_L$b z52Te>f(@nfb8&I07#apH{#yc9gTs9Sl7(i%Py+G(iaBCh_{JjkAHTi_e=TM6*DpKR z*%d1f`LPsh0ljK#%XqTHpy{}KSLpojA}E7Dd~C*V7gx1a$O?Ey*>tDQH&4;j@}x#c z70_zN3JGcr-B^qA*Jp}}FZR(h4ga@vgd>MZknI}%PY(cF>B^zCjFpRQs^E4BLo`(% zU}j#e2H?+CRvPaPWG4dyDRXEy=$$~Jl3-GZdcFeeV6I*voiFy}#95zJ+vsb{M3-+vw4L51-_8bxa2kX0hTg zrL}kb2Y)NA(uMG&**?Kiq-nMN-linGFfRoAr`n`g*~=F(VA0UJXo00bCv~ z7GSm*paZA@&x=YcrGlxMdc((N|InSIi={zUgh?8dR@YwrgFqG1T*xW1vNWgzOLH-5 zCoc~UvTz{rsNOlt3%W^d9Y+;8BjD<`nYCE(JchbEEPhi|4K)v@{1~H`^aWVPR#hbw zf#i61H-+DY4xN}ax1}X>Y|PnJcop*!d2)Fnr2~qvl^Xyqaj8V08KYI|4~mC?j6Zs{ zV`FizM1C^#$57iOS+BVI@ZH8mzq4631y`%Kt`=}KLcu^R)hMSYvyGL}#iC@5jN&rI zt#7`QiI8`U(O4I`8ls5N zzg6+XhMpAg3Lw5qNJvoA)9V2DPKt=105^B_m9NO1zo=3{Wi)lQXdR{g$eGfCV4~b8 z00#hv9*}^60Tw_b;3Wov(=C32$XHeQky0RlJ$Ekm3x(%LsXXfbN)3u163VJ%eIUsr zO!SkR;)?uvaWwT>iJX-;>#-aAdezUPa(z(K>SFZgJ?PO`amhiU{6MBkD4(1e)nPIm z(|vYOP_mngc$u1iPG||^@4nSmwoDlS!R?jD=&&`bCUVf$F}y(8GU?6M-Y5-Ybp`WrFFQ)FvzC zR$^rY;>M&e0o?TJRLOYbbNtj~RU)CXkc8vqkcpq`;c zrR&R()K*^1pzgxTs}b(3uKnYmQ?>~S+E|%rZ{GctsT7pibWcwYU(ujSdMmC8YC3Ad zde$%))YJDtm8HSCK}g@J!;U;)re5g$C}?k?f&Zsf2=oc9EM9mHV9J7p7@e7EFVZZQ zDL{Z571&nWd;G9|>)tpa4_WPAcBGcY<4OC&yO-3La(>ns*5fnc_H)>#cVnyq?L8=h zViuM+^uOSsz{TTWLWZJ*t2^I)+VP@9_x0tNie%~IuaSR{+bx$Y-1$!i-ute&7@4eB z2CR=0D&rq~JX|fNC?p9HGcXVaT2znkU?+u1C*g9qgRc0E(edsL;`G#$R+OeM>cwVKu!A6;G@Um2I^~Y3!R*xfuSN2A3i)!OiX<7j27&9Aqs4e^Q9^Fu_IlO zVvJD*txFy*y+I7*{;nu&l!1uzk>?Z_M*y4{#56F`7$1NX5gN!LIyD3RC=%?ywTVzaT4#gme_BRyK zi1G3H-NDyFn9Rw^na#%c&9|yI7vJ;0WEVL3_;M*_^nF93=P=n(*r8YGI&cLSS7GO^ zO-mIH5mo`dgY2v25_cu2J4a=dV2T~tWQEf?d~dEI(^VkSq84mN;QpZ!h1gMyUF+u{ z4QT_`mn5S8LSR&h7omCgfAPoO&B5Z?B0;4;e>M-J$QK}(b;{nbeYgBXmqnb$n2GM; zW||^}l{d?#%p$9k6b9e#&{hivQN4`<)s`pn{l9K|oJ3Qo2DQjml?a?mHiZr|-h$nK z45MM@veL4L$lV?~JXFgYvlVu}zwLNvo3A-2c@a(p6Wg~MMUYeBCH_YfABOtL^ zty3Si*to+#2I1lzh0&9O*{(89AdcE`q;8+Df9QYN{#1fN4jjEV^~zPhmz*1-QFgzN z+bk=maA%<+EGqXtXrFYW51*Wf0;d)|oGuG8u1(&*Dsw)HTCpsS>UM7<<1HQAw>LTM z4yf;F*QdOj9~9(uZ~S~dDInVS&rP=&@yZ#nl0&`dSz!;d1=+g-iVhBIf80t(D*(i% zLcG0T$})KHMnxA~dj&8Db&AF@QkAyM;k3)!`@QMPf?>qY-kwApkVEjDZVt1dY&;pY zqR3|pTWG+J?Ws(>8LIww0~HaC+f(8i-Qo&`J+X2}F0$x3@(la(Ay=($A&}?G1P^{a zNRmmh@z-7xOXj; zob@sWx+3K*Mj+Wn%&)|GRC9|6*$pr05Q>aCjw)fUzbC#sev#eGEnm=Y++XD$)R57ry?NcI< zM<8MekxWouXt81R|4QxF+g)4=r1ZTnD}s}elJZ}##e1zr^4mO->YjD0hd&g2|3I-bJa^TaxDCUrFFJ2sHEuyC;outas_Cvz65PBq+%itVsVJesRjQv-?Y~)c>{!TIKr6g@{Eg ziSW!7P4-zMB65*#&!C({>gD|rs080hInCoNwA#W{<2-z!aaAnH@%n~SdAT0I(1&B zw~^`=YP=?L`8M8XeifX>wAfnq9&9&ZGj^CL*eC zGH8D~xNfRINC#K5;hgT9f^xGJ3jIah+1BnaUM*-NxE4#(Lf*uysc;LjM#~B$=F*eC za$VaI?2eq)zEw4Zet@~LR7UB2%TxkFj4dmhJlHT+jRREL$0o)+2iXMGJdYPS>MT=o zu>z?m-}(&`kM9E>-C%l8!ZbRGw&>GF#Fu>7*BFJ4|F&4p&Tj6l+&6#W7(zjdbb}i$ zoaz!F7t=x-E^XB?)IEE8wNm1{OoOV0=Le1r;N256G&q2=3&Qw(Zq$*N<<@<4epCvc znNhW8M@_mzm!V+ZD}CllmoR0Md-mAV)=Pcv9f1~J1ncfDawk_J{@T)CPEI<1``Pe6(KTw_2_5@agHM7x*1NZlW8@%Vk_{YV+f9~*ILV#@8RBtkPlfx% zQ2>w^85!yKxOjDp*?S^r7xs_X7c%4w#tAu#W)+!Ea{lpb2R(T5(0u+IG?r*uRRVy) zMZ))~5*5Y}_-!(ne$=Mj9fPi-U=>s61ADaFJGWi_G*QG#8aaC5$DB=A$d7TgiP_=>lT4;w(A4x-IRJPdg@^S2xCcJ)*ZXk9%CgB*n^MZ&x)nJMxRH-078)$-rjpA%3HxB?hqj zmN;kMKs?)`kW4v~?^5~uWs9UT&FVXQO7u$F7DV@3`1G(V@)LqC#y8UuGr1s}ijAA2 z;zBRzNmi{RZ~p5&jpnTISo*3Bgd zlD_mD9@^Nrdfkz)>iCb`e^!u#z-3KHoAoinUTkapUq@E~4|gBN)#+xsPK{w=YH|+K zCpRXhySt{&IW;wHP9J7+Om}z9^rj}KnVEe5ULTy#onQQa`8?kzz8(tuE&#NK`j%Nr z1Z=pQFd+=oBVlM}Cf*rAn9Ghq+dHyibF(*@cOfIfSFJWzW7SH-Gm?OLZf35^MZRVM zu%%IcT$CIaOMW?0H&v`$qJ!DdfJK~65IKTe%hPfS$`!fN#+($szIQzu#r#z^Tz8-C z*cBqt`!0rhu(=`4U@(`Vw28fpU(FmiC;!kH{TUPSG86 z3hX3Ds*a1NcF`t@Ja6}P{+shGWO;Az;HN4@z^A?7U_&o&k;%20PiNWN(%V5R)qjT2 zgh5D{OincWHX>qdczEO%gS@Ya(wf>t+L3C-f+DJH5oG7$5IT!LWuQ{u6~m;hH6Xwa z_}O5r^mM&sEc{eer4$%wRGHHihB>xzRm&(oDO_wemY0|QO79;*q;-!wE6AkDRcNI} zuED{Os-Q-^?zJ*Uvhw*~aIy;X-LCuvgK6N;3|6V>+-LUM}EF(EL3m6?<~lhP9{+PA|cxJGuOy&CQ@DRZBz1^NWkFvsU@Eb0;UK7f({@bX$yY!=_L10Wh&sxB^ys z^V(0Fnh4C!Iz_`eWl)bQ`zU?pQ@g#A>D1qy*s1yI%J2{h5+=02)W%-An3&g~Ks+~C z<-YdSkT;m9E3ZBgsH1A#gvv2b^lRyZ4sxXD6#W%Bj1yo`PT%~mPB_y70v*A4S@aj( z3{)@w5|F609(PN$o*|Fu+$~KIznHYdb=vBWlpN}P-JY+VK#urA=WNuh0Y4JwX zLQ#-8!R>1ERpgUeBL0G3O|%_bK@voBW1XHR_ddQpJEo@SpUjn<79@^}cTMAK8R*ke zokQrfIxHmkpW{cpgFTH{<@3eAx-8bQ*1A**d^)@}8nJyUDwesg!2wY8q%nK4-d+5< z@AS$h+fL=+Kmk0l+5pNNI5jsXRy_B|4zc3Fyr1V=%5V}EhF)&kA)|H9H_~0erhgn4 zU~+U)oz`3bte8G`+rRzeU*l3Io>!axO{3)Z7}-p0Fi4CsT^5)FZoV}ROuz4laK8^x0b<2bW0Jma3@xudx@tT|a(;WT~OcCbPVkSjV1c09=(R2c#FmZNvjLu=-CITft@Cqq# znoK%(%=ie9f!TqxD_Gf)(jaACfR85aKx~i0>WNIs!n@UumSdA9&r>qbX#s#&3IVvb z#a{lKI8stk!2`lU2X2CZT#h}Ebh;@!-sje*17@@ja6baJoyO4^=Ze?@z!Dr(gxD&D`xa62Y z=x5UkfC(y`2aHOPY92Y1^Dg|pF z+uV>?p?(sBpf8ErXfCC@z?#SHP%(WKuvw5m*&FeO&2WRpvL2sA%HA*mGI;AdVt`C_ zYGEOX!V8Rb*!Gv{-Sv_$25Gf3kG@cS5j#^rdyXo~ZKz`z4JF){tsY%KpGGS&2Y;ci zTG>l^exuCNI8nJVpE$jWo5XFKS4Dl)cw;*CeJWn|ey@a!`4!j&?p(tN;6T4z#C*N# zaEfabS(5}erR4cX?Bh6;Dten-1OJwnFF=cNs?NFY(ZH;}7jyRy=R?$g&a}~ z;Ct>E#zxH&Hf?(r*D`?>R-b%IMKH#m!Xz^f|3#}+wUKSVJ!irNbAIKH8L#)_<3@%r z1)q}cE2mgMi}j{ZNprRmUOQep|9nMs`olS+5f?^mr#AeV<04Q;W&72(xgg4s1ZngT zlUo5%S7U;SF&6SzW*;S9utMbr1Bp}xiPY}aD-OSJwA<@2Uz7L`(?V%doVt}e2z$g! z#R#)OV2uufbbEWKrtO5Gkq~^y40@ax^2CPMupXlVhwh~NS;CsD<_%s@+Yh$_K?T++ z<5HdN;n0|6YiI=!mfHG0R$U@OU4jTVuc(e;0Qrs+D)IZ>sHq=T*%rS7J6-rd9B(Ez zVb7>9`T{!J2ry5?CVl9Z`;8^7EJiAg-QVR>ps6@_w3j!B|!`_}?$ro(ZCNv=7&Jz}R zmj-WUaU9Q=ugmg}eynq8Pm*x#hS~0@@+hdOuKF|S&MJ51r9gzKl!V{HyoAE8P_CV1 zBd=d%aV~q&?Y>{}G~(Ix{qq5vaAf#GBmLO8BbgeW8^cKy=4THg9D$um#XQfPHTj(K zGADL$kqkzRgyn>g_rc<=Q*;24pf)|Rbf+jW`~8Yvj}L1#GHOLp!;uDoHxm7Vn`Bs5 zYjMPT?Sl?PxyLowJR|tyn3J?$#h;?L^=wwl1y*#4th}!b3{-1$7(mketW-twhTIC4 z99l61jNE4CO7+QEqyj~~$0#?iE5pgn=RTTjps#dlY^IASFxHPpAZb~Yd91ZT#8XI& z$}t`{6=4rt021q;scMf{mS62eBgII15n1UiN|GMS3WlpkbI}T!qQrG^$EJ~#=dJVL zJM1L8_l5GfU|kMXNH=Z;C61b-oLos>WT6P;baJiX{jUmB2yP}F9G9qx0A1cOCtr8+ zY$CVQ0|p`Vsa?MT!xKNfNl>heHA72Ff%$fD?f6GyY4Uck;5>XnaV|wvLl~OA&b9Ne zM9XZ@L>c{?g*huwp^)|m@|S+$RJsr1lQh4C)>ja_diWG0@DU^&1eQ;Djv_5zQjwd` zT%~OmE;7~6AcYK4?lujk*JFd(y<=fHzSyALd^J3K0eKiHq*!a>jLG{6s*wxm9=YF{ zMog>ib2ur4^X>H6jK^c(E}__&n6Cy`aR93bKQBJ1o8JtT`2bxtV1e+;SEVOr6YN?7daNq~96ywo~5>JmV^(Q=h zEa`Pg`w|>L49ak+*X-mSBG( zs4m?k_{`9;>lB!~>S#9Wyu9B|rf=!aGi#5i*IxbmI?KjHb0_^WNOpfaykM)DwkR2| z=z~g;PPF+%vT_OeVA1rT)wEk}g1SVUIwz(W62kd62tVg{_lOm+N2DhHbm%il%|)CV z`{m%w{Rycw=6~Fn^E;kYW7A)2_}-tFil98snFf)Y#jVjHk-i(^N`tN50~6NBCcIDpK&I88 zlx;9ll@$qn_?@f@2L4Ef{sW?h6>2ARhp=>_v2=#ei##FO3YIdF)(SxCHdA7)KEMSY4tUNDg;fPhH&$)&DXwf~ z!X!J&Bs&J+`!zeplFt`Zp z?gARg;J@6Ij^Ln3&Iowon}M_-jTdHl9n?WTkUIy55K~R+tLB!exuuAohfmM{`dH>Q z;M@kaDWk~SYrRcY#+si>i6witzS)-CZ#r!iT+gDIDSv^3R~BlDR=D%~Hi39MvP~4- zP7|C-^Fl~az@t#$iLq>>ed6@sOI&rDVi8sgGsA@=KKhdnI)IrdudWrt`cWzuUzNf_ zwki;aThMCp6nHdMe=S2f9-<1pi>7t=7h(A#W=o=Vvthm&buUv2734@v$GR`Vby&`A zu%C~Td}g8`m{KilC?PO8;M;L>l(RMBX_hdYTF43dISc!FI9`4nv+8>+u&Javq>iv( zlKLf!O^eS`>Lkn|okL4y*UvU3zBM~4uc*Pd^?G7pIqP4BktFl0uijDVW3>K}=JTBK z>LX9wqfScXffMTpTmIWD?>CD!j&Z*hn5qF%mV z3tI|_q>+qG+d)4}j-~hmb9f@hbvF$fpo3r=+dL|Eid(zoT1KLl`pxVnojd)JdTp5o zy3|)+xpIx-VwyxsOUt^l%jgsePnNYqlcn*ioox-oO^G7@48g%?Tluxjz=7tq4lk;( zKhTf7cAs)U^;%e|F5$cyH+d? z>rJ3jiq>ONdaoyX9){^z1Dy_Cuz{)nf?9M8W{3f&T2K8MDhmhj*QNBrCCiDF@e7ue zq>_Bz?f& za?eAt9(jHiv~?lc()(x1^LabJte*JQ8CBkwW>I?DL2G{8hS!8<2n z>}t&x(D1L!TZ{;~mv@}kgAk@_Y)4KOL0}C$trHe8`;n!TpMvwPuKKbxRor6}&%kFCuQbz? zq(}HR(%gn%PyIeXB%f1_Tfsu`#pf5#D!DmPQHYiMY?2Nq)?_MEmXSb&^>H5 z&*haq-+IwP)F*VDj~DsCi}M&xp7GqhEg>etyfgY(IXW?OZ_n2`h*nb6Idt1Us((GB z!;X7vj=#S(B34_Zia1r|O#6*ANs=8ebus@T{RM{M?mG~^A9p;AX>T%|U}UFjX(gF$ z6|r{orA;0C+Q+3Yhta6o_nK4qU@0!_PKF)lDsksX=}G2stgDqtgR^Al*kKra6p);J zH(t-S9j>%7#x&>sR7H~m<<8fH4CoIxm*3W?#LcTI~pLR z&Jx|nTCK?*&IH70ab?`2pLkO8%uc`Zr6Q0>TVV0Q+Zup`A9c-nqLSX|!r1B%n?)E#S#m zg$w@mr^+_mo4xsDzmQ~YS1A~C#HZS-ug1XV{KUZPmtbjzQN-!6gTe;K%55kYi6#T z3}ce;9<6p4;A4|ba1%#Ed-UOfBfyAHgXOtEXjnVbxsUJacj~$I&94(?b6e?XQBHKx z=m;1txX;SqhQO1_$7M0Jf_`qDdgWR5e#VCT@{p~?g5cx4A}8W?lr^bEDg2=5{!<;o z+Lp1I=3`2wh`|UF#w6p9!5@RmlB#TWhWI+)cJK(;?P0gqKKcIlG94e1?7MB6X~0(4 zEGYD)6ULiLV8E_F)2}KN82I%H@ftKU#3o2#t0g>V0&X5R6Y898=-WTk73MUYUZS4P z=dNV1W<@!Yvuy|s&7Wz;2hG6n&xyY2Z?{vJbDsm)qUKK%de_Oyr zx1HX%A3mY^Q6Nc$=!rA-0PfGQKRcS=&%JIvK?LmuVgCzQO;_Y8O?PKmfaKBLb0 z-5%dBMCa3sN3=@-9{vY?*if2g*Lo0K@Y?tf%`T8(*2S7x50e!2HQScnYxCWyfsHz` zjz_TxhS6R^ySWV=qT$3N(Qu|Ig05~MKsp{OjF|L4Wy1x-fB7CDxRZdr7T_jpNG!Zw zl^_lGC!pTwj$Mh|9B3yKT2i)Yjd8)P*F@!Y5Swh10wR5Hqc50{!D%_R#ifPz`x*6m zQSDFIqsKWh|Nf|vM)$A!uYsKEW~&RecaE(y?HwQ5!@=t`yEg&U7xAK$sNVIRU5A0a zl^+SV`m*q5wlwoim6C^yze>B=_(i%yXy$VZ_`c@xZv}oqXlI-8u&9lgN z^~eM3+hW=zMK@}I3UtTs0<-TcLl6fF{dIvNR(^UWj$?}p{=M%>fg4LH3Rk6Y1T5=o3CmR><5gueikylCr%&{@CJe4OfwPqG_C zkF(!X=p#S!8Cq`j29Sm+*ECdK`t`gTXYjZxL!{NV+!y%=7L`2t) z&jGz3(8ur>>#h|Y(K>}SIy76-!*nEgE>}^Fq`>J-3Q=BbhJJ%ND|y=PK_15CF`QJV zuF_<98Ly^~EI%)@v&R#H%YB&|u)~W~>Z3fLY-4sMAOnh3eP_VHziRXi0vd=3Ei2P$ zK1UPhf>V;Ja&w`~45q^} z&@c>y2@`Um5}~L>8fBJDn$TG~o#7MTNmeTi!S{_s=gkaw_!3}Hx))v3(o-HYC&+`l9gjAD=Y*f6mxPAn zy9Zpb!EWUYGB-JUJdE|D%uk41r4Oqj*#pBu4_S`$l;WG%xggYY3 z|IB^kzK!@Oeo6Um|FQDX649E%DS`iFh}sjp!XnC=k)M&a+ut`XT0)}Y_}g&@%nwL} z{9%X9ho_i0S-x(1FNJ>V)&oY*bj(JWZkT#%h8p)ts^np(lEahLn^kC0y>mo0@2cB) zJ_?JFVz;fu+}RI(JI9~1Y+Rb;vwqb$((z+)X5gVe)7C_8LQDIFNcPovq4LeuwwCk{ z(zM&GJ_a=v57WkKyk|XO~0w4#KW`j@B^+fgnsD`qpwa=EKq7 zRJ@(xvbT6t_m`5&vbR`yGr#X|A!rbmHcR?!O_Kzpl@N}fH)##WV*uskgg4g?T%8#> zSQl-v5xhCNvYiXk-hO>$T}FAwMN%8q5wis0%M zb0fA$$1R7R(eK{u%mmEuQ(?ohvhbz$V<0@~i`vxRLS}Une%6t$&V-}>KAwcG;SEi* z9i)2iWBW_n7@HIrbZ|!Zl}UJP{2St%1H3#S34@?WLStCiSIxE2!gr(`C9DWzwldvTQVsvnFq&ZEa*?0P+#RmUV{_aOx@z^#a z&}^UX8Y!j66nOMFT9bI0hQ4ogjbbA_85*T4YJC`l##-F>PL!Sn#kIaoklAm_^U((W zNdjPeA5I;>s0g%ieG)AUnC_EbJe|7D|lV&~K`>X!lV3y>t6!I|~5{!Pq&{F|NNg4c3Zz3SogWxih zQ+XNmZ59SZ_oCa;4;JBF{cH&IwF9M^&$1Bm<$$=XspQJEPvn*&8U!D`xBLJ{{ z*r27>24vCNJonjmT7|PvG&%f_DFC%_1GJ_U+wv6Qu8W30quV z-~A;pFKBvYw(=ISJfuL!e*s7UIE8StON4q_9-h=#~yZ< z+-z1~WUX`nZpM)4h}~DEQRCqyKgyTKmhVxo@VEI}@JXbr>Ef>G{d$mEE#h3dAbonF z%v!a)kUWxx;D4g6*E?IP<|BNP>K5 z{gEeH$+#(DO&f8;&np#$!uN;|Lw_v*!3vOg!T`5$`wg|mYuTd#`l@RznHzP?QP%hA z{`dx378}jY;_Wx7A>rGC^NO5Z-f>@z$>Q;WRn}cYqq90kA`?ZCU=(cx^~Z4uu0)U5 zmMW_h*0NB!x$7=G?n^L^{SkOk-O7{6tHSI&?0?ULMjVqHJ}%`YBwg?n%jIg6Puyqa ztZ_F*QPK0F5M8g&X*uL4+2xk4Y_x4|V7vts7Zj95%_*wz_#5v|z4OKuy)1&QK`Nf4 zqlT%hv!n={RD@_b*n^1a-(E&$~MzcjaZnUebtK*Y|U`poq z!fW^C**J0CWgqfHv@A0Hj=QbruR8ypBnKXDetd}wYFoVs&XPe=!gQHwXgVJqb+_VoBPJ3&wj^Z9g6JTFiP> z{a_U%sjl0pHG%s^i7brhx0u$TiW~r} zpqY)VEFnM;<+t4Y}n6R}+Q#`s%o?mkESE*=yapS#4W0t1*k*4}#O)~n&qjTdb9uwj54?cCB;ZYX=c5pwL(-xHG@ z--*hVrms4eiq`z$MKS#eFsDx=HYs< zyL&4-V8gC%gsCs6b5oErWOWQM3!4v&GhX&H-p6&^xY56TTT5@ao4?*qS6xW;^LqDe zQhz$?w`(ieC%qU5G=>!Uiw3J4#DIb7eC8!255N7c|F+LM-83fV8%5(Kg>7Mg97sxE z&L4jur-?8<=pV0C)23MCU5^+`lCs;Rat)ne+Hc~}hUF1e)rdrWv{IWvB;_s6qCg^$ zs&amBV5-pY_>TT*m@19<^|~0VkC&{={jC1U422_L&OkorraB?UZxZ`+e*Uwsh89o$ zaKHYgO`h(Y;YQ8(1oNI)dbe$)uf@UQwHbYqwSFZO^tpp_`f`;@~FS0fUD8mtTkk$|S%HPW(` zr6EW1f?Lt|p-MO@%pY)i=!{O{;qBRH0!m;!BCcp&~FiHCBu>LGf5_ltuY`axVY@a_K$NGVqzFa;krE6a#mcCEDMu2KzK#nnvSX0I7RLunX&!6zZ{GvG zg?%{6qrQIrloCKPzMgnr-M0j3Ca%PK(^|hW*tyv@BV+XajWdh8~ zl#>XrQMDfokMINDGLpPg#RXe6a|E3eAQ>p|17ye_zz-eDcmRum-DUZNJ|H2UZN-4B zMF9XU=)`TAg)iio#Ryw~C+t!U;28-0zeAT;?^4!)vXtj@>y!3Vc;F(IO_To(=2h^= zO862=5B1ErX-{(R{PTI&y7e%XUo3px3AuKv+^GizS>TBn0>(Wmm=b;3`FS0$RsILJ z&eg7tU7J&e2GlKyO)j$ne(1 zynh6um2WF2(&94`Ws?0=bG&Wq@5j7lh%tM=AcMy9njr$n4u%>Tw&=isQ$iTf^GqCX z*-&P9VG>XZol#tH0N+TA2fMO%S)&d&YPrLqqRQS$>R3RDJ^LQ?tpEF-P0igWG~i1` L5vouLF@yaF`QC3= diff --git a/vendor/github.com/exoscale/egoscale/instance_groups.go b/vendor/github.com/exoscale/egoscale/instance_groups.go deleted file mode 100644 index 52bffba9a..000000000 --- a/vendor/github.com/exoscale/egoscale/instance_groups.go +++ /dev/null @@ -1,71 +0,0 @@ -package egoscale - -// InstanceGroup represents a group of VM -type InstanceGroup struct { - Account string `json:"account,omitempty" doc:"the account owning the instance group"` - Created string `json:"created,omitempty" doc:"time and date the instance group was created"` - ID *UUID `json:"id,omitempty" doc:"the id of the instance group"` - Name string `json:"name,omitempty" doc:"the name of the instance group"` -} - -// ListRequest builds the ListInstanceGroups request -func (ig InstanceGroup) ListRequest() (ListCommand, error) { - req := &ListInstanceGroups{ - ID: ig.ID, - Name: ig.Name, - } - - return req, nil -} - -// CreateInstanceGroup creates a VM group -type CreateInstanceGroup struct { - Name string `json:"name" doc:"the name of the instance group"` - _ bool `name:"createInstanceGroup" description:"Creates a vm group"` -} - -// Response returns the struct to unmarshal -func (CreateInstanceGroup) Response() interface{} { - return new(InstanceGroup) -} - -// UpdateInstanceGroup updates a VM group -type UpdateInstanceGroup struct { - ID *UUID `json:"id" doc:"Instance group ID"` - Name string `json:"name,omitempty" doc:"new instance group name"` - _ bool `name:"updateInstanceGroup" description:"Updates a vm group"` -} - -// Response returns the struct to unmarshal -func (UpdateInstanceGroup) Response() interface{} { - return new(InstanceGroup) -} - -// DeleteInstanceGroup deletes a VM group -type DeleteInstanceGroup struct { - ID *UUID `json:"id" doc:"the ID of the instance group"` - _ bool `name:"deleteInstanceGroup" description:"Deletes a vm group"` -} - -// Response returns the struct to unmarshal -func (DeleteInstanceGroup) Response() interface{} { - return new(BooleanResponse) -} - -//go:generate go run generate/main.go -interface=Listable ListInstanceGroups - -// ListInstanceGroups lists VM groups -type ListInstanceGroups struct { - ID *UUID `json:"id,omitempty" doc:"List instance groups by ID"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"List instance groups by name"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - _ bool `name:"listInstanceGroups" description:"Lists vm groups"` -} - -// ListInstanceGroupsResponse represents a list of instance groups -type ListInstanceGroupsResponse struct { - Count int `json:"count"` - InstanceGroup []InstanceGroup `json:"instancegroup"` -} diff --git a/vendor/github.com/exoscale/egoscale/instancegroups_response.go b/vendor/github.com/exoscale/egoscale/instancegroups_response.go deleted file mode 100644 index 90fc1dbac..000000000 --- a/vendor/github.com/exoscale/egoscale/instancegroups_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListInstanceGroups) Response() interface{} { - return new(ListInstanceGroupsResponse) -} - -// ListRequest returns itself -func (ls *ListInstanceGroups) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListInstanceGroups) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListInstanceGroups) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListInstanceGroups) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListInstanceGroupsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListInstanceGroupsResponse was expected, got %T", resp)) - return - } - - for i := range items.InstanceGroup { - if !callback(&items.InstanceGroup[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/isos.go b/vendor/github.com/exoscale/egoscale/isos.go deleted file mode 100644 index d9a0ace82..000000000 --- a/vendor/github.com/exoscale/egoscale/isos.go +++ /dev/null @@ -1,94 +0,0 @@ -package egoscale - -// ISO represents an attachable ISO disc -type ISO Template - -// ResourceType returns the type of the resource -func (ISO) ResourceType() string { - return "ISO" -} - -// ListRequest produces the ListIsos command. -func (iso ISO) ListRequest() (ListCommand, error) { - req := &ListISOs{ - ID: iso.ID, - Name: iso.Name, - ZoneID: iso.ZoneID, - } - if iso.Bootable { - *req.Bootable = true - } - if iso.IsFeatured { - req.IsoFilter = "featured" - } - if iso.IsPublic { - *req.IsPublic = true - } - if iso.IsReady { - *req.IsReady = true - } - - for i := range iso.Tags { - req.Tags = append(req.Tags, iso.Tags[i]) - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListISOs - -// ListISOs represents the list all available ISO files request -type ListISOs struct { - _ bool `name:"listIsos" description:"Lists all available ISO files."` - Bootable *bool `json:"bootable,omitempty" doc:"True if the ISO is bootable, false otherwise"` - ID *UUID `json:"id,omitempty" doc:"List ISO by id"` - IsoFilter string `json:"isofilter,omitempty" doc:"Possible values are \"featured\", \"self\", \"selfexecutable\",\"sharedexecutable\",\"executable\", and \"community\". * featured : templates that have been marked as featured and public. * self : templates that have been registered or created by the calling user. * selfexecutable : same as self, but only returns templates that can be used to deploy a new VM. * sharedexecutable : templates ready to be deployed that have been granted to the calling user by another user. * executable : templates that are owned by the calling user, or public templates, that can be used to deploy a VM. * community : templates that have been marked as public but not featured. * all : all templates (only usable by admins)."` - IsPublic *bool `json:"ispublic,omitempty" doc:"True if the ISO is publicly available to all users, false otherwise."` - IsReady *bool `json:"isready,omitempty" doc:"True if this ISO is ready to be deployed"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"List all isos by name"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - ShowRemoved *bool `json:"showremoved,omitempty" doc:"Show removed ISOs as well"` - Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"The ID of the zone"` -} - -// ListISOsResponse represents a list of ISO files -type ListISOsResponse struct { - Count int `json:"count"` - ISO []ISO `json:"iso"` -} - -// AttachISO represents the request to attach an ISO to a virtual machine. -type AttachISO struct { - _ bool `name:"attachIso" description:"Attaches an ISO to a virtual machine."` - ID *UUID `json:"id" doc:"the ID of the ISO file"` - VirtualMachineID *UUID `json:"virtualmachineid" doc:"the ID of the virtual machine"` -} - -// Response returns the struct to unmarshal -func (AttachISO) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (AttachISO) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// DetachISO represents the request to detach an ISO to a virtual machine. -type DetachISO struct { - _ bool `name:"detachIso" description:"Detaches any ISO file (if any) currently attached to a virtual machine."` - VirtualMachineID *UUID `json:"virtualmachineid" doc:"The ID of the virtual machine"` -} - -// Response returns the struct to unmarshal -func (DetachISO) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DetachISO) AsyncResponse() interface{} { - return new(VirtualMachine) -} diff --git a/vendor/github.com/exoscale/egoscale/isos_response.go b/vendor/github.com/exoscale/egoscale/isos_response.go deleted file mode 100644 index 2faa45a88..000000000 --- a/vendor/github.com/exoscale/egoscale/isos_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListISOs) Response() interface{} { - return new(ListISOsResponse) -} - -// ListRequest returns itself -func (ls *ListISOs) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListISOs) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListISOs) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListISOs) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListISOsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListISOsResponse was expected, got %T", resp)) - return - } - - for i := range items.ISO { - if !callback(&items.ISO[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/jobstatustype_string.go b/vendor/github.com/exoscale/egoscale/jobstatustype_string.go deleted file mode 100644 index 298561608..000000000 --- a/vendor/github.com/exoscale/egoscale/jobstatustype_string.go +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by "stringer -type JobStatusType"; DO NOT EDIT. - -package egoscale - -import "strconv" - -const _JobStatusType_name = "PendingSuccessFailure" - -var _JobStatusType_index = [...]uint8{0, 7, 14, 21} - -func (i JobStatusType) String() string { - if i < 0 || i >= JobStatusType(len(_JobStatusType_index)-1) { - return "JobStatusType(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _JobStatusType_name[_JobStatusType_index[i]:_JobStatusType_index[i+1]] -} diff --git a/vendor/github.com/exoscale/egoscale/macaddress.go b/vendor/github.com/exoscale/egoscale/macaddress.go deleted file mode 100644 index 3c1dcaea4..000000000 --- a/vendor/github.com/exoscale/egoscale/macaddress.go +++ /dev/null @@ -1,63 +0,0 @@ -package egoscale - -import ( - "encoding/json" - "fmt" - "net" -) - -// MACAddress is a nicely JSON serializable net.HardwareAddr -type MACAddress net.HardwareAddr - -// String returns the MAC address in standard format -func (mac MACAddress) String() string { - return (net.HardwareAddr)(mac).String() -} - -// MAC48 builds a MAC-48 MACAddress -func MAC48(a, b, c, d, e, f byte) MACAddress { - m := make(MACAddress, 6) - m[0] = a - m[1] = b - m[2] = c - m[3] = d - m[4] = e - m[5] = f - return m -} - -// UnmarshalJSON unmarshals the raw JSON into the MAC address -func (mac *MACAddress) UnmarshalJSON(b []byte) error { - var addr string - if err := json.Unmarshal(b, &addr); err != nil { - return err - } - hw, err := ParseMAC(addr) - if err != nil { - return err - } - - *mac = make(MACAddress, 6) - copy(*mac, hw) - return nil -} - -// MarshalJSON converts the MAC Address to a string representation -func (mac MACAddress) MarshalJSON() ([]byte, error) { - return []byte(fmt.Sprintf("%q", mac.String())), nil -} - -// ParseMAC converts a string into a MACAddress -func ParseMAC(s string) (MACAddress, error) { - hw, err := net.ParseMAC(s) - return (MACAddress)(hw), err -} - -// MustParseMAC acts like ParseMAC but panics if in case of an error -func MustParseMAC(s string) MACAddress { - mac, err := ParseMAC(s) - if err != nil { - panic(err) - } - return mac -} diff --git a/vendor/github.com/exoscale/egoscale/network_offerings.go b/vendor/github.com/exoscale/egoscale/network_offerings.go deleted file mode 100644 index 989d5871f..000000000 --- a/vendor/github.com/exoscale/egoscale/network_offerings.go +++ /dev/null @@ -1,91 +0,0 @@ -package egoscale - -// NetworkOffering corresponds to the Compute Offerings -type NetworkOffering struct { - Availability string `json:"availability,omitempty" doc:"availability of the network offering"` - ConserveMode bool `json:"conservemode,omitempty" doc:"true if network offering is ip conserve mode enabled"` - Created string `json:"created,omitempty" doc:"the date this network offering was created"` - Details map[string]string `json:"details,omitempty" doc:"additional key/value details tied with network offering"` - DisplayText string `json:"displaytext,omitempty" doc:"an alternate display text of the network offering."` - EgressDefaultPolicy bool `json:"egressdefaultpolicy,omitempty" doc:"true if guest network default egress policy is allow; false if default egress policy is deny"` - GuestIPType string `json:"guestiptype,omitempty" doc:"guest type of the network offering, can be Shared or Isolated"` - ID *UUID `json:"id,omitempty" doc:"the id of the network offering"` - IsDefault bool `json:"isdefault,omitempty" doc:"true if network offering is default, false otherwise"` - IsPersistent bool `json:"ispersistent,omitempty" doc:"true if network offering supports persistent networks, false otherwise"` - MaxConnections int `json:"maxconnections,omitempty" doc:"maximum number of concurrents connections to be handled by lb"` - Name string `json:"name,omitempty" doc:"the name of the network offering"` - NetworkRate int `json:"networkrate,omitempty" doc:"data transfer rate in megabits per second allowed."` - Service []Service `json:"service,omitempty" doc:"the list of supported services"` - ServiceOfferingID *UUID `json:"serviceofferingid,omitempty" doc:"the ID of the service offering used by virtual router provider"` - SpecifyIPRanges bool `json:"specifyipranges,omitempty" doc:"true if network offering supports specifying ip ranges, false otherwise"` - SpecifyVlan bool `json:"specifyvlan,omitempty" doc:"true if network offering supports vlans, false otherwise"` - State string `json:"state,omitempty" doc:"state of the network offering. Can be Disabled/Enabled/Inactive"` - SupportsStrechedL2Subnet bool `json:"supportsstrechedl2subnet,omitempty" doc:"true if network offering supports network that span multiple zones"` - Tags string `json:"tags,omitempty" doc:"the tags for the network offering"` - TrafficType string `json:"traffictype,omitempty" doc:"the traffic type for the network offering, supported types are Public, Management, Control, Guest, Vlan or Storage."` -} - -// ListRequest builds the ListNetworkOfferings request -// -// This doesn't take into account the IsDefault flag as the default value is true. -func (no NetworkOffering) ListRequest() (ListCommand, error) { - req := &ListNetworkOfferings{ - Availability: no.Availability, - ID: no.ID, - Name: no.Name, - State: no.State, - TrafficType: no.TrafficType, - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListNetworkOfferings - -// ListNetworkOfferings represents a query for network offerings -type ListNetworkOfferings struct { - Availability string `json:"availability,omitempty" doc:"the availability of network offering. Default value is Required"` - DisplayText string `json:"displaytext,omitempty" doc:"list network offerings by display text"` - GuestIPType string `json:"guestiptype,omitempty" doc:"list network offerings by guest type: Shared or Isolated"` - ID *UUID `json:"id,omitempty" doc:"list network offerings by id"` - IsDefault *bool `json:"isdefault,omitempty" doc:"true if need to list only default network offerings. Default value is false"` - IsTagged *bool `json:"istagged,omitempty" doc:"true if offering has tags specified"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"list network offerings by name"` - NetworkID *UUID `json:"networkid,omitempty" doc:"the ID of the network. Pass this in if you want to see the available network offering that a network can be changed to."` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - SourceNATSupported *bool `json:"sourcenatsupported,omitempty" doc:"true if need to list only netwok offerings where source nat is supported, false otherwise"` - SpecifyIPRanges *bool `json:"specifyipranges,omitempty" doc:"true if need to list only network offerings which support specifying ip ranges"` - SpecifyVlan *bool `json:"specifyvlan,omitempty" doc:"the tags for the network offering."` - State string `json:"state,omitempty" doc:"list network offerings by state"` - SupportedServices []Service `json:"supportedservices,omitempty" doc:"list network offerings supporting certain services"` - Tags string `json:"tags,omitempty" doc:"list network offerings by tags"` - TrafficType string `json:"traffictype,omitempty" doc:"list by traffic type"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"list network offerings available for network creation in specific zone"` - _ bool `name:"listNetworkOfferings" description:"Lists all available network offerings."` -} - -// ListNetworkOfferingsResponse represents a list of service offerings -type ListNetworkOfferingsResponse struct { - Count int `json:"count"` - NetworkOffering []NetworkOffering `json:"networkoffering"` -} - -// UpdateNetworkOffering represents a modification of a network offering -type UpdateNetworkOffering struct { - Availability string `json:"availability,omitempty" doc:"the availability of network offering. Default value is Required for Guest Virtual network offering; Optional for Guest Direct network offering"` - DisplayText string `json:"displaytext,omitempty" doc:"the display text of the network offering"` - ID *UUID `json:"id,omitempty" doc:"the id of the network offering"` - KeepAliveEnabled *bool `json:"keepaliveenabled,omitempty" doc:"if true keepalive will be turned on in the loadbalancer. At the time of writing this has only an effect on haproxy; the mode http and httpclose options are unset in the haproxy conf file."` - MaxConnections int `json:"maxconnections,omitempty" doc:"maximum number of concurrent connections supported by the network offering"` - Name string `json:"name,omitempty" doc:"the name of the network offering"` - SortKey int `json:"sortkey,omitempty" doc:"sort key of the network offering, integer"` - State string `json:"state,omitempty" doc:"update state for the network offering"` - _ bool `name:"updateNetworkOffering" description:"Updates a network offering."` -} - -// Response returns the struct to unmarshal -func (UpdateNetworkOffering) Response() interface{} { - return new(NetworkOffering) -} diff --git a/vendor/github.com/exoscale/egoscale/networkofferings_response.go b/vendor/github.com/exoscale/egoscale/networkofferings_response.go deleted file mode 100644 index 656de7253..000000000 --- a/vendor/github.com/exoscale/egoscale/networkofferings_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListNetworkOfferings) Response() interface{} { - return new(ListNetworkOfferingsResponse) -} - -// ListRequest returns itself -func (ls *ListNetworkOfferings) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListNetworkOfferings) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListNetworkOfferings) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListNetworkOfferings) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListNetworkOfferingsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListNetworkOfferingsResponse was expected, got %T", resp)) - return - } - - for i := range items.NetworkOffering { - if !callback(&items.NetworkOffering[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/networks.go b/vendor/github.com/exoscale/egoscale/networks.go deleted file mode 100644 index 4d6ce12e3..000000000 --- a/vendor/github.com/exoscale/egoscale/networks.go +++ /dev/null @@ -1,229 +0,0 @@ -package egoscale - -import ( - "net" - "net/url" -) - -// Network represents a network -// -// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/networking_and_traffic.html -type Network struct { - Account string `json:"account,omitempty" doc:"the owner of the network"` - AccountID *UUID `json:"accountid,omitempty" doc:"the owner ID of the network"` - BroadcastDomainType string `json:"broadcastdomaintype,omitempty" doc:"Broadcast domain type of the network"` - BroadcastURI string `json:"broadcasturi,omitempty" doc:"broadcast uri of the network."` - CanUseForDeploy bool `json:"canusefordeploy,omitempty" doc:"list networks available for vm deployment"` - CIDR *CIDR `json:"cidr,omitempty" doc:"Cloudstack managed address space, all CloudStack managed VMs get IP address from CIDR"` - DisplayText string `json:"displaytext,omitempty" doc:"the displaytext of the network"` - DNS1 net.IP `json:"dns1,omitempty" doc:"the first DNS for the network"` - DNS2 net.IP `json:"dns2,omitempty" doc:"the second DNS for the network"` - EndIP net.IP `json:"endip,omitempty" doc:"the ending IP address in the network IP range. Required for managed networks."` - Gateway net.IP `json:"gateway,omitempty" doc:"the network's gateway"` - ID *UUID `json:"id,omitempty" doc:"the id of the network"` - IP6CIDR *CIDR `json:"ip6cidr,omitempty" doc:"the cidr of IPv6 network"` - IP6Gateway net.IP `json:"ip6gateway,omitempty" doc:"the gateway of IPv6 network"` - IsDefault bool `json:"isdefault,omitempty" doc:"true if network is default, false otherwise"` - IsPersistent bool `json:"ispersistent,omitempty" doc:"list networks that are persistent"` - IsSystem bool `json:"issystem,omitempty" doc:"true if network is system, false otherwise"` - Name string `json:"name,omitempty" doc:"the name of the network"` - Netmask net.IP `json:"netmask,omitempty" doc:"the network's netmask"` - NetworkCIDR *CIDR `json:"networkcidr,omitempty" doc:"the network CIDR of the guest network configured with IP reservation. It is the summation of CIDR and RESERVED_IP_RANGE"` - NetworkDomain string `json:"networkdomain,omitempty" doc:"the network domain"` - NetworkOfferingAvailability string `json:"networkofferingavailability,omitempty" doc:"availability of the network offering the network is created from"` - NetworkOfferingConserveMode bool `json:"networkofferingconservemode,omitempty" doc:"true if network offering is ip conserve mode enabled"` - NetworkOfferingDisplayText string `json:"networkofferingdisplaytext,omitempty" doc:"display text of the network offering the network is created from"` - NetworkOfferingID *UUID `json:"networkofferingid,omitempty" doc:"network offering id the network is created from"` - NetworkOfferingName string `json:"networkofferingname,omitempty" doc:"name of the network offering the network is created from"` - PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"the physical network id"` - Related string `json:"related,omitempty" doc:"related to what other network configuration"` - ReservedIPRange string `json:"reservediprange,omitempty" doc:"the network's IP range not to be used by CloudStack guest VMs and can be used for non CloudStack purposes"` - RestartRequired bool `json:"restartrequired,omitempty" doc:"true network requires restart"` - Service []Service `json:"service,omitempty" doc:"the list of services"` - SpecifyIPRanges bool `json:"specifyipranges,omitempty" doc:"true if network supports specifying ip ranges, false otherwise"` - StartIP net.IP `json:"startip,omitempty" doc:"the beginning IP address in the network IP range. Required for managed networks."` - State string `json:"state,omitempty" doc:"state of the network"` - StrechedL2Subnet bool `json:"strechedl2subnet,omitempty" doc:"true if network can span multiple zones"` - SubdomainAccess bool `json:"subdomainaccess,omitempty" doc:"true if users from subdomains can access the domain level network"` - Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with network"` - TrafficType string `json:"traffictype,omitempty" doc:"the traffic type of the network"` - Type string `json:"type,omitempty" doc:"the type of the network"` - Vlan string `json:"vlan,omitemtpy" doc:"The vlan of the network. This parameter is visible to ROOT admins only"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"zone id of the network"` - ZoneName string `json:"zonename,omitempty" doc:"the name of the zone the network belongs to"` - ZonesNetworkSpans []Zone `json:"zonesnetworkspans,omitempty" doc:"If a network is enabled for 'streched l2 subnet' then represents zones on which network currently spans"` -} - -// ListRequest builds the ListNetworks request -func (network Network) ListRequest() (ListCommand, error) { - //TODO add tags support - req := &ListNetworks{ - ID: network.ID, - Keyword: network.Name, // this is a hack as listNetworks doesn't support to search by name. - PhysicalNetworkID: network.PhysicalNetworkID, - TrafficType: network.TrafficType, - Type: network.Type, - ZoneID: network.ZoneID, - } - - if network.CanUseForDeploy { - req.CanUseForDeploy = &network.CanUseForDeploy - } - if network.RestartRequired { - req.RestartRequired = &network.RestartRequired - } - - return req, nil -} - -// ResourceType returns the type of the resource -func (Network) ResourceType() string { - return "Network" -} - -// Service is a feature of a network -type Service struct { - Capability []ServiceCapability `json:"capability,omitempty"` - Name string `json:"name"` - Provider []ServiceProvider `json:"provider,omitempty"` -} - -// ServiceCapability represents optional capability of a service -type ServiceCapability struct { - CanChooseServiceCapability bool `json:"canchooseservicecapability"` - Name string `json:"name"` - Value string `json:"value"` -} - -// ServiceProvider represents the provider of the service -type ServiceProvider struct { - CanEnableIndividualService bool `json:"canenableindividualservice"` - DestinationPhysicalNetworkID *UUID `json:"destinationphysicalnetworkid"` - ID *UUID `json:"id"` - Name string `json:"name"` - PhysicalNetworkID *UUID `json:"physicalnetworkid"` - ServiceList []string `json:"servicelist,omitempty"` -} - -// CreateNetwork creates a network -type CreateNetwork struct { - DisplayText string `json:"displaytext,omitempty" doc:"the display text of the network"` // This field is required but might be empty - EndIP net.IP `json:"endip,omitempty" doc:"the ending IP address in the network IP range. Required for managed networks."` - EndIpv6 net.IP `json:"endipv6,omitempty" doc:"the ending IPv6 address in the IPv6 network range"` - Gateway net.IP `json:"gateway,omitempty" doc:"the gateway of the network. Required for Shared networks and Isolated networks when it belongs to VPC"` - IP6CIDR *CIDR `json:"ip6cidr,omitempty" doc:"the CIDR of IPv6 network, must be at least /64"` - IP6Gateway net.IP `json:"ip6gateway,omitempty" doc:"the gateway of the IPv6 network. Required for Shared networks and Isolated networks when it belongs to VPC"` - IsolatedPVlan string `json:"isolatedpvlan,omitempty" doc:"the isolated private vlan for this network"` - Name string `json:"name,omitempty" doc:"the name of the network"` // This field is required but might be empty - Netmask net.IP `json:"netmask,omitempty" doc:"the netmask of the network. Required for managed networks."` - NetworkDomain string `json:"networkdomain,omitempty" doc:"network domain"` - NetworkOfferingID *UUID `json:"networkofferingid" doc:"the network offering id"` - PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"the Physical Network ID the network belongs to"` - StartIP net.IP `json:"startip,omitempty" doc:"the beginning IP address in the network IP range. Required for managed networks."` - StartIpv6 net.IP `json:"startipv6,omitempty" doc:"the beginning IPv6 address in the IPv6 network range"` - Vlan string `json:"vlan,omitempty" doc:"the ID or VID of the network"` - ZoneID *UUID `json:"zoneid" doc:"the Zone ID for the network"` - _ bool `name:"createNetwork" description:"Creates a network"` -} - -// Response returns the struct to unmarshal -func (CreateNetwork) Response() interface{} { - return new(Network) -} - -func (req CreateNetwork) onBeforeSend(params url.Values) error { - // Those fields are required but might be empty - if req.Name == "" { - params.Set("name", "") - } - if req.DisplayText == "" { - params.Set("displaytext", "") - } - return nil -} - -// UpdateNetwork (Async) updates a network -type UpdateNetwork struct { - _ bool `name:"updateNetwork" description:"Updates a network"` - ChangeCIDR *bool `json:"changecidr,omitempty" doc:"Force update even if cidr type is different"` - DisplayText string `json:"displaytext,omitempty" doc:"the new display text for the network"` - EndIP net.IP `json:"endip,omitempty" doc:"the ending IP address in the network IP range. Required for managed networks."` - GuestVMCIDR *CIDR `json:"guestvmcidr,omitempty" doc:"CIDR for Guest VMs,Cloudstack allocates IPs to Guest VMs only from this CIDR"` - ID *UUID `json:"id" doc:"the ID of the network"` - Name string `json:"name,omitempty" doc:"the new name for the network"` - Netmask net.IP `json:"netmask,omitempty" doc:"the netmask of the network. Required for managed networks."` - NetworkDomain string `json:"networkdomain,omitempty" doc:"network domain"` - NetworkOfferingID *UUID `json:"networkofferingid,omitempty" doc:"network offering ID"` - StartIP net.IP `json:"startip,omitempty" doc:"the beginning IP address in the network IP range. Required for managed networks."` -} - -// Response returns the struct to unmarshal -func (UpdateNetwork) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (UpdateNetwork) AsyncResponse() interface{} { - return new(Network) -} - -// RestartNetwork (Async) updates a network -type RestartNetwork struct { - ID *UUID `json:"id" doc:"The id of the network to restart."` - Cleanup *bool `json:"cleanup,omitempty" doc:"If cleanup old network elements"` - _ bool `name:"restartNetwork" description:"Restarts the network; includes 1) restarting network elements - virtual routers, dhcp servers 2) reapplying all public ips 3) reapplying loadBalancing/portForwarding rules"` -} - -// Response returns the struct to unmarshal -func (RestartNetwork) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RestartNetwork) AsyncResponse() interface{} { - return new(Network) -} - -// DeleteNetwork deletes a network -type DeleteNetwork struct { - ID *UUID `json:"id" doc:"the ID of the network"` - Forced *bool `json:"forced,omitempty" doc:"Force delete a network. Network will be marked as 'Destroy' even when commands to shutdown and cleanup to the backend fails."` - _ bool `name:"deleteNetwork" description:"Deletes a network"` -} - -// Response returns the struct to unmarshal -func (DeleteNetwork) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DeleteNetwork) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -//go:generate go run generate/main.go -interface=Listable ListNetworks - -// ListNetworks represents a query to a network -type ListNetworks struct { - CanUseForDeploy *bool `json:"canusefordeploy,omitempty" doc:"List networks available for vm deployment"` - ID *UUID `json:"id,omitempty" doc:"List networks by id"` - IsSystem *bool `json:"issystem,omitempty" doc:"true If network is system, false otherwise"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"List networks by physical network id"` - RestartRequired *bool `json:"restartrequired,omitempty" doc:"List networks by restartRequired"` - SpecifyIPRanges *bool `json:"specifyipranges,omitempty" doc:"True if need to list only networks which support specifying ip ranges"` - SupportedServices []Service `json:"supportedservices,omitempty" doc:"List networks supporting certain services"` - Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"` - TrafficType string `json:"traffictype,omitempty" doc:"Type of the traffic"` - Type string `json:"type,omitempty" doc:"The type of the network. Supported values are: Isolated and Shared"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"The Zone ID of the network"` - _ bool `name:"listNetworks" description:"Lists all available networks."` -} - -// ListNetworksResponse represents the list of networks -type ListNetworksResponse struct { - Count int `json:"count"` - Network []Network `json:"network"` -} diff --git a/vendor/github.com/exoscale/egoscale/networks_response.go b/vendor/github.com/exoscale/egoscale/networks_response.go deleted file mode 100644 index 058890624..000000000 --- a/vendor/github.com/exoscale/egoscale/networks_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListNetworks) Response() interface{} { - return new(ListNetworksResponse) -} - -// ListRequest returns itself -func (ls *ListNetworks) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListNetworks) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListNetworks) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListNetworks) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListNetworksResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListNetworksResponse was expected, got %T", resp)) - return - } - - for i := range items.Network { - if !callback(&items.Network[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/nics.go b/vendor/github.com/exoscale/egoscale/nics.go deleted file mode 100644 index 10863113f..000000000 --- a/vendor/github.com/exoscale/egoscale/nics.go +++ /dev/null @@ -1,120 +0,0 @@ -package egoscale - -import ( - "net" -) - -// Nic represents a Network Interface Controller (NIC) -// -// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/networking_and_traffic.html#configuring-multiple-ip-addresses-on-a-single-nic -type Nic struct { - BroadcastURI string `json:"broadcasturi,omitempty" doc:"the broadcast uri of the nic"` - DeviceID *UUID `json:"deviceid,omitempty" doc:"device id for the network when plugged into the virtual machine"` - Gateway net.IP `json:"gateway,omitempty" doc:"the gateway of the nic"` - ID *UUID `json:"id,omitempty" doc:"the ID of the nic"` - IP6Address net.IP `json:"ip6address,omitempty" doc:"the IPv6 address of network"` - IP6CIDR *CIDR `json:"ip6cidr,omitempty" doc:"the cidr of IPv6 network"` - IP6Gateway net.IP `json:"ip6gateway,omitempty" doc:"the gateway of IPv6 network"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"the ip address of the nic"` - IsDefault bool `json:"isdefault,omitempty" doc:"true if nic is default, false otherwise"` - IsolationURI string `json:"isolationuri,omitempty" doc:"the isolation uri of the nic"` - MACAddress MACAddress `json:"macaddress,omitempty" doc:"true if nic is default, false otherwise"` - Netmask net.IP `json:"netmask,omitempty" doc:"the netmask of the nic"` - NetworkID *UUID `json:"networkid,omitempty" doc:"the ID of the corresponding network"` - NetworkName string `json:"networkname,omitempty" doc:"the name of the corresponding network"` - ReverseDNS []ReverseDNS `json:"reversedns,omitempty" doc:"the list of PTR record(s) associated with the virtual machine"` - SecondaryIP []NicSecondaryIP `json:"secondaryip,omitempty" doc:"the Secondary ipv4 addr of nic"` - TrafficType string `json:"traffictype,omitempty" doc:"the traffic type of the nic"` - Type string `json:"type,omitempty" doc:"the type of the nic"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"Id of the vm to which the nic belongs"` -} - -// ListRequest build a ListNics request from the given Nic -func (nic Nic) ListRequest() (ListCommand, error) { - req := &ListNics{ - VirtualMachineID: nic.VirtualMachineID, - NicID: nic.ID, - NetworkID: nic.NetworkID, - } - - return req, nil -} - -// NicSecondaryIP represents a link between NicID and IPAddress -type NicSecondaryIP struct { - ID *UUID `json:"id,omitempty" doc:"the ID of the secondary private IP addr"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"Secondary IP address"` - NetworkID *UUID `json:"networkid,omitempty" doc:"the ID of the network"` - NicID *UUID `json:"nicid,omitempty" doc:"the ID of the nic"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the ID of the vm"` -} - -//go:generate go run generate/main.go -interface=Listable ListNics - -// ListNics represents the NIC search -type ListNics struct { - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - NetworkID *UUID `json:"networkid,omitempty" doc:"list nic of the specific vm's network"` - NicID *UUID `json:"nicid,omitempty" doc:"the ID of the nic to to list IPs"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the ID of the vm"` - _ bool `name:"listNics" description:"list the vm nics IP to NIC"` -} - -// ListNicsResponse represents a list of templates -type ListNicsResponse struct { - Count int `json:"count"` - Nic []Nic `json:"nic"` -} - -// AddIPToNic (Async) represents the assignation of a secondary IP -type AddIPToNic struct { - NicID *UUID `json:"nicid" doc:"the ID of the nic to which you want to assign private IP"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"Secondary IP Address"` - _ bool `name:"addIpToNic" description:"Assigns secondary IP to NIC"` -} - -// Response returns the struct to unmarshal -func (AddIPToNic) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (AddIPToNic) AsyncResponse() interface{} { - return new(NicSecondaryIP) -} - -// RemoveIPFromNic (Async) represents a deletion request -type RemoveIPFromNic struct { - ID *UUID `json:"id" doc:"the ID of the secondary ip address to nic"` - _ bool `name:"removeIpFromNic" description:"Removes secondary IP from the NIC."` -} - -// Response returns the struct to unmarshal -func (RemoveIPFromNic) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RemoveIPFromNic) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// ActivateIP6 (Async) activates the IP6 on the given NIC -// -// Exoscale specific API: https://community.exoscale.ch/api/compute/#activateip6_GET -type ActivateIP6 struct { - NicID *UUID `json:"nicid" doc:"the ID of the nic to which you want to assign the IPv6"` - _ bool `name:"activateIp6" description:"Activate the IPv6 on the VM's nic"` -} - -// Response returns the struct to unmarshal -func (ActivateIP6) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (ActivateIP6) AsyncResponse() interface{} { - return new(Nic) -} diff --git a/vendor/github.com/exoscale/egoscale/nics_response.go b/vendor/github.com/exoscale/egoscale/nics_response.go deleted file mode 100644 index dcf960915..000000000 --- a/vendor/github.com/exoscale/egoscale/nics_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListNics) Response() interface{} { - return new(ListNicsResponse) -} - -// ListRequest returns itself -func (ls *ListNics) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListNics) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListNics) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListNics) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListNicsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListNicsResponse was expected, got %T", resp)) - return - } - - for i := range items.Nic { - if !callback(&items.Nic[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/oscategories_response.go b/vendor/github.com/exoscale/egoscale/oscategories_response.go deleted file mode 100644 index 985f875df..000000000 --- a/vendor/github.com/exoscale/egoscale/oscategories_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListOSCategories) Response() interface{} { - return new(ListOSCategoriesResponse) -} - -// ListRequest returns itself -func (ls *ListOSCategories) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListOSCategories) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListOSCategories) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListOSCategories) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListOSCategoriesResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListOSCategoriesResponse was expected, got %T", resp)) - return - } - - for i := range items.OSCategory { - if !callback(&items.OSCategory[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/publicipaddresses_response.go b/vendor/github.com/exoscale/egoscale/publicipaddresses_response.go deleted file mode 100644 index 2ee92bd7a..000000000 --- a/vendor/github.com/exoscale/egoscale/publicipaddresses_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListPublicIPAddresses) Response() interface{} { - return new(ListPublicIPAddressesResponse) -} - -// ListRequest returns itself -func (ls *ListPublicIPAddresses) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListPublicIPAddresses) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListPublicIPAddresses) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListPublicIPAddresses) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListPublicIPAddressesResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListPublicIPAddressesResponse was expected, got %T", resp)) - return - } - - for i := range items.PublicIPAddress { - if !callback(&items.PublicIPAddress[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/record_string.go b/vendor/github.com/exoscale/egoscale/record_string.go deleted file mode 100644 index b84303bb7..000000000 --- a/vendor/github.com/exoscale/egoscale/record_string.go +++ /dev/null @@ -1,16 +0,0 @@ -// Code generated by "stringer -type=Record"; DO NOT EDIT. - -package egoscale - -import "strconv" - -const _Record_name = "AAAAAALIASCNAMEHINFOMXNAPTRNSPOOLSPFSRVSSHFPTXTURL" - -var _Record_index = [...]uint8{0, 1, 5, 10, 15, 20, 22, 27, 29, 33, 36, 39, 44, 47, 50} - -func (i Record) String() string { - if i < 0 || i >= Record(len(_Record_index)-1) { - return "Record(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _Record_name[_Record_index[i]:_Record_index[i+1]] -} diff --git a/vendor/github.com/exoscale/egoscale/request.go b/vendor/github.com/exoscale/egoscale/request.go deleted file mode 100644 index 079c626c0..000000000 --- a/vendor/github.com/exoscale/egoscale/request.go +++ /dev/null @@ -1,405 +0,0 @@ -package egoscale - -import ( - "bytes" - "context" - "crypto/hmac" - "crypto/sha1" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/url" - "sort" - "strconv" - "strings" - "time" -) - -// Error formats a CloudStack error into a standard error -func (e ErrorResponse) Error() string { - return fmt.Sprintf("API error %s %d (%s %d): %s", e.ErrorCode, e.ErrorCode, e.CSErrorCode, e.CSErrorCode, e.ErrorText) -} - -// Error formats a CloudStack job response into a standard error -func (e BooleanResponse) Error() error { - if !e.Success { - return fmt.Errorf("API error: %s", e.DisplayText) - } - - return nil -} - -func responseKey(key string) (string, bool) { - // XXX: addIpToNic, activateIp6, restorevmresponse are kind of special - var responseKeys = map[string]string{ - "addiptonicresponse": "addiptovmnicresponse", - "activateip6response": "activateip6nicresponse", - "restorevirtualmachineresponse": "restorevmresponse", - "updatevmaffinitygroupresponse": "updatevirtualmachineresponse", - } - - k, ok := responseKeys[key] - return k, ok -} - -func (client *Client) parseResponse(resp *http.Response, apiName string) (json.RawMessage, error) { - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - m := map[string]json.RawMessage{} - if err := json.Unmarshal(b, &m); err != nil { - return nil, err - } - - key := fmt.Sprintf("%sresponse", strings.ToLower(apiName)) - response, ok := m[key] - if !ok { - if resp.StatusCode >= 400 { - response, ok = m["errorresponse"] - } - - if !ok { - // try again with the special keys - value, ok := responseKey(key) - if ok { - key = value - } - - response, ok = m[key] - - if !ok { - return nil, fmt.Errorf("malformed JSON response %d, %q was expected.\n%s", resp.StatusCode, key, b) - } - } - } - - if resp.StatusCode >= 400 { - errorResponse := new(ErrorResponse) - if e := json.Unmarshal(response, errorResponse); e != nil && errorResponse.ErrorCode <= 0 { - return nil, fmt.Errorf("%d %s", resp.StatusCode, b) - } - return nil, errorResponse - } - - n := map[string]json.RawMessage{} - if err := json.Unmarshal(response, &n); err != nil { - return nil, err - } - - // list response may contain only one key - if len(n) > 1 || strings.HasPrefix(key, "list") { - return response, nil - } - - if len(n) == 1 { - for k := range n { - // boolean response and asyncjob result may also contain - // only one key - if k == "success" || k == "jobid" { - return response, nil - } - return n[k], nil - } - } - - return response, nil -} - -// asyncRequest perform an asynchronous job with a context -func (client *Client) asyncRequest(ctx context.Context, asyncCommand AsyncCommand) (interface{}, error) { - var err error - - resp := asyncCommand.AsyncResponse() - client.AsyncRequestWithContext( - ctx, - asyncCommand, - func(j *AsyncJobResult, e error) bool { - if e != nil { - err = e - return false - } - if j.JobStatus != Pending { - if r := j.Result(resp); r != nil { - err = r - } - return false - } - return true - }, - ) - return resp, err -} - -// SyncRequestWithContext performs a sync request with a context -func (client *Client) SyncRequestWithContext(ctx context.Context, command Command) (interface{}, error) { - body, err := client.request(ctx, command) - if err != nil { - return nil, err - } - - response := command.Response() - b, ok := response.(*BooleanResponse) - if ok { - m := make(map[string]interface{}) - if errUnmarshal := json.Unmarshal(body, &m); errUnmarshal != nil { - return nil, errUnmarshal - } - - b.DisplayText, _ = m["displaytext"].(string) - - if success, okSuccess := m["success"].(string); okSuccess { - b.Success = success == "true" - } - - if success, okSuccess := m["success"].(bool); okSuccess { - b.Success = success - } - - return b, nil - } - - if err := json.Unmarshal(body, response); err != nil { - errResponse := new(ErrorResponse) - if e := json.Unmarshal(body, errResponse); e == nil && errResponse.ErrorCode > 0 { - return errResponse, nil - } - return nil, err - } - - return response, nil -} - -// BooleanRequest performs the given boolean command -func (client *Client) BooleanRequest(command Command) error { - resp, err := client.Request(command) - if err != nil { - return err - } - - if b, ok := resp.(*BooleanResponse); ok { - return b.Error() - } - - panic(fmt.Errorf("command %q is not a proper boolean response. %#v", client.APIName(command), resp)) -} - -// BooleanRequestWithContext performs the given boolean command -func (client *Client) BooleanRequestWithContext(ctx context.Context, command Command) error { - resp, err := client.RequestWithContext(ctx, command) - if err != nil { - return err - } - - if b, ok := resp.(*BooleanResponse); ok { - return b.Error() - } - - panic(fmt.Errorf("command %q is not a proper boolean response. %#v", client.APIName(command), resp)) -} - -// Request performs the given command -func (client *Client) Request(command Command) (interface{}, error) { - ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) - defer cancel() - - return client.RequestWithContext(ctx, command) -} - -// RequestWithContext preforms a command with a context -func (client *Client) RequestWithContext(ctx context.Context, command Command) (interface{}, error) { - switch c := command.(type) { - case AsyncCommand: - return client.asyncRequest(ctx, c) - default: - return client.SyncRequestWithContext(ctx, command) - } -} - -// SyncRequest performs the command as is -func (client *Client) SyncRequest(command Command) (interface{}, error) { - ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) - defer cancel() - - return client.SyncRequestWithContext(ctx, command) -} - -// AsyncRequest performs the given command -func (client *Client) AsyncRequest(asyncCommand AsyncCommand, callback WaitAsyncJobResultFunc) { - ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) - defer cancel() - - client.AsyncRequestWithContext(ctx, asyncCommand, callback) -} - -// AsyncRequestWithContext preforms a request with a context -func (client *Client) AsyncRequestWithContext(ctx context.Context, asyncCommand AsyncCommand, callback WaitAsyncJobResultFunc) { - result, err := client.SyncRequestWithContext(ctx, asyncCommand) - if err != nil { - if !callback(nil, err) { - return - } - } - - jobResult, ok := result.(*AsyncJobResult) - if !ok { - callback(nil, fmt.Errorf("wrong type, AsyncJobResult was expected instead of %T", result)) - } - - // Successful response - if jobResult.JobID == nil || jobResult.JobStatus != Pending { - callback(jobResult, nil) - // without a JobID, the next requests will only fail - return - } - - for iteration := 0; ; iteration++ { - time.Sleep(client.RetryStrategy(int64(iteration))) - - req := &QueryAsyncJobResult{JobID: jobResult.JobID} - resp, err := client.SyncRequestWithContext(ctx, req) - if err != nil && !callback(nil, err) { - return - } - - result, ok := resp.(*AsyncJobResult) - if !ok { - if !callback(nil, fmt.Errorf("wrong type. AsyncJobResult expected, got %T", resp)) { - return - } - } - - if !callback(result, nil) { - return - } - } -} - -// Payload builds the HTTP request params from the given command -func (client *Client) Payload(command Command) (url.Values, error) { - params, err := prepareValues("", command) - if err != nil { - return nil, err - } - if hookReq, ok := command.(onBeforeHook); ok { - if err := hookReq.onBeforeSend(params); err != nil { - return params, err - } - } - params.Set("apikey", client.APIKey) - params.Set("command", client.APIName(command)) - params.Set("response", "json") - - if params.Get("expires") == "" && client.Expiration >= 0 { - params.Set("signatureversion", "3") - params.Set("expires", time.Now().Add(client.Expiration).Local().Format("2006-01-02T15:04:05-0700")) - } - - return params, nil -} - -// Sign signs the HTTP request and returns the signature as as base64 encoding -func (client *Client) Sign(params url.Values) (string, error) { - query := encodeValues(params) - query = strings.ToLower(query) - mac := hmac.New(sha1.New, []byte(client.apiSecret)) - _, err := mac.Write([]byte(query)) - if err != nil { - return "", err - } - - signature := base64.StdEncoding.EncodeToString(mac.Sum(nil)) - return signature, nil -} - -// request makes a Request while being close to the metal -func (client *Client) request(ctx context.Context, command Command) (json.RawMessage, error) { - params, err := client.Payload(command) - if err != nil { - return nil, err - } - signature, err := client.Sign(params) - if err != nil { - return nil, err - } - params.Add("signature", signature) - - method := "GET" - query := params.Encode() - url := fmt.Sprintf("%s?%s", client.Endpoint, query) - - var body io.Reader - // respect Internet Explorer limit of 2048 - if len(url) > 2048 { - url = client.Endpoint - method = "POST" - body = strings.NewReader(query) - } - - request, err := http.NewRequest(method, url, body) - if err != nil { - return nil, err - } - request = request.WithContext(ctx) - request.Header.Add("User-Agent", UserAgent) - - if method == "POST" { - request.Header.Add("Content-Type", "application/x-www-form-urlencoded") - request.Header.Add("Content-Length", strconv.Itoa(len(query))) - } - - resp, err := client.HTTPClient.Do(request) - if err != nil { - return nil, err - } - defer resp.Body.Close() // nolint: errcheck - - contentType := resp.Header.Get("content-type") - - if !strings.Contains(contentType, "application/json") { - return nil, fmt.Errorf(`body content-type response expected "application/json", got %q`, contentType) - } - - text, err := client.parseResponse(resp, client.APIName(command)) - if err != nil { - return nil, err - } - - return text, nil -} - -func encodeValues(params url.Values) string { - // This code is borrowed from net/url/url.go - // The way it's encoded by net/url doesn't match - // how CloudStack works to determine the signature. - // - // CloudStack only encodes the values of the query parameters - // and furthermore doesn't use '+' for whitespaces. Therefore - // after encoding the values all '+' are replaced with '%20'. - if params == nil { - return "" - } - - var buf bytes.Buffer - keys := make([]string, 0, len(params)) - for k := range params { - keys = append(keys, k) - } - - sort.Strings(keys) - for _, k := range keys { - prefix := k + "=" - for _, v := range params[k] { - if buf.Len() > 0 { - buf.WriteByte('&') - } - buf.WriteString(prefix) - buf.WriteString(csEncode(v)) - } - } - return buf.String() -} diff --git a/vendor/github.com/exoscale/egoscale/request_type.go b/vendor/github.com/exoscale/egoscale/request_type.go deleted file mode 100644 index 7394e1ad3..000000000 --- a/vendor/github.com/exoscale/egoscale/request_type.go +++ /dev/null @@ -1,184 +0,0 @@ -package egoscale - -import ( - "net/url" -) - -// Command represents a generic request -type Command interface { - Response() interface{} -} - -// AsyncCommand represents a async request -type AsyncCommand interface { - Command - AsyncResponse() interface{} -} - -// ListCommand represents a listing request -type ListCommand interface { - Listable - Command - // SetPage defines the current pages - SetPage(int) - // SetPageSize defines the size of the page - SetPageSize(int) - // Each reads the data from the response and feeds channels, and returns true if we are on the last page - Each(interface{}, IterateItemFunc) -} - -// onBeforeHook represents an action to be done on the params before sending them -// -// This little took helps with issue of relying on JSON serialization logic only. -// `omitempty` may make sense in some cases but not all the time. -type onBeforeHook interface { - onBeforeSend(params url.Values) error -} - -// CommandInfo represents the meta data related to a Command -type CommandInfo struct { - Name string - Description string - RootOnly bool -} - -// JobStatusType represents the status of a Job -type JobStatusType int - -//go:generate stringer -type JobStatusType -const ( - // Pending represents a job in progress - Pending JobStatusType = iota - // Success represents a successfully completed job - Success - // Failure represents a job that has failed to complete - Failure -) - -// ErrorCode represents the CloudStack ApiErrorCode enum -// -// See: https://github.com/apache/cloudstack/blob/master/api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java -type ErrorCode int - -//go:generate stringer -type ErrorCode -const ( - // Unauthorized represents ... (TODO) - Unauthorized ErrorCode = 401 - // MethodNotAllowed represents ... (TODO) - MethodNotAllowed ErrorCode = 405 - // UnsupportedActionError represents ... (TODO) - UnsupportedActionError ErrorCode = 422 - // APILimitExceeded represents ... (TODO) - APILimitExceeded ErrorCode = 429 - // MalformedParameterError represents ... (TODO) - MalformedParameterError ErrorCode = 430 - // ParamError represents ... (TODO) - ParamError ErrorCode = 431 - - // InternalError represents a server error - InternalError ErrorCode = 530 - // AccountError represents ... (TODO) - AccountError ErrorCode = 531 - // AccountResourceLimitError represents ... (TODO) - AccountResourceLimitError ErrorCode = 532 - // InsufficientCapacityError represents ... (TODO) - InsufficientCapacityError ErrorCode = 533 - // ResourceUnavailableError represents ... (TODO) - ResourceUnavailableError ErrorCode = 534 - // ResourceAllocationError represents ... (TODO) - ResourceAllocationError ErrorCode = 535 - // ResourceInUseError represents ... (TODO) - ResourceInUseError ErrorCode = 536 - // NetworkRuleConflictError represents ... (TODO) - NetworkRuleConflictError ErrorCode = 537 -) - -// CSErrorCode represents the CloudStack CSExceptionErrorCode enum -// -// See: https://github.com/apache/cloudstack/blob/master/utils/src/main/java/com/cloud/utils/exception/CSExceptionErrorCode.java -type CSErrorCode int - -//go:generate stringer -type CSErrorCode -const ( - // CloudRuntimeException ... (TODO) - CloudRuntimeException CSErrorCode = 4250 - // ExecutionException ... (TODO) - ExecutionException CSErrorCode = 4260 - // HypervisorVersionChangedException ... (TODO) - HypervisorVersionChangedException CSErrorCode = 4265 - // CloudException ... (TODO) - CloudException CSErrorCode = 4275 - // AccountLimitException ... (TODO) - AccountLimitException CSErrorCode = 4280 - // AgentUnavailableException ... (TODO) - AgentUnavailableException CSErrorCode = 4285 - // CloudAuthenticationException ... (TODO) - CloudAuthenticationException CSErrorCode = 4290 - // ConcurrentOperationException ... (TODO) - ConcurrentOperationException CSErrorCode = 4300 - // ConflictingNetworksException ... (TODO) - ConflictingNetworkSettingsException CSErrorCode = 4305 - // DiscoveredWithErrorException ... (TODO) - DiscoveredWithErrorException CSErrorCode = 4310 - // HAStateException ... (TODO) - HAStateException CSErrorCode = 4315 - // InsufficientAddressCapacityException ... (TODO) - InsufficientAddressCapacityException CSErrorCode = 4320 - // InsufficientCapacityException ... (TODO) - InsufficientCapacityException CSErrorCode = 4325 - // InsufficientNetworkCapacityException ... (TODO) - InsufficientNetworkCapacityException CSErrorCode = 4330 - // InsufficientServerCapaticyException ... (TODO) - InsufficientServerCapacityException CSErrorCode = 4335 - // InsufficientStorageCapacityException ... (TODO) - InsufficientStorageCapacityException CSErrorCode = 4340 - // InternalErrorException ... (TODO) - InternalErrorException CSErrorCode = 4345 - // InvalidParameterValueException ... (TODO) - InvalidParameterValueException CSErrorCode = 4350 - // ManagementServerException ... (TODO) - ManagementServerException CSErrorCode = 4355 - // NetworkRuleConflictException ... (TODO) - NetworkRuleConflictException CSErrorCode = 4360 - // PermissionDeniedException ... (TODO) - PermissionDeniedException CSErrorCode = 4365 - // ResourceAllocationException ... (TODO) - ResourceAllocationException CSErrorCode = 4370 - // ResourceInUseException ... (TODO) - ResourceInUseException CSErrorCode = 4375 - // ResourceUnavailableException ... (TODO) - ResourceUnavailableException CSErrorCode = 4380 - // StorageUnavailableException ... (TODO) - StorageUnavailableException CSErrorCode = 4385 - // UnsupportedServiceException ... (TODO) - UnsupportedServiceException CSErrorCode = 4390 - // VirtualMachineMigrationException ... (TODO) - VirtualMachineMigrationException CSErrorCode = 4395 - // AsyncCommandQueued ... (TODO) - AsyncCommandQueued CSErrorCode = 4540 - // RequestLimitException ... (TODO) - RequestLimitException CSErrorCode = 4545 - // ServerAPIException ... (TODO) - ServerAPIException CSErrorCode = 9999 -) - -// ErrorResponse represents the standard error response -type ErrorResponse struct { - CSErrorCode CSErrorCode `json:"cserrorcode"` - ErrorCode ErrorCode `json:"errorcode"` - ErrorText string `json:"errortext"` - UUIDList []UUIDItem `json:"uuidList,omitempty"` // uuid*L*ist is not a typo -} - -// UUIDItem represents an item of the UUIDList part of an ErrorResponse -type UUIDItem struct { - Description string `json:"description,omitempty"` - SerialVersionUID int64 `json:"serialVersionUID,omitempty"` - UUID string `json:"uuid"` -} - -// BooleanResponse represents a boolean response (usually after a deletion) -type BooleanResponse struct { - DisplayText string `json:"displaytext,omitempty"` - Success bool `json:"success"` -} diff --git a/vendor/github.com/exoscale/egoscale/resource_limits.go b/vendor/github.com/exoscale/egoscale/resource_limits.go deleted file mode 100644 index 56011dc66..000000000 --- a/vendor/github.com/exoscale/egoscale/resource_limits.go +++ /dev/null @@ -1,100 +0,0 @@ -package egoscale - -// https://github.com/apache/cloudstack/blob/master/api/src/main/java/com/cloud/configuration/Resource.java - -// ResourceTypeName represents the name of a resource type (for limits) -type ResourceTypeName string - -const ( - // VirtualMachineTypeName is the resource type name of a VM - VirtualMachineTypeName ResourceTypeName = "user_vm" - // IPAddressTypeName is the resource type name of an IP address - IPAddressTypeName ResourceTypeName = "public_ip" - // VolumeTypeName is the resource type name of a volume - VolumeTypeName ResourceTypeName = "volume" - // SnapshotTypeName is the resource type name of a snapshot - SnapshotTypeName ResourceTypeName = "snapshot" - // TemplateTypeName is the resource type name of a template - TemplateTypeName ResourceTypeName = "template" - // ProjectTypeName is the resource type name of a project - ProjectTypeName ResourceTypeName = "project" - // NetworkTypeName is the resource type name of a network - NetworkTypeName ResourceTypeName = "network" - // VPCTypeName is the resource type name of a VPC - VPCTypeName ResourceTypeName = "vpc" - // CPUTypeName is the resource type name of a CPU - CPUTypeName ResourceTypeName = "cpu" - // MemoryTypeName is the resource type name of Memory - MemoryTypeName ResourceTypeName = "memory" - // PrimaryStorageTypeName is the resource type name of primary storage - PrimaryStorageTypeName ResourceTypeName = "primary_storage" - // SecondaryStorageTypeName is the resource type name of secondary storage - SecondaryStorageTypeName ResourceTypeName = "secondary_storage" -) - -// ResourceType represents the ID of a resource type (for limits) -type ResourceType string - -const ( - // VirtualMachineType is the resource type ID of a VM - VirtualMachineType ResourceType = "0" - // IPAddressType is the resource type ID of an IP address - IPAddressType ResourceType = "1" - // VolumeType is the resource type ID of a volume - VolumeType ResourceType = "2" - // SnapshotType is the resource type ID of a snapshot - SnapshotType ResourceType = "3" - // TemplateType is the resource type ID of a template - TemplateType ResourceType = "4" - // ProjectType is the resource type ID of a project - ProjectType ResourceType = "5" - // NetworkType is the resource type ID of a network - NetworkType ResourceType = "6" - // VPCType is the resource type ID of a VPC - VPCType ResourceType = "7" - // CPUType is the resource type ID of a CPU - CPUType ResourceType = "8" - // MemoryType is the resource type ID of Memory - MemoryType ResourceType = "9" - // PrimaryStorageType is the resource type ID of primary storage - PrimaryStorageType ResourceType = "10" - // SecondaryStorageType is the resource type ID of secondary storage - SecondaryStorageType ResourceType = "11" -) - -// ResourceLimit represents the limit on a particular resource -type ResourceLimit struct { - Max int64 `json:"max,omitempty" doc:"the maximum number of the resource. A -1 means the resource currently has no limit."` - ResourceType ResourceType `json:"resourcetype,omitempty" doc:"resource type. Values include 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11. See the resourceType parameter for more information on these values."` - ResourceTypeName string `json:"resourcetypename,omitempty" doc:"resource type name. Values include user_vm, public_ip, volume, snapshot, template, network, cpu, memory, primary_storage, secondary_storage."` -} - -// ListRequest builds the ListResourceLimits request -func (limit ResourceLimit) ListRequest() (ListCommand, error) { - req := &ListResourceLimits{ - ResourceType: limit.ResourceType, - ResourceTypeName: limit.ResourceTypeName, - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListResourceLimits - -// ListResourceLimits lists the resource limits -type ListResourceLimits struct { - ID int64 `json:"id,omitempty" doc:"Lists resource limits by ID."` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - ResourceType ResourceType `json:"resourcetype,omitempty" doc:"Type of resource. Values are 0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 12, and 13. 0 - Instance. Number of instances a user can create. 1 - IP. Number of public IP addresses an account can own. 2 - Volume. Number of disk volumes an account can own. 3 - Snapshot. Number of snapshots an account can own. 4 - Template. Number of templates an account can register/create. 6 - Network. Number of networks an account can own. 8 - CPU. Number of CPU an account can allocate for his resources. 9 - Memory. Amount of RAM an account can allocate for his resources. 10 - PrimaryStorage. Total primary storage space (in GiB) a user can use. 11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use. 12 - Elastic IP. Number of public elastic IP addresses an account can own. 13 - SMTP. If the account is allowed SMTP outbound traffic."` - ResourceTypeName string `json:"resourcetypename,omitempty" doc:"Type of resource (wins over resourceType if both are provided). Values are: user_vm - Instance. Number of instances a user can create. public_ip - IP. Number of public IP addresses an account can own. volume - Volume. Number of disk volumes an account can own. snapshot - Snapshot. Number of snapshots an account can own. template - Template. Number of templates an account can register/create. network - Network. Number of networks an account can own. cpu - CPU. Number of CPU an account can allocate for his resources. memory - Memory. Amount of RAM an account can allocate for his resources. primary_storage - PrimaryStorage. Total primary storage space (in GiB) a user can use. secondary_storage - SecondaryStorage. Total secondary storage space (in GiB) a user can use. public_elastic_ip - IP. Number of public elastic IP addresses an account can own. smtp - SG. If the account is allowed SMTP outbound traffic."` - - _ bool `name:"listResourceLimits" description:"Lists resource limits."` -} - -// ListResourceLimitsResponse represents a list of resource limits -type ListResourceLimitsResponse struct { - Count int `json:"count"` - ResourceLimit []ResourceLimit `json:"resourcelimit"` -} diff --git a/vendor/github.com/exoscale/egoscale/resource_metadata.go b/vendor/github.com/exoscale/egoscale/resource_metadata.go deleted file mode 100644 index 52c5ee8b0..000000000 --- a/vendor/github.com/exoscale/egoscale/resource_metadata.go +++ /dev/null @@ -1,41 +0,0 @@ -package egoscale - -import "fmt" - -// ResourceDetail represents extra details -type ResourceDetail ResourceTag - -// ListRequest builds the ListResourceDetails request -func (detail ResourceDetail) ListRequest() (ListCommand, error) { - if detail.ResourceType == "" { - return nil, fmt.Errorf("the resourcetype parameter is required") - } - - req := &ListResourceDetails{ - ResourceType: detail.ResourceType, - ResourceID: detail.ResourceID, - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListResourceDetails - -// ListResourceDetails lists the resource tag(s) (but different from listTags...) -type ListResourceDetails struct { - ResourceType string `json:"resourcetype" doc:"list by resource type"` - ForDisplay bool `json:"fordisplay,omitempty" doc:"if set to true, only details marked with display=true, are returned. False by default"` - Key string `json:"key,omitempty" doc:"list by key"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - ResourceID *UUID `json:"resourceid,omitempty" doc:"list by resource id"` - Value string `json:"value,omitempty" doc:"list by key, value. Needs to be passed only along with key"` - _ bool `name:"listResourceDetails" description:"List resource detail(s)"` -} - -// ListResourceDetailsResponse represents a list of resource details -type ListResourceDetailsResponse struct { - Count int `json:"count"` - ResourceDetail []ResourceTag `json:"resourcedetail"` -} diff --git a/vendor/github.com/exoscale/egoscale/resourcedetails_response.go b/vendor/github.com/exoscale/egoscale/resourcedetails_response.go deleted file mode 100644 index 2a08cd825..000000000 --- a/vendor/github.com/exoscale/egoscale/resourcedetails_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListResourceDetails) Response() interface{} { - return new(ListResourceDetailsResponse) -} - -// ListRequest returns itself -func (ls *ListResourceDetails) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListResourceDetails) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListResourceDetails) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListResourceDetails) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListResourceDetailsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListResourceDetailsResponse was expected, got %T", resp)) - return - } - - for i := range items.ResourceDetail { - if !callback(&items.ResourceDetail[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/resourcelimits_response.go b/vendor/github.com/exoscale/egoscale/resourcelimits_response.go deleted file mode 100644 index 656febfc9..000000000 --- a/vendor/github.com/exoscale/egoscale/resourcelimits_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListResourceLimits) Response() interface{} { - return new(ListResourceLimitsResponse) -} - -// ListRequest returns itself -func (ls *ListResourceLimits) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListResourceLimits) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListResourceLimits) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListResourceLimits) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListResourceLimitsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListResourceLimitsResponse was expected, got %T", resp)) - return - } - - for i := range items.ResourceLimit { - if !callback(&items.ResourceLimit[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/reversedns.go b/vendor/github.com/exoscale/egoscale/reversedns.go deleted file mode 100644 index e8bd124ce..000000000 --- a/vendor/github.com/exoscale/egoscale/reversedns.go +++ /dev/null @@ -1,83 +0,0 @@ -package egoscale - -import ( - "net" -) - -// ReverseDNS represents the PTR record linked with an IPAddress or IP6Address belonging to a Virtual Machine or a Public IP Address (Elastic IP) instance -type ReverseDNS struct { - DomainName string `json:"domainname,omitempty" doc:"the domain name of the PTR record"` - IP6Address net.IP `json:"ip6address,omitempty" doc:"the IPv6 address linked with the PTR record (mutually exclusive with ipaddress)"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"the IPv4 address linked with the PTR record (mutually exclusive with ip6address)"` - NicID *UUID `json:"nicid,omitempty" doc:"the virtual machine default NIC ID"` - PublicIPID *UUID `json:"publicipid,omitempty" doc:"the public IP address ID"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the virtual machine ID"` -} - -// DeleteReverseDNSFromPublicIPAddress is a command to create/delete the PTR record of a public IP address -type DeleteReverseDNSFromPublicIPAddress struct { - ID *UUID `json:"id,omitempty" doc:"the ID of the public IP address"` - _ bool `name:"deleteReverseDnsFromPublicIpAddress" description:"delete the PTR DNS record from the public IP address"` -} - -// Response returns the struct to unmarshal -func (*DeleteReverseDNSFromPublicIPAddress) Response() interface{} { - return new(BooleanResponse) -} - -// DeleteReverseDNSFromVirtualMachine is a command to create/delete the PTR record(s) of a virtual machine -type DeleteReverseDNSFromVirtualMachine struct { - ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` - _ bool `name:"deleteReverseDnsFromVirtualMachine" description:"Delete the PTR DNS record(s) from the virtual machine"` -} - -// Response returns the struct to unmarshal -func (*DeleteReverseDNSFromVirtualMachine) Response() interface{} { - return new(BooleanResponse) -} - -// QueryReverseDNSForPublicIPAddress is a command to create/query the PTR record of a public IP address -type QueryReverseDNSForPublicIPAddress struct { - ID *UUID `json:"id,omitempty" doc:"the ID of the public IP address"` - _ bool `name:"queryReverseDnsForPublicIpAddress" description:"Query the PTR DNS record for the public IP address"` -} - -// Response returns the struct to unmarshal -func (*QueryReverseDNSForPublicIPAddress) Response() interface{} { - return new(IPAddress) -} - -// QueryReverseDNSForVirtualMachine is a command to create/query the PTR record(s) of a virtual machine -type QueryReverseDNSForVirtualMachine struct { - ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` - _ bool `name:"queryReverseDnsForVirtualMachine" description:"Query the PTR DNS record(s) for the virtual machine"` -} - -// Response returns the struct to unmarshal -func (*QueryReverseDNSForVirtualMachine) Response() interface{} { - return new(VirtualMachine) -} - -// UpdateReverseDNSForPublicIPAddress is a command to create/update the PTR record of a public IP address -type UpdateReverseDNSForPublicIPAddress struct { - DomainName string `json:"domainname,omitempty" doc:"the domain name for the PTR record. It must have a valid TLD"` - ID *UUID `json:"id,omitempty" doc:"the ID of the public IP address"` - _ bool `name:"updateReverseDnsForPublicIpAddress" description:"Update/create the PTR DNS record for the public IP address"` -} - -// Response returns the struct to unmarshal -func (*UpdateReverseDNSForPublicIPAddress) Response() interface{} { - return new(IPAddress) -} - -// UpdateReverseDNSForVirtualMachine is a command to create/update the PTR record(s) of a virtual machine -type UpdateReverseDNSForVirtualMachine struct { - DomainName string `json:"domainname,omitempty" doc:"the domain name for the PTR record(s). It must have a valid TLD"` - ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` - _ bool `name:"updateReverseDnsForVirtualMachine" description:"Update/create the PTR DNS record(s) for the virtual machine"` -} - -// Response returns the struct to unmarshal -func (*UpdateReverseDNSForVirtualMachine) Response() interface{} { - return new(VirtualMachine) -} diff --git a/vendor/github.com/exoscale/egoscale/runstatus.go b/vendor/github.com/exoscale/egoscale/runstatus.go deleted file mode 100644 index 48905962e..000000000 --- a/vendor/github.com/exoscale/egoscale/runstatus.go +++ /dev/null @@ -1,131 +0,0 @@ -package egoscale - -import ( - "context" - "crypto/hmac" - "crypto/sha256" - "encoding/hex" - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "net/url" - "strings" - "time" -) - -// RunstatusValidationErrorResponse represents an error in the API -type RunstatusValidationErrorResponse map[string][]string - -// RunstatusErrorResponse represents the default errors -type RunstatusErrorResponse struct { - Detail string `json:"detail"` -} - -// runstatusPagesURL is the only URL that cannot be guessed -const runstatusPagesURL = "/pages" - -// Error formats the DNSerror into a string -func (req RunstatusErrorResponse) Error() string { - return fmt.Sprintf("Runstatus error: %s", req.Detail) -} - -// Error formats the DNSerror into a string -func (req RunstatusValidationErrorResponse) Error() string { - if len(req) > 0 { - errs := []string{} - for name, ss := range req { - if len(ss) > 0 { - errs = append(errs, fmt.Sprintf("%s: %s", name, strings.Join(ss, ", "))) - } - } - return fmt.Sprintf("Runstatus error: %s", strings.Join(errs, "; ")) - } - return fmt.Sprintf("Runstatus error") -} - -func (client *Client) runstatusRequest(ctx context.Context, uri string, structParam interface{}, method string) (json.RawMessage, error) { - reqURL, err := url.Parse(uri) - if err != nil { - return nil, err - } - if reqURL.Scheme == "" { - return nil, fmt.Errorf("only absolute URI are considered valid, got %q", uri) - } - - var params string - if structParam != nil { - m, err := json.Marshal(structParam) - if err != nil { - return nil, err - } - params = string(m) - } - - req, err := http.NewRequest(method, reqURL.String(), strings.NewReader(params)) - if err != nil { - return nil, err - } - - time := time.Now().Local().Format("2006-01-02T15:04:05-0700") - - payload := fmt.Sprintf("%s%s%s", req.URL.String(), time, params) - - mac := hmac.New(sha256.New, []byte(client.apiSecret)) - _, err = mac.Write([]byte(payload)) - if err != nil { - return nil, err - } - signature := hex.EncodeToString(mac.Sum(nil)) - - var hdr = make(http.Header) - - hdr.Add("Authorization", fmt.Sprintf("Exoscale-HMAC-SHA256 %s:%s", client.APIKey, signature)) - hdr.Add("Exoscale-Date", time) - hdr.Add("User-Agent", UserAgent) - hdr.Add("Accept", "application/json") - if params != "" { - hdr.Add("Content-Type", "application/json") - } - req.Header = hdr - - req = req.WithContext(ctx) - - resp, err := client.HTTPClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() // nolint: errcheck - - if resp.StatusCode == 204 { - if method != "DELETE" { - return nil, fmt.Errorf("only DELETE is expected to produce 204, was %q", method) - } - return nil, nil - } - - contentType := resp.Header.Get("content-type") - if !strings.Contains(contentType, "application/json") { - return nil, fmt.Errorf(`response %d content-type expected to be "application/json", got %q`, resp.StatusCode, contentType) - } - - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - if resp.StatusCode >= 400 { - rerr := new(RunstatusValidationErrorResponse) - if err := json.Unmarshal(b, rerr); err == nil { - return nil, rerr - } - rverr := new(RunstatusErrorResponse) - if err := json.Unmarshal(b, rverr); err != nil { - return nil, err - } - - return nil, rverr - } - - return b, nil -} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_event.go b/vendor/github.com/exoscale/egoscale/runstatus_event.go deleted file mode 100644 index 2c698788b..000000000 --- a/vendor/github.com/exoscale/egoscale/runstatus_event.go +++ /dev/null @@ -1,37 +0,0 @@ -package egoscale - -import ( - "context" - "fmt" - "time" -) - -//RunstatusEvent is a runstatus event -type RunstatusEvent struct { - Created *time.Time `json:"created,omitempty"` - State string `json:"state,omitempty"` - Status string `json:"status"` - Text string `json:"text"` -} - -// UpdateRunstatusIncident create runstatus incident event -// Events can be updates or final message with status completed. -func (client *Client) UpdateRunstatusIncident(ctx context.Context, incident RunstatusIncident, event RunstatusEvent) error { - if incident.EventsURL == "" { - return fmt.Errorf("empty Events URL for %#v", incident) - } - - _, err := client.runstatusRequest(ctx, incident.EventsURL, event, "POST") - return err -} - -// UpdateRunstatusMaintenance adds a event to a maintenance. -// Events can be updates or final message with status completed. -func (client *Client) UpdateRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance, event RunstatusEvent) error { - if maintenance.EventsURL == "" { - return fmt.Errorf("empty Events URL for %#v", maintenance) - } - - _, err := client.runstatusRequest(ctx, maintenance.EventsURL, event, "POST") - return err -} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_incident.go b/vendor/github.com/exoscale/egoscale/runstatus_incident.go deleted file mode 100644 index 57d20c81b..000000000 --- a/vendor/github.com/exoscale/egoscale/runstatus_incident.go +++ /dev/null @@ -1,175 +0,0 @@ -package egoscale - -import ( - "context" - "encoding/json" - "fmt" - "time" -) - -//RunstatusIncident is a runstatus incident -type RunstatusIncident struct { - EndDate *time.Time `json:"end_date,omitempty"` - Events []RunstatusEvent `json:"events,omitempty"` - EventsURL string `json:"events_url,omitempty"` - ID int `json:"id,omitempty"` - PageURL string `json:"page_url,omitempty"` // fake field - PostMortem string `json:"post_mortem,omitempty"` - RealTime bool `json:"real_time,omitempty"` - Services []string `json:"services"` - StartDate *time.Time `json:"start_date,omitempty"` - State string `json:"state"` - Status string `json:"status"` - StatusText string `json:"status_text"` - Title string `json:"title"` - URL string `json:"url,omitempty"` -} - -// Match returns true if the other incident has got similarities with itself -func (incident RunstatusIncident) Match(other RunstatusIncident) bool { - if other.Title != "" && incident.Title == other.Title { - return true - } - - if other.ID > 0 && incident.ID == other.ID { - return true - } - - return false -} - -//RunstatusIncidentList is a list of incident -type RunstatusIncidentList struct { - Next string `json:"next"` - Previous string `json:"previous"` - Incidents []RunstatusIncident `json:"results"` -} - -// GetRunstatusIncident retrieves the details of a specific incident. -func (client *Client) GetRunstatusIncident(ctx context.Context, incident RunstatusIncident) (*RunstatusIncident, error) { - if incident.URL != "" { - return client.getRunstatusIncident(ctx, incident.URL) - } - - if incident.PageURL == "" { - return nil, fmt.Errorf("empty Page URL for %#v", incident) - } - - page, err := client.getRunstatusPage(ctx, incident.PageURL) - if err != nil { - return nil, err - } - - for i := range page.Incidents { - j := &page.Incidents[i] - if j.Match(incident) { - return j, nil - } - } - - return nil, fmt.Errorf("%#v not found", incident) -} - -func (client *Client) getRunstatusIncident(ctx context.Context, incidentURL string) (*RunstatusIncident, error) { - resp, err := client.runstatusRequest(ctx, incidentURL, nil, "GET") - if err != nil { - return nil, err - } - - i := new(RunstatusIncident) - if err := json.Unmarshal(resp, i); err != nil { - return nil, err - } - return i, nil -} - -// ListRunstatusIncidents lists the incidents for a specific page. -func (client *Client) ListRunstatusIncidents(ctx context.Context, page RunstatusPage) ([]RunstatusIncident, error) { - if page.IncidentsURL == "" { - return nil, fmt.Errorf("empty Incidents URL for %#v", page) - } - - results := make([]RunstatusIncident, 0) - - var err error - client.PaginateRunstatusIncidents(ctx, page, func(incident *RunstatusIncident, e error) bool { - if e != nil { - err = e - return false - } - - results = append(results, *incident) - return true - }) - - return results, err -} - -// PaginateRunstatusIncidents paginate Incidents -func (client *Client) PaginateRunstatusIncidents(ctx context.Context, page RunstatusPage, callback func(*RunstatusIncident, error) bool) { - if page.IncidentsURL == "" { - callback(nil, fmt.Errorf("empty Incidents URL for %#v", page)) - return - } - - incidentsURL := page.IncidentsURL - for incidentsURL != "" { - resp, err := client.runstatusRequest(ctx, incidentsURL, nil, "GET") - if err != nil { - callback(nil, err) - return - } - - var is *RunstatusIncidentList - if err := json.Unmarshal(resp, &is); err != nil { - callback(nil, err) - return - } - - for i := range is.Incidents { - if cont := callback(&is.Incidents[i], nil); !cont { - return - } - } - - incidentsURL = is.Next - } -} - -// CreateRunstatusIncident create runstatus incident -func (client *Client) CreateRunstatusIncident(ctx context.Context, incident RunstatusIncident) (*RunstatusIncident, error) { - if incident.PageURL == "" { - return nil, fmt.Errorf("empty Page URL for %#v", incident) - } - - page, err := client.getRunstatusPage(ctx, incident.PageURL) - if err != nil { - return nil, err - } - - if page.IncidentsURL == "" { - return nil, fmt.Errorf("empty Incidents URL for %#v", page) - } - - resp, err := client.runstatusRequest(ctx, page.IncidentsURL, incident, "POST") - if err != nil { - return nil, err - } - - i := &RunstatusIncident{} - if err := json.Unmarshal(resp, &i); err != nil { - return nil, err - } - - return i, nil -} - -// DeleteRunstatusIncident delete runstatus incident -func (client *Client) DeleteRunstatusIncident(ctx context.Context, incident RunstatusIncident) error { - if incident.URL == "" { - return fmt.Errorf("empty URL for %#v", incident) - } - - _, err := client.runstatusRequest(ctx, incident.URL, nil, "DELETE") - return err -} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_maintenance.go b/vendor/github.com/exoscale/egoscale/runstatus_maintenance.go deleted file mode 100644 index 44501f9b7..000000000 --- a/vendor/github.com/exoscale/egoscale/runstatus_maintenance.go +++ /dev/null @@ -1,208 +0,0 @@ -package egoscale - -import ( - "context" - "encoding/json" - "fmt" - "log" - "net/url" - "path" - "strconv" - "time" -) - -// RunstatusMaintenance is a runstatus maintenance -type RunstatusMaintenance struct { - Created *time.Time `json:"created,omitempty"` - Description string `json:"description,omitempty"` - EndDate *time.Time `json:"end_date"` - Events []RunstatusEvent `json:"events,omitempty"` - EventsURL string `json:"events_url,omitempty"` - ID int `json:"id,omitempty"` // missing field - PageURL string `json:"page_url,omitempty"` // fake field - RealTime bool `json:"real_time,omitempty"` - Services []string `json:"services"` - StartDate *time.Time `json:"start_date"` - Status string `json:"status"` - Title string `json:"title"` - URL string `json:"url,omitempty"` -} - -// Match returns true if the other maintenance has got similarities with itself -func (maintenance RunstatusMaintenance) Match(other RunstatusMaintenance) bool { - if other.Title != "" && maintenance.Title == other.Title { - return true - } - - if other.ID > 0 && maintenance.ID == other.ID { - return true - } - - return false -} - -// FakeID fills up the ID field as it's currently missing -func (maintenance *RunstatusMaintenance) FakeID() error { - if maintenance.ID > 0 { - return nil - } - - if maintenance.URL == "" { - return fmt.Errorf("empty URL for %#v", maintenance) - } - - u, err := url.Parse(maintenance.URL) - if err != nil { - return err - } - - s := path.Base(u.Path) - id, err := strconv.Atoi(s) - if err != nil { - return err - } - maintenance.ID = id - return nil -} - -// RunstatusMaintenanceList is a list of incident -type RunstatusMaintenanceList struct { - Next string `json:"next"` - Previous string `json:"previous"` - Maintenances []RunstatusMaintenance `json:"results"` -} - -// GetRunstatusMaintenance retrieves the details of a specific maintenance. -func (client *Client) GetRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance) (*RunstatusMaintenance, error) { - if maintenance.URL != "" { - return client.getRunstatusMaintenance(ctx, maintenance.URL) - } - - if maintenance.PageURL == "" { - return nil, fmt.Errorf("empty Page URL for %#v", maintenance) - } - - page, err := client.getRunstatusPage(ctx, maintenance.PageURL) - if err != nil { - return nil, err - } - - for i := range page.Maintenances { - m := &page.Maintenances[i] - if m.Match(maintenance) { - if err := m.FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", m, err) - } - return m, nil - } - } - - return nil, fmt.Errorf("%#v not found", maintenance) -} - -func (client *Client) getRunstatusMaintenance(ctx context.Context, maintenanceURL string) (*RunstatusMaintenance, error) { - resp, err := client.runstatusRequest(ctx, maintenanceURL, nil, "GET") - if err != nil { - return nil, err - } - - m := new(RunstatusMaintenance) - if err := json.Unmarshal(resp, m); err != nil { - return nil, err - } - return m, nil -} - -// ListRunstatusMaintenances returns the list of maintenances for the page. -func (client *Client) ListRunstatusMaintenances(ctx context.Context, page RunstatusPage) ([]RunstatusMaintenance, error) { - if page.MaintenancesURL == "" { - return nil, fmt.Errorf("empty Maintenances URL for %#v", page) - } - - results := make([]RunstatusMaintenance, 0) - - var err error - client.PaginateRunstatusMaintenances(ctx, page, func(maintenance *RunstatusMaintenance, e error) bool { - if e != nil { - err = e - return false - } - - results = append(results, *maintenance) - return true - }) - - return results, err -} - -// PaginateRunstatusMaintenances paginate Maintenances -func (client *Client) PaginateRunstatusMaintenances(ctx context.Context, page RunstatusPage, callback func(*RunstatusMaintenance, error) bool) { // nolint: dupl - if page.MaintenancesURL == "" { - callback(nil, fmt.Errorf("empty Maintenances URL for %#v", page)) - return - } - - maintenancesURL := page.MaintenancesURL - for maintenancesURL != "" { - resp, err := client.runstatusRequest(ctx, maintenancesURL, nil, "GET") - if err != nil { - callback(nil, err) - return - } - - var ms *RunstatusMaintenanceList - if err := json.Unmarshal(resp, &ms); err != nil { - callback(nil, err) - return - } - - for i := range ms.Maintenances { - if err := ms.Maintenances[i].FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", ms.Maintenances[i], err) - } - if cont := callback(&ms.Maintenances[i], nil); !cont { - return - } - } - - maintenancesURL = ms.Next - } -} - -// CreateRunstatusMaintenance create runstatus Maintenance -func (client *Client) CreateRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance) (*RunstatusMaintenance, error) { - if maintenance.PageURL == "" { - return nil, fmt.Errorf("empty Page URL for %#v", maintenance) - } - - page, err := client.getRunstatusPage(ctx, maintenance.PageURL) - if err != nil { - return nil, err - } - - resp, err := client.runstatusRequest(ctx, page.MaintenancesURL, maintenance, "POST") - if err != nil { - return nil, err - } - - m := &RunstatusMaintenance{} - if err := json.Unmarshal(resp, &m); err != nil { - return nil, err - } - - if err := m.FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", m, err) - } - - return m, nil -} - -// DeleteRunstatusMaintenance delete runstatus Maintenance -func (client *Client) DeleteRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance) error { - if maintenance.URL == "" { - return fmt.Errorf("empty URL for %#v", maintenance) - } - - _, err := client.runstatusRequest(ctx, maintenance.URL, nil, "DELETE") - return err -} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_page.go b/vendor/github.com/exoscale/egoscale/runstatus_page.go deleted file mode 100644 index 01b6b8c77..000000000 --- a/vendor/github.com/exoscale/egoscale/runstatus_page.go +++ /dev/null @@ -1,168 +0,0 @@ -package egoscale - -import ( - "context" - "encoding/json" - "fmt" - "log" - "time" -) - -// RunstatusPage runstatus page -type RunstatusPage struct { - Created *time.Time `json:"created,omitempty"` - DarkTheme bool `json:"dark_theme,omitempty"` - Domain string `json:"domain,omitempty"` - GradientEnd string `json:"gradient_end,omitempty"` - GradientStart string `json:"gradient_start,omitempty"` - HeaderBackground string `json:"header_background,omitempty"` - ID int `json:"id,omitempty"` - Incidents []RunstatusIncident `json:"incidents,omitempty"` - IncidentsURL string `json:"incidents_url,omitempty"` - Logo string `json:"logo,omitempty"` - Maintenances []RunstatusMaintenance `json:"maintenances,omitempty"` - MaintenancesURL string `json:"maintenances_url,omitempty"` - Name string `json:"name"` //fake field (used to post a new runstatus page) - OkText string `json:"ok_text,omitempty"` - Plan string `json:"plan,omitempty"` - PublicURL string `json:"public_url,omitempty"` - Services []RunstatusService `json:"services,omitempty"` - ServicesURL string `json:"services_url,omitempty"` - State string `json:"state,omitempty"` - Subdomain string `json:"subdomain"` - SupportEmail string `json:"support_email,omitempty"` - TimeZone string `json:"time_zone,omitempty"` - Title string `json:"title,omitempty"` - TitleColor string `json:"title_color,omitempty"` - TwitterUsername string `json:"twitter_username,omitempty"` - URL string `json:"url,omitempty"` -} - -// Match returns true if the other page has got similarities with itself -func (page RunstatusPage) Match(other RunstatusPage) bool { - if other.Subdomain != "" && page.Subdomain == other.Subdomain { - return true - } - - if other.ID > 0 && page.ID == other.ID { - return true - } - - return false -} - -// RunstatusPageList runstatus page list -type RunstatusPageList struct { - Next string `json:"next"` - Previous string `json:"previous"` - Pages []RunstatusPage `json:"results"` -} - -// CreateRunstatusPage create runstatus page -func (client *Client) CreateRunstatusPage(ctx context.Context, page RunstatusPage) (*RunstatusPage, error) { - resp, err := client.runstatusRequest(ctx, client.Endpoint+runstatusPagesURL, page, "POST") - if err != nil { - return nil, err - } - - var p *RunstatusPage - if err := json.Unmarshal(resp, &p); err != nil { - return nil, err - } - - return p, nil -} - -// DeleteRunstatusPage delete runstatus page -func (client *Client) DeleteRunstatusPage(ctx context.Context, page RunstatusPage) error { - if page.URL == "" { - return fmt.Errorf("empty URL for %#v", page) - } - _, err := client.runstatusRequest(ctx, page.URL, nil, "DELETE") - return err -} - -// GetRunstatusPage fetches the runstatus page -func (client *Client) GetRunstatusPage(ctx context.Context, page RunstatusPage) (*RunstatusPage, error) { - if page.URL != "" { - return client.getRunstatusPage(ctx, page.URL) - } - - ps, err := client.ListRunstatusPages(ctx) - if err != nil { - return nil, err - } - - for i := range ps { - if ps[i].Match(page) { - return client.getRunstatusPage(ctx, ps[i].URL) - } - } - - return nil, fmt.Errorf("%#v not found", page) -} - -func (client *Client) getRunstatusPage(ctx context.Context, pageURL string) (*RunstatusPage, error) { - resp, err := client.runstatusRequest(ctx, pageURL, nil, "GET") - if err != nil { - return nil, err - } - - p := new(RunstatusPage) - if err := json.Unmarshal(resp, p); err != nil { - return nil, err - } - - // NOTE: fix the missing IDs - for i := range p.Maintenances { - if err := p.Maintenances[i].FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", p.Maintenances[i], err) - } - } - for i := range p.Services { - if err := p.Services[i].FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", p.Services[i], err) - } - } - - return p, nil -} - -// ListRunstatusPages list all the runstatus pages -func (client *Client) ListRunstatusPages(ctx context.Context) ([]RunstatusPage, error) { - resp, err := client.runstatusRequest(ctx, client.Endpoint+runstatusPagesURL, nil, "GET") - if err != nil { - return nil, err - } - - var p *RunstatusPageList - if err := json.Unmarshal(resp, &p); err != nil { - return nil, err - } - - return p.Pages, nil -} - -//PaginateRunstatusPages paginate on runstatus pages -func (client *Client) PaginateRunstatusPages(ctx context.Context, callback func(pages []RunstatusPage, e error) bool) { - pageURL := client.Endpoint + runstatusPagesURL - for pageURL != "" { - resp, err := client.runstatusRequest(ctx, pageURL, nil, "GET") - if err != nil { - callback(nil, err) - return - } - - var p *RunstatusPageList - if err := json.Unmarshal(resp, &p); err != nil { - callback(nil, err) - return - } - - if ok := callback(p.Pages, nil); ok { - return - } - - pageURL = p.Next - } -} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_service.go b/vendor/github.com/exoscale/egoscale/runstatus_service.go deleted file mode 100644 index 456d92fcf..000000000 --- a/vendor/github.com/exoscale/egoscale/runstatus_service.go +++ /dev/null @@ -1,201 +0,0 @@ -package egoscale - -import ( - "context" - "encoding/json" - "fmt" - "log" - "net/url" - "path" - "strconv" -) - -// RunstatusService is a runstatus service -type RunstatusService struct { - ID int `json:"id"` // missing field - Name string `json:"name"` - PageURL string `json:"page_url,omitempty"` // fake field - State string `json:"state,omitempty"` - URL string `json:"url,omitempty"` -} - -// FakeID fills up the ID field as it's currently missing -func (service *RunstatusService) FakeID() error { - if service.ID > 0 { - return nil - } - - if service.URL == "" { - return fmt.Errorf("empty URL for %#v", service) - } - - u, err := url.Parse(service.URL) - if err != nil { - return err - } - - s := path.Base(u.Path) - id, err := strconv.Atoi(s) - if err != nil { - return err - } - service.ID = id - return nil -} - -// Match returns true if the other service has got similarities with itself -func (service RunstatusService) Match(other RunstatusService) bool { - if other.Name != "" && service.Name == other.Name { - return true - } - - if other.ID > 0 && service.ID == other.ID { - return true - } - - return false -} - -// RunstatusServiceList service list -type RunstatusServiceList struct { - Next string `json:"next"` - Previous string `json:"previous"` - Services []RunstatusService `json:"results"` -} - -// DeleteRunstatusService delete runstatus service -func (client *Client) DeleteRunstatusService(ctx context.Context, service RunstatusService) error { - if service.URL == "" { - return fmt.Errorf("empty URL for %#v", service) - } - - _, err := client.runstatusRequest(ctx, service.URL, nil, "DELETE") - return err -} - -// CreateRunstatusService create runstatus service -func (client *Client) CreateRunstatusService(ctx context.Context, service RunstatusService) (*RunstatusService, error) { - if service.PageURL == "" { - return nil, fmt.Errorf("empty Page URL for %#v", service) - } - - page, err := client.GetRunstatusPage(ctx, RunstatusPage{URL: service.PageURL}) - if err != nil { - return nil, err - } - - resp, err := client.runstatusRequest(ctx, page.ServicesURL, service, "POST") - if err != nil { - return nil, err - } - - s := &RunstatusService{} - if err := json.Unmarshal(resp, s); err != nil { - return nil, err - } - - return s, nil -} - -// GetRunstatusService displays service detail. -func (client *Client) GetRunstatusService(ctx context.Context, service RunstatusService) (*RunstatusService, error) { - if service.URL != "" { - return client.getRunstatusService(ctx, service.URL) - } - - if service.PageURL == "" { - return nil, fmt.Errorf("empty Page URL in %#v", service) - } - - page, err := client.getRunstatusPage(ctx, service.PageURL) - if err != nil { - return nil, err - } - - for i := range page.Services { - s := &page.Services[i] - if s.Match(service) { - if err := s.FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", s, err) - } - return s, nil - } - } - - return nil, fmt.Errorf("%#v not found", service) -} - -func (client *Client) getRunstatusService(ctx context.Context, serviceURL string) (*RunstatusService, error) { - resp, err := client.runstatusRequest(ctx, serviceURL, nil, "GET") - if err != nil { - return nil, err - } - - s := &RunstatusService{} - if err := json.Unmarshal(resp, &s); err != nil { - return nil, err - } - - if err := s.FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", s, err) - } - - return s, nil -} - -// ListRunstatusServices displays the list of services. -func (client *Client) ListRunstatusServices(ctx context.Context, page RunstatusPage) ([]RunstatusService, error) { - if page.ServicesURL == "" { - return nil, fmt.Errorf("empty Services URL for %#v", page) - } - - results := make([]RunstatusService, 0) - - var err error - client.PaginateRunstatusServices(ctx, page, func(service *RunstatusService, e error) bool { - if e != nil { - err = e - return false - } - - results = append(results, *service) - return true - }) - - return results, err -} - -// PaginateRunstatusServices paginates Services -func (client *Client) PaginateRunstatusServices(ctx context.Context, page RunstatusPage, callback func(*RunstatusService, error) bool) { // nolint: dupl - if page.ServicesURL == "" { - callback(nil, fmt.Errorf("empty Services URL for %#v", page)) - return - } - - servicesURL := page.ServicesURL - for servicesURL != "" { - resp, err := client.runstatusRequest(ctx, servicesURL, nil, "GET") - if err != nil { - callback(nil, err) - return - } - - var ss *RunstatusServiceList - if err := json.Unmarshal(resp, &ss); err != nil { - callback(nil, err) - return - } - - for i := range ss.Services { - if err := ss.Services[i].FakeID(); err != nil { - log.Printf("bad fake ID for %#v, %s", ss.Services[i], err) - } - - if cont := callback(&ss.Services[i], nil); !cont { - return - } - } - - servicesURL = ss.Next - } -} diff --git a/vendor/github.com/exoscale/egoscale/security_groups.go b/vendor/github.com/exoscale/egoscale/security_groups.go deleted file mode 100644 index a11e53a4f..000000000 --- a/vendor/github.com/exoscale/egoscale/security_groups.go +++ /dev/null @@ -1,226 +0,0 @@ -package egoscale - -import ( - "context" - "fmt" - "net/url" - "strconv" - "strings" -) - -// SecurityGroup represent a firewalling set of rules -type SecurityGroup struct { - Account string `json:"account,omitempty" doc:"the account owning the security group"` - Description string `json:"description,omitempty" doc:"the description of the security group"` - EgressRule []EgressRule `json:"egressrule,omitempty" doc:"the list of egress rules associated with the security group"` - ID *UUID `json:"id" doc:"the ID of the security group"` - IngressRule []IngressRule `json:"ingressrule,omitempty" doc:"the list of ingress rules associated with the security group"` - Name string `json:"name,omitempty" doc:"the name of the security group"` -} - -// UserSecurityGroup converts a SecurityGroup to a UserSecurityGroup -func (sg SecurityGroup) UserSecurityGroup() UserSecurityGroup { - return UserSecurityGroup{ - Group: sg.Name, - } -} - -// ListRequest builds the ListSecurityGroups request -func (sg SecurityGroup) ListRequest() (ListCommand, error) { - req := &ListSecurityGroups{ - ID: sg.ID, - SecurityGroupName: sg.Name, - } - - return req, nil -} - -// Delete deletes the given Security Group -func (sg SecurityGroup) Delete(ctx context.Context, client *Client) error { - if sg.ID == nil && sg.Name == "" { - return fmt.Errorf("a SecurityGroup may only be deleted using ID or Name") - } - - req := &DeleteSecurityGroup{} - - if sg.ID != nil { - req.ID = sg.ID - } else { - req.Name = sg.Name - } - - return client.BooleanRequestWithContext(ctx, req) -} - -// RuleByID returns IngressRule or EgressRule by a rule ID -func (sg SecurityGroup) RuleByID(ruleID UUID) (*IngressRule, *EgressRule) { - for i, in := range sg.IngressRule { - if in.RuleID.Equal(ruleID) { - return &sg.IngressRule[i], nil - } - } - - for i, out := range sg.EgressRule { - if out.RuleID.Equal(ruleID) { - return nil, &sg.EgressRule[i] - } - } - - return nil, nil -} - -// IngressRule represents the ingress rule -type IngressRule struct { - CIDR *CIDR `json:"cidr,omitempty" doc:"the CIDR notation for the base IP address of the security group rule"` - Description string `json:"description,omitempty" doc:"description of the security group rule"` - EndPort uint16 `json:"endport,omitempty" doc:"the ending port of the security group rule "` - IcmpCode uint8 `json:"icmpcode,omitempty" doc:"the code for the ICMP message response"` - IcmpType uint8 `json:"icmptype,omitempty" doc:"the type of the ICMP message response"` - Protocol string `json:"protocol,omitempty" doc:"the protocol of the security group rule"` - RuleID *UUID `json:"ruleid" doc:"the id of the security group rule"` - SecurityGroupName string `json:"securitygroupname,omitempty" doc:"security group name"` - StartPort uint16 `json:"startport,omitempty" doc:"the starting port of the security group rule"` -} - -// EgressRule represents the ingress rule -type EgressRule IngressRule - -// UserSecurityGroup represents the traffic of another security group -type UserSecurityGroup struct { - Group string `json:"group,omitempty"` -} - -// String gives the UserSecurityGroup name -func (usg UserSecurityGroup) String() string { - return usg.Group -} - -// CreateSecurityGroup represents a security group creation -type CreateSecurityGroup struct { - Name string `json:"name" doc:"name of the security group"` - Description string `json:"description,omitempty" doc:"the description of the security group"` - _ bool `name:"createSecurityGroup" description:"Creates a security group"` -} - -// Response returns the struct to unmarshal -func (CreateSecurityGroup) Response() interface{} { - return new(SecurityGroup) -} - -// DeleteSecurityGroup represents a security group deletion -type DeleteSecurityGroup struct { - ID *UUID `json:"id,omitempty" doc:"The ID of the security group. Mutually exclusive with name parameter"` - Name string `json:"name,omitempty" doc:"The ID of the security group. Mutually exclusive with id parameter"` - _ bool `name:"deleteSecurityGroup" description:"Deletes security group"` -} - -// Response returns the struct to unmarshal -func (DeleteSecurityGroup) Response() interface{} { - return new(BooleanResponse) -} - -// AuthorizeSecurityGroupIngress (Async) represents the ingress rule creation -type AuthorizeSecurityGroupIngress struct { - CIDRList []CIDR `json:"cidrlist,omitempty" doc:"the cidr list associated"` - Description string `json:"description,omitempty" doc:"the description of the ingress/egress rule"` - EndPort uint16 `json:"endport,omitempty" doc:"end port for this ingress/egress rule"` - IcmpCode uint8 `json:"icmpcode,omitempty" doc:"error code for this icmp message"` - IcmpType uint8 `json:"icmptype,omitempty" doc:"type of the icmp message being sent"` - Protocol string `json:"protocol,omitempty" doc:"TCP is default. UDP, ICMP, ICMPv6, AH, ESP, GRE, IPIP are the other supported protocols"` - SecurityGroupID *UUID `json:"securitygroupid,omitempty" doc:"The ID of the security group. Mutually exclusive with securitygroupname parameter"` - SecurityGroupName string `json:"securitygroupname,omitempty" doc:"The name of the security group. Mutually exclusive with securitygroupid parameter"` - StartPort uint16 `json:"startport,omitempty" doc:"start port for this ingress/egress rule"` - UserSecurityGroupList []UserSecurityGroup `json:"usersecuritygrouplist,omitempty" doc:"user to security group mapping"` - _ bool `name:"authorizeSecurityGroupIngress" description:"Authorize a particular ingress/egress rule for this security group"` -} - -// Response returns the struct to unmarshal -func (AuthorizeSecurityGroupIngress) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (AuthorizeSecurityGroupIngress) AsyncResponse() interface{} { - return new(SecurityGroup) -} - -func (req AuthorizeSecurityGroupIngress) onBeforeSend(params url.Values) error { - // ICMP code and type may be zero but can also be omitted... - if strings.HasPrefix(strings.ToLower(req.Protocol), "icmp") { - params.Set("icmpcode", strconv.FormatInt(int64(req.IcmpCode), 10)) - params.Set("icmptype", strconv.FormatInt(int64(req.IcmpType), 10)) - } - // StartPort may be zero but can also be omitted... - if req.EndPort != 0 && req.StartPort == 0 { - params.Set("startport", "0") - } - return nil -} - -// AuthorizeSecurityGroupEgress (Async) represents the egress rule creation -type AuthorizeSecurityGroupEgress AuthorizeSecurityGroupIngress - -// Response returns the struct to unmarshal -func (AuthorizeSecurityGroupEgress) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (AuthorizeSecurityGroupEgress) AsyncResponse() interface{} { - return new(SecurityGroup) -} - -func (req AuthorizeSecurityGroupEgress) onBeforeSend(params url.Values) error { - return (AuthorizeSecurityGroupIngress)(req).onBeforeSend(params) -} - -// RevokeSecurityGroupIngress (Async) represents the ingress/egress rule deletion -type RevokeSecurityGroupIngress struct { - ID *UUID `json:"id" doc:"The ID of the ingress rule"` - _ bool `name:"revokeSecurityGroupIngress" description:"Deletes a particular ingress rule from this security group"` -} - -// Response returns the struct to unmarshal -func (RevokeSecurityGroupIngress) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RevokeSecurityGroupIngress) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// RevokeSecurityGroupEgress (Async) represents the ingress/egress rule deletion -type RevokeSecurityGroupEgress struct { - ID *UUID `json:"id" doc:"The ID of the egress rule"` - _ bool `name:"revokeSecurityGroupEgress" description:"Deletes a particular egress rule from this security group"` -} - -// Response returns the struct to unmarshal -func (RevokeSecurityGroupEgress) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RevokeSecurityGroupEgress) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -//go:generate go run generate/main.go -interface=Listable ListSecurityGroups - -// ListSecurityGroups represents a search for security groups -type ListSecurityGroups struct { - ID *UUID `json:"id,omitempty" doc:"list the security group by the id provided"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - SecurityGroupName string `json:"securitygroupname,omitempty" doc:"lists security groups by name"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"lists security groups by virtual machine id"` - _ bool `name:"listSecurityGroups" description:"Lists security groups"` -} - -// ListSecurityGroupsResponse represents a list of security groups -type ListSecurityGroupsResponse struct { - Count int `json:"count"` - SecurityGroup []SecurityGroup `json:"securitygroup"` -} diff --git a/vendor/github.com/exoscale/egoscale/securitygroups_response.go b/vendor/github.com/exoscale/egoscale/securitygroups_response.go deleted file mode 100644 index ff08f333c..000000000 --- a/vendor/github.com/exoscale/egoscale/securitygroups_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListSecurityGroups) Response() interface{} { - return new(ListSecurityGroupsResponse) -} - -// ListRequest returns itself -func (ls *ListSecurityGroups) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListSecurityGroups) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListSecurityGroups) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListSecurityGroups) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListSecurityGroupsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListSecurityGroupsResponse was expected, got %T", resp)) - return - } - - for i := range items.SecurityGroup { - if !callback(&items.SecurityGroup[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/serialization.go b/vendor/github.com/exoscale/egoscale/serialization.go deleted file mode 100644 index 24a0c123f..000000000 --- a/vendor/github.com/exoscale/egoscale/serialization.go +++ /dev/null @@ -1,402 +0,0 @@ -package egoscale - -import ( - "encoding/base64" - "fmt" - "log" - "net" - "net/url" - "reflect" - "strconv" - "strings" -) - -func csQuotePlus(s string) string { - s = strings.Replace(s, "+", "%20", -1) - return s -} - -func csEncode(s string) string { - return csQuotePlus(url.QueryEscape(s)) -} - -// info returns the meta info of a command -// -// command is not a Command so it's easier to Test -func info(command interface{}) (*CommandInfo, error) { - typeof := reflect.TypeOf(command) - - // Going up the pointer chain to find the underlying struct - for typeof.Kind() == reflect.Ptr { - typeof = typeof.Elem() - } - - field, ok := typeof.FieldByName("_") - if !ok { - return nil, fmt.Errorf(`missing meta ("_") field in %#v`, command) - } - - name, nameOk := field.Tag.Lookup("name") - description, _ := field.Tag.Lookup("description") - - if !nameOk { - return nil, fmt.Errorf(`missing "name" key in the tag string of %#v`, command) - } - - info := &CommandInfo{ - Name: name, - Description: description, - } - - return info, nil -} - -// prepareValues uses a command to build a POST request -// -// command is not a Command so it's easier to Test -func prepareValues(prefix string, command interface{}) (url.Values, error) { - params := url.Values{} - - value := reflect.ValueOf(command) - typeof := reflect.TypeOf(command) - - // Going up the pointer chain to find the underlying struct - for typeof.Kind() == reflect.Ptr { - typeof = typeof.Elem() - value = value.Elem() - } - - // Checking for nil commands - if !value.IsValid() { - return nil, fmt.Errorf("cannot serialize the invalid value %#v", command) - } - - for i := 0; i < typeof.NumField(); i++ { - field := typeof.Field(i) - if field.Name == "_" { - continue - } - - val := value.Field(i) - tag := field.Tag - - var err error - var name string - var value interface{} - - if json, ok := tag.Lookup("json"); ok { - n, required := ExtractJSONTag(field.Name, json) - name = prefix + n - - switch val.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - value, err = prepareInt(val.Int(), required) - - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - value, err = prepareUint(val.Uint(), required) - - case reflect.Float32, reflect.Float64: - value, err = prepareFloat(val.Float(), required) - - case reflect.String: - value, err = prepareString(val.String(), required) - - case reflect.Bool: - value, err = prepareBool(val.Bool(), required) - - case reflect.Map: - if val.Len() == 0 { - if required { - err = fmt.Errorf("field is required, got empty map") - } - } else { - value, err = prepareMap(name, val.Interface()) - } - - case reflect.Ptr: - value, err = preparePtr(field.Type.Elem().Kind(), val, required) - - case reflect.Slice: - value, err = prepareSlice(name, field.Type, val, required) - - case reflect.Struct: - value, err = prepareStruct(val.Interface(), required) - - default: - if required { - err = fmt.Errorf("unsupported type") - } - } - } else { - switch val.Kind() { - case reflect.Struct: - value, err = prepareEmbedStruct(val.Interface()) - default: - log.Printf("[SKIP] %s.%s no json label found", typeof.Name(), field.Name) - } - } - - if err != nil { - return nil, fmt.Errorf("%s.%s (%v) %s", typeof.Name(), field.Name, val.Kind(), err) - } - - switch v := value.(type) { - case *string: - if name != "" && v != nil { - params.Set(name, *v) - } - case url.Values: - for k, xs := range v { - for _, x := range xs { - params.Add(k, x) - } - } - } - } - - return params, nil -} - -func prepareInt(v int64, required bool) (*string, error) { - if v == 0 { - if required { - return nil, fmt.Errorf("field is required, got %d", v) - } - return nil, nil - } - value := strconv.FormatInt(v, 10) - return &value, nil -} - -func prepareUint(v uint64, required bool) (*string, error) { - if v == 0 { - if required { - return nil, fmt.Errorf("field is required, got %d", v) - } - return nil, nil - } - - value := strconv.FormatUint(v, 10) - return &value, nil -} - -func prepareFloat(v float64, required bool) (*string, error) { - if v == 0 { - if required { - return nil, fmt.Errorf("field is required, got %f", v) - } - return nil, nil - } - value := strconv.FormatFloat(v, 'f', -1, 64) - return &value, nil -} - -func prepareString(v string, required bool) (*string, error) { - if v == "" { - if required { - return nil, fmt.Errorf("field is required, got %q", v) - } - return nil, nil - } - return &v, nil -} - -func prepareBool(v bool, required bool) (*string, error) { - value := strconv.FormatBool(v) - if !v { - if required { - return &value, nil - } - return nil, nil - } - - return &value, nil -} - -func prepareList(prefix string, slice interface{}) (url.Values, error) { - params := url.Values{} - value := reflect.ValueOf(slice) - - for i := 0; i < value.Len(); i++ { - ps, err := prepareValues(fmt.Sprintf("%s[%d].", prefix, i), value.Index(i).Interface()) - if err != nil { - return nil, err - } - - for k, xs := range ps { - for _, x := range xs { - params.Add(k, x) - } - } - } - - return params, nil -} - -func prepareMap(prefix string, m interface{}) (url.Values, error) { - value := url.Values{} - v := reflect.ValueOf(m) - - for i, key := range v.MapKeys() { - var keyName string - var keyValue string - - switch key.Kind() { - case reflect.String: - keyName = key.String() - default: - return value, fmt.Errorf("only map[string]string are supported (XXX)") - } - - val := v.MapIndex(key) - switch val.Kind() { - case reflect.String: - keyValue = val.String() - default: - return value, fmt.Errorf("only map[string]string are supported (XXX)") - } - - value.Set(fmt.Sprintf("%s[%d].%s", prefix, i, keyName), keyValue) - } - - return value, nil -} - -func preparePtr(kind reflect.Kind, val reflect.Value, required bool) (*string, error) { - if val.IsNil() { - if required { - return nil, fmt.Errorf("field is required, got empty ptr") - } - return nil, nil - } - - switch kind { - case reflect.Bool: - return prepareBool(val.Elem().Bool(), true) - case reflect.Struct: - return prepareStruct(val.Interface(), required) - default: - return nil, fmt.Errorf("kind %v is not supported as a ptr", kind) - } -} - -func prepareSlice(name string, fieldType reflect.Type, val reflect.Value, required bool) (interface{}, error) { - switch fieldType.Elem().Kind() { - case reflect.Uint8: - switch fieldType { - case reflect.TypeOf(net.IPv4zero): - ip := (net.IP)(val.Bytes()) - if ip == nil || ip.Equal(net.IP{}) { - if required { - return nil, fmt.Errorf("field is required, got zero IPv4 address") - } - } else { - value := ip.String() - return &value, nil - } - - case reflect.TypeOf(MAC48(0, 0, 0, 0, 0, 0)): - mac := val.Interface().(MACAddress) - s := mac.String() - if s == "" { - if required { - return nil, fmt.Errorf("field is required, got empty MAC address") - } - } else { - return &s, nil - } - default: - if val.Len() == 0 { - if required { - return nil, fmt.Errorf("field is required, got empty slice") - } - } else { - value := base64.StdEncoding.EncodeToString(val.Bytes()) - return &value, nil - } - } - case reflect.String: - if val.Len() == 0 { - if required { - return nil, fmt.Errorf("field is required, got empty slice") - } - } else { - elems := make([]string, 0, val.Len()) - for i := 0; i < val.Len(); i++ { - // XXX what if the value contains a comma? Double encode? - s := val.Index(i).String() - elems = append(elems, s) - } - value := strings.Join(elems, ",") - return &value, nil - } - default: - switch fieldType.Elem() { - case reflect.TypeOf(CIDR{}), reflect.TypeOf(UUID{}): - if val.Len() == 0 { - if required { - return nil, fmt.Errorf("field is required, got empty slice") - } - } else { - v := reflect.ValueOf(val.Interface()) - ss := make([]string, val.Len()) - for i := 0; i < v.Len(); i++ { - e := v.Index(i).Interface() - s, ok := e.(fmt.Stringer) - if !ok { - return nil, fmt.Errorf("not a String, %T", e) - } - ss[i] = s.String() - } - value := strings.Join(ss, ",") - return &value, nil - } - default: - if val.Len() == 0 { - if required { - return nil, fmt.Errorf("field is required, got empty slice") - } - } else { - return prepareList(name, val.Interface()) - } - } - } - - return nil, nil -} - -func prepareStruct(i interface{}, required bool) (*string, error) { - s, ok := i.(fmt.Stringer) - if !ok { - return nil, fmt.Errorf("struct field not a Stringer") - } - - if s == nil { - if required { - return nil, fmt.Errorf("field is required, got %#v", s) - } - } - - return prepareString(s.String(), required) -} - -func prepareEmbedStruct(i interface{}) (url.Values, error) { - return prepareValues("", i) -} - -// ExtractJSONTag returns the variable name or defaultName as well as if the field is required (!omitempty) -func ExtractJSONTag(defaultName, jsonTag string) (string, bool) { - tags := strings.Split(jsonTag, ",") - name := tags[0] - required := true - for _, tag := range tags { - if tag == "omitempty" { - required = false - } - } - - if name == "" || name == "omitempty" { - name = defaultName - } - return name, required -} diff --git a/vendor/github.com/exoscale/egoscale/service_offerings.go b/vendor/github.com/exoscale/egoscale/service_offerings.go deleted file mode 100644 index 8d3551467..000000000 --- a/vendor/github.com/exoscale/egoscale/service_offerings.go +++ /dev/null @@ -1,77 +0,0 @@ -package egoscale - -// ServiceOffering corresponds to the Compute Offerings -// -// A service offering correspond to some hardware features (CPU, RAM). -// -// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/service_offerings.html -type ServiceOffering struct { - Authorized bool `json:"authorized,omitempty" doc:"is the account/domain authorized to use this service offering"` - CPUNumber int `json:"cpunumber,omitempty" doc:"the number of CPU"` - CPUSpeed int `json:"cpuspeed,omitempty" doc:"the clock rate CPU speed in Mhz"` - Created string `json:"created,omitempty" doc:"the date this service offering was created"` - DefaultUse bool `json:"defaultuse,omitempty" doc:"is this a default system vm offering"` - DeploymentPlanner string `json:"deploymentplanner,omitempty" doc:"deployment strategy used to deploy VM."` - DiskBytesReadRate int64 `json:"diskBytesReadRate,omitempty" doc:"bytes read rate of the service offering"` - DiskBytesWriteRate int64 `json:"diskBytesWriteRate,omitempty" doc:"bytes write rate of the service offering"` - DiskIopsReadRate int64 `json:"diskIopsReadRate,omitempty" doc:"io requests read rate of the service offering"` - DiskIopsWriteRate int64 `json:"diskIopsWriteRate,omitempty" doc:"io requests write rate of the service offering"` - Displaytext string `json:"displaytext,omitempty" doc:"an alternate display text of the service offering."` - HostTags string `json:"hosttags,omitempty" doc:"the host tag for the service offering"` - HypervisorSnapshotReserve int `json:"hypervisorsnapshotreserve,omitempty" doc:"Hypervisor snapshot reserve space as a percent of a volume (for managed storage using Xen or VMware)"` - ID *UUID `json:"id" doc:"the id of the service offering"` - IsCustomized bool `json:"iscustomized,omitempty" doc:"is true if the offering is customized"` - IsCustomizedIops bool `json:"iscustomizediops,omitempty" doc:"true if disk offering uses custom iops, false otherwise"` - IsSystem bool `json:"issystem,omitempty" doc:"is this a system vm offering"` - IsVolatile bool `json:"isvolatile,omitempty" doc:"true if the vm needs to be volatile, i.e., on every reboot of vm from API root disk is discarded and creates a new root disk"` - LimitCPUUse bool `json:"limitcpuuse,omitempty" doc:"restrict the CPU usage to committed service offering"` - MaxIops int64 `json:"maxiops,omitempty" doc:"the max iops of the disk offering"` - Memory int `json:"memory,omitempty" doc:"the memory in MB"` - MinIops int64 `json:"miniops,omitempty" doc:"the min iops of the disk offering"` - Name string `json:"name,omitempty" doc:"the name of the service offering"` - NetworkRate int `json:"networkrate,omitempty" doc:"data transfer rate in megabits per second allowed."` - OfferHA bool `json:"offerha,omitempty" doc:"the ha support in the service offering"` - Restricted bool `json:"restricted,omitempty" doc:"is this offering restricted"` - ServiceOfferingDetails map[string]string `json:"serviceofferingdetails,omitempty" doc:"additional key/value details tied with this service offering"` - StorageType string `json:"storagetype,omitempty" doc:"the storage type for this service offering"` - SystemVMType string `json:"systemvmtype,omitempty" doc:"is this a the systemvm type for system vm offering"` - Tags string `json:"tags,omitempty" doc:"the tags for the service offering"` -} - -// ListRequest builds the ListSecurityGroups request -func (so ServiceOffering) ListRequest() (ListCommand, error) { - // Restricted cannot be applied here because it really has three states - req := &ListServiceOfferings{ - ID: so.ID, - Name: so.Name, - SystemVMType: so.SystemVMType, - } - - if so.IsSystem { - req.IsSystem = &so.IsSystem - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListServiceOfferings - -// ListServiceOfferings represents a query for service offerings -type ListServiceOfferings struct { - ID *UUID `json:"id,omitempty" doc:"ID of the service offering"` - IsSystem *bool `json:"issystem,omitempty" doc:"is this a system vm offering"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"name of the service offering"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - Restricted *bool `json:"restricted,omitempty" doc:"filter by the restriction flag: true to list only the restricted service offerings, false to list non-restricted service offerings, or nothing for all."` - SystemVMType string `json:"systemvmtype,omitempty" doc:"the system VM type. Possible types are \"consoleproxy\", \"secondarystoragevm\" or \"domainrouter\"."` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the ID of the virtual machine. Pass this in if you want to see the available service offering that a virtual machine can be changed to."` - _ bool `name:"listServiceOfferings" description:"Lists all available service offerings."` -} - -// ListServiceOfferingsResponse represents a list of service offerings -type ListServiceOfferingsResponse struct { - Count int `json:"count"` - ServiceOffering []ServiceOffering `json:"serviceoffering"` -} diff --git a/vendor/github.com/exoscale/egoscale/serviceofferings_response.go b/vendor/github.com/exoscale/egoscale/serviceofferings_response.go deleted file mode 100644 index a01d4aaf4..000000000 --- a/vendor/github.com/exoscale/egoscale/serviceofferings_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListServiceOfferings) Response() interface{} { - return new(ListServiceOfferingsResponse) -} - -// ListRequest returns itself -func (ls *ListServiceOfferings) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListServiceOfferings) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListServiceOfferings) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListServiceOfferings) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListServiceOfferingsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListServiceOfferingsResponse was expected, got %T", resp)) - return - } - - for i := range items.ServiceOffering { - if !callback(&items.ServiceOffering[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/snapshots.go b/vendor/github.com/exoscale/egoscale/snapshots.go deleted file mode 100644 index 191f4a0f7..000000000 --- a/vendor/github.com/exoscale/egoscale/snapshots.go +++ /dev/null @@ -1,139 +0,0 @@ -package egoscale - -// SnapshotState represents the Snapshot.State enum -// -// See: https://github.com/apache/cloudstack/blob/master/api/src/main/java/com/cloud/storage/Snapshot.java -type SnapshotState string - -const ( - // Allocated ... (TODO) - Allocated SnapshotState = "Allocated" - // Creating ... (TODO) - Creating SnapshotState = "Creating" - // CreatedOnPrimary ... (TODO) - CreatedOnPrimary SnapshotState = "CreatedOnPrimary" - // BackingUp ... (TODO) - BackingUp SnapshotState = "BackingUp" - // BackedUp ... (TODO) - BackedUp SnapshotState = "BackedUp" - // Copying ... (TODO) - Copying SnapshotState = "Copying" - // Destroying ... (TODO) - Destroying SnapshotState = "Destroying" - // Destroyed ... (TODO) - Destroyed SnapshotState = "Destroyed" - // Error is a state where the user can't see the snapshot while the snapshot may still exist on the storage - Error SnapshotState = "Error" -) - -// Snapshot represents a volume snapshot -type Snapshot struct { - Account string `json:"account,omitempty" doc:"the account associated with the snapshot"` - AccountID *UUID `json:"accountid,omitempty" doc:"the account ID associated with the snapshot"` - Created string `json:"created,omitempty" doc:"the date the snapshot was created"` - ID *UUID `json:"id,omitempty" doc:"ID of the snapshot"` - IntervalType string `json:"intervaltype,omitempty" doc:"valid types are hourly, daily, weekly, monthy, template, and none."` - Name string `json:"name,omitempty" doc:"name of the snapshot"` - PhysicalSize int64 `json:"physicalsize,omitempty" doc:"physical size of the snapshot on image store"` - Revertable *bool `json:"revertable,omitempty" doc:"indicates whether the underlying storage supports reverting the volume to this snapshot"` - Size int64 `json:"size,omitempty" doc:"the size of original volume"` - SnapshotType string `json:"snapshottype,omitempty" doc:"the type of the snapshot"` - State string `json:"state,omitempty" doc:"the state of the snapshot. BackedUp means that snapshot is ready to be used; Creating - the snapshot is being allocated on the primary storage; BackingUp - the snapshot is being backed up on secondary storage"` - Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with snapshot"` - VolumeID *UUID `json:"volumeid,omitempty" doc:"ID of the disk volume"` - VolumeName string `json:"volumename,omitempty" doc:"name of the disk volume"` - VolumeType string `json:"volumetype,omitempty" doc:"type of the disk volume"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"id of the availability zone"` -} - -// ResourceType returns the type of the resource -func (Snapshot) ResourceType() string { - return "Snapshot" -} - -// CreateSnapshot (Async) creates an instant snapshot of a volume -type CreateSnapshot struct { - VolumeID *UUID `json:"volumeid" doc:"The ID of the disk volume"` - QuiesceVM *bool `json:"quiescevm,omitempty" doc:"quiesce vm if true"` - _ bool `name:"createSnapshot" description:"Creates an instant snapshot of a volume."` -} - -// Response returns the struct to unmarshal -func (CreateSnapshot) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (CreateSnapshot) AsyncResponse() interface{} { - return new(Snapshot) -} - -// ListRequest builds the ListSnapshot request -func (ss Snapshot) ListRequest() (ListCommand, error) { - // Restricted cannot be applied here because it really has three states - req := &ListSnapshots{ - ID: ss.ID, - Name: ss.Name, - VolumeID: ss.VolumeID, - SnapshotType: ss.SnapshotType, - ZoneID: ss.ZoneID, - // TODO: tags - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListSnapshots - -// ListSnapshots lists the volume snapshots -type ListSnapshots struct { - ID *UUID `json:"id,omitempty" doc:"lists snapshot by snapshot ID"` - IntervalType string `json:"intervaltype,omitempty" doc:"valid values are HOURLY, DAILY, WEEKLY, and MONTHLY."` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"lists snapshot by snapshot name"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - SnapshotType string `json:"snapshottype,omitempty" doc:"valid values are MANUAL or RECURRING."` - Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"` - VolumeID *UUID `json:"volumeid,omitempty" doc:"the ID of the disk volume"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"list snapshots by zone id"` - _ bool `name:"listSnapshots" description:"Lists all available snapshots for the account."` -} - -// ListSnapshotsResponse represents a list of volume snapshots -type ListSnapshotsResponse struct { - Count int `json:"count"` - Snapshot []Snapshot `json:"snapshot"` -} - -// DeleteSnapshot (Async) deletes a snapshot of a disk volume -type DeleteSnapshot struct { - ID *UUID `json:"id" doc:"The ID of the snapshot"` - _ bool `name:"deleteSnapshot" description:"Deletes a snapshot of a disk volume."` -} - -// Response returns the struct to unmarshal -func (DeleteSnapshot) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DeleteSnapshot) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// RevertSnapshot (Async) reverts a volume snapshot -type RevertSnapshot struct { - ID *UUID `json:"id" doc:"The ID of the snapshot"` - _ bool `name:"revertSnapshot" description:"revert a volume snapshot."` -} - -// Response returns the struct to unmarshal -func (RevertSnapshot) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RevertSnapshot) AsyncResponse() interface{} { - return new(BooleanResponse) -} diff --git a/vendor/github.com/exoscale/egoscale/snapshots_response.go b/vendor/github.com/exoscale/egoscale/snapshots_response.go deleted file mode 100644 index 2ca9cff5a..000000000 --- a/vendor/github.com/exoscale/egoscale/snapshots_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListSnapshots) Response() interface{} { - return new(ListSnapshotsResponse) -} - -// ListRequest returns itself -func (ls *ListSnapshots) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListSnapshots) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListSnapshots) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListSnapshots) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListSnapshotsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListSnapshotsResponse was expected, got %T", resp)) - return - } - - for i := range items.Snapshot { - if !callback(&items.Snapshot[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/ssh_keypairs.go b/vendor/github.com/exoscale/egoscale/ssh_keypairs.go deleted file mode 100644 index 9f2bedca0..000000000 --- a/vendor/github.com/exoscale/egoscale/ssh_keypairs.go +++ /dev/null @@ -1,105 +0,0 @@ -package egoscale - -import ( - "context" - "fmt" -) - -// SSHKeyPair represents an SSH key pair -// -// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/stable/virtual_machines.html#creating-the-ssh-keypair -type SSHKeyPair struct { - Fingerprint string `json:"fingerprint,omitempty" doc:"Fingerprint of the public key"` - Name string `json:"name,omitempty" doc:"Name of the keypair"` - PrivateKey string `json:"privatekey,omitempty" doc:"Private key"` -} - -// Delete removes the given SSH key, by Name -func (ssh SSHKeyPair) Delete(ctx context.Context, client *Client) error { - if ssh.Name == "" { - return fmt.Errorf("an SSH Key Pair may only be deleted using Name") - } - - return client.BooleanRequestWithContext(ctx, &DeleteSSHKeyPair{ - Name: ssh.Name, - }) -} - -// ListRequest builds the ListSSHKeyPairs request -func (ssh SSHKeyPair) ListRequest() (ListCommand, error) { - req := &ListSSHKeyPairs{ - Fingerprint: ssh.Fingerprint, - Name: ssh.Name, - } - - return req, nil -} - -// CreateSSHKeyPair represents a new keypair to be created -type CreateSSHKeyPair struct { - Name string `json:"name" doc:"Name of the keypair"` - _ bool `name:"createSSHKeyPair" description:"Create a new keypair and returns the private key"` -} - -// Response returns the struct to unmarshal -func (CreateSSHKeyPair) Response() interface{} { - return new(SSHKeyPair) -} - -// DeleteSSHKeyPair represents a new keypair to be created -type DeleteSSHKeyPair struct { - Name string `json:"name" doc:"Name of the keypair"` - _ bool `name:"deleteSSHKeyPair" description:"Deletes a keypair by name"` -} - -// Response returns the struct to unmarshal -func (DeleteSSHKeyPair) Response() interface{} { - return new(BooleanResponse) -} - -// RegisterSSHKeyPair represents a new registration of a public key in a keypair -type RegisterSSHKeyPair struct { - Name string `json:"name" doc:"Name of the keypair"` - PublicKey string `json:"publickey" doc:"Public key material of the keypair"` - _ bool `name:"registerSSHKeyPair" description:"Register a public key in a keypair under a certain name"` -} - -// Response returns the struct to unmarshal -func (RegisterSSHKeyPair) Response() interface{} { - return new(SSHKeyPair) -} - -//go:generate go run generate/main.go -interface=Listable ListSSHKeyPairs - -// ListSSHKeyPairs represents a query for a list of SSH KeyPairs -type ListSSHKeyPairs struct { - Fingerprint string `json:"fingerprint,omitempty" doc:"A public key fingerprint to look for"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"A key pair name to look for"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - _ bool `name:"listSSHKeyPairs" description:"List registered keypairs"` -} - -// ListSSHKeyPairsResponse represents a list of SSH key pairs -type ListSSHKeyPairsResponse struct { - Count int `json:"count"` - SSHKeyPair []SSHKeyPair `json:"sshkeypair"` -} - -// ResetSSHKeyForVirtualMachine (Async) represents a change for the key pairs -type ResetSSHKeyForVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - KeyPair string `json:"keypair" doc:"Name of the ssh key pair used to login to the virtual machine"` - _ bool `name:"resetSSHKeyForVirtualMachine" description:"Resets the SSH Key for virtual machine. The virtual machine must be in a \"Stopped\" state."` -} - -// Response returns the struct to unmarshal -func (ResetSSHKeyForVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (ResetSSHKeyForVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} diff --git a/vendor/github.com/exoscale/egoscale/sshkeypairs_response.go b/vendor/github.com/exoscale/egoscale/sshkeypairs_response.go deleted file mode 100644 index 31c471df2..000000000 --- a/vendor/github.com/exoscale/egoscale/sshkeypairs_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListSSHKeyPairs) Response() interface{} { - return new(ListSSHKeyPairsResponse) -} - -// ListRequest returns itself -func (ls *ListSSHKeyPairs) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListSSHKeyPairs) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListSSHKeyPairs) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListSSHKeyPairs) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListSSHKeyPairsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListSSHKeyPairsResponse was expected, got %T", resp)) - return - } - - for i := range items.SSHKeyPair { - if !callback(&items.SSHKeyPair[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/tags.go b/vendor/github.com/exoscale/egoscale/tags.go deleted file mode 100644 index 56e014850..000000000 --- a/vendor/github.com/exoscale/egoscale/tags.go +++ /dev/null @@ -1,84 +0,0 @@ -package egoscale - -// ResourceTag is a tag associated with a resource -// -// https://community.exoscale.com/documentation/compute/instance-tags/ -type ResourceTag struct { - Account string `json:"account,omitempty" doc:"the account associated with the tag"` - Customer string `json:"customer,omitempty" doc:"customer associated with the tag"` - Key string `json:"key,omitempty" doc:"tag key name"` - ResourceID *UUID `json:"resourceid,omitempty" doc:"id of the resource"` - ResourceType string `json:"resourcetype,omitempty" doc:"resource type"` - Value string `json:"value,omitempty" doc:"tag value"` -} - -// ListRequest builds the ListZones request -func (tag ResourceTag) ListRequest() (ListCommand, error) { - req := &ListTags{ - Customer: tag.Customer, - Key: tag.Key, - ResourceID: tag.ResourceID, - ResourceType: tag.ResourceType, - Value: tag.Value, - } - - return req, nil -} - -// CreateTags (Async) creates resource tag(s) -type CreateTags struct { - ResourceIDs []UUID `json:"resourceids" doc:"list of resources to create the tags for"` - ResourceType string `json:"resourcetype" doc:"type of the resource"` - Tags []ResourceTag `json:"tags" doc:"Map of tags (key/value pairs)"` - Customer string `json:"customer,omitempty" doc:"identifies client specific tag. When the value is not null, the tag can't be used by cloudStack code internally"` - _ bool `name:"createTags" description:"Creates resource tag(s)"` -} - -// Response returns the struct to unmarshal -func (CreateTags) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (CreateTags) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// DeleteTags (Async) deletes the resource tag(s) -type DeleteTags struct { - ResourceIDs []UUID `json:"resourceids" doc:"Delete tags for resource id(s)"` - ResourceType string `json:"resourcetype" doc:"Delete tag by resource type"` - Tags []ResourceTag `json:"tags,omitempty" doc:"Delete tags matching key/value pairs"` - _ bool `name:"deleteTags" description:"Deleting resource tag(s)"` -} - -// Response returns the struct to unmarshal -func (DeleteTags) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DeleteTags) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -//go:generate go run generate/main.go -interface=Listable ListTags - -// ListTags list resource tag(s) -type ListTags struct { - Customer string `json:"customer,omitempty" doc:"list by customer name"` - Key string `json:"key,omitempty" doc:"list by key"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - ResourceID *UUID `json:"resourceid,omitempty" doc:"list by resource id"` - ResourceType string `json:"resourcetype,omitempty" doc:"list by resource type"` - Value string `json:"value,omitempty" doc:"list by value"` - _ bool `name:"listTags" description:"List resource tag(s)"` -} - -// ListTagsResponse represents a list of resource tags -type ListTagsResponse struct { - Count int `json:"count"` - Tag []ResourceTag `json:"tag"` -} diff --git a/vendor/github.com/exoscale/egoscale/tags_response.go b/vendor/github.com/exoscale/egoscale/tags_response.go deleted file mode 100644 index 870ef49a8..000000000 --- a/vendor/github.com/exoscale/egoscale/tags_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListTags) Response() interface{} { - return new(ListTagsResponse) -} - -// ListRequest returns itself -func (ls *ListTags) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListTags) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListTags) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListTags) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListTagsResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListTagsResponse was expected, got %T", resp)) - return - } - - for i := range items.Tag { - if !callback(&items.Tag[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/templates.go b/vendor/github.com/exoscale/egoscale/templates.go deleted file mode 100644 index 9f49369d2..000000000 --- a/vendor/github.com/exoscale/egoscale/templates.go +++ /dev/null @@ -1,163 +0,0 @@ -package egoscale - -// Template represents a machine to be deployed. -type Template struct { - Account string `json:"account,omitempty" doc:"the account name to which the template belongs"` - AccountID *UUID `json:"accountid,omitempty" doc:"the account id to which the template belongs"` - Bootable bool `json:"bootable,omitempty" doc:"true if the ISO is bootable, false otherwise"` - Checksum string `json:"checksum,omitempty" doc:"checksum of the template"` - Created string `json:"created,omitempty" doc:"the date this template was created"` - CrossZones bool `json:"crossZones,omitempty" doc:"true if the template is managed across all Zones, false otherwise"` - Details map[string]string `json:"details,omitempty" doc:"additional key/value details tied with template"` - DisplayText string `json:"displaytext,omitempty" doc:"the template display text"` - Format string `json:"format,omitempty" doc:"the format of the template."` - HostID *UUID `json:"hostid,omitempty" doc:"the ID of the secondary storage host for the template"` - HostName string `json:"hostname,omitempty" doc:"the name of the secondary storage host for the template"` - Hypervisor string `json:"hypervisor,omitempty" doc:"the target hypervisor for the template"` - ID *UUID `json:"id,omitempty" doc:"the template ID"` - IsDynamicallyScalable bool `json:"isdynamicallyscalable,omitempty" doc:"true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory"` - IsExtractable bool `json:"isextractable,omitempty" doc:"true if the template is extractable, false otherwise"` - IsFeatured bool `json:"isfeatured,omitempty" doc:"true if this template is a featured template, false otherwise"` - IsPublic bool `json:"ispublic,omitempty" doc:"true if this template is a public template, false otherwise"` - IsReady bool `json:"isready,omitempty" doc:"true if the template is ready to be deployed from, false otherwise."` - Name string `json:"name,omitempty" doc:"the template name"` - OsCategoryID *UUID `json:"oscategoryid,omitempty" doc:"the ID of the OS category for this template"` - OsCategoryName string `json:"oscategoryname,omitempty" doc:"the name of the OS category for this template"` - OsTypeID *UUID `json:"ostypeid,omitempty" doc:"the ID of the OS type for this template"` - OsTypeName string `json:"ostypename,omitempty" doc:"the name of the OS type for this template"` - PasswordEnabled bool `json:"passwordenabled,omitempty" doc:"true if the reset password feature is enabled, false otherwise"` - Removed string `json:"removed,omitempty" doc:"the date this template was removed"` - Size int64 `json:"size,omitempty" doc:"the size of the template"` - SourceTemplateID *UUID `json:"sourcetemplateid,omitempty" doc:"the template ID of the parent template if present"` - SSHKeyEnabled bool `json:"sshkeyenabled,omitempty" doc:"true if template is sshkey enabled, false otherwise"` - Status string `json:"status,omitempty" doc:"the status of the template"` - Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with tempate"` - TemplateDirectory string `json:"templatedirectory,omitempty" doc:"Template directory"` - TemplateTag string `json:"templatetag,omitempty" doc:"the tag of this template"` - TemplateType string `json:"templatetype,omitempty" doc:"the type of the template"` - URL string `json:"url,omitempty" doc:"Original URL of the template where it was downloaded"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the zone for this template"` - ZoneName string `json:"zonename,omitempty" doc:"the name of the zone for this template"` -} - -// ResourceType returns the type of the resource -func (Template) ResourceType() string { - return "Template" -} - -// ListRequest builds the ListTemplates request -func (template Template) ListRequest() (ListCommand, error) { - req := &ListTemplates{ - ID: template.ID, - Name: template.Name, - ZoneID: template.ZoneID, - } - if template.IsFeatured { - req.TemplateFilter = "featured" - } - if template.Removed != "" { - *req.ShowRemoved = true - } - - for i := range template.Tags { - req.Tags = append(req.Tags, template.Tags[i]) - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListTemplates - -// ListTemplates represents a template query filter -type ListTemplates struct { - TemplateFilter string `json:"templatefilter" doc:"Possible values are \"featured\", \"self\", \"selfexecutable\",\"sharedexecutable\",\"executable\", and \"community\". * featured : templates that have been marked as featured and public. * self : templates that have been registered or created by the calling user. * selfexecutable : same as self, but only returns templates that can be used to deploy a new VM. * sharedexecutable : templates ready to be deployed that have been granted to the calling user by another user. * executable : templates that are owned by the calling user, or public templates, that can be used to deploy a VM. * community : templates that have been marked as public but not featured."` - ID *UUID `json:"id,omitempty" doc:"the template ID"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"the template name"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - ShowRemoved *bool `json:"showremoved,omitempty" doc:"Show removed templates as well"` - Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"list templates by zoneid"` - _ bool `name:"listTemplates" description:"List all public, private, and privileged templates."` -} - -// ListTemplatesResponse represents a list of templates -type ListTemplatesResponse struct { - Count int `json:"count"` - Template []Template `json:"template"` -} - -// OSCategory represents an OS category -type OSCategory struct { - ID *UUID `json:"id,omitempty" doc:"the ID of the OS category"` - Name string `json:"name,omitempty" doc:"the name of the OS category"` -} - -// ListRequest builds the ListOSCategories request -func (osCat OSCategory) ListRequest() (ListCommand, error) { - req := &ListOSCategories{ - Name: osCat.Name, - ID: osCat.ID, - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListOSCategories - -// ListOSCategories lists the OS categories -type ListOSCategories struct { - ID *UUID `json:"id,omitempty" doc:"list Os category by id"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"list os category by name"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - _ bool `name:"listOsCategories" description:"Lists all supported OS categories for this cloud."` -} - -// ListOSCategoriesResponse represents a list of OS categories -type ListOSCategoriesResponse struct { - Count int `json:"count"` - OSCategory []OSCategory `json:"oscategory"` -} - -// DeleteTemplate deletes a template by ID -type DeleteTemplate struct { - _ bool `name:"deleteTemplate" description:"Deletes a template"` - ID *UUID `json:"id" doc:"the ID of the template"` -} - -// Response returns the struct to unmarshal -func (DeleteTemplate) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DeleteTemplate) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// RegisterCustomTemplate registers a new template -type RegisterCustomTemplate struct { - _ bool `name:"registerCustomTemplate" description:"Register a new template."` - Checksum string `json:"checksum" doc:"the MD5 checksum value of this template"` - Details map[string]string `json:"details,omitempty" doc:"Template details in key/value pairs"` - Displaytext string `json:"displaytext" doc:"the display text of the template"` - Name string `json:"name" doc:"the name of the template"` - PasswordEnabled *bool `json:"passwordenabled,omitempty" doc:"true if the template supports the password reset feature; default is false"` - SSHKeyEnabled *bool `json:"sshkeyenabled,omitempty" doc:"true if the template supports the sshkey upload feature; default is false"` - TemplateTag string `json:"templatetag,omitempty" doc:"the tag for this template"` - URL string `json:"url" doc:"the URL of where the template is hosted"` - ZoneID *UUID `json:"zoneid" doc:"the ID of the zone the template is to be hosted on"` -} - -// Response returns the struct to unmarshal -func (RegisterCustomTemplate) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RegisterCustomTemplate) AsyncResponse() interface{} { - return new([]Template) -} diff --git a/vendor/github.com/exoscale/egoscale/templates_response.go b/vendor/github.com/exoscale/egoscale/templates_response.go deleted file mode 100644 index b9d61b546..000000000 --- a/vendor/github.com/exoscale/egoscale/templates_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListTemplates) Response() interface{} { - return new(ListTemplatesResponse) -} - -// ListRequest returns itself -func (ls *ListTemplates) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListTemplates) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListTemplates) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListTemplates) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListTemplatesResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListTemplatesResponse was expected, got %T", resp)) - return - } - - for i := range items.Template { - if !callback(&items.Template[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/users.go b/vendor/github.com/exoscale/egoscale/users.go deleted file mode 100644 index 71078a97b..000000000 --- a/vendor/github.com/exoscale/egoscale/users.go +++ /dev/null @@ -1,63 +0,0 @@ -package egoscale - -// User represents a User -type User struct { - APIKey string `json:"apikey,omitempty" doc:"the api key of the user"` - Account string `json:"account,omitempty" doc:"the account name of the user"` - AccountID *UUID `json:"accountid,omitempty" doc:"the account ID of the user"` - Created string `json:"created,omitempty" doc:"the date and time the user account was created"` - Email string `json:"email,omitempty" doc:"the user email address"` - FirstName string `json:"firstname,omitempty" doc:"the user firstname"` - ID *UUID `json:"id,omitempty" doc:"the user ID"` - IsDefault bool `json:"isdefault,omitempty" doc:"true if user is default, false otherwise"` - LastName string `json:"lastname,omitempty" doc:"the user lastname"` - RoleID *UUID `json:"roleid,omitempty" doc:"the ID of the role"` - RoleName string `json:"rolename,omitempty" doc:"the name of the role"` - RoleType string `json:"roletype,omitempty" doc:"the type of the role"` - SecretKey string `json:"secretkey,omitempty" doc:"the secret key of the user"` - State string `json:"state,omitempty" doc:"the user state"` - Timezone string `json:"timezone,omitempty" doc:"the timezone user was created in"` - UserName string `json:"username,omitempty" doc:"the user name"` -} - -// ListRequest builds the ListUsers request -func (user User) ListRequest() (ListCommand, error) { - req := &ListUsers{ - ID: user.ID, - UserName: user.UserName, - } - - return req, nil -} - -// RegisterUserKeys registers a new set of key of the given user -// -// NB: only the APIKey and SecretKey will be filled -type RegisterUserKeys struct { - ID *UUID `json:"id" doc:"User id"` - _ bool `name:"registerUserKeys" description:"This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user"` -} - -// Response returns the struct to unmarshal -func (RegisterUserKeys) Response() interface{} { - return new(User) -} - -//go:generate go run generate/main.go -interface=Listable ListUsers - -// ListUsers represents the search for Users -type ListUsers struct { - ID *UUID `json:"id,omitempty" doc:"List user by ID."` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - State string `json:"state,omitempty" doc:"List users by state of the user account."` - UserName string `json:"username,omitempty" doc:"List user by the username"` - _ bool `name:"listUsers" description:"Lists user accounts"` -} - -// ListUsersResponse represents a list of users -type ListUsersResponse struct { - Count int `json:"count"` - User []User `json:"user"` -} diff --git a/vendor/github.com/exoscale/egoscale/users_response.go b/vendor/github.com/exoscale/egoscale/users_response.go deleted file mode 100644 index 4bd4bf473..000000000 --- a/vendor/github.com/exoscale/egoscale/users_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListUsers) Response() interface{} { - return new(ListUsersResponse) -} - -// ListRequest returns itself -func (ls *ListUsers) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListUsers) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListUsers) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListUsers) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListUsersResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListUsersResponse was expected, got %T", resp)) - return - } - - for i := range items.User { - if !callback(&items.User[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/uuid.go b/vendor/github.com/exoscale/egoscale/uuid.go deleted file mode 100644 index dd8be1557..000000000 --- a/vendor/github.com/exoscale/egoscale/uuid.go +++ /dev/null @@ -1,79 +0,0 @@ -package egoscale - -import ( - "encoding/json" - "fmt" - - uuid "github.com/gofrs/uuid" -) - -// UUID holds a UUID v4 -type UUID struct { - uuid.UUID -} - -// DeepCopy create a true copy of the receiver. -func (u *UUID) DeepCopy() *UUID { - if u == nil { - return nil - } - - out := [uuid.Size]byte{} - copy(out[:], u.Bytes()) - - return &UUID{ - (uuid.UUID)(out), - } -} - -// DeepCopyInto copies the receiver into out. -// -// In must be non nil. -func (u *UUID) DeepCopyInto(out *UUID) { - o := [uuid.Size]byte{} - copy(o[:], u.Bytes()) - - out.UUID = (uuid.UUID)(o) -} - -// Equal returns true if itself is equal to other. -func (u UUID) Equal(other UUID) bool { - return u == other -} - -// UnmarshalJSON unmarshals the raw JSON into the UUID. -func (u *UUID) UnmarshalJSON(b []byte) error { - var s string - if err := json.Unmarshal(b, &s); err != nil { - return err - } - - new, err := ParseUUID(s) - if err == nil { - u.UUID = new.UUID - } - return err -} - -// MarshalJSON converts the UUID to a string representation. -func (u UUID) MarshalJSON() ([]byte, error) { - return []byte(fmt.Sprintf("%q", u.String())), nil -} - -// ParseUUID parses a string into a UUID. -func ParseUUID(s string) (*UUID, error) { - u, err := uuid.FromString(s) - if err != nil { - return nil, err - } - return &UUID{u}, nil -} - -// MustParseUUID acts like ParseUUID but panic in case of a failure. -func MustParseUUID(s string) *UUID { - u, e := ParseUUID(s) - if e != nil { - panic(e) - } - return u -} diff --git a/vendor/github.com/exoscale/egoscale/version.go b/vendor/github.com/exoscale/egoscale/version.go deleted file mode 100644 index d96946140..000000000 --- a/vendor/github.com/exoscale/egoscale/version.go +++ /dev/null @@ -1,4 +0,0 @@ -package egoscale - -// Version of the library -const Version = "0.18.1" diff --git a/vendor/github.com/exoscale/egoscale/virtual_machines.go b/vendor/github.com/exoscale/egoscale/virtual_machines.go deleted file mode 100644 index da6ce65c5..000000000 --- a/vendor/github.com/exoscale/egoscale/virtual_machines.go +++ /dev/null @@ -1,613 +0,0 @@ -package egoscale - -import ( - "bytes" - "compress/gzip" - "context" - "encoding/base64" - "fmt" - "io/ioutil" - "net" - "net/url" -) - -// VirtualMachineState holds the state of the instance -// -// https://github.com/apache/cloudstack/blob/master/api/src/main/java/com/cloud/vm/VirtualMachine.java -type VirtualMachineState string - -const ( - // VirtualMachineStarting VM is being started. At this state, you should find host id filled which means it's being started on that host - VirtualMachineStarting VirtualMachineState = "Starting" - // VirtualMachineRunning VM is running. host id has the host that it is running on - VirtualMachineRunning VirtualMachineState = "Running" - // VirtualMachineStopping VM is being stopped. host id has the host that it is being stopped on - VirtualMachineStopping VirtualMachineState = "Stopping" - // VirtualMachineStopped VM is stopped. host id should be null - VirtualMachineStopped VirtualMachineState = "Stopped" - // VirtualMachineDestroyed VM is marked for destroy - VirtualMachineDestroyed VirtualMachineState = "Destroyed" - // VirtualMachineExpunging "VM is being expunged - VirtualMachineExpunging VirtualMachineState = "Expunging" - // VirtualMachineMigrating VM is being live migrated. host id holds destination host, last host id holds source host - VirtualMachineMigrating VirtualMachineState = "Migrating" - // VirtualMachineMoving VM is being migrated offline (volume is being moved). - VirtualMachineMoving VirtualMachineState = "Moving" - // VirtualMachineError VM is in error - VirtualMachineError VirtualMachineState = "Error" - // VirtualMachineUnknown VM state is unknown - VirtualMachineUnknown VirtualMachineState = "Unknown" - // VirtualMachineShutdowned VM is shutdowned from inside - VirtualMachineShutdowned VirtualMachineState = "Shutdowned" -) - -// VirtualMachine represents a virtual machine -// -// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/stable/virtual_machines.html -type VirtualMachine struct { - Account string `json:"account,omitempty" doc:"the account associated with the virtual machine"` - AccountID *UUID `json:"accountid,omitempty" doc:"the account ID associated with the virtual machine"` - AffinityGroup []AffinityGroup `json:"affinitygroup,omitempty" doc:"list of affinity groups associated with the virtual machine"` - ClusterID *UUID `json:"clusterid,omitempty" doc:"the ID of the vm's cluster"` - ClusterName string `json:"clustername,omitempty" doc:"the name of the vm's cluster"` - CPUNumber int `json:"cpunumber,omitempty" doc:"the number of cpu this virtual machine is running with"` - CPUSpeed int `json:"cpuspeed,omitempty" doc:"the speed of each cpu"` - CPUUsed string `json:"cpuused,omitempty" doc:"the amount of the vm's CPU currently used"` - Created string `json:"created,omitempty" doc:"the date when this virtual machine was created"` - Details map[string]string `json:"details,omitempty" doc:"Vm details in key/value pairs."` - DiskIoRead int64 `json:"diskioread,omitempty" doc:"the read (io) of disk on the vm"` - DiskIoWrite int64 `json:"diskiowrite,omitempty" doc:"the write (io) of disk on the vm"` - DiskKbsRead int64 `json:"diskkbsread,omitempty" doc:"the read (bytes) of disk on the vm"` - DiskKbsWrite int64 `json:"diskkbswrite,omitempty" doc:"the write (bytes) of disk on the vm"` - DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"the ID of the disk offering of the virtual machine"` - DiskOfferingName string `json:"diskofferingname,omitempty" doc:"the name of the disk offering of the virtual machine"` - DisplayName string `json:"displayname,omitempty" doc:"user generated name. The name of the virtual machine is returned if no displayname exists."` - ForVirtualNetwork bool `json:"forvirtualnetwork,omitempty" doc:"the virtual network for the service offering"` - Group string `json:"group,omitempty" doc:"the group name of the virtual machine"` - GroupID *UUID `json:"groupid,omitempty" doc:"the group ID of the virtual machine"` - HAEnable bool `json:"haenable,omitempty" doc:"true if high-availability is enabled, false otherwise"` - HostName string `json:"hostname,omitempty" doc:"the name of the host for the virtual machine"` - ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` - InstanceName string `json:"instancename,omitempty" doc:"instance name of the user vm; this parameter is returned to the ROOT admin only"` - IsoDisplayText string `json:"isodisplaytext,omitempty" doc:"an alternate display text of the ISO attached to the virtual machine"` - IsoID *UUID `json:"isoid,omitempty" doc:"the ID of the ISO attached to the virtual machine"` - IsoName string `json:"isoname,omitempty" doc:"the name of the ISO attached to the virtual machine"` - KeyPair string `json:"keypair,omitempty" doc:"ssh key-pair"` - Memory int `json:"memory,omitempty" doc:"the memory allocated for the virtual machine"` - Name string `json:"name,omitempty" doc:"the name of the virtual machine"` - NetworkKbsRead int64 `json:"networkkbsread,omitempty" doc:"the incoming network traffic on the vm"` - NetworkKbsWrite int64 `json:"networkkbswrite,omitempty" doc:"the outgoing network traffic on the host"` - Nic []Nic `json:"nic,omitempty" doc:"the list of nics associated with vm"` - OSCategoryID *UUID `json:"oscategoryid,omitempty" doc:"Os category ID of the virtual machine"` - OSCategoryName string `json:"oscategoryname,omitempty" doc:"Os category name of the virtual machine"` - OSTypeID *UUID `json:"ostypeid,omitempty" doc:"OS type id of the vm"` - Password string `json:"password,omitempty" doc:"the password (if exists) of the virtual machine"` - PasswordEnabled bool `json:"passwordenabled,omitempty" doc:"true if the password rest feature is enabled, false otherwise"` - PCIDevices []PCIDevice `json:"pcidevices,omitempty" doc:"list of PCI devices"` - PodID *UUID `json:"podid,omitempty" doc:"the ID of the vm's pod"` - PodName string `json:"podname,omitempty" doc:"the name of the vm's pod"` - PublicIP string `json:"publicip,omitempty" doc:"public IP address id associated with vm via Static nat rule"` - PublicIPID *UUID `json:"publicipid,omitempty" doc:"public IP address id associated with vm via Static nat rule"` - RootDeviceID int64 `json:"rootdeviceid,omitempty" doc:"device ID of the root volume"` - RootDeviceType string `json:"rootdevicetype,omitempty" doc:"device type of the root volume"` - SecurityGroup []SecurityGroup `json:"securitygroup,omitempty" doc:"list of security groups associated with the virtual machine"` - ServiceOfferingID *UUID `json:"serviceofferingid,omitempty" doc:"the ID of the service offering of the virtual machine"` - ServiceOfferingName string `json:"serviceofferingname,omitempty" doc:"the name of the service offering of the virtual machine"` - ServiceState string `json:"servicestate,omitempty" doc:"State of the Service from LB rule"` - State string `json:"state,omitempty" doc:"the state of the virtual machine"` - Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with vm"` - TemplateDisplayText string `json:"templatedisplaytext,omitempty" doc:"an alternate display text of the template for the virtual machine"` - TemplateID *UUID `json:"templateid,omitempty" doc:"the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file."` - TemplateName string `json:"templatename,omitempty" doc:"the name of the template for the virtual machine"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the availablility zone for the virtual machine"` - ZoneName string `json:"zonename,omitempty" doc:"the name of the availability zone for the virtual machine"` -} - -// ResourceType returns the type of the resource -func (VirtualMachine) ResourceType() string { - return "UserVM" -} - -// Delete destroys the VM -func (vm VirtualMachine) Delete(ctx context.Context, client *Client) error { - _, err := client.RequestWithContext(ctx, &DestroyVirtualMachine{ - ID: vm.ID, - }) - - return err -} - -// ListRequest builds the ListVirtualMachines request -func (vm VirtualMachine) ListRequest() (ListCommand, error) { - // XXX: AffinityGroupID, SecurityGroupID - - req := &ListVirtualMachines{ - GroupID: vm.GroupID, - ID: vm.ID, - Name: vm.Name, - State: vm.State, - TemplateID: vm.TemplateID, - ZoneID: vm.ZoneID, - } - - nic := vm.DefaultNic() - if nic != nil { - req.IPAddress = nic.IPAddress - } - - for i := range vm.Tags { - req.Tags = append(req.Tags, vm.Tags[i]) - } - - return req, nil -} - -// DefaultNic returns the default nic -func (vm VirtualMachine) DefaultNic() *Nic { - for i, nic := range vm.Nic { - if nic.IsDefault { - return &vm.Nic[i] - } - } - - return nil -} - -// IP returns the default nic IP address -func (vm VirtualMachine) IP() *net.IP { - nic := vm.DefaultNic() - if nic != nil { - ip := nic.IPAddress - return &ip - } - - return nil -} - -// NicsByType returns the corresponding interfaces base on the given type -func (vm VirtualMachine) NicsByType(nicType string) []Nic { - nics := make([]Nic, 0) - for _, nic := range vm.Nic { - if nic.Type == nicType { - // XXX The API forgets to specify it - n := nic - n.VirtualMachineID = vm.ID - nics = append(nics, n) - } - } - return nics -} - -// NicByNetworkID returns the corresponding interface based on the given NetworkID -// -// A VM cannot be connected twice to a same network. -func (vm VirtualMachine) NicByNetworkID(networkID UUID) *Nic { - for _, nic := range vm.Nic { - if nic.NetworkID.Equal(networkID) { - n := nic - n.VirtualMachineID = vm.ID - return &n - } - } - return nil -} - -// NicByID returns the corresponding interface base on its ID -func (vm VirtualMachine) NicByID(nicID UUID) *Nic { - for _, nic := range vm.Nic { - if nic.ID.Equal(nicID) { - n := nic - n.VirtualMachineID = vm.ID - return &n - } - } - - return nil -} - -// IPToNetwork represents a mapping between ip and networks -type IPToNetwork struct { - IP net.IP `json:"ip,omitempty"` - Ipv6 net.IP `json:"ipv6,omitempty"` - NetworkID *UUID `json:"networkid,omitempty"` -} - -// PCIDevice represents a PCI card present in the host -type PCIDevice struct { - PCIVendorName string `json:"pcivendorname,omitempty" doc:"Device vendor name of pci card"` - DeviceID string `json:"deviceid,omitempty" doc:"Device model ID of pci card"` - RemainingCapacity int `json:"remainingcapacity,omitempty" doc:"Remaining capacity in terms of no. of more VMs that can be deployped with this vGPU type"` - MaxCapacity int `json:"maxcapacity,omitempty" doc:"Maximum vgpu can be created with this vgpu type on the given pci group"` - PCIVendorID string `json:"pcivendorid,omitempty" doc:"Device vendor ID of pci card"` - PCIDeviceName string `json:"pcidevicename,omitempty" doc:"Device model name of pci card"` -} - -// Password represents an encrypted password -// -// TODO: method to decrypt it, https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=34014652 -type Password struct { - EncryptedPassword string `json:"encryptedpassword"` -} - -// VirtualMachineUserData represents the base64 encoded user-data -type VirtualMachineUserData struct { - UserData string `json:"userdata" doc:"Base 64 encoded VM user data"` - VirtualMachineID *UUID `json:"virtualmachineid" doc:"the ID of the virtual machine"` -} - -// Decode decodes as a readable string the content of the user-data (base64 · gzip) -func (userdata VirtualMachineUserData) Decode() (string, error) { - data, err := base64.StdEncoding.DecodeString(userdata.UserData) - if err != nil { - return "", err - } - // 0x1f8b is the magic number for gzip - if len(data) < 2 || data[0] != 0x1f || data[1] != 0x8b { - return string(data), nil - } - gr, err := gzip.NewReader(bytes.NewBuffer(data)) - if err != nil { - return "", err - } - defer gr.Close() // nolint: errcheck - - str, err := ioutil.ReadAll(gr) - if err != nil { - return "", err - } - return string(str), nil -} - -// DeployVirtualMachine (Async) represents the machine creation -// -// Regarding the UserData field, the client is responsible to base64 (and probably gzip) it. Doing it within this library would make the integration with other tools, e.g. Terraform harder. -type DeployVirtualMachine struct { - AffinityGroupIDs []UUID `json:"affinitygroupids,omitempty" doc:"comma separated list of affinity groups id that are going to be applied to the virtual machine. Mutually exclusive with affinitygroupnames parameter"` - AffinityGroupNames []string `json:"affinitygroupnames,omitempty" doc:"comma separated list of affinity groups names that are going to be applied to the virtual machine.Mutually exclusive with affinitygroupids parameter"` - Details map[string]string `json:"details,omitempty" doc:"used to specify the custom parameters."` - DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskofferingid is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateid parameter passed is from a Template object, the diskofferingid refers to a DATA Disk Volume created. If the templateid parameter passed is from an ISO object, the diskofferingid refers to a ROOT Disk Volume created."` - DisplayName string `json:"displayname,omitempty" doc:"an optional user generated name for the virtual machine"` - Group string `json:"group,omitempty" doc:"an optional group for the virtual machine"` - IP4 *bool `json:"ip4,omitempty" doc:"True to set an IPv4 to the default interface"` - IP6 *bool `json:"ip6,omitempty" doc:"True to set an IPv6 to the default interface"` - IP6Address net.IP `json:"ip6address,omitempty" doc:"the ipv6 address for default vm's network"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"the ip address for default vm's network"` - Keyboard string `json:"keyboard,omitempty" doc:"an optional keyboard device type for the virtual machine. valid value can be one of de,de-ch,es,fi,fr,fr-be,fr-ch,is,it,jp,nl-be,no,pt,uk,us"` - KeyPair string `json:"keypair,omitempty" doc:"name of the ssh key pair used to login to the virtual machine"` - Name string `json:"name,omitempty" doc:"host name for the virtual machine"` - NetworkIDs []UUID `json:"networkids,omitempty" doc:"list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter"` - RootDiskSize int64 `json:"rootdisksize,omitempty" doc:"Optional field to resize root disk on deploy. Value is in GB. Only applies to template-based deployments. Analogous to details[0].rootdisksize, which takes precedence over this parameter if both are provided"` - SecurityGroupIDs []UUID `json:"securitygroupids,omitempty" doc:"comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter"` - SecurityGroupNames []string `json:"securitygroupnames,omitempty" doc:"comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter"` - ServiceOfferingID *UUID `json:"serviceofferingid" doc:"the ID of the service offering for the virtual machine"` - Size int64 `json:"size,omitempty" doc:"the arbitrary size for the DATADISK volume. Mutually exclusive with diskofferingid"` - StartVM *bool `json:"startvm,omitempty" doc:"true if start vm after creating. Default value is true"` - TemplateID *UUID `json:"templateid" doc:"the ID of the template for the virtual machine"` - UserData string `json:"userdata,omitempty" doc:"an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding. Using HTTP POST(via POST body), you can send up to 32K of data after base64 encoding."` - ZoneID *UUID `json:"zoneid" doc:"availability zone for the virtual machine"` - _ bool `name:"deployVirtualMachine" description:"Creates and automatically starts a virtual machine based on a service offering, disk offering, and template."` -} - -func (req DeployVirtualMachine) onBeforeSend(_ url.Values) error { - // Either AffinityGroupIDs or AffinityGroupNames must be set - if len(req.AffinityGroupIDs) > 0 && len(req.AffinityGroupNames) > 0 { - return fmt.Errorf("either AffinityGroupIDs or AffinityGroupNames must be set") - } - - // Either SecurityGroupIDs or SecurityGroupNames must be set - if len(req.SecurityGroupIDs) > 0 && len(req.SecurityGroupNames) > 0 { - return fmt.Errorf("either SecurityGroupIDs or SecurityGroupNames must be set") - } - - return nil -} - -// Response returns the struct to unmarshal -func (DeployVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DeployVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// StartVirtualMachine (Async) represents the creation of the virtual machine -type StartVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - RescueProfile string `json:"rescueprofile,omitempty" doc:"An optional rescue profile to use when booting"` - _ bool `name:"startVirtualMachine" description:"Starts a virtual machine."` -} - -// Response returns the struct to unmarshal -func (StartVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (StartVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// StopVirtualMachine (Async) represents the stopping of the virtual machine -type StopVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - Forced *bool `json:"forced,omitempty" doc:"Force stop the VM (vm is marked as Stopped even when command fails to be send to the backend). The caller knows the VM is stopped."` - _ bool `name:"stopVirtualMachine" description:"Stops a virtual machine."` -} - -// Response returns the struct to unmarshal -func (StopVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (StopVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// RebootVirtualMachine (Async) represents the rebooting of the virtual machine -type RebootVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - _ bool `name:"rebootVirtualMachine" description:"Reboots a virtual machine."` -} - -// Response returns the struct to unmarshal -func (RebootVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RebootVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// RestoreVirtualMachine (Async) represents the restoration of the virtual machine -type RestoreVirtualMachine struct { - VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` - TemplateID *UUID `json:"templateid,omitempty" doc:"an optional template Id to restore vm from the new template. This can be an ISO id in case of restore vm deployed using ISO"` - RootDiskSize int64 `json:"rootdisksize,omitempty" doc:"Optional field to resize root disk on restore. Value is in GB. Only applies to template-based deployments."` - _ bool `name:"restoreVirtualMachine" description:"Restore a VM to original template/ISO or new template/ISO"` -} - -// Response returns the struct to unmarshal -func (RestoreVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RestoreVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// RecoverVirtualMachine represents the restoration of the virtual machine -type RecoverVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - _ bool `name:"recoverVirtualMachine" description:"Recovers a virtual machine."` -} - -// Response returns the struct to unmarshal -func (RecoverVirtualMachine) Response() interface{} { - return new(VirtualMachine) -} - -// DestroyVirtualMachine (Async) represents the destruction of the virtual machine -type DestroyVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - _ bool `name:"destroyVirtualMachine" description:"Destroys a virtual machine."` -} - -// Response returns the struct to unmarshal -func (DestroyVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (DestroyVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// UpdateVirtualMachine represents the update of the virtual machine -type UpdateVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - Details map[string]string `json:"details,omitempty" doc:"Details in key/value pairs."` - DisplayName string `json:"displayname,omitempty" doc:"user generated name"` - Group string `json:"group,omitempty" doc:"group of the virtual machine"` - Name string `json:"name,omitempty" doc:"new host name of the vm. The VM has to be stopped/started for this update to take affect"` - SecurityGroupIDs []UUID `json:"securitygroupids,omitempty" doc:"list of security group ids to be applied on the virtual machine."` - UserData string `json:"userdata,omitempty" doc:"an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding. Using HTTP POST(via POST body), you can send up to 32K of data after base64 encoding."` - _ bool `name:"updateVirtualMachine" description:"Updates properties of a virtual machine. The VM has to be stopped and restarted for the new properties to take effect. UpdateVirtualMachine does not first check whether the VM is stopped. Therefore, stop the VM manually before issuing this call."` -} - -// Response returns the struct to unmarshal -func (UpdateVirtualMachine) Response() interface{} { - return new(VirtualMachine) -} - -// ExpungeVirtualMachine represents the annihilation of a VM -type ExpungeVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - _ bool `name:"expungeVirtualMachine" description:"Expunge a virtual machine. Once expunged, it cannot be recoverd."` -} - -// Response returns the struct to unmarshal -func (ExpungeVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (ExpungeVirtualMachine) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// ScaleVirtualMachine (Async) scales the virtual machine to a new service offering. -// -// ChangeServiceForVirtualMachine does the same thing but returns the -// new Virtual Machine which is more consistent with the rest of the API. -type ScaleVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - ServiceOfferingID *UUID `json:"serviceofferingid" doc:"the ID of the service offering for the virtual machine"` - Details map[string]string `json:"details,omitempty" doc:"name value pairs of custom parameters for cpu,memory and cpunumber. example details[i].name=value"` - _ bool `name:"scaleVirtualMachine" description:"Scales the virtual machine to a new service offering."` -} - -// Response returns the struct to unmarshal -func (ScaleVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (ScaleVirtualMachine) AsyncResponse() interface{} { - return new(BooleanResponse) -} - -// ChangeServiceForVirtualMachine changes the service offering for a virtual machine. The virtual machine must be in a "Stopped" state for this command to take effect. -type ChangeServiceForVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - ServiceOfferingID *UUID `json:"serviceofferingid" doc:"the service offering ID to apply to the virtual machine"` - Details map[string]string `json:"details,omitempty" doc:"name value pairs of custom parameters for cpu, memory and cpunumber. example details[i].name=value"` - _ bool `name:"changeServiceForVirtualMachine" description:"Changes the service offering for a virtual machine. The virtual machine must be in a \"Stopped\" state for this command to take effect."` -} - -// Response returns the struct to unmarshal -func (ChangeServiceForVirtualMachine) Response() interface{} { - return new(VirtualMachine) -} - -// ResetPasswordForVirtualMachine resets the password for virtual machine. The virtual machine must be in a "Stopped" state... -type ResetPasswordForVirtualMachine struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - _ bool `name:"resetPasswordForVirtualMachine" description:"Resets the password for virtual machine. The virtual machine must be in a \"Stopped\" state and the template must already support this feature for this command to take effect."` -} - -// Response returns the struct to unmarshal -func (ResetPasswordForVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (ResetPasswordForVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// GetVMPassword asks for an encrypted password -type GetVMPassword struct { - ID *UUID `json:"id" doc:"The ID of the virtual machine"` - _ bool `name:"getVMPassword" description:"Returns an encrypted password for the VM"` -} - -// Response returns the struct to unmarshal -func (GetVMPassword) Response() interface{} { - return new(Password) -} - -//go:generate go run generate/main.go -interface=Listable ListVirtualMachines - -// ListVirtualMachines represents a search for a VM -type ListVirtualMachines struct { - AffinityGroupID *UUID `json:"affinitygroupid,omitempty" doc:"list vms by affinity group"` - Details []string `json:"details,omitempty" doc:"comma separated list of host details requested, value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, diskoff, iso, volume, min, affgrp]. If no parameter is passed in, the details will be defaulted to all"` - ForVirtualNetwork *bool `json:"forvirtualnetwork,omitempty" doc:"list by network type; true if need to list vms using Virtual Network, false otherwise"` - GroupID *UUID `json:"groupid,omitempty" doc:"the group ID"` - ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` - IDs []UUID `json:"ids,omitempty" doc:"the IDs of the virtual machines, mutually exclusive with id"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"an IP address to filter the result"` - IsoID *UUID `json:"isoid,omitempty" doc:"list vms by iso"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"name of the virtual machine"` - NetworkID *UUID `json:"networkid,omitempty" doc:"list by network id"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - ServiceOfferindID *UUID `json:"serviceofferingid,omitempty" doc:"list by the service offering"` - State string `json:"state,omitempty" doc:"state of the virtual machine"` - Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"` - TemplateID *UUID `json:"templateid,omitempty" doc:"list vms by template"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"the availability zone ID"` - _ bool `name:"listVirtualMachines" description:"List the virtual machines owned by the account."` -} - -// ListVirtualMachinesResponse represents a list of virtual machines -type ListVirtualMachinesResponse struct { - Count int `json:"count"` - VirtualMachine []VirtualMachine `json:"virtualmachine"` -} - -// AddNicToVirtualMachine (Async) adds a NIC to a VM -type AddNicToVirtualMachine struct { - NetworkID *UUID `json:"networkid" doc:"Network ID"` - VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"Static IP address lease for the corresponding NIC and network which should be in the range defined in the network"` - _ bool `name:"addNicToVirtualMachine" description:"Adds VM to specified network by creating a NIC"` -} - -// Response returns the struct to unmarshal -func (AddNicToVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (AddNicToVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// RemoveNicFromVirtualMachine (Async) removes a NIC from a VM -type RemoveNicFromVirtualMachine struct { - NicID *UUID `json:"nicid" doc:"NIC ID"` - VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` - _ bool `name:"removeNicFromVirtualMachine" description:"Removes VM from specified network by deleting a NIC"` -} - -// Response returns the struct to unmarshal -func (RemoveNicFromVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (RemoveNicFromVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// UpdateDefaultNicForVirtualMachine (Async) adds a NIC to a VM -type UpdateDefaultNicForVirtualMachine struct { - NicID *UUID `json:"nicid" doc:"NIC ID"` - VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` - _ bool `name:"updateDefaultNicForVirtualMachine" description:"Changes the default NIC on a VM"` -} - -// Response returns the struct to unmarshal -func (UpdateDefaultNicForVirtualMachine) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (UpdateDefaultNicForVirtualMachine) AsyncResponse() interface{} { - return new(VirtualMachine) -} - -// GetVirtualMachineUserData returns the user-data of the given VM -type GetVirtualMachineUserData struct { - VirtualMachineID *UUID `json:"virtualmachineid" doc:"The ID of the virtual machine"` - _ bool `name:"getVirtualMachineUserData" description:"Returns user data associated with the VM"` -} - -// Response returns the struct to unmarshal -func (GetVirtualMachineUserData) Response() interface{} { - return new(VirtualMachineUserData) -} - -// UpdateVMNicIP updates the default IP address of a VM Nic -type UpdateVMNicIP struct { - _ bool `name:"updateVmNicIp" description:"Update the default Ip of a VM Nic"` - IPAddress net.IP `json:"ipaddress,omitempty" doc:"Static IP address lease for the corresponding NIC and network which should be in the range defined in the network. If absent, the call removes the lease associated with the nic."` - NicID *UUID `json:"nicid" doc:"the ID of the nic."` -} - -// Response returns the struct to unmarshal -func (UpdateVMNicIP) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (UpdateVMNicIP) AsyncResponse() interface{} { - return new(VirtualMachine) -} diff --git a/vendor/github.com/exoscale/egoscale/virtualmachines_response.go b/vendor/github.com/exoscale/egoscale/virtualmachines_response.go deleted file mode 100644 index 9aafb01a3..000000000 --- a/vendor/github.com/exoscale/egoscale/virtualmachines_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListVirtualMachines) Response() interface{} { - return new(ListVirtualMachinesResponse) -} - -// ListRequest returns itself -func (ls *ListVirtualMachines) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListVirtualMachines) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListVirtualMachines) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListVirtualMachines) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListVirtualMachinesResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListVirtualMachinesResponse was expected, got %T", resp)) - return - } - - for i := range items.VirtualMachine { - if !callback(&items.VirtualMachine[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/volumes.go b/vendor/github.com/exoscale/egoscale/volumes.go deleted file mode 100644 index f942890a4..000000000 --- a/vendor/github.com/exoscale/egoscale/volumes.go +++ /dev/null @@ -1,113 +0,0 @@ -package egoscale - -// Volume represents a volume linked to a VM -type Volume struct { - Account string `json:"account,omitempty" doc:"the account associated with the disk volume"` - Attached string `json:"attached,omitempty" doc:"the date the volume was attached to a VM instance"` - ChainInfo string `json:"chaininfo,omitempty" doc:"the chain info of the volume"` - ClusterID *UUID `json:"clusterid,omitempty" doc:"ID of the cluster"` - ClusterName string `json:"clustername,omitempty" doc:"name of the cluster"` - Created string `json:"created,omitempty" doc:"the date the disk volume was created"` - Destroyed bool `json:"destroyed,omitempty" doc:"the boolean state of whether the volume is destroyed or not"` - DeviceID int64 `json:"deviceid,omitempty" doc:"the ID of the device on user vm the volume is attahed to. This tag is not returned when the volume is detached."` - DiskBytesReadRate int64 `json:"diskBytesReadRate,omitempty" doc:"bytes read rate of the disk volume"` - DiskBytesWriteRate int64 `json:"diskBytesWriteRate,omitempty" doc:"bytes write rate of the disk volume"` - DiskIopsReadRate int64 `json:"diskIopsReadRate,omitempty" doc:"io requests read rate of the disk volume"` - DiskIopsWriteRate int64 `json:"diskIopsWriteRate,omitempty" doc:"io requests write rate of the disk volume"` - DiskOfferingDisplayText string `json:"diskofferingdisplaytext,omitempty" doc:"the display text of the disk offering"` - DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"ID of the disk offering"` - DiskOfferingName string `json:"diskofferingname,omitempty" doc:"name of the disk offering"` - DisplayVolume bool `json:"displayvolume,omitempty" doc:"an optional field whether to the display the volume to the end user or not."` - Hypervisor string `json:"hypervisor,omitempty" doc:"Hypervisor the volume belongs to"` - ID *UUID `json:"id,omitempty" doc:"ID of the disk volume"` - IsExtractable *bool `json:"isextractable,omitempty" doc:"true if the volume is extractable, false otherwise"` - IsoDisplayText string `json:"isodisplaytext,omitempty" doc:"an alternate display text of the ISO attached to the virtual machine"` - IsoID *UUID `json:"isoid,omitempty" doc:"the ID of the ISO attached to the virtual machine"` - IsoName string `json:"isoname,omitempty" doc:"the name of the ISO attached to the virtual machine"` - MaxIops int64 `json:"maxiops,omitempty" doc:"max iops of the disk volume"` - MinIops int64 `json:"miniops,omitempty" doc:"min iops of the disk volume"` - Name string `json:"name,omitempty" doc:"name of the disk volume"` - Path string `json:"path,omitempty" doc:"the path of the volume"` - PodID *UUID `json:"podid,omitempty" doc:"ID of the pod"` - PodName string `json:"podname,omitempty" doc:"name of the pod"` - QuiesceVM bool `json:"quiescevm,omitempty" doc:"need quiesce vm or not when taking snapshot"` - ServiceOfferingDisplayText string `json:"serviceofferingdisplaytext,omitempty" doc:"the display text of the service offering for root disk"` - ServiceOfferingID *UUID `json:"serviceofferingid,omitempty" doc:"ID of the service offering for root disk"` - ServiceOfferingName string `json:"serviceofferingname,omitempty" doc:"name of the service offering for root disk"` - Size uint64 `json:"size,omitempty" doc:"size of the disk volume"` - SnapshotID *UUID `json:"snapshotid,omitempty" doc:"ID of the snapshot from which this volume was created"` - State string `json:"state,omitempty" doc:"the state of the disk volume"` - Status string `json:"status,omitempty" doc:"the status of the volume"` - Storage string `json:"storage,omitempty" doc:"name of the primary storage hosting the disk volume"` - StorageID *UUID `json:"storageid,omitempty" doc:"id of the primary storage hosting the disk volume; returned to admin user only"` - StorageType string `json:"storagetype,omitempty" doc:"shared or local storage"` - Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with volume"` - TemplateDisplayText string `json:"templatedisplaytext,omitempty" doc:"an alternate display text of the template for the virtual machine"` - TemplateID *UUID `json:"templateid,omitempty" doc:"the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file."` // no *UUID because of the -1 thingy... - TemplateName string `json:"templatename,omitempty" doc:"the name of the template for the virtual machine"` - Type string `json:"type,omitempty" doc:"type of the disk volume (ROOT or DATADISK)"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"id of the virtual machine"` - VMDisplayName string `json:"vmdisplayname,omitempty" doc:"display name of the virtual machine"` - VMName string `json:"vmname,omitempty" doc:"name of the virtual machine"` - VMState string `json:"vmstate,omitempty" doc:"state of the virtual machine"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"ID of the availability zone"` - ZoneName string `json:"zonename,omitempty" doc:"name of the availability zone"` -} - -// ResourceType returns the type of the resource -func (Volume) ResourceType() string { - return "Volume" -} - -// ListRequest builds the ListVolumes request -func (vol Volume) ListRequest() (ListCommand, error) { - req := &ListVolumes{ - Name: vol.Name, - Type: vol.Type, - VirtualMachineID: vol.VirtualMachineID, - ZoneID: vol.ZoneID, - } - - return req, nil -} - -// ResizeVolume (Async) resizes a volume -type ResizeVolume struct { - ID *UUID `json:"id" doc:"the ID of the disk volume"` - DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"new disk offering id"` - Size int64 `json:"size,omitempty" doc:"New volume size in G (must be larger than current size since shrinking the disk is not supported)"` - _ bool `name:"resizeVolume" description:"Resizes a volume"` -} - -// Response returns the struct to unmarshal -func (ResizeVolume) Response() interface{} { - return new(AsyncJobResult) -} - -// AsyncResponse returns the struct to unmarshal the async job -func (ResizeVolume) AsyncResponse() interface{} { - return new(Volume) -} - -//go:generate go run generate/main.go -interface=Listable ListVolumes - -// ListVolumes represents a query listing volumes -type ListVolumes struct { - DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"List volumes by disk offering"` - ID *UUID `json:"id,omitempty" doc:"The ID of the disk volume"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"The name of the disk volume"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"` - Type string `json:"type,omitempty" doc:"The type of disk volume"` - VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"The ID of the virtual machine"` - ZoneID *UUID `json:"zoneid,omitempty" doc:"The ID of the availability zone"` - _ bool `name:"listVolumes" description:"Lists all volumes."` -} - -// ListVolumesResponse represents a list of volumes -type ListVolumesResponse struct { - Count int `json:"count"` - Volume []Volume `json:"volume"` -} diff --git a/vendor/github.com/exoscale/egoscale/volumes_response.go b/vendor/github.com/exoscale/egoscale/volumes_response.go deleted file mode 100644 index c7486bc1e..000000000 --- a/vendor/github.com/exoscale/egoscale/volumes_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListVolumes) Response() interface{} { - return new(ListVolumesResponse) -} - -// ListRequest returns itself -func (ls *ListVolumes) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListVolumes) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListVolumes) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListVolumes) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListVolumesResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListVolumesResponse was expected, got %T", resp)) - return - } - - for i := range items.Volume { - if !callback(&items.Volume[i], nil) { - break - } - } -} diff --git a/vendor/github.com/exoscale/egoscale/zones.go b/vendor/github.com/exoscale/egoscale/zones.go deleted file mode 100644 index 763246033..000000000 --- a/vendor/github.com/exoscale/egoscale/zones.go +++ /dev/null @@ -1,62 +0,0 @@ -package egoscale - -import ( - "net" -) - -// Zone represents a data center -// -// TODO: represent correctly the capacity field. -type Zone struct { - AllocationState string `json:"allocationstate,omitempty" doc:"the allocation state of the cluster"` - Description string `json:"description,omitempty" doc:"Zone description"` - DhcpProvider string `json:"dhcpprovider,omitempty" doc:"the dhcp Provider for the Zone"` - DisplayText string `json:"displaytext,omitempty" doc:"the display text of the zone"` - DNS1 net.IP `json:"dns1,omitempty" doc:"the first DNS for the Zone"` - DNS2 net.IP `json:"dns2,omitempty" doc:"the second DNS for the Zone"` - GuestCIDRAddress *CIDR `json:"guestcidraddress,omitempty" doc:"the guest CIDR address for the Zone"` - ID *UUID `json:"id,omitempty" doc:"Zone id"` - InternalDNS1 net.IP `json:"internaldns1,omitempty" doc:"the first internal DNS for the Zone"` - InternalDNS2 net.IP `json:"internaldns2,omitempty" doc:"the second internal DNS for the Zone"` - IP6DNS1 net.IP `json:"ip6dns1,omitempty" doc:"the first IPv6 DNS for the Zone"` - IP6DNS2 net.IP `json:"ip6dns2,omitempty" doc:"the second IPv6 DNS for the Zone"` - LocalStorageEnabled *bool `json:"localstorageenabled,omitempty" doc:"true if local storage offering enabled, false otherwise"` - Name string `json:"name,omitempty" doc:"Zone name"` - NetworkType string `json:"networktype,omitempty" doc:"the network type of the zone; can be Basic or Advanced"` - ResourceDetails map[string]string `json:"resourcedetails,omitempty" doc:"Meta data associated with the zone (key/value pairs)"` - SecurityGroupsEnabled *bool `json:"securitygroupsenabled,omitempty" doc:"true if security groups support is enabled, false otherwise"` - Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with zone."` - Vlan string `json:"vlan,omitempty" doc:"the vlan range of the zone"` - ZoneToken string `json:"zonetoken,omitempty" doc:"Zone Token"` -} - -// ListRequest builds the ListZones request -func (zone Zone) ListRequest() (ListCommand, error) { - req := &ListZones{ - ID: zone.ID, - Name: zone.Name, - } - - return req, nil -} - -//go:generate go run generate/main.go -interface=Listable ListZones - -// ListZones represents a query for zones -type ListZones struct { - Available *bool `json:"available,omitempty" doc:"true if you want to retrieve all available Zones. False if you only want to return the Zones from which you have at least one VM. Default is false."` - ID *UUID `json:"id,omitempty" doc:"the ID of the zone"` - Keyword string `json:"keyword,omitempty" doc:"List by keyword"` - Name string `json:"name,omitempty" doc:"the name of the zone"` - Page int `json:"page,omitempty"` - PageSize int `json:"pagesize,omitempty"` - ShowCapacities *bool `json:"showcapacities,omitempty" doc:"flag to display the capacity of the zones"` - Tags []ResourceTag `json:"tags,omitempty" doc:"List zones by resource tags (key/value pairs)"` - _ bool `name:"listZones" description:"Lists zones"` -} - -// ListZonesResponse represents a list of zones -type ListZonesResponse struct { - Count int `json:"count"` - Zone []Zone `json:"zone"` -} diff --git a/vendor/github.com/exoscale/egoscale/zones_response.go b/vendor/github.com/exoscale/egoscale/zones_response.go deleted file mode 100644 index 0fe7d06d7..000000000 --- a/vendor/github.com/exoscale/egoscale/zones_response.go +++ /dev/null @@ -1,43 +0,0 @@ -// code generated; DO NOT EDIT. - -package egoscale - -import "fmt" - -// Response returns the struct to unmarshal -func (ListZones) Response() interface{} { - return new(ListZonesResponse) -} - -// ListRequest returns itself -func (ls *ListZones) ListRequest() (ListCommand, error) { - if ls == nil { - return nil, fmt.Errorf("%T cannot be nil", ls) - } - return ls, nil -} - -// SetPage sets the current apge -func (ls *ListZones) SetPage(page int) { - ls.Page = page -} - -// SetPageSize sets the page size -func (ls *ListZones) SetPageSize(pageSize int) { - ls.PageSize = pageSize -} - -// Each triggers the callback for each, valid answer or any non 404 issue -func (ListZones) Each(resp interface{}, callback IterateItemFunc) { - items, ok := resp.(*ListZonesResponse) - if !ok { - callback(nil, fmt.Errorf("wrong type, ListZonesResponse was expected, got %T", resp)) - return - } - - for i := range items.Zone { - if !callback(&items.Zone[i], nil) { - break - } - } -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 1f1316bf4..895ebd3de 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -216,10 +216,8 @@ github.com/digitalocean/godo github.com/dimchansky/utfbom # github.com/dylanmei/iso8601 v0.1.0 github.com/dylanmei/iso8601 -# github.com/exoscale/egoscale v0.18.1 ## explicit -github.com/exoscale/egoscale -# github.com/fatih/camelcase v1.0.0 + github.com/fatih/camelcase v1.0.0 ## explicit github.com/fatih/camelcase # github.com/fatih/color v1.9.0 From edd4567096a8d7bc082e1dfe381170fff42b3279 Mon Sep 17 00:00:00 2001 From: Wilken Rivera Date: Mon, 1 Mar 2021 13:21:20 -0500 Subject: [PATCH 3/6] Remove plugin registration generation step This change removes the generation of command/plugin.go so that plugin registration can be managed manually. As we begin to break out plugins we will need to begin modifying this file, possibly with stubs to allow for the removal of plugins without breaking Packer's backwards compatibility with 1.7.0. After 1.8.0 is released we should be able to revet these changes so that we can continue to generate the plugin file for those plugins core to Packer. --- command/plugin.go | 4 ---- main.go | 1 - 2 files changed, 5 deletions(-) diff --git a/command/plugin.go b/command/plugin.go index b5c08b185..edfeca617 100644 --- a/command/plugin.go +++ b/command/plugin.go @@ -1,7 +1,3 @@ -// -// This file is automatically generated by scripts/generate-plugins.go -- Do not edit! -// - package command import ( diff --git a/main.go b/main.go index f7806b0bc..f358c2f05 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,5 @@ // This is the main package for the `packer` application. -//go:generate go run ./scripts/generate-plugins.go package main import ( From 6f23bc0d97d55648f0eb0c0590a88a79f09f75fd Mon Sep 17 00:00:00 2001 From: Wilken Rivera Date: Mon, 1 Mar 2021 13:44:23 -0500 Subject: [PATCH 4/6] Vendor exoscale-import plugin This change will vendor the new version of the exoscale-import post-processor component, but remove all of its code from Packer. After the v1.8.0 release this change should be removed entirely. This vendor process is being used as a workaround for decoupling the exoscale-import component without causing a breaking change in Packer. Users of Exoscale are encouraged to leverage `packer init` for installing the latest version of packer-plugin-exoscale. --- go.mod | 9 +- go.sum | 66 +- .../github.com/deepmap/oapi-codegen/LICENSE | 201 + .../deepmap/oapi-codegen/pkg/runtime/bind.go | 24 + .../oapi-codegen/pkg/runtime/bindparam.go | 463 + .../oapi-codegen/pkg/runtime/bindstring.go | 143 + .../oapi-codegen/pkg/runtime/deepobject.go | 357 + .../oapi-codegen/pkg/runtime/styleparam.go | 352 + .../deepmap/oapi-codegen/pkg/types/date.go | 30 + .../deepmap/oapi-codegen/pkg/types/email.go | 27 + .../deepmap/oapi-codegen/pkg/types/regexes.go | 11 + .../github.com/exoscale/egoscale/.gitignore | 5 + .../exoscale/egoscale/.golangci.yml | 30 + vendor/github.com/exoscale/egoscale/AUTHORS | 9 + .../github.com/exoscale/egoscale/CHANGELOG.md | 706 + vendor/github.com/exoscale/egoscale/LICENSE | 201 + vendor/github.com/exoscale/egoscale/README.md | 28 + .../github.com/exoscale/egoscale/accounts.go | 80 + .../exoscale/egoscale/accounts_response.go | 43 + .../github.com/exoscale/egoscale/addresses.go | 188 + .../exoscale/egoscale/affinity_groups.go | 158 + .../egoscale/affinitygroups_response.go | 43 + .../exoscale/egoscale/antiaffinity_groups.go | 103 + .../egoscale/antiaffinity_groups_response.go | 43 + vendor/github.com/exoscale/egoscale/apis.go | 48 + .../exoscale/egoscale/async_jobs.go | 138 + .../exoscale/egoscale/asyncjobs_response.go | 43 + vendor/github.com/exoscale/egoscale/cidr.go | 62 + vendor/github.com/exoscale/egoscale/client.go | 484 + .../exoscale/egoscale/cserrorcode_string.go | 83 + vendor/github.com/exoscale/egoscale/dns.go | 364 + vendor/github.com/exoscale/egoscale/doc.go | 180 + vendor/github.com/exoscale/egoscale/error.go | 15 + .../exoscale/egoscale/errorcode_string.go | 60 + vendor/github.com/exoscale/egoscale/events.go | 76 + .../exoscale/egoscale/events_response.go | 43 + .../exoscale/egoscale/eventtypes_response.go | 43 + vendor/github.com/exoscale/egoscale/go.mod | 13 + vendor/github.com/exoscale/egoscale/go.sum | 82 + .../github.com/exoscale/egoscale/gopher.png | Bin 0 -> 63065 bytes .../exoscale/egoscale/iam_apikey.go | 92 + .../exoscale/egoscale/instance_groups.go | 71 + .../exoscale/egoscale/instance_pool.go | 170 + .../egoscale/instancegroups_response.go | 43 + vendor/github.com/exoscale/egoscale/isos.go | 94 + .../exoscale/egoscale/isos_response.go | 43 + .../exoscale/egoscale/jobstatustype_string.go | 25 + .../exoscale/egoscale/macaddress.go | 63 + .../github.com/exoscale/egoscale/networks.go | 221 + .../exoscale/egoscale/networks_response.go | 43 + vendor/github.com/exoscale/egoscale/nics.go | 120 + .../exoscale/egoscale/nics_response.go | 43 + .../egoscale/oscategories_response.go | 43 + .../egoscale/publicipaddresses_response.go | 43 + .../exoscale/egoscale/record_string.go | 36 + .../github.com/exoscale/egoscale/request.go | 404 + .../exoscale/egoscale/request_type.go | 186 + .../exoscale/egoscale/resource_limits.go | 100 + .../exoscale/egoscale/resource_metadata.go | 41 + .../egoscale/resourcedetails_response.go | 43 + .../egoscale/resourcelimits_response.go | 43 + .../exoscale/egoscale/reversedns.go | 83 + .../github.com/exoscale/egoscale/runstatus.go | 130 + .../exoscale/egoscale/runstatus_event.go | 37 + .../exoscale/egoscale/runstatus_incident.go | 176 + .../egoscale/runstatus_maintenance.go | 209 + .../exoscale/egoscale/runstatus_page.go | 169 + .../exoscale/egoscale/runstatus_service.go | 202 + .../exoscale/egoscale/security_groups.go | 226 + .../egoscale/securitygroups_response.go | 43 + .../exoscale/egoscale/serialization.go | 404 + .../exoscale/egoscale/service_offerings.go | 77 + .../egoscale/serviceofferings_response.go | 43 + .../github.com/exoscale/egoscale/snapshots.go | 160 + .../exoscale/egoscale/snapshots_response.go | 43 + .../exoscale/egoscale/sos_buckets_usage.go | 25 + .../exoscale/egoscale/ssh_keypairs.go | 105 + .../exoscale/egoscale/sshkeypairs_response.go | 43 + vendor/github.com/exoscale/egoscale/tags.go | 84 + .../exoscale/egoscale/tags_response.go | 43 + .../github.com/exoscale/egoscale/templates.go | 165 + .../exoscale/egoscale/templates_response.go | 43 + vendor/github.com/exoscale/egoscale/users.go | 63 + .../exoscale/egoscale/users_response.go | 43 + vendor/github.com/exoscale/egoscale/uuid.go | 79 + .../exoscale/egoscale/v2/api/api.go | 3 + .../exoscale/egoscale/v2/api/error.go | 14 + .../exoscale/egoscale/v2/api/middleware.go | 67 + .../exoscale/egoscale/v2/api/request.go | 67 + .../exoscale/egoscale/v2/api/security.go | 127 + .../github.com/exoscale/egoscale/v2/client.go | 133 + .../github.com/exoscale/egoscale/v2/error.go | 5 + .../egoscale/v2/internal/public-api/async.go | 123 + .../v2/internal/public-api/loadbalancer.go | 70 + .../egoscale/v2/internal/public-api/mock.go | 28 + .../v2/internal/public-api/public-api.gen.go | 9554 ++++++++ .../v2/internal/public-api/public-api.go | 24 + .../v2/internal/public-api/request.go | 20 + .../v2/internal/public-api/sks_cluster.go | 86 + .../v2/internal/public-api/sks_nodepool.go | 94 + .../v2/internal/public-api/template.go | 102 + .../egoscale/v2/internal/public-api/time.go | 3 + .../exoscale/egoscale/v2/loadbalancer.go | 382 + vendor/github.com/exoscale/egoscale/v2/sks.go | 442 + .../github.com/exoscale/egoscale/v2/test.go | 3 + vendor/github.com/exoscale/egoscale/v2/v2.go | 3 + .../github.com/exoscale/egoscale/v2/zone.go | 24 + .../github.com/exoscale/egoscale/version.go | 4 + .../exoscale/egoscale/virtual_machines.go | 632 + .../egoscale/virtualmachines_response.go | 43 + .../github.com/exoscale/egoscale/volumes.go | 114 + .../exoscale/egoscale/volumes_response.go | 43 + vendor/github.com/exoscale/egoscale/zones.go | 60 + .../exoscale/egoscale/zones_response.go | 43 + .../exoscale/packer-plugin-exoscale/LICENSE | 373 + .../exoscale-import/artifact.go | 47 + .../post-processor/exoscale-import/config.go | 93 + .../exoscale-import/config.hcl2spec.go | 70 + .../exoscale-import/post-processor.go | 92 + .../exoscale-import/step_delete_image.go | 55 + .../exoscale-import/step_register_template.go | 62 + .../exoscale-import/step_upload_image.go | 89 + vendor/github.com/gofrs/uuid/.travis.yml | 3 +- vendor/github.com/gofrs/uuid/README.md | 1 - vendor/github.com/gofrs/uuid/codec.go | 10 +- vendor/github.com/gofrs/uuid/generator.go | 36 +- vendor/github.com/gofrs/uuid/uuid.go | 79 +- vendor/github.com/jarcoal/httpmock/.gitignore | 22 + vendor/github.com/jarcoal/httpmock/LICENSE | 20 + vendor/github.com/jarcoal/httpmock/README.md | 252 + vendor/github.com/jarcoal/httpmock/doc.go | 81 + vendor/github.com/jarcoal/httpmock/env.go | 13 + vendor/github.com/jarcoal/httpmock/file.go | 57 + vendor/github.com/jarcoal/httpmock/go.mod | 3 + .../jarcoal/httpmock/internal/route_key.go | 15 + .../jarcoal/httpmock/internal/stack_tracer.go | 85 + .../jarcoal/httpmock/internal/submatches.go | 22 + .../github.com/jarcoal/httpmock/response.go | 451 + .../github.com/jarcoal/httpmock/transport.go | 1040 + .../mattn/go-colorable/colorable_windows.go | 28 +- .../github.com/stretchr/objx/.codeclimate.yml | 21 + vendor/github.com/stretchr/objx/.gitignore | 11 + vendor/github.com/stretchr/objx/.travis.yml | 30 + vendor/github.com/stretchr/objx/LICENSE | 22 + vendor/github.com/stretchr/objx/README.md | 80 + vendor/github.com/stretchr/objx/Taskfile.yml | 30 + vendor/github.com/stretchr/objx/accessors.go | 179 + .../github.com/stretchr/objx/conversions.go | 280 + vendor/github.com/stretchr/objx/doc.go | 66 + vendor/github.com/stretchr/objx/go.mod | 8 + vendor/github.com/stretchr/objx/go.sum | 8 + vendor/github.com/stretchr/objx/map.go | 228 + vendor/github.com/stretchr/objx/mutations.go | 77 + vendor/github.com/stretchr/objx/security.go | 12 + vendor/github.com/stretchr/objx/tests.go | 17 + .../github.com/stretchr/objx/type_specific.go | 346 + .../stretchr/objx/type_specific_codegen.go | 2251 ++ vendor/github.com/stretchr/objx/value.go | 159 + .../testify/assert/assertion_compare.go | 172 +- .../testify/assert/assertion_format.go | 97 + .../testify/assert/assertion_forward.go | 194 + .../testify/assert/assertion_order.go | 81 + .../stretchr/testify/assert/assertions.go | 83 +- .../github.com/stretchr/testify/mock/doc.go | 44 + .../github.com/stretchr/testify/mock/mock.go | 1008 + .../stretchr/testify/require/require.go | 248 + .../testify/require/require_forward.go | 194 + vendor/golang.org/x/crypto/ssh/server.go | 4 + vendor/golang.org/x/net/publicsuffix/table.go | 20162 ++++++++-------- vendor/golang.org/x/sys/unix/mkerrors.sh | 3 + vendor/golang.org/x/sys/unix/ptrace_darwin.go | 11 + vendor/golang.org/x/sys/unix/ptrace_ios.go | 11 + .../x/sys/unix/syscall_darwin.1_13.go | 1 - .../golang.org/x/sys/unix/syscall_darwin.go | 7 +- .../x/sys/unix/syscall_darwin_386.go | 2 +- .../x/sys/unix/syscall_darwin_amd64.go | 2 +- .../x/sys/unix/syscall_darwin_arm.go | 2 +- .../x/sys/unix/syscall_darwin_arm64.go | 2 +- .../golang.org/x/sys/unix/syscall_illumos.go | 13 - vendor/golang.org/x/sys/unix/syscall_linux.go | 87 +- .../golang.org/x/sys/unix/syscall_solaris.go | 13 + vendor/golang.org/x/sys/unix/timestruct.go | 26 +- vendor/golang.org/x/sys/unix/zerrors_linux.go | 143 +- .../x/sys/unix/zerrors_linux_386.go | 2 +- .../x/sys/unix/zerrors_linux_amd64.go | 2 +- .../x/sys/unix/zerrors_linux_arm.go | 2 +- .../x/sys/unix/zerrors_linux_arm64.go | 4 +- .../x/sys/unix/zerrors_linux_mips.go | 2 +- .../x/sys/unix/zerrors_linux_mips64.go | 2 +- .../x/sys/unix/zerrors_linux_mips64le.go | 2 +- .../x/sys/unix/zerrors_linux_mipsle.go | 2 +- .../x/sys/unix/zerrors_linux_ppc64.go | 2 +- .../x/sys/unix/zerrors_linux_ppc64le.go | 2 +- .../x/sys/unix/zerrors_linux_riscv64.go | 2 +- .../x/sys/unix/zerrors_linux_s390x.go | 2 +- .../x/sys/unix/zerrors_linux_sparc64.go | 2 +- .../x/sys/unix/zsyscall_darwin_386.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_386.go | 150 +- .../x/sys/unix/zsyscall_darwin_amd64.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_amd64.go | 150 +- .../x/sys/unix/zsyscall_darwin_arm.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_arm.go | 147 +- .../x/sys/unix/zsyscall_darwin_arm64.1_13.go | 2 - .../x/sys/unix/zsyscall_darwin_arm64.go | 150 +- .../x/sys/unix/zsyscall_illumos_amd64.go | 15 +- .../x/sys/unix/zsyscall_solaris_amd64.go | 13 + .../x/sys/unix/zsysnum_linux_386.go | 1 + .../x/sys/unix/zsysnum_linux_amd64.go | 1 + .../x/sys/unix/zsysnum_linux_arm.go | 1 + .../x/sys/unix/zsysnum_linux_arm64.go | 1 + .../x/sys/unix/zsysnum_linux_mips.go | 1 + .../x/sys/unix/zsysnum_linux_mips64.go | 1 + .../x/sys/unix/zsysnum_linux_mips64le.go | 1 + .../x/sys/unix/zsysnum_linux_mipsle.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 1 + .../x/sys/unix/zsysnum_linux_riscv64.go | 1 + .../x/sys/unix/zsysnum_linux_s390x.go | 1 + .../x/sys/unix/zsysnum_linux_sparc64.go | 1 + .../golang.org/x/sys/unix/ztypes_aix_ppc.go | 1 + .../golang.org/x/sys/unix/ztypes_aix_ppc64.go | 1 + .../x/sys/unix/ztypes_darwin_386.go | 1 + .../x/sys/unix/ztypes_darwin_amd64.go | 1 + .../x/sys/unix/ztypes_darwin_arm.go | 1 + .../x/sys/unix/ztypes_darwin_arm64.go | 1 + .../x/sys/unix/ztypes_dragonfly_amd64.go | 1 + .../x/sys/unix/ztypes_freebsd_386.go | 1 + .../x/sys/unix/ztypes_freebsd_amd64.go | 1 + .../x/sys/unix/ztypes_freebsd_arm.go | 1 + .../x/sys/unix/ztypes_freebsd_arm64.go | 1 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 1491 +- .../golang.org/x/sys/unix/ztypes_linux_386.go | 2 +- .../x/sys/unix/ztypes_linux_amd64.go | 2 +- .../golang.org/x/sys/unix/ztypes_linux_arm.go | 2 +- .../x/sys/unix/ztypes_linux_arm64.go | 2 +- .../x/sys/unix/ztypes_linux_mips.go | 2 +- .../x/sys/unix/ztypes_linux_mips64.go | 2 +- .../x/sys/unix/ztypes_linux_mips64le.go | 2 +- .../x/sys/unix/ztypes_linux_mipsle.go | 2 +- .../x/sys/unix/ztypes_linux_ppc64.go | 2 +- .../x/sys/unix/ztypes_linux_ppc64le.go | 2 +- .../x/sys/unix/ztypes_linux_riscv64.go | 2 +- .../x/sys/unix/ztypes_linux_s390x.go | 2 +- .../x/sys/unix/ztypes_linux_sparc64.go | 2 +- .../x/sys/unix/ztypes_netbsd_386.go | 1 + .../x/sys/unix/ztypes_netbsd_amd64.go | 1 + .../x/sys/unix/ztypes_netbsd_arm.go | 1 + .../x/sys/unix/ztypes_netbsd_arm64.go | 1 + .../x/sys/unix/ztypes_openbsd_386.go | 1 + .../x/sys/unix/ztypes_openbsd_amd64.go | 1 + .../x/sys/unix/ztypes_openbsd_arm.go | 1 + .../x/sys/unix/ztypes_openbsd_arm64.go | 1 + .../x/sys/unix/ztypes_openbsd_mips64.go | 1 + .../x/sys/unix/ztypes_solaris_amd64.go | 1 + .../golang.org/x/sys/windows/dll_windows.go | 1 - .../x/sys/windows/security_windows.go | 11 + vendor/golang.org/x/sys/windows/service.go | 6 + .../x/sys/windows/syscall_windows.go | 37 +- .../golang.org/x/sys/windows/types_windows.go | 330 +- .../x/sys/windows/zsyscall_windows.go | 217 +- .../encoding/simplifiedchinese/hzgb2312.go | 2 +- .../text/internal/language/compact/tables.go | 36 +- .../x/text/internal/language/parse.go | 11 +- .../x/text/internal/language/tables.go | 4085 ++-- vendor/golang.org/x/text/language/tables.go | 78 +- vendor/golang.org/x/text/unicode/bidi/bidi.go | 221 +- vendor/golang.org/x/text/unicode/bidi/core.go | 63 +- .../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 ++++++ vendor/gopkg.in/yaml.v3/.travis.yml | 16 - vendor/gopkg.in/yaml.v3/apic.go | 1 + vendor/gopkg.in/yaml.v3/decode.go | 65 +- vendor/gopkg.in/yaml.v3/emitterc.go | 58 +- vendor/gopkg.in/yaml.v3/encode.go | 30 +- vendor/gopkg.in/yaml.v3/parserc.go | 48 +- vendor/gopkg.in/yaml.v3/scannerc.go | 49 +- vendor/gopkg.in/yaml.v3/yaml.go | 40 +- vendor/gopkg.in/yaml.v3/yamlh.go | 2 + vendor/modules.txt | 34 +- 281 files changed, 55488 insertions(+), 13447 deletions(-) create mode 100644 vendor/github.com/deepmap/oapi-codegen/LICENSE create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bind.go create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindparam.go create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindstring.go create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/runtime/deepobject.go create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/runtime/styleparam.go create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/types/date.go create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/types/email.go create mode 100644 vendor/github.com/deepmap/oapi-codegen/pkg/types/regexes.go create mode 100644 vendor/github.com/exoscale/egoscale/.gitignore create mode 100644 vendor/github.com/exoscale/egoscale/.golangci.yml create mode 100644 vendor/github.com/exoscale/egoscale/AUTHORS create mode 100644 vendor/github.com/exoscale/egoscale/CHANGELOG.md create mode 100644 vendor/github.com/exoscale/egoscale/LICENSE create mode 100644 vendor/github.com/exoscale/egoscale/README.md create mode 100644 vendor/github.com/exoscale/egoscale/accounts.go create mode 100644 vendor/github.com/exoscale/egoscale/accounts_response.go create mode 100644 vendor/github.com/exoscale/egoscale/addresses.go create mode 100644 vendor/github.com/exoscale/egoscale/affinity_groups.go create mode 100644 vendor/github.com/exoscale/egoscale/affinitygroups_response.go create mode 100644 vendor/github.com/exoscale/egoscale/antiaffinity_groups.go create mode 100644 vendor/github.com/exoscale/egoscale/antiaffinity_groups_response.go create mode 100644 vendor/github.com/exoscale/egoscale/apis.go create mode 100644 vendor/github.com/exoscale/egoscale/async_jobs.go create mode 100644 vendor/github.com/exoscale/egoscale/asyncjobs_response.go create mode 100644 vendor/github.com/exoscale/egoscale/cidr.go create mode 100644 vendor/github.com/exoscale/egoscale/client.go create mode 100644 vendor/github.com/exoscale/egoscale/cserrorcode_string.go create mode 100644 vendor/github.com/exoscale/egoscale/dns.go create mode 100644 vendor/github.com/exoscale/egoscale/doc.go create mode 100644 vendor/github.com/exoscale/egoscale/error.go create mode 100644 vendor/github.com/exoscale/egoscale/errorcode_string.go create mode 100644 vendor/github.com/exoscale/egoscale/events.go create mode 100644 vendor/github.com/exoscale/egoscale/events_response.go create mode 100644 vendor/github.com/exoscale/egoscale/eventtypes_response.go create mode 100644 vendor/github.com/exoscale/egoscale/go.mod create mode 100644 vendor/github.com/exoscale/egoscale/go.sum create mode 100644 vendor/github.com/exoscale/egoscale/gopher.png create mode 100644 vendor/github.com/exoscale/egoscale/iam_apikey.go create mode 100644 vendor/github.com/exoscale/egoscale/instance_groups.go create mode 100644 vendor/github.com/exoscale/egoscale/instance_pool.go create mode 100644 vendor/github.com/exoscale/egoscale/instancegroups_response.go create mode 100644 vendor/github.com/exoscale/egoscale/isos.go create mode 100644 vendor/github.com/exoscale/egoscale/isos_response.go create mode 100644 vendor/github.com/exoscale/egoscale/jobstatustype_string.go create mode 100644 vendor/github.com/exoscale/egoscale/macaddress.go create mode 100644 vendor/github.com/exoscale/egoscale/networks.go create mode 100644 vendor/github.com/exoscale/egoscale/networks_response.go create mode 100644 vendor/github.com/exoscale/egoscale/nics.go create mode 100644 vendor/github.com/exoscale/egoscale/nics_response.go create mode 100644 vendor/github.com/exoscale/egoscale/oscategories_response.go create mode 100644 vendor/github.com/exoscale/egoscale/publicipaddresses_response.go create mode 100644 vendor/github.com/exoscale/egoscale/record_string.go create mode 100644 vendor/github.com/exoscale/egoscale/request.go create mode 100644 vendor/github.com/exoscale/egoscale/request_type.go create mode 100644 vendor/github.com/exoscale/egoscale/resource_limits.go create mode 100644 vendor/github.com/exoscale/egoscale/resource_metadata.go create mode 100644 vendor/github.com/exoscale/egoscale/resourcedetails_response.go create mode 100644 vendor/github.com/exoscale/egoscale/resourcelimits_response.go create mode 100644 vendor/github.com/exoscale/egoscale/reversedns.go create mode 100644 vendor/github.com/exoscale/egoscale/runstatus.go create mode 100644 vendor/github.com/exoscale/egoscale/runstatus_event.go create mode 100644 vendor/github.com/exoscale/egoscale/runstatus_incident.go create mode 100644 vendor/github.com/exoscale/egoscale/runstatus_maintenance.go create mode 100644 vendor/github.com/exoscale/egoscale/runstatus_page.go create mode 100644 vendor/github.com/exoscale/egoscale/runstatus_service.go create mode 100644 vendor/github.com/exoscale/egoscale/security_groups.go create mode 100644 vendor/github.com/exoscale/egoscale/securitygroups_response.go create mode 100644 vendor/github.com/exoscale/egoscale/serialization.go create mode 100644 vendor/github.com/exoscale/egoscale/service_offerings.go create mode 100644 vendor/github.com/exoscale/egoscale/serviceofferings_response.go create mode 100644 vendor/github.com/exoscale/egoscale/snapshots.go create mode 100644 vendor/github.com/exoscale/egoscale/snapshots_response.go create mode 100644 vendor/github.com/exoscale/egoscale/sos_buckets_usage.go create mode 100644 vendor/github.com/exoscale/egoscale/ssh_keypairs.go create mode 100644 vendor/github.com/exoscale/egoscale/sshkeypairs_response.go create mode 100644 vendor/github.com/exoscale/egoscale/tags.go create mode 100644 vendor/github.com/exoscale/egoscale/tags_response.go create mode 100644 vendor/github.com/exoscale/egoscale/templates.go create mode 100644 vendor/github.com/exoscale/egoscale/templates_response.go create mode 100644 vendor/github.com/exoscale/egoscale/users.go create mode 100644 vendor/github.com/exoscale/egoscale/users_response.go create mode 100644 vendor/github.com/exoscale/egoscale/uuid.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/api/api.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/api/error.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/api/middleware.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/api/request.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/api/security.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/client.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/error.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/async.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/loadbalancer.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/mock.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.gen.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/request.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_cluster.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_nodepool.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/template.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/internal/public-api/time.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/loadbalancer.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/sks.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/test.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/v2.go create mode 100644 vendor/github.com/exoscale/egoscale/v2/zone.go create mode 100644 vendor/github.com/exoscale/egoscale/version.go create mode 100644 vendor/github.com/exoscale/egoscale/virtual_machines.go create mode 100644 vendor/github.com/exoscale/egoscale/virtualmachines_response.go create mode 100644 vendor/github.com/exoscale/egoscale/volumes.go create mode 100644 vendor/github.com/exoscale/egoscale/volumes_response.go create mode 100644 vendor/github.com/exoscale/egoscale/zones.go create mode 100644 vendor/github.com/exoscale/egoscale/zones_response.go create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/LICENSE create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/artifact.go create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.go create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.hcl2spec.go create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/post-processor.go create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_delete_image.go create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_register_template.go create mode 100644 vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_upload_image.go create mode 100644 vendor/github.com/jarcoal/httpmock/.gitignore create mode 100644 vendor/github.com/jarcoal/httpmock/LICENSE create mode 100644 vendor/github.com/jarcoal/httpmock/README.md create mode 100644 vendor/github.com/jarcoal/httpmock/doc.go create mode 100644 vendor/github.com/jarcoal/httpmock/env.go create mode 100644 vendor/github.com/jarcoal/httpmock/file.go create mode 100644 vendor/github.com/jarcoal/httpmock/go.mod create mode 100644 vendor/github.com/jarcoal/httpmock/internal/route_key.go create mode 100644 vendor/github.com/jarcoal/httpmock/internal/stack_tracer.go create mode 100644 vendor/github.com/jarcoal/httpmock/internal/submatches.go create mode 100644 vendor/github.com/jarcoal/httpmock/response.go create mode 100644 vendor/github.com/jarcoal/httpmock/transport.go create mode 100644 vendor/github.com/stretchr/objx/.codeclimate.yml create mode 100644 vendor/github.com/stretchr/objx/.gitignore create mode 100644 vendor/github.com/stretchr/objx/.travis.yml create mode 100644 vendor/github.com/stretchr/objx/LICENSE create mode 100644 vendor/github.com/stretchr/objx/README.md create mode 100644 vendor/github.com/stretchr/objx/Taskfile.yml create mode 100644 vendor/github.com/stretchr/objx/accessors.go create mode 100644 vendor/github.com/stretchr/objx/conversions.go create mode 100644 vendor/github.com/stretchr/objx/doc.go create mode 100644 vendor/github.com/stretchr/objx/go.mod create mode 100644 vendor/github.com/stretchr/objx/go.sum create mode 100644 vendor/github.com/stretchr/objx/map.go create mode 100644 vendor/github.com/stretchr/objx/mutations.go create mode 100644 vendor/github.com/stretchr/objx/security.go create mode 100644 vendor/github.com/stretchr/objx/tests.go create mode 100644 vendor/github.com/stretchr/objx/type_specific.go create mode 100644 vendor/github.com/stretchr/objx/type_specific_codegen.go create mode 100644 vendor/github.com/stretchr/objx/value.go create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_order.go create mode 100644 vendor/github.com/stretchr/testify/mock/doc.go create mode 100644 vendor/github.com/stretchr/testify/mock/mock.go create mode 100644 vendor/golang.org/x/sys/unix/ptrace_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/ptrace_ios.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 delete mode 100644 vendor/gopkg.in/yaml.v3/.travis.yml diff --git a/go.mod b/go.mod index b3a97053b..4cb549450 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,7 @@ require ( github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/digitalocean/go-qemu v0.0.0-20201211181942-d361e7b4965f github.com/digitalocean/godo v1.11.1 + github.com/exoscale/packer-plugin-exoscale v0.1.0 github.com/fatih/camelcase v1.0.0 github.com/fatih/structtag v1.0.0 github.com/go-ini/ini v1.25.4 @@ -76,7 +77,7 @@ require ( github.com/profitbricks/profitbricks-sdk-go v4.0.2+incompatible github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7 github.com/shirou/gopsutil v3.21.1+incompatible - github.com/stretchr/testify v1.6.1 + github.com/stretchr/testify v1.7.0 github.com/tencentcloud/tencentcloud-sdk-go v3.0.222+incompatible github.com/ucloud/ucloud-sdk-go v0.16.3 github.com/ufilesdk-dev/ufile-gosdk v0.0.0-20190830075812-b4dbc4ef43a6 @@ -87,13 +88,13 @@ require ( github.com/yandex-cloud/go-sdk v0.0.0-20200921111412-ef15ded2014c github.com/zclconf/go-cty v1.7.0 github.com/zclconf/go-cty-yaml v1.0.1 - golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 + golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad golang.org/x/mobile v0.0.0-20201208152944-da85bec010a2 golang.org/x/mod v0.3.0 - golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 + golang.org/x/net v0.0.0-20210119194325-5f4716e94777 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a - golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 + golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c golang.org/x/tools v0.0.0-20201111133315-69daaf961d65 google.golang.org/api v0.32.0 google.golang.org/grpc v1.32.0 diff --git a/go.sum b/go.sum index 2c3abd6fe..807fb3dc9 100644 --- a/go.sum +++ b/go.sum @@ -148,10 +148,14 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= 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/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892/go.mod h1:CTDl0pzVzE5DEzZhPfvhY/9sPFMQIxaJ9VAMs9AagrE= +github.com/deepmap/oapi-codegen v1.3.11/go.mod h1:suMvK7+rKlx3+tpa8ByptmvoXbAV70wERKTOGH3hLp0= +github.com/deepmap/oapi-codegen v1.5.1 h1:Xx8/OynzWhQeKFWr182hg6Ja2evS1gcqdja7qMn05yU= +github.com/deepmap/oapi-codegen v1.5.1/go.mod h1:Eb1vtV3f58zvm37CJV4UAQ1bECb0fgAVvTdonC1ftJg= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/digitalocean/go-libvirt v0.0.0-20190626172931-4d226dd6c437/go.mod h1:PRcPVAAma6zcLpFd4GZrjR/MRpood3TamjKI2m/z/Uw= @@ -177,6 +181,10 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSYdCF3rnBKXE= +github.com/exoscale/egoscale v0.43.1 h1:Lhr0UOfg3t3Y56yh1DsYCjQuUHqFvsC8iUVqvub8+0Q= +github.com/exoscale/egoscale v0.43.1/go.mod h1:mpEXBpROAa/2i5GC0r33rfxG+TxSEka11g1PIXt9+zc= +github.com/exoscale/packer-plugin-exoscale v0.1.0 h1:p4ymqF1tNiTuxgSdnEjGqXehMdDQbV7BPaLsMxGav24= +github.com/exoscale/packer-plugin-exoscale v0.1.0/go.mod h1:ZmJRkxsAlmEsVYOMxYPupDkax54uZ+ph0h3W59aIMZ8= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -185,8 +193,12 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fatih/structtag v1.0.0 h1:pTHj65+u3RKWYPSGaU290FpI/dXxTaHdVwVwbcPKmEc= github.com/fatih/structtag v1.0.0/go.mod h1:IKitwq45uXL/yqi5mYghiD3w9H6eTOvI9vnk8tXMphA= +github.com/getkin/kin-openapi v0.13.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw= +github.com/getkin/kin-openapi v0.37.0/go.mod h1:ZJSfy1PxJv2QQvH9EdBj3nupRTVvV42mkW6zKUlRBwk= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-chi/chi v1.5.1/go.mod h1:REp24E+25iKvxgeTfHmdUoL5x15kBiDBlnIl5bCwe2k= +github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= 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= @@ -196,6 +208,8 @@ github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8= github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So= github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU= @@ -207,8 +221,9 @@ github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gofrs/flock v0.7.3 h1:I0EKY9l8HZCXTMYC4F80vwT6KNypV9uYKP3Alm/hjmQ= github.com/gofrs/flock v0.7.3/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 h1:zN2lZNZRflqFyxVaTIU61KNKQ9C0055u9CAfpmqUvo4= github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3/go.mod h1:nPpo7qLxd6XL3hWJG/O60sR8ZKfMCiIoNap5GvD12KU= @@ -241,6 +256,7 @@ github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0 github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -403,6 +419,9 @@ github.com/hetznercloud/hcloud-go v1.15.1/go.mod h1:8lR3yHBHZWy2uGcUi9Ibt4UOoop2 github.com/hyperonecom/h1-client-go v0.0.0-20191203060043-b46280e4c4a4 h1:mSmyzhwBeQt2TlHbsXYLona9pwjWAvYGwQJ2Cq/k3VE= github.com/hyperonecom/h1-client-go v0.0.0-20191203060043-b46280e4c4a4/go.mod h1:yNUVHSleURKSaYUKq4Wx0i/vjCen2aq7CvPyHd/Vj2Q= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jarcoal/httpmock v1.0.6/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jarcoal/httpmock v1.0.8 h1:8kI16SoO6LQKgPE7PvQuV+YuD/inwHd7fOOe2zMbo4k= +github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jdcloud-api/jdcloud-sdk-go v1.9.1-0.20190605102154-3d81a50ca961 h1:a2/K4HRhg31A5vafiz5yYiGMjaCxwRpyjJStfVquKds= github.com/jdcloud-api/jdcloud-sdk-go v1.9.1-0.20190605102154-3d81a50ca961/go.mod h1:UrKjuULIWLjHFlG6aSPunArE5QX57LftMmStAZJBEX8= github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4= @@ -450,21 +469,31 @@ 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/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= +github.com/labstack/echo/v4 v4.1.17/go.mod h1:Tn2yRQL/UclUalpb5rPdXDevbkJ+lp/2svdyFBg6CHQ= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/linode/linodego v0.14.0 h1:0APKMjiVGyry2TTUVDiok72H6cWpFNMMrFWBFn14aFU= github.com/linode/linodego v0.14.0/go.mod h1:2ce3S00NrDqJfp4i55ZuSlT0U3cKNELNYACWBPI8Tnw= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/masterzen/simplexml v0.0.0-20160608183007-4572e39b1ab9/go.mod h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc= github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 h1:2ZKn+w/BJeL43sCxI2jhPLRv73oVVOjEKZjKkflyqxg= github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786/go.mod h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc= github.com/masterzen/winrm v0.0.0-20200615185753-c42b5136ff88/go.mod h1:a2HXwefeat3evJHxFXSayvRHpYEPJYtErl4uIzfaUqY= github.com/masterzen/winrm v0.0.0-20201030141608-56ca5c5f2380 h1:uKhPH5dYpx3Z8ZAnaTGfGZUiHOWa5p5mdG8wZlh+tLo= github.com/masterzen/winrm v0.0.0-20201030141608-56ca5c5f2380/go.mod h1:a2HXwefeat3evJHxFXSayvRHpYEPJYtErl4uIzfaUqY= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 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/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= @@ -556,6 +585,7 @@ github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= @@ -584,14 +614,16 @@ github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 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 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 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/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tencentcloud/tencentcloud-sdk-go v3.0.222+incompatible h1:bs+0lcG4RELNbE8PsBC9oaPP0/qExr0DuEGnZyocm84= github.com/tencentcloud/tencentcloud-sdk-go v3.0.222+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -606,6 +638,10 @@ github.com/ugorji/go/codec v1.2.4 h1:C5VurWRRCKjuENsbM6GYVw8W++WVW9rSxoACKIvxzz8 github.com/ugorji/go/codec v1.2.4/go.mod h1:bWBu1+kIRWcF8uMklKaJrR6fTWQOwAlrIzX22pHwryA= github.com/ulikunitz/xz v0.5.5 h1:pFrO0lVpTBXLpYw+pnLj6TbvHuyjXMfjGeCwSqCVwok= github.com/ulikunitz/xz v0.5.5/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= @@ -645,14 +681,18 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= 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= @@ -706,6 +746,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/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-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/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= @@ -725,8 +766,9 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 h1:lwlPPsmjDKK0J6eG6xDWd5XPehI0R024zxjDnw3esPA= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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= @@ -762,12 +804,14 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/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-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/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= @@ -786,11 +830,13 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -799,8 +845,9 @@ 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.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 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.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= @@ -975,8 +1022,9 @@ gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 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-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/deepmap/oapi-codegen/LICENSE b/vendor/github.com/deepmap/oapi-codegen/LICENSE new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/LICENSE @@ -0,0 +1,201 @@ + 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/deepmap/oapi-codegen/pkg/runtime/bind.go b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bind.go new file mode 100644 index 000000000..3e2a689cd --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bind.go @@ -0,0 +1,24 @@ +// Copyright 2021 DeepMap, Inc. +// +// 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 + +// Binder is the interface implemented by types that can be bound to a query string or a parameter string +// The input can be assumed to be a valid string. If you define a Bind method you are responsible for all +// data being completely bound to the type. +// +// By convention, to approximate the behavior of Bind functions themselves, +// Binder implements Bind("") as a no-op. +type Binder interface { + Bind(src string) error +} \ No newline at end of file diff --git a/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindparam.go b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindparam.go new file mode 100644 index 000000000..7c3807c22 --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindparam.go @@ -0,0 +1,463 @@ +// Copyright 2019 DeepMap, Inc. +// +// 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/json" + "fmt" + "net/url" + "reflect" + "strings" + "time" + + "github.com/pkg/errors" + + "github.com/deepmap/oapi-codegen/pkg/types" +) + +// This function binds a parameter as described in the Path Parameters +// section here to a Go object: +// https://swagger.io/docs/specification/serialization/ +func BindStyledParameter(style string, explode bool, paramName string, + value string, dest interface{}) error { + + if value == "" { + return fmt.Errorf("parameter '%s' is empty, can't bind its value", paramName) + } + + // Everything comes in by pointer, dereference it + v := reflect.Indirect(reflect.ValueOf(dest)) + + // This is the basic type of the destination object. + t := v.Type() + + if t.Kind() == reflect.Struct { + // We've got a destination object, we'll create a JSON representation + // of the input value, and let the json library deal with the unmarshaling + parts, err := splitStyledParameter(style, explode, true, paramName, value) + if err != nil { + return err + } + + return bindSplitPartsToDestinationStruct(paramName, parts, explode, dest) + } + + if t.Kind() == reflect.Slice { + // Chop up the parameter into parts based on its style + parts, err := splitStyledParameter(style, explode, false, paramName, value) + if err != nil { + return fmt.Errorf("error splitting input '%s' into parts: %s", value, err) + } + + return bindSplitPartsToDestinationArray(parts, dest) + } + + // Try to bind the remaining types as a base type. + return BindStringToObject(value, dest) +} + +// This is a complex set of operations, but each given parameter style can be +// packed together in multiple ways, using different styles of separators, and +// different packing strategies based on the explode flag. This function takes +// as input any parameter format, and unpacks it to a simple list of strings +// or key-values which we can then treat generically. +// Why, oh why, great Swagger gods, did you have to make this so complicated? +func splitStyledParameter(style string, explode bool, object bool, paramName string, value string) ([]string, error) { + switch style { + case "simple": + // In the simple case, we always split on comma + parts := strings.Split(value, ",") + return parts, nil + case "label": + // In the label case, it's more tricky. In the no explode case, we have + // /users/.3,4,5 for arrays + // /users/.role,admin,firstName,Alex for objects + // in the explode case, we have: + // /users/.3.4.5 + // /users/.role=admin.firstName=Alex + if explode { + // In the exploded case, split everything on periods. + parts := strings.Split(value, ".") + // The first part should be an empty string because we have a + // leading period. + if parts[0] != "" { + return nil, fmt.Errorf("invalid format for label parameter '%s', should start with '.'", paramName) + } + return parts[1:], nil + + } else { + // In the unexploded case, we strip off the leading period. + if value[0] != '.' { + return nil, fmt.Errorf("invalid format for label parameter '%s', should start with '.'", paramName) + } + // The rest is comma separated. + return strings.Split(value[1:], ","), nil + } + + case "matrix": + if explode { + // In the exploded case, we break everything up on semicolon + parts := strings.Split(value, ";") + // The first part should always be empty string, since we started + // with ;something + if parts[0] != "" { + return nil, fmt.Errorf("invalid format for matrix parameter '%s', should start with ';'", paramName) + } + parts = parts[1:] + // Now, if we have an object, we just have a list of x=y statements. + // for a non-object, like an array, we have id=x, id=y. id=z, etc, + // so we need to strip the prefix from each of them. + if !object { + prefix := paramName + "=" + for i := range parts { + parts[i] = strings.TrimPrefix(parts[i], prefix) + } + } + return parts, nil + } else { + // In the unexploded case, parameters will start with ;paramName= + prefix := ";" + paramName + "=" + if !strings.HasPrefix(value, prefix) { + return nil, fmt.Errorf("expected parameter '%s' to start with %s", paramName, prefix) + } + str := strings.TrimPrefix(value, prefix) + return strings.Split(str, ","), nil + } + case "form": + var parts []string + if explode { + parts = strings.Split(value, "&") + if !object { + prefix := paramName + "=" + for i := range parts { + parts[i] = strings.TrimPrefix(parts[i], prefix) + } + } + return parts, nil + } else { + parts = strings.Split(value, ",") + prefix := paramName + "=" + for i := range parts { + parts[i] = strings.TrimPrefix(parts[i], prefix) + } + } + return parts, nil + } + + return nil, fmt.Errorf("unhandled parameter style: %s", style) +} + +// Given a set of values as a slice, create a slice to hold them all, and +// assign to each one by one. +func bindSplitPartsToDestinationArray(parts []string, dest interface{}) error { + // Everything comes in by pointer, dereference it + v := reflect.Indirect(reflect.ValueOf(dest)) + + // This is the basic type of the destination object. + t := v.Type() + + // We've got a destination array, bind each object one by one. + // This generates a slice of the correct element type and length to + // hold all the parts. + newArray := reflect.MakeSlice(t, len(parts), len(parts)) + for i, p := range parts { + err := BindStringToObject(p, newArray.Index(i).Addr().Interface()) + if err != nil { + return fmt.Errorf("error setting array element: %s", err) + } + } + v.Set(newArray) + return nil +} + +// Given a set of chopped up parameter parts, bind them to a destination +// struct. The exploded parameter controls whether we send key value pairs +// in the exploded case, or a sequence of values which are interpreted as +// tuples. +// Given the struct Id { firstName string, role string }, as in the canonical +// swagger examples, in the exploded case, we would pass +// ["firstName=Alex", "role=admin"], where in the non-exploded case, we would +// pass "firstName", "Alex", "role", "admin"] +// +// We punt the hard work of binding these values to the object to the json +// library. We'll turn those arrays into JSON strings, and unmarshal +// into the struct. +func bindSplitPartsToDestinationStruct(paramName string, parts []string, explode bool, dest interface{}) error { + // We've got a destination object, we'll create a JSON representation + // of the input value, and let the json library deal with the unmarshaling + var fields []string + if explode { + fields = make([]string, len(parts)) + for i, property := range parts { + propertyParts := strings.Split(property, "=") + if len(propertyParts) != 2 { + return fmt.Errorf("parameter '%s' has invalid exploded format", paramName) + } + fields[i] = "\"" + propertyParts[0] + "\":\"" + propertyParts[1] + "\"" + } + } else { + if len(parts)%2 != 0 { + return fmt.Errorf("parameter '%s' has invalid format, property/values need to be pairs", paramName) + } + fields = make([]string, len(parts)/2) + for i := 0; i < len(parts); i += 2 { + key := parts[i] + value := parts[i+1] + fields[i/2] = "\"" + key + "\":\"" + value + "\"" + } + } + jsonParam := "{" + strings.Join(fields, ",") + "}" + err := json.Unmarshal([]byte(jsonParam), dest) + if err != nil { + return fmt.Errorf("error binding parameter %s fields: %s", paramName, err) + } + return nil +} + +// This works much like BindStyledParameter, however it takes a query argument +// input array from the url package, since query arguments come through a +// different path than the styled arguments. They're also exceptionally fussy. +// For example, consider the exploded and unexploded form parameter examples: +// (exploded) /users?role=admin&firstName=Alex +// (unexploded) /users?id=role,admin,firstName,Alex +// +// In the first case, we can pull the "id" parameter off the context, +// and unmarshal via json as an intermediate. Easy. In the second case, we +// don't have the id QueryParam present, but must find "role", and "firstName". +// what if there is another parameter similar to "ID" named "role"? We can't +// tell them apart. This code tries to fail, but the moral of the story is that +// you shouldn't pass objects via form styled query arguments, just use +// the Content parameter form. +func BindQueryParameter(style string, explode bool, required bool, paramName string, + queryParams url.Values, dest interface{}) error { + + // dv = destination value. + dv := reflect.Indirect(reflect.ValueOf(dest)) + + // intermediate value form which is either dv or dv dereferenced. + v := dv + + // inner code will bind the string's value to this interface. + var output interface{} + + if required { + // If the parameter is required, then the generated code will pass us + // a pointer to it: &int, &object, and so forth. We can directly set + // them. + output = dest + } else { + // For optional parameters, we have an extra indirect. An optional + // parameter of type "int" will be *int on the struct. We pass that + // in by pointer, and have **int. + + // If the destination, is a nil pointer, we need to allocate it. + if v.IsNil() { + t := v.Type() + newValue := reflect.New(t.Elem()) + // for now, hang onto the output buffer separately from destination, + // as we don't want to write anything to destination until we can + // unmarshal successfully, and check whether a field is required. + output = newValue.Interface() + } else { + // If the destination isn't nil, just use that. + output = v.Interface() + } + + // Get rid of that extra indirect as compared to the required case, + // so the code below doesn't have to care. + v = reflect.Indirect(reflect.ValueOf(output)) + } + + // This is the basic type of the destination object. + t := v.Type() + k := t.Kind() + + switch style { + case "form": + var parts []string + if explode { + // ok, the explode case in query arguments is very, very annoying, + // because an exploded object, such as /users?role=admin&firstName=Alex + // isn't actually present in the parameter array. We have to do + // different things based on destination type. + values, found := queryParams[paramName] + var err error + + switch k { + case reflect.Slice: + // In the slice case, we simply use the arguments provided by + // http library. + if !found { + if required { + return fmt.Errorf("query parameter '%s' is required", paramName) + } else { + return nil + } + } + err = bindSplitPartsToDestinationArray(values, output) + case reflect.Struct: + // This case is really annoying, and error prone, but the + // form style object binding doesn't tell us which arguments + // in the query string correspond to the object's fields. We'll + // try to bind field by field. + err = bindParamsToExplodedObject(paramName, queryParams, output) + default: + // Primitive object case. We expect to have 1 value to + // unmarshal. + if len(values) == 0 { + if required { + return fmt.Errorf("query parameter '%s' is required", paramName) + } else { + return nil + } + } + if len(values) != 1 { + return fmt.Errorf("multiple values for single value parameter '%s'", paramName) + } + err = BindStringToObject(values[0], output) + } + if err != nil { + return err + } + // If the parameter is required, and we've successfully unmarshaled + // it, this assigns the new object to the pointer pointer. + if !required { + dv.Set(reflect.ValueOf(output)) + } + return nil + } else { + values, found := queryParams[paramName] + if !found { + if required { + return fmt.Errorf("query parameter '%s' is required", paramName) + } else { + return nil + } + } + if len(values) != 1 { + return fmt.Errorf("parameter '%s' is not exploded, but is specified multiple times", paramName) + } + parts = strings.Split(values[0], ",") + } + var err error + switch k { + case reflect.Slice: + err = bindSplitPartsToDestinationArray(parts, output) + case reflect.Struct: + err = bindSplitPartsToDestinationStruct(paramName, parts, explode, output) + default: + if len(parts) == 0 { + if required { + return fmt.Errorf("query parameter '%s' is required", paramName) + } else { + return nil + } + } + if len(parts) != 1 { + return fmt.Errorf("multiple values for single value parameter '%s'", paramName) + } + err = BindStringToObject(parts[0], output) + } + if err != nil { + return err + } + if !required { + dv.Set(reflect.ValueOf(output)) + } + return nil + case "deepObject": + if !explode { + return errors.New("deepObjects must be exploded") + } + return UnmarshalDeepObject(dest, paramName, queryParams) + case "spaceDelimited", "pipeDelimited": + return fmt.Errorf("query arguments of style '%s' aren't yet supported", style) + default: + return fmt.Errorf("style '%s' on parameter '%s' is invalid", style, paramName) + + } +} + +// This function reflects the destination structure, and pulls the value for +// each settable field from the given parameters map. This is to deal with the +// exploded form styled object which may occupy any number of parameter names. +// We don't try to be smart here, if the field exists as a query argument, +// set its value. +func bindParamsToExplodedObject(paramName string, values url.Values, dest interface{}) error { + // Dereference pointers to their destination values + binder, v, t := indirect(dest) + if binder != nil { + return BindStringToObject(values.Get(paramName), dest) + } + if t.Kind() != reflect.Struct { + return fmt.Errorf("unmarshaling query arg '%s' into wrong type", paramName) + } + + for i := 0; i < t.NumField(); i++ { + fieldT := t.Field(i) + + // Skip unsettable fields, such as internal ones. + if !v.Field(i).CanSet() { + continue + } + + // Find the json annotation on the field, and use the json specified + // name if available, otherwise, just the field name. + tag := fieldT.Tag.Get("json") + fieldName := fieldT.Name + if tag != "" { + tagParts := strings.Split(tag, ",") + name := tagParts[0] + if name != "" { + fieldName = name + } + } + + // At this point, we look up field name in the parameter list. + fieldVal, found := values[fieldName] + if found { + if len(fieldVal) != 1 { + return fmt.Errorf("field '%s' specified multiple times for param '%s'", fieldName, paramName) + } + err := BindStringToObject(fieldVal[0], v.Field(i).Addr().Interface()) + if err != nil { + return fmt.Errorf("could not bind query arg '%s' to request object: %s'", paramName, err) + } + } + } + return nil +} + +// indirect +func indirect(dest interface{}) (interface{}, reflect.Value, reflect.Type) { + v := reflect.ValueOf(dest) + if v.Type().NumMethod() > 0 && v.CanInterface() { + if u, ok := v.Interface().(Binder); ok { + return u, reflect.Value{}, nil + } + } + v = reflect.Indirect(v) + t := v.Type() + // special handling for custom types which might look like an object. We + // don't want to use object binding on them, but rather treat them as + // primitive types. time.Time{} is a unique case since we can't add a Binder + // to it without changing the underlying generated code. + if t.ConvertibleTo(reflect.TypeOf(time.Time{})) { + return dest, reflect.Value{}, nil + } + if t.ConvertibleTo(reflect.TypeOf(types.Date{})) { + return dest, reflect.Value{}, nil + } + return nil, v, t +} diff --git a/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindstring.go b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindstring.go new file mode 100644 index 000000000..e75964b66 --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/bindstring.go @@ -0,0 +1,143 @@ +// Copyright 2019 DeepMap, Inc. +// +// 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 ( + "errors" + "fmt" + "reflect" + "strconv" + "time" + + "github.com/deepmap/oapi-codegen/pkg/types" +) + +// This function takes a string, and attempts to assign it to the destination +// interface via whatever type conversion is necessary. We have to do this +// via reflection instead of a much simpler type switch so that we can handle +// type aliases. This function was the easy way out, the better way, since we +// know the destination type each place that we use this, is to generate code +// to read each specific type. +func BindStringToObject(src string, dst interface{}) error { + var err error + + v := reflect.ValueOf(dst) + t := reflect.TypeOf(dst) + + // We need to dereference pointers + if t.Kind() == reflect.Ptr { + v = reflect.Indirect(v) + t = v.Type() + } + + // The resulting type must be settable. reflect will catch issues like + // passing the destination by value. + if !v.CanSet() { + return errors.New("destination is not settable") + } + + switch t.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + var val int64 + val, err = strconv.ParseInt(src, 10, 64) + if err == nil { + v.SetInt(val) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + var val uint64 + val, err = strconv.ParseUint(src, 10, 64) + if err == nil { + v.SetUint(val) + } + case reflect.String: + v.SetString(src) + err = nil + case reflect.Float64, reflect.Float32: + var val float64 + val, err = strconv.ParseFloat(src, 64) + if err == nil { + v.SetFloat(val) + } + case reflect.Bool: + var val bool + val, err = strconv.ParseBool(src) + if err == nil { + v.SetBool(val) + } + case reflect.Struct: + // if this is not of type Time or of type Date look to see if this is of type Binder. + if dstType, ok := dst.(Binder); ok { + return dstType.Bind(src) + } + + if t.ConvertibleTo(reflect.TypeOf(time.Time{})) { + // Don't fail on empty string. + if src == "" { + return nil + } + // Time is a special case of a struct that we handle + parsedTime, err := time.Parse(time.RFC3339Nano, src) + if err != nil { + parsedTime, err = time.Parse(types.DateFormat, src) + if err != nil { + return fmt.Errorf("error parsing '%s' as RFC3339 or 2006-01-02 time: %s", src, err) + } + } + // So, assigning this gets a little fun. We have a value to the + // dereference destination. We can't do a conversion to + // time.Time because the result isn't assignable, so we need to + // convert pointers. + if t != reflect.TypeOf(time.Time{}) { + vPtr := v.Addr() + vtPtr := vPtr.Convert(reflect.TypeOf(&time.Time{})) + v = reflect.Indirect(vtPtr) + } + v.Set(reflect.ValueOf(parsedTime)) + return nil + } + + if t.ConvertibleTo(reflect.TypeOf(types.Date{})) { + // Don't fail on empty string. + if src == "" { + return nil + } + parsedTime, err := time.Parse(types.DateFormat, src) + if err != nil { + return fmt.Errorf("error parsing '%s' as date: %s", src, err) + } + parsedDate := types.Date{Time: parsedTime} + + // We have to do the same dance here to assign, just like with times + // above. + if t != reflect.TypeOf(types.Date{}) { + vPtr := v.Addr() + vtPtr := vPtr.Convert(reflect.TypeOf(&types.Date{})) + v = reflect.Indirect(vtPtr) + } + v.Set(reflect.ValueOf(parsedDate)) + return nil + } + + // We fall through to the error case below if we haven't handled the + // destination type above. + fallthrough + default: + // We've got a bunch of types unimplemented, don't fail silently. + err = fmt.Errorf("can not bind to destination of type: %s", t.Kind()) + } + if err != nil { + return fmt.Errorf("error binding string parameter: %s", err) + } + return nil +} diff --git a/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/deepobject.go b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/deepobject.go new file mode 100644 index 000000000..e13c795f8 --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/deepobject.go @@ -0,0 +1,357 @@ +package runtime + +import ( + "encoding/json" + "fmt" + "github.com/deepmap/oapi-codegen/pkg/types" + "net/url" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "github.com/pkg/errors" +) + +func marshalDeepObject(in interface{}, path []string) ([]string, error) { + var result []string + + switch t := in.(type) { + case []interface{}: + // For the array, we will use numerical subscripts of the form [x], + // in the same order as the array. + for i, iface := range t { + newPath := append(path, strconv.Itoa(i)) + fields, err := marshalDeepObject(iface, newPath) + if err != nil { + return nil, errors.Wrap(err, "error traversing array") + } + result = append(result, fields...) + } + case map[string]interface{}: + // For a map, each key (field name) becomes a member of the path, and + // we recurse. First, sort the keys. + keys := make([]string, len(t)) + i := 0 + for k := range t { + keys[i] = k + i++ + } + sort.Strings(keys) + + // Now, for each key, we recursively marshal it. + for _, k := range keys { + newPath := append(path, k) + fields, err := marshalDeepObject(t[k], newPath) + if err != nil { + return nil, errors.Wrap(err, "error traversing map") + } + result = append(result, fields...) + } + default: + // Now, for a concrete value, we will turn the path elements + // into a deepObject style set of subscripts. [a, b, c] turns into + // [a][b][c] + prefix := "[" + strings.Join(path, "][") + "]" + result = []string{ + prefix + fmt.Sprintf("=%v", t), + } + } + return result, nil +} + +func MarshalDeepObject(i interface{}, paramName string) (string, error) { + // We're going to marshal to JSON and unmarshal into an interface{}, + // which will use the json pkg to deal with all the field annotations. We + // can then walk the generic object structure to produce a deepObject. This + // isn't efficient and it would be more efficient to reflect on our own, + // but it's complicated, error-prone code. + buf, err := json.Marshal(i) + if err != nil { + return "", errors.Wrap(err, "failed to marshal input to JSON") + } + var i2 interface{} + err = json.Unmarshal(buf, &i2) + if err != nil { + return "", errors.Wrap(err, "failed to unmarshal JSON") + } + fields, err := marshalDeepObject(i2, nil) + if err != nil { + return "", errors.Wrap(err, "error traversing JSON structure") + } + + // Prefix the param name to each subscripted field. + for i := range fields { + fields[i] = paramName + fields[i] + } + return strings.Join(fields, "&"), nil +} + +type fieldOrValue struct { + fields map[string]fieldOrValue + value string +} + +func (f *fieldOrValue) appendPathValue(path []string, value string) { + fieldName := path[0] + if len(path) == 1 { + f.fields[fieldName] = fieldOrValue{value: value} + return + } + + pv, found := f.fields[fieldName] + if !found { + pv = fieldOrValue{ + fields: make(map[string]fieldOrValue), + } + f.fields[fieldName] = pv + } + pv.appendPathValue(path[1:], value) +} + +func makeFieldOrValue(paths [][]string, values []string) fieldOrValue { + + f := fieldOrValue{ + fields: make(map[string]fieldOrValue), + } + for i := range paths { + path := paths[i] + value := values[i] + f.appendPathValue(path, value) + } + return f +} + +func UnmarshalDeepObject(dst interface{}, paramName string, params url.Values) error { + // Params are all the query args, so we need those that look like + // "paramName["... + var fieldNames []string + var fieldValues []string + searchStr := paramName + "[" + for pName, pValues := range params { + if strings.HasPrefix(pName, searchStr) { + // trim the parameter name from the full name. + pName = pName[len(paramName):] + fieldNames = append(fieldNames, pName) + if len(pValues) != 1 { + return fmt.Errorf("%s has multiple values", pName) + } + fieldValues = append(fieldValues, pValues[0]) + } + } + + // Now, for each field, reconstruct its subscript path and value + paths := make([][]string, len(fieldNames)) + for i, path := range fieldNames { + path = strings.TrimLeft(path, "[") + path = strings.TrimRight(path, "]") + paths[i] = strings.Split(path, "][") + } + + fieldPaths := makeFieldOrValue(paths, fieldValues) + err := assignPathValues(dst, fieldPaths) + if err != nil { + return errors.Wrap(err, "error assigning value to destination") + } + + return nil +} + +// This returns a field name, either using the variable name, or the json +// annotation if that exists. +func getFieldName(f reflect.StructField) string { + n := f.Name + tag, found := f.Tag.Lookup("json") + if found { + // If we have a json field, and the first part of it before the + // first comma is non-empty, that's our field name. + parts := strings.Split(tag, ",") + if parts[0] != "" { + n = parts[0] + } + } + return n +} + +// Create a map of field names that we'll see in the deepObject to reflect +// field indices on the given type. +func fieldIndicesByJsonTag(i interface{}) (map[string]int, error) { + t := reflect.TypeOf(i) + if t.Kind() != reflect.Struct { + return nil, errors.New("expected a struct as input") + } + + n := t.NumField() + fieldMap := make(map[string]int) + for i := 0; i < n; i++ { + field := t.Field(i) + fieldName := getFieldName(field) + fieldMap[fieldName] = i + } + return fieldMap, nil +} + +func assignPathValues(dst interface{}, pathValues fieldOrValue) error { + //t := reflect.TypeOf(dst) + v := reflect.ValueOf(dst) + + iv := reflect.Indirect(v) + it := iv.Type() + + switch it.Kind() { + case reflect.Slice: + sliceLength := len(pathValues.fields) + dstSlice := reflect.MakeSlice(it, sliceLength, sliceLength) + err := assignSlice(dstSlice, pathValues) + if err != nil { + return errors.Wrap(err, "error assigning slice") + } + iv.Set(dstSlice) + return nil + case reflect.Struct: + // Some special types we care about are structs. Handle them + // here. They may be redefined, so we need to do some hoop + // jumping. If the types are aliased, we need to type convert + // the pointer, then set the value of the dereference pointer. + + // We check to see if the object implements the Binder interface first. + if dst, isBinder := v.Interface().(Binder); isBinder { + return dst.Bind(pathValues.value) + } + // Then check the legacy types + if it.ConvertibleTo(reflect.TypeOf(types.Date{})) { + var date types.Date + var err error + date.Time, err = time.Parse(types.DateFormat, pathValues.value) + if err != nil { + return errors.Wrap(err, "invalid date format") + } + dst := iv + if it != reflect.TypeOf(types.Date{}) { + // Types are aliased, convert the pointers. + ivPtr := iv.Addr() + aPtr := ivPtr.Convert(reflect.TypeOf(&types.Date{})) + dst = reflect.Indirect(aPtr) + } + dst.Set(reflect.ValueOf(date)) + } + if it.ConvertibleTo(reflect.TypeOf(time.Time{})) { + var tm time.Time + var err error + tm, err = time.Parse(time.RFC3339Nano, pathValues.value) + if err != nil { + // Fall back to parsing it as a date. + tm, err = time.Parse(types.DateFormat, pathValues.value) + if err != nil { + return fmt.Errorf("error parsing tim as RFC3339 or 2006-01-02 time: %s", err) + } + return errors.Wrap(err, "invalid date format") + } + dst := iv + if it != reflect.TypeOf(time.Time{}) { + // Types are aliased, convert the pointers. + ivPtr := iv.Addr() + aPtr := ivPtr.Convert(reflect.TypeOf(&time.Time{})) + dst = reflect.Indirect(aPtr) + } + dst.Set(reflect.ValueOf(tm)) + } + fieldMap, err := fieldIndicesByJsonTag(iv.Interface()) + if err != nil { + return errors.Wrap(err, "failed enumerating fields") + } + for _, fieldName := range sortedFieldOrValueKeys(pathValues.fields) { + fieldValue := pathValues.fields[fieldName] + fieldIndex, found := fieldMap[fieldName] + if !found { + return fmt.Errorf("field [%s] is not present in destination object", fieldName) + } + field := iv.Field(fieldIndex) + err = assignPathValues(field.Addr().Interface(), fieldValue) + if err != nil { + return errors.Wrapf(err, "error assigning field [%s]", fieldName) + } + } + return nil + case reflect.Ptr: + // If we have a pointer after redirecting, it means we're dealing with + // an optional field, such as *string, which was passed in as &foo. We + // will allocate it if necessary, and call ourselves with a different + // interface. + dstVal := reflect.New(it.Elem()) + dstPtr := dstVal.Interface() + err := assignPathValues(dstPtr, pathValues) + iv.Set(dstVal) + return err + case reflect.Bool: + val, err := strconv.ParseBool(pathValues.value) + if err != nil { + return fmt.Errorf("expected a valid bool, got %s", pathValues.value) + } + iv.SetBool(val) + return nil + case reflect.Float32: + val, err := strconv.ParseFloat(pathValues.value, 32) + if err != nil { + return fmt.Errorf("expected a valid float, got %s", pathValues.value) + } + iv.SetFloat(val) + return nil + case reflect.Float64: + val, err := strconv.ParseFloat(pathValues.value, 64) + if err != nil { + return fmt.Errorf("expected a valid float, got %s", pathValues.value) + } + iv.SetFloat(val) + return nil + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + val, err := strconv.ParseInt(pathValues.value, 10, 64) + if err != nil { + return fmt.Errorf("expected a valid int, got %s", pathValues.value) + } + iv.SetInt(val) + return nil + case reflect.String: + iv.SetString(pathValues.value) + return nil + default: + return errors.New("unhandled type: " + it.String()) + } +} + +func assignSlice(dst reflect.Value, pathValues fieldOrValue) error { + // Gather up the values + nValues := len(pathValues.fields) + values := make([]string, nValues) + // We expect to have consecutive array indices in the map + for i := 0; i < nValues; i++ { + indexStr := strconv.Itoa(i) + fv, found := pathValues.fields[indexStr] + if !found { + return errors.New("array deepObjects must have consecutive indices") + } + values[i] = fv.value + } + + // This could be cleaner, but we can call into assignPathValues to + // avoid recreating this logic. + for i := 0; i < nValues; i++ { + dstElem := dst.Index(i).Addr() + err := assignPathValues(dstElem.Interface(), fieldOrValue{value: values[i]}) + if err != nil { + return errors.Wrap(err, "error binding array") + } + } + + return nil +} + +func sortedFieldOrValueKeys(m map[string]fieldOrValue) []string { + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + return keys +} diff --git a/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/styleparam.go b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/styleparam.go new file mode 100644 index 000000000..638e8349f --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/runtime/styleparam.go @@ -0,0 +1,352 @@ +// Copyright 2019 DeepMap, Inc. +// +// 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" + "net/url" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "github.com/pkg/errors" + + "github.com/deepmap/oapi-codegen/pkg/types" +) + +// Given an input value, such as a primitive type, array or object, turn it +// into a parameter based on style/explode definition. +func StyleParam(style string, explode bool, paramName string, value interface{}) (string, error) { + t := reflect.TypeOf(value) + v := reflect.ValueOf(value) + + // Things may be passed in by pointer, we need to dereference, so return + // error on nil. + if t.Kind() == reflect.Ptr { + if v.IsNil() { + return "", fmt.Errorf("value is a nil pointer") + } + v = reflect.Indirect(v) + t = v.Type() + } + + switch t.Kind() { + case reflect.Slice: + n := v.Len() + sliceVal := make([]interface{}, n) + for i := 0; i < n; i++ { + sliceVal[i] = v.Index(i).Interface() + } + return styleSlice(style, explode, paramName, sliceVal) + case reflect.Struct: + return styleStruct(style, explode, paramName, value) + case reflect.Map: + return styleMap(style, explode, paramName, value) + default: + return stylePrimitive(style, explode, paramName, value) + } +} + +func styleSlice(style string, explode bool, paramName string, values []interface{}) (string, error) { + if style == "deepObject" { + if !explode { + return "", errors.New("deepObjects must be exploded") + } + return MarshalDeepObject(values, paramName) + } + + var prefix string + var separator string + + switch style { + case "simple": + separator = "," + case "label": + prefix = "." + if explode { + separator = "." + } else { + separator = "," + } + case "matrix": + prefix = fmt.Sprintf(";%s=", paramName) + if explode { + separator = prefix + } else { + separator = "," + } + case "form": + prefix = fmt.Sprintf("%s=", paramName) + if explode { + separator = "&" + prefix + } else { + separator = "," + } + case "spaceDelimited": + prefix = fmt.Sprintf("%s=", paramName) + if explode { + separator = "&" + prefix + } else { + separator = " " + } + case "pipeDelimited": + prefix = fmt.Sprintf("%s=", paramName) + if explode { + separator = "&" + prefix + } else { + separator = "|" + } + default: + return "", fmt.Errorf("unsupported style '%s'", style) + } + + // We're going to assume here that the array is one of simple types. + var err error + parts := make([]string, len(values)) + for i, v := range values { + parts[i], err = primitiveToString(v) + if err != nil { + return "", fmt.Errorf("error formatting '%s': %s", paramName, err) + } + } + return prefix + strings.Join(parts, separator), nil +} + +func sortedKeys(strMap map[string]string) []string { + keys := make([]string, len(strMap)) + i := 0 + for k := range strMap { + keys[i] = k + i++ + } + sort.Strings(keys) + return keys +} + +// This is a special case. The struct may be a date or time, in +// which case, marshal it in correct format. +func marshalDateTimeValue(value interface{}) (string, bool) { + v := reflect.Indirect(reflect.ValueOf(value)) + t := v.Type() + + if t.ConvertibleTo(reflect.TypeOf(time.Time{})) { + tt := v.Convert(reflect.TypeOf(time.Time{})) + timeVal := tt.Interface().(time.Time) + return timeVal.Format(time.RFC3339Nano), true + } + + if t.ConvertibleTo(reflect.TypeOf(types.Date{})) { + d := v.Convert(reflect.TypeOf(types.Date{})) + dateVal := d.Interface().(types.Date) + return dateVal.Format(types.DateFormat), true + } + + return "", false +} + +func styleStruct(style string, explode bool, paramName string, value interface{}) (string, error) { + + if timeVal, ok := marshalDateTimeValue(value); ok { + styledVal, err := stylePrimitive(style, explode, paramName, timeVal) + if err != nil { + return "", errors.Wrap(err, "failed to style time") + } + return styledVal, nil + } + + if style == "deepObject" { + if !explode { + return "", errors.New("deepObjects must be exploded") + } + return MarshalDeepObject(value, paramName) + } + + // Otherwise, we need to build a dictionary of the struct's fields. Each + // field may only be a primitive value. + v := reflect.ValueOf(value) + t := reflect.TypeOf(value) + fieldDict := make(map[string]string) + + for i := 0; i < t.NumField(); i++ { + fieldT := t.Field(i) + // Find the json annotation on the field, and use the json specified + // name if available, otherwise, just the field name. + tag := fieldT.Tag.Get("json") + fieldName := fieldT.Name + if tag != "" { + tagParts := strings.Split(tag, ",") + name := tagParts[0] + if name != "" { + fieldName = name + } + } + f := v.Field(i) + + // Unset optional fields will be nil pointers, skip over those. + if f.Type().Kind() == reflect.Ptr && f.IsNil() { + continue + } + str, err := primitiveToString(f.Interface()) + if err != nil { + return "", fmt.Errorf("error formatting '%s': %s", paramName, err) + } + fieldDict[fieldName] = str + } + + return processFieldDict(style, explode, paramName, fieldDict) +} + +func styleMap(style string, explode bool, paramName string, value interface{}) (string, error) { + if style == "deepObject" { + if !explode { + return "", errors.New("deepObjects must be exploded") + } + return MarshalDeepObject(value, paramName) + } + + dict, ok := value.(map[string]interface{}) + if !ok { + return "", errors.New("map not of type map[string]interface{}") + } + + fieldDict := make(map[string]string) + for fieldName, value := range dict { + str, err := primitiveToString(value) + if err != nil { + return "", fmt.Errorf("error formatting '%s': %s", paramName, err) + } + fieldDict[fieldName] = str + } + + return processFieldDict(style, explode, paramName, fieldDict) +} + +func processFieldDict(style string, explode bool, paramName string, fieldDict map[string]string) (string, error) { + var parts []string + + // This works for everything except deepObject. We'll handle that one + // separately. + if style != "deepObject" { + if explode { + for _, k := range sortedKeys(fieldDict) { + v := fieldDict[k] + parts = append(parts, k+"="+v) + } + } else { + for _, k := range sortedKeys(fieldDict) { + v := fieldDict[k] + parts = append(parts, k) + parts = append(parts, v) + } + } + } + + var prefix string + var separator string + + switch style { + case "simple": + separator = "," + case "label": + prefix = "." + if explode { + separator = prefix + } else { + separator = "," + } + case "matrix": + if explode { + separator = ";" + prefix = ";" + } else { + separator = "," + prefix = fmt.Sprintf(";%s=", paramName) + } + case "form": + if explode { + separator = "&" + } else { + prefix = fmt.Sprintf("%s=", paramName) + separator = "," + } + case "deepObject": + { + if !explode { + return "", fmt.Errorf("deepObject parameters must be exploded") + } + for _, k := range sortedKeys(fieldDict) { + v := fieldDict[k] + part := fmt.Sprintf("%s[%s]=%s", paramName, k, v) + parts = append(parts, part) + } + separator = "&" + } + default: + return "", fmt.Errorf("unsupported style '%s'", style) + } + + return prefix + strings.Join(parts, separator), nil +} + +func stylePrimitive(style string, explode bool, paramName string, value interface{}) (string, error) { + strVal, err := primitiveToString(value) + if err != nil { + return "", err + } + + var prefix string + switch style { + case "simple": + case "label": + prefix = "." + case "matrix": + prefix = fmt.Sprintf(";%s=", paramName) + case "form": + prefix = fmt.Sprintf("%s=", paramName) + default: + return "", fmt.Errorf("unsupported style '%s'", style) + } + return prefix + url.QueryEscape(strVal), nil +} + +// Converts a primitive value to a string. We need to do this based on the +// Kind of an interface, not the Type to work with aliased types. +func primitiveToString(value interface{}) (string, error) { + var output string + + // Values may come in by pointer for optionals, so make sure to dereferene. + v := reflect.Indirect(reflect.ValueOf(value)) + t := v.Type() + kind := t.Kind() + + switch kind { + case reflect.Int8, reflect.Int32, reflect.Int64, reflect.Int: + output = strconv.FormatInt(v.Int(), 10) + case reflect.Float32, reflect.Float64: + output = strconv.FormatFloat(v.Float(), 'f', -1, 64) + case reflect.Bool: + if v.Bool() { + output = "true" + } else { + output = "false" + } + case reflect.String: + output = v.String() + default: + return "", fmt.Errorf("unsupported type %s", reflect.TypeOf(value).String()) + } + return output, nil +} diff --git a/vendor/github.com/deepmap/oapi-codegen/pkg/types/date.go b/vendor/github.com/deepmap/oapi-codegen/pkg/types/date.go new file mode 100644 index 000000000..bdf94a98a --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/types/date.go @@ -0,0 +1,30 @@ +package types + +import ( + "encoding/json" + "time" +) + +const DateFormat = "2006-01-02" + +type Date struct { + time.Time +} + +func (d Date) MarshalJSON() ([]byte, error) { + return json.Marshal(d.Time.Format(DateFormat)) +} + +func (d *Date) UnmarshalJSON(data []byte) error { + var dateStr string + err := json.Unmarshal(data, &dateStr) + if err != nil { + return err + } + parsed, err := time.Parse(DateFormat, dateStr) + if err != nil { + return err + } + d.Time = parsed + return nil +} diff --git a/vendor/github.com/deepmap/oapi-codegen/pkg/types/email.go b/vendor/github.com/deepmap/oapi-codegen/pkg/types/email.go new file mode 100644 index 000000000..00a4cf6b9 --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/types/email.go @@ -0,0 +1,27 @@ +package types + +import ( + "encoding/json" + "errors" +) + +type Email string + +func (e Email) MarshalJSON() ([]byte, error) { + if !emailRegex.MatchString(string(e)) { + return nil, errors.New("email: failed to pass regex validation") + } + return json.Marshal(string(e)) +} + +func (e *Email) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + if !emailRegex.MatchString(s) { + return errors.New("email: failed to pass regex validation") + } + *e = Email(s) + return nil +} diff --git a/vendor/github.com/deepmap/oapi-codegen/pkg/types/regexes.go b/vendor/github.com/deepmap/oapi-codegen/pkg/types/regexes.go new file mode 100644 index 000000000..94f17df58 --- /dev/null +++ b/vendor/github.com/deepmap/oapi-codegen/pkg/types/regexes.go @@ -0,0 +1,11 @@ +package types + +import "regexp" + +const ( + emailRegexString = "^(?:(?:(?:(?:[a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+(?:\\.([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+)*)|(?:(?:\\x22)(?:(?:(?:(?:\\x20|\\x09)*(?:\\x0d\\x0a))?(?:\\x20|\\x09)+)?(?:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(?:(?:[\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}]))))*(?:(?:(?:\\x20|\\x09)*(?:\\x0d\\x0a))?(\\x20|\\x09)+)?(?:\\x22))))@(?:(?:(?:[a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(?:(?:[a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])(?:[a-zA-Z]|\\d|-|\\.|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*(?:[a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.)+(?:(?:[a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(?:(?:[a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])(?:[a-zA-Z]|\\d|-|\\.|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*(?:[a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.?$" +) + +var ( + emailRegex = regexp.MustCompile(emailRegexString) +) diff --git a/vendor/github.com/exoscale/egoscale/.gitignore b/vendor/github.com/exoscale/egoscale/.gitignore new file mode 100644 index 000000000..800fe1da7 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/.gitignore @@ -0,0 +1,5 @@ +.token +dist +ops.asc +vendor +listApis.json \ No newline at end of file diff --git a/vendor/github.com/exoscale/egoscale/.golangci.yml b/vendor/github.com/exoscale/egoscale/.golangci.yml new file mode 100644 index 000000000..590924ea9 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/.golangci.yml @@ -0,0 +1,30 @@ +run: + timeout: 10m + +linters-settings: + golint: + min-confidence: 0.3 + gocyclo: + min-complexity: 28 + goimports: + local-prefixes: github.com + +linters: + enable: + - deadcode + - errcheck + - gocritic + - gocyclo + - goimports + - golint + - gosimple + - govet + - ineffassign + - megacheck + - nakedret + - scopelint + - staticcheck + - structcheck + - unused + - varcheck + disable-all: true diff --git a/vendor/github.com/exoscale/egoscale/AUTHORS b/vendor/github.com/exoscale/egoscale/AUTHORS new file mode 100644 index 000000000..5c12a2a17 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/AUTHORS @@ -0,0 +1,9 @@ +Pierre-Yves Ritschard +Vincent Bernat +Chris Baumbauer +Marc-Aurèle Brothier +Sebastien Goasguen +Yoan Blanc +Stefano Marengo +Pierre-Emmanuel Jacquier +Fabrizio Steiner diff --git a/vendor/github.com/exoscale/egoscale/CHANGELOG.md b/vendor/github.com/exoscale/egoscale/CHANGELOG.md new file mode 100644 index 000000000..84cf4466d --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/CHANGELOG.md @@ -0,0 +1,706 @@ +Changelog +========= + +0.43.1 +------ + +- change: in `NewClient()`, the `v2.Client` embedded in the `Client` struct doesn't inherit the custom `http.Client` set using `WithHTTPClient()`. + +0.43.0 +------ + +- change: [Exoscale API V2](https://openapi-v2.exoscale.com/) related code has been relocated under the `github.com/exoscale/egoscale/v2` package. + Note: `egoscale.Client` embeds a `v2.Client` initialized implicitly as a convenience. + +0.42.0 +------ + +- feature: new `SKSNodepool.AntiAffinityGroupIDs` field +- change: `SKSCluster.Level` field renamed as `SKSCluster.ServiceLevel` + +0.41.0 +------ + +- feature: new method `ListZones()` + +0.40.1 +------ + +- Improve API v2 async job tests and error reporting (#466) + +0.40.0 +------ + +- feature: new method `UpgradeSKSCluster()` +- feature: new fields `SKSCluster.Level` and `SKSCluster.CNI` +- change: `SKSCluster.EnableExoscaleCloudController` replaced with `SKSCluster.AddOns` + +0.39.1 +------ + +- fix: add missing `UpdateVirtualMachineSecurityGroups` operation metadata + +0.39.0 +------ + +- feature: add `UpdateVirtualMachineSecurityGroups` operation (#464) + +0.38.0 +------ + +- feature: add `SKSCluster.EvictNodepoolMembers()` and `ListSKSClusterVersions()` methods + +0.37.1 +------ + +- fix: `UpdateIPAddress.HealthcheckTLSSkipVerify` field always set to `false` (#462) + +0.37.0 +------ + +- feature: `NewClient()` now accepts options (460) +- fix: NLB service healthcheck TLS SNI bug (#461) + +0.36.2 +------ + +- fix: `CreateInstancePool.AntiAffinityGroupIDs` field is optional (#459) + +0.36.1 +------ + +- feature: add support for Exoscale Cloud Controller in SKS clusters +- fix: add missing tests for SKS Nodepools Security Groups + +0.36.0 +------ + +- feature: add support for Anti-Affinity Groups to Instance Pools +- feature: add support for Security Groups to SKS Nodepools + +0.35.3 +------ + +- Fix typo in version.go + +0.35.2 +------ + +- Improve API v2 errors handling (#455) + +0.35.1 +------ + +- fix: various SKS-related bugs (#454) + +0.35.0 +------ + +- feature: add support for SKS resources (#453) + +0.34.0 +------ + +- change: `BucketUsage.Usage` is now an `int64` (#451) + +0.33.2 +------ + +- fix: make `GetWithContext` return more relevant errors (#450) + +0.33.1 +------ + +- fix: `UpdateNetworkLoadBalancer` call panicking following a public API change + +0.33.0 +------ + +- feature: add support for Network Load Balancer service HTTPS health checking (#449) + +0.32.0 +------ + +- feature: add support for Instance Pool root disk size update (#448) + +0.31.2 +------ + +- fix: add missing TLS-specific parameters to `AssociateIPAddress` + +0.31.1 +------ + +- fix: Instance Pool IPv6 flag handling + +0.31.0 +------ + +- feature: add support for IPv6 in Instance Pools (#446) + +0.30.0 +------ + +- feature: add new TLS-specific parameters to managed EIP + +0.29.0 +------ + +- feature: `ListVirtualMachines` call to allow searching by `ManagerID` (#442) +- fix: remove duplicate `User-Agent` HTTP header in Runstatus calls +- tests: `*NetworkLoadBalancer*` calls are now tested using HTTP mocks +- codegen: `internal/v2` updated + +0.28.1 +------ + +- fix: Fix `ListVolumes` call to allow searching by ID (#440) + +0.28.0 +------ + +- feature: add `Manager`/`ManagerID` fields to `VirtualMachine` structure (#438) +- fix: HTTP request User Agent header handling (#439) + +0.27.0 +------ + +- feature: Add `evictInstancePoolMembers` call to Instance Pool (#437) + +0.26.6 +------ + +- change: Add support for Compute instance templates boot mode (#436) + +0.26.5 +------ + +- fix: bug in the ListNetworkLoadBalancers call (#435) + +0.26.4 +------ + +- Fixing typo in previous release + +0.26.3 +------ + +- change: updated API V2 async operation code (#434) + +0.26.2 +------ + +- change: updated OpenAPI code-generated API V2 bindings + +0.26.1 +------ + +- change: the `DisplayText` property of `RegisterCustomTemplate` is now optional (#433) + +0.26.0 +------ + +- feature: Add support for Network Load Balancer resources (#432) + +0.25.0 +------ + +- feature: Add support for `listBucketsUsage` (#431) +- change: Switch CI to Github Actions (#430) + +0.24.0 +------ + +- feature: Add export snapshot implementation (#427) +- feature: Add support for public API V2 (#425) +- change: Switch module to Go 1.14 (#429) +- change: Travis CI: set minimum Go version to 1.13 +- doc: Annotate API doc regarding use of tags (#423) +- tests: fix request client timeout handling (#422) + +0.23.0 +------ + +- change: Add `Resources` field to `APIKey` (#420) + +0.22.0 +------ + +- change: Remove all references to Network Offerings (#418) + +0.21.0 +------ + +- feature: add const `NotFound` 404 on type `ErrorCode` (#417) + +0.20.1 +------ + +- fix: update the `ListAPIKeysResponse` field (#415) + +0.20.0 +------ + +- feature: Add Instance pool implementation (#410) +- feature: Add IAM implementation (#411) + +0.19.0 +------ + +- feature: add field `Description` on type `IPAddress` (#413) +- change: add Json tag `omitempty` on field `TemplateFilter` in type `ListTemplates` (#412) + +0.18.1 +------ + +- change: make the "User-Agent" HTTP request header more informative and exposed + +0.18.0 +------ + +- feature: add method `DeepCopy` on type `AsyncJobResult` (#403) + +0.17.2 +------ + +- remove: remove the `IsFeatured` parameter from call `RegisterCustomTemplate` (#402) + +0.17.1 +------ + +- feature: add parameter `RescueProfile` to call `StartVirtualMachine` (#401) + +0.17.0 +------ + +- feature: add new call `RegisterCustomTemplate` (#400) +- feature: add new call `DeleteTemplate` (#399) + +0.16.0 +------ + +- feature: Add `Healthcheck*` parameters to call `UpdateIPAddress` +- change: Replace satori/go.uuid by gofrs/uuid + +0.15.0 +------ + +- change: prefix the healthcheck-related params with `Healthcheck` on call `AssociateIPAddress` +- EIP: the healthcheck should be a pointer +- ip addresses: Add the Healthcheck parameters +- readme: point to new lego org (#395) +- dns: user_id is not sent back (#394) + +0.14.3 +------ + +- fix: `AffinityGroup` lists virtual machines with `UUID` rather than string + +0.14.2 +------ + +- fix: `ListVirtualMachines` by `IDs` to accept `UUID` rather than string + +0.14.1 +------ + +- fix: `GetRunstatusPage` to always contain the subresources +- fix: `ListRunstatus*` to fetch all the subresources +- feature: `PaginateRunstatus*` used by list + +0.14.0 +------ + +- change: all DNS calls require a context +- fix: `CreateAffinityGroup` allows empty `name` + +0.13.3 +------ + +- fix: runstatus unmarshalling errors +- feature: `UUID` implements DeepCopy, DeepCopyInto +- change: export `BooleanResponse` + +0.13.2 +------ + +- feat: initial Runstatus API support +- feat: `admin` namespace containing `ListVirtualMachines` for admin usage + +0.13.1 +------ + +- feat: `Iso` support `ListIsos`, `AttachIso`, and `DetachIso` + +0.13.0 +------ + +- change: `Paginate` to accept `Listable` +- change: `ListCommand` is also `Listable` +- change: `client.Get` doesn't modify the given resource, returns a new one +- change: `Command` and `AsyncCommand` are fully public, thus extensible +- remove: `Gettable` + +0.12.5 +------ + +- fix: `AuthorizeSecurityGroupEgress` could return `authorizeSecurityGroupIngress` as name + +0.12.4 +------ + +- feat: `Snapshot` is `Listable` + +0.12.3 +------ + +- change: replace dep by Go modules +- change: remove domainid,domain,regionid,listall,isrecursive,... fields +- remove: `MigrateVirtualMachine`, `CreateUser`, `EnableAccount`, and other admin calls + +0.12.2 +------ + +- fix: `ListNics` has no virtualmachineid limitations anymore +- fix: `PCIDevice` ids are not UUIDs + +0.12.1 +------ + +- fix: `UpdateVMNicIP` is async + +0.12.0 +------ + +- feat: new VM state `Moving` +- feat: `UpdateNetwork` with `startip`, `endip`, `netmask` +- feat: `NetworkOffering` is `Listable` +- feat: when it fails parsing the body, it shows it +- fix: `Snapshot.State` is a string, rather than an scalar +- change: signature are now using the v3 version with expires by default + +0.11.6 +------ + +- fix: `Network.ListRequest` accepts a `Name` argument +- change: `SecurityGroup` and the rules aren't `Taggable` anymore + +0.11.5 +------ + +- feat: addition of `UpdateVMNicIP` +- fix: `UpdateVMAffinityGroup` expected response + +0.11.4 +------ + +*no changes in the core library* + +0.11.3 +------ + +*no changes in the core library* + +0.11.2 +------ + +- fix: empty list responses + +0.11.1 +------ + +- fix: `client.Sign` handles correctly the brackets (kudos to @stffabi) +- change: `client.Payload` returns a `url.Values` + +0.11.0 +------ + +- feat: `listOSCategories` and `OSCategory` type +- feat: `listApis` supports recursive response structures +- feat: `GetRecordsWithFilters` to list records with name or record_type filters +- fix: better `DNSErrorResponse` +- fix: `ListResourceLimits` type +- change: use UUID everywhere + +0.10.5 +------ + +- feat: `Client.Logger` to plug in any `*log.Logger` +- feat: `Client.TraceOn`/`ClientTraceOff` to toggle the HTTP tracing + +0.10.4 +------ + +- feat: `CIDR` to replace string string +- fix: prevent panic on nil + +0.10.3 +------ + +- feat: `Account` is Listable +- feat: `MACAddress` to replace string type +- fix: Go 1.7 support + +0.10.2 +------ + +- fix: ActivateIP6 response + +0.10.1 +------ + +- feat: expose `SyncRequest` and `SyncRequestWithContext` +- feat: addition of reverse DNS calls +- feat: addition of `SecurityGroup.UserSecurityGroup` + +0.10.0 +------ + +- global: cloudstack documentation links are moved into cs +- global: removal of all the `...Response` types +- feat: `Network` is `Listable` +- feat: addition of `deleteUser` +- feat: addition of `listHosts` +- feat: addition of `updateHost` +- feat: exo cmd (kudos to @pierre-emmanuelJ) +- change: refactor `Gettable` to use `ListRequest` + +0.9.31 +------ + +- fix: `IPAddress`.`ListRequest` with boolean fields +- fix: `Network`.`ListRequest` with boolean fields +- fix: `ServiceOffering`.`ListRequest` with boolean fields + +0.9.30 +------ + +- fix: `VirtualMachine` `PCIDevice` representation was incomplete + +0.9.29 +------ + +- change: `DNSErrorResponse` is a proper `error` + +0.9.28 +------ + +- feat: addition of `GetDomains` +- fix: `UpdateDomain` may contain more empty fields than `CreateDomain` + +0.9.27 +------ + +- fix: expects body to be `application/json` + +0.9.26 +------ + +- change: async timeout strategy wait two seconds and not fib(n) seconds + +0.9.25 +------ + +- fix: `GetVirtualUserData` response with `Decode` method handling base64 and gzip + +0.9.24 +------ + +- feat: `Template` is `Gettable` +- feat: `ServiceOffering` is `Gettable` +- feat: addition of `GetAPILimit` +- feat: addition of `CreateTemplate`, `PrepareTemplate`, `CopyTemplate`, `UpdateTemplate`, `RegisterTemplate` +- feat: addition of `MigrateVirtualMachine` +- feat: cmd cli +- change: remove useless fields related to Project and VPC + +0.9.23 +------ + +- feat: `booleanResponse` supports true booleans: https://github.com/apache/cloudstack/pull/2428 + +0.9.22 +------ + +- feat: `ListUsers`, `CreateUser`, `UpdateUser` +- feat: `ListResourceDetails` +- feat: `SecurityGroup` helper `RuleByID` +- feat: `Sign` signs the payload +- feat: `UpdateNetworkOffering` +- feat: `GetVirtualMachineUserData` +- feat: `EnableAccount` and `DisableAccount` (admin stuff) +- feat: `AsyncRequest` and `AsyncRequestWithContext` to examine the polling +- fix: `AuthorizeSecurityGroupIngress` support for ICMPv6 +- change: move `APIName()` into the `Client`, nice godoc +- change: `Payload` doesn't sign the request anymore +- change: `Client` exposes more of its underlying data +- change: requests are sent as GET unless it body size is too big + +0.9.21 +------ + +- feat: `Network` is `Listable` +- feat: `Zone` is `Gettable` +- feat: `Client.Payload` to help preview the HTTP parameters +- feat: generate command utility +- fix: `CreateSnapshot` was missing the `Name` attribute +- fix: `ListSnapshots` was missing the `IDs` attribute +- fix: `ListZones` was missing the `NetworkType` attribute +- fix: `ListAsyncJobs` was missing the `ListAll` attribute +- change: ICMP Type/Code are uint8 and TCP/UDP port are uint16 + +0.9.20 +------ + +- feat: `Template` is `Listable` +- feat: `IPAddress` is `Listable` +- change: `List` and `Paginate` return pointers +- fix: `Template` was missing `tags` + +0.9.19 +------ + +- feat: `SSHKeyPair` is `Listable` + +0.9.18 +------ + +- feat: `VirtualMachine` is `Listable` +- feat: new `Client.Paginate` and `Client.PaginateWithContext` +- change: the inner logic of `Listable` +- remove: not working `Client.AsyncList` + +0.9.17 +------ + +- fix: `AuthorizeSecurityGroup(In|E)gress` startport may be zero + +0.9.16 +------ + +- feat: new `Listable` interface +- feat: `Nic` is `Listable` +- feat: `Volume` is `Listable` +- feat: `Zone` is `Listable` +- feat: `AffinityGroup` is `Listable` +- remove: deprecated methods `ListNics`, `AddIPToNic`, and `RemoveIPFromNic` +- remove: deprecated method `GetRootVolumeForVirtualMachine` + +0.9.15 +------ + +- feat: `IPAddress` is `Gettable` and `Deletable` +- fix: serialization of *bool + +0.9.14 +------ + +- fix: `GetVMPassword` response +- remove: deprecated `GetTopology`, `GetImages`, and al + +0.9.13 +------ + +- feat: IP4 and IP6 flags to DeployVirtualMachine +- feat: add ActivateIP6 +- fix: error message was gobbled on 40x + +0.9.12 +------ + +- feat: add `BooleanRequestWithContext` +- feat: add `client.Get`, `client.GetWithContext` to fetch a resource +- feat: add `cleint.Delete`, `client.DeleteWithContext` to delete a resource +- feat: `SSHKeyPair` is `Gettable` and `Deletable` +- feat: `VirtualMachine` is `Gettable` and `Deletable` +- feat: `AffinityGroup` is `Gettable` and `Deletable` +- feat: `SecurityGroup` is `Gettable` and `Deletable` +- remove: deprecated methods `CreateAffinityGroup`, `DeleteAffinityGroup` +- remove: deprecated methods `CreateKeypair`, `DeleteKeypair`, `RegisterKeypair` +- remove: deprecated method `GetSecurityGroupID` + +0.9.11 +------ + +- feat: CloudStack API name is now public `APIName()` +- feat: enforce the mutual exclusivity of some fields +- feat: add `context.Context` to `RequestWithContext` +- change: `AsyncRequest` and `BooleanAsyncRequest` are gone, use `Request` and `BooleanRequest` instead. +- change: `AsyncInfo` is no more + +0.9.10 +------ + +- fix: typo made ListAll required in ListPublicIPAddresses +- fix: all bool are now *bool, respecting CS default value +- feat: (*VM).DefaultNic() to obtain the main Nic + +0.9.9 +----- + +- fix: affinity groups virtualmachineIds attribute +- fix: uuidList is not a list of strings + +0.9.8 +----- + +- feat: add RootDiskSize to RestoreVirtualMachine +- fix: monotonic polling using Context + +0.9.7 +----- + +- feat: add Taggable interface to expose ResourceType +- feat: add (Create|Update|Delete|List)InstanceGroup(s) +- feat: add RegisterUserKeys +- feat: add ListResourceLimits +- feat: add ListAccounts + +0.9.6 +----- + +- fix: update UpdateVirtualMachine userdata +- fix: Network's name/displaytext might be empty + +0.9.5 +----- + +- fix: serialization of slice + +0.9.4 +----- + +- fix: constants + +0.9.3 +----- + +- change: userdata expects a string +- change: no pointer in sub-struct's + +0.9.2 +----- + +- bug: createNetwork is a sync call +- bug: typo in listVirtualMachines' domainid +- bug: serialization of map[string], e.g. UpdateVirtualMachine +- change: IPAddress's use net.IP type +- feat: helpers VM.NicsByType, VM.NicByNetworkID, VM.NicByID +- feat: addition of CloudStack ApiErrorCode constants + +0.9.1 +----- + +- bug: sync calls returns succes as a string rather than a bool +- change: unexport BooleanResponse types +- feat: original CloudStack error response can be obtained + +0.9.0 +----- + +Big refactoring, addition of the documentation, compliance to golint. + +0.1.0 +----- + +Initial library diff --git a/vendor/github.com/exoscale/egoscale/LICENSE b/vendor/github.com/exoscale/egoscale/LICENSE new file mode 100644 index 000000000..327ecb823 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/LICENSE @@ -0,0 +1,201 @@ +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 2014 exoscale(tm) + + 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/exoscale/egoscale/README.md b/vendor/github.com/exoscale/egoscale/README.md new file mode 100644 index 000000000..b3525c5cb --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/README.md @@ -0,0 +1,28 @@ +--- +title: Egoscale +description: the Go library for Exoscale +--- + + + +[![Actions Status](https://github.com/exoscale/egoscale/workflows/CI/badge.svg?branch=master)](https://github.com/exoscale/egoscale/actions?query=workflow%3ACI+branch%3Amaster) +[![GoDoc](https://godoc.org/github.com/exoscale/egoscale?status.svg)](https://godoc.org/github.com/exoscale/egoscale) [![Go Report Card](https://goreportcard.com/badge/github.com/exoscale/egoscale)](https://goreportcard.com/report/github.com/exoscale/egoscale) + +A wrapper for the [Exoscale public cloud](https://www.exoscale.com) API. + +## Known users + +- [Exoscale CLI](https://github.com/exoscale/cli) +- [Exoscale Terraform provider](https://github.com/exoscale/terraform-provider-exoscale) +- [ExoIP](https://github.com/exoscale/exoip): IP Watchdog +- [Lego](https://github.com/go-acme/lego): Let's Encrypt and ACME library +- Kubernetes Incubator: [External DNS](https://github.com/kubernetes-incubator/external-dns) +- [Docker machine](https://docs.docker.com/machine/drivers/exoscale/) +- [etc.](https://godoc.org/github.com/exoscale/egoscale?importers) + +## License + +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 diff --git a/vendor/github.com/exoscale/egoscale/accounts.go b/vendor/github.com/exoscale/egoscale/accounts.go new file mode 100644 index 000000000..9bcdec608 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/accounts.go @@ -0,0 +1,80 @@ +package egoscale + +// Account provides the detailed account information +type Account struct { + AccountDetails map[string]string `json:"accountdetails,omitempty" doc:"details for the account"` + CPUAvailable string `json:"cpuavailable,omitempty" doc:"the total number of cpu cores available to be created for this account"` + CPULimit string `json:"cpulimit,omitempty" doc:"the total number of cpu cores the account can own"` + CPUTotal int64 `json:"cputotal,omitempty" doc:"the total number of cpu cores owned by account"` + DefaultZoneID *UUID `json:"defaultzoneid,omitempty" doc:"the default zone of the account"` + EipLimit string `json:"eiplimit,omitempty" doc:"the total number of public elastic ip addresses this account can acquire"` + Groups []string `json:"groups,omitempty" doc:"the list of acl groups that account belongs to"` + ID *UUID `json:"id,omitempty" doc:"the id of the account"` + IPAvailable string `json:"ipavailable,omitempty" doc:"the total number of public ip addresses available for this account to acquire"` + IPLimit string `json:"iplimit,omitempty" doc:"the total number of public ip addresses this account can acquire"` + IPTotal int64 `json:"iptotal,omitempty" doc:"the total number of public ip addresses allocated for this account"` + IsCleanupRequired bool `json:"iscleanuprequired,omitempty" doc:"true if the account requires cleanup"` + IsDefault bool `json:"isdefault,omitempty" doc:"true if account is default, false otherwise"` + MemoryAvailable string `json:"memoryavailable,omitempty" doc:"the total memory (in MB) available to be created for this account"` + MemoryLimit string `json:"memorylimit,omitempty" doc:"the total memory (in MB) the account can own"` + MemoryTotal int64 `json:"memorytotal,omitempty" doc:"the total memory (in MB) owned by account"` + Name string `json:"name,omitempty" doc:"the name of the account"` + NetworkAvailable string `json:"networkavailable,omitempty" doc:"the total number of networks available to be created for this account"` + NetworkDomain string `json:"networkdomain,omitempty" doc:"the network domain"` + NetworkLimit string `json:"networklimit,omitempty" doc:"the total number of networks the account can own"` + NetworkTotal int64 `json:"networktotal,omitempty" doc:"the total number of networks owned by account"` + PrimaryStorageAvailable string `json:"primarystorageavailable,omitempty" doc:"the total primary storage space (in GiB) available to be used for this account"` + PrimaryStorageLimit string `json:"primarystoragelimit,omitempty" doc:"the total primary storage space (in GiB) the account can own"` + PrimaryStorageTotal int64 `json:"primarystoragetotal,omitempty" doc:"the total primary storage space (in GiB) owned by account"` + ProjectAvailable string `json:"projectavailable,omitempty" doc:"the total number of projects available for administration by this account"` + ProjectLimit string `json:"projectlimit,omitempty" doc:"the total number of projects the account can own"` + ProjectTotal int64 `json:"projecttotal,omitempty" doc:"the total number of projects being administrated by this account"` + SecondaryStorageAvailable string `json:"secondarystorageavailable,omitempty" doc:"the total secondary storage space (in GiB) available to be used for this account"` + SecondaryStorageLimit string `json:"secondarystoragelimit,omitempty" doc:"the total secondary storage space (in GiB) the account can own"` + SecondaryStorageTotal int64 `json:"secondarystoragetotal,omitempty" doc:"the total secondary storage space (in GiB) owned by account"` + SMTP bool `json:"smtp,omitempty" doc:"if SMTP outbound is allowed"` + SnapshotAvailable string `json:"snapshotavailable,omitempty" doc:"the total number of snapshots available for this account"` + SnapshotLimit string `json:"snapshotlimit,omitempty" doc:"the total number of snapshots which can be stored by this account"` + SnapshotTotal int64 `json:"snapshottotal,omitempty" doc:"the total number of snapshots stored by this account"` + State string `json:"state,omitempty" doc:"the state of the account"` + TemplateAvailable string `json:"templateavailable,omitempty" doc:"the total number of templates available to be created by this account"` + TemplateLimit string `json:"templatelimit,omitempty" doc:"the total number of templates which can be created by this account"` + TemplateTotal int64 `json:"templatetotal,omitempty" doc:"the total number of templates which have been created by this account"` + User []User `json:"user,omitempty" doc:"the list of users associated with account"` + VMAvailable string `json:"vmavailable,omitempty" doc:"the total number of virtual machines available for this account to acquire"` + VMLimit string `json:"vmlimit,omitempty" doc:"the total number of virtual machines that can be deployed by this account"` + VMRunning int `json:"vmrunning,omitempty" doc:"the total number of virtual machines running for this account"` + VMStopped int `json:"vmstopped,omitempty" doc:"the total number of virtual machines stopped for this account"` + VMTotal int64 `json:"vmtotal,omitempty" doc:"the total number of virtual machines deployed by this account"` + VolumeAvailable string `json:"volumeavailable,omitempty" doc:"the total volume available for this account"` + VolumeLimit string `json:"volumelimit,omitempty" doc:"the total volume which can be used by this account"` + VolumeTotal int64 `json:"volumetotal,omitempty" doc:"the total volume being used by this account"` +} + +// ListRequest builds the ListAccountsGroups request +func (a Account) ListRequest() (ListCommand, error) { + return &ListAccounts{ + ID: a.ID, + State: a.State, + }, nil +} + +//go:generate go run generate/main.go -interface=Listable ListAccounts + +// ListAccounts represents a query to display the accounts +type ListAccounts struct { + ID *UUID `json:"id,omitempty" doc:"List account by account ID"` + IsCleanUpRequired *bool `json:"iscleanuprequired,omitempty" doc:"list accounts by cleanuprequired attribute (values are true or false)"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"List account by account name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + State string `json:"state,omitempty" doc:"List accounts by state. Valid states are enabled, disabled, and locked."` + _ bool `name:"listAccounts" description:"Lists accounts and provides detailed account information for listed accounts"` +} + +// ListAccountsResponse represents a list of accounts +type ListAccountsResponse struct { + Count int `json:"count"` + Account []Account `json:"account"` +} diff --git a/vendor/github.com/exoscale/egoscale/accounts_response.go b/vendor/github.com/exoscale/egoscale/accounts_response.go new file mode 100644 index 000000000..106daca32 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/accounts_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListAccounts) Response() interface{} { + return new(ListAccountsResponse) +} + +// ListRequest returns itself +func (ls *ListAccounts) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListAccounts) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListAccounts) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListAccounts) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListAccountsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListAccountsResponse was expected, got %T", resp)) + return + } + + for i := range items.Account { + if !callback(&items.Account[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/addresses.go b/vendor/github.com/exoscale/egoscale/addresses.go new file mode 100644 index 000000000..867ef4698 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/addresses.go @@ -0,0 +1,188 @@ +package egoscale + +import ( + "context" + "fmt" + "net" +) + +// Healthcheck represents an Healthcheck attached to an IP +type Healthcheck struct { + Interval int64 `json:"interval,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 10, minimum: 5"` + Mode string `json:"mode,omitempty" doc:"healthcheck definition: healthcheck mode can be either 'tcp' or 'http'"` + Path string `json:"path,omitempty" doc:"healthcheck definition: the path against which the 'http' healthcheck will be performed. Required if mode is 'http', ignored otherwise."` + Port int64 `json:"port,omitempty" doc:"healthcheck definition: the port against which the healthcheck will be performed. Required if a 'mode' is provided."` + StrikesFail int64 `json:"strikes-fail,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'dead'. Default: 3"` + StrikesOk int64 `json:"strikes-ok,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'alive'. Default: 2"` + Timeout int64 `json:"timeout,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 2, cannot be greater than interval."` + TLSSNI string `json:"tls-sni,omitempty" doc:"healthcheck definition: server name to present for HTTPS checks"` + TLSSkipVerify bool `json:"tls-skip-verify" doc:"healthcheck definition: bypass certificate chain verification for HTTPS checks"` +} + +// IPAddress represents an IP Address +type IPAddress struct { + Allocated string `json:"allocated,omitempty" doc:"date the public IP address was acquired"` + Associated string `json:"associated,omitempty" doc:"date the public IP address was associated"` + AssociatedNetworkID *UUID `json:"associatednetworkid,omitempty" doc:"the ID of the Network associated with the IP address"` + AssociatedNetworkName string `json:"associatednetworkname,omitempty" doc:"the name of the Network associated with the IP address"` + Description string `json:"description,omitempty" doc:"The IP address description."` + ForVirtualNetwork bool `json:"forvirtualnetwork,omitempty" doc:"the virtual network for the IP address"` + Healthcheck *Healthcheck `json:"healthcheck,omitempty" doc:"The IP healthcheck configuration"` + ID *UUID `json:"id,omitempty" doc:"public IP address id"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"public IP address"` + IsElastic bool `json:"iselastic,omitempty" doc:"is an elastic ip"` + IsPortable bool `json:"isportable,omitempty" doc:"is public IP portable across the zones"` + IsSourceNat bool `json:"issourcenat,omitempty" doc:"true if the IP address is a source nat address, false otherwise"` + IsStaticNat *bool `json:"isstaticnat,omitempty" doc:"true if this ip is for static nat, false otherwise"` + IsSystem bool `json:"issystem,omitempty" doc:"true if this ip is system ip (was allocated as a part of deployVm or createLbRule)"` + NetworkID *UUID `json:"networkid,omitempty" doc:"the ID of the Network where ip belongs to"` + PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"the physical network this belongs to"` + Purpose string `json:"purpose,omitempty" doc:"purpose of the IP address. In Acton this value is not null for Ips with isSystem=true, and can have either StaticNat or LB value"` + ReverseDNS []ReverseDNS `json:"reversedns,omitempty" doc:"the list of PTR record(s) associated with the ip address"` + State string `json:"state,omitempty" doc:"State of the ip address. Can be: Allocatin, Allocated and Releasing"` + Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with ip address"` + VirtualMachineDisplayName string `json:"virtualmachinedisplayname,omitempty" doc:"virtual machine display name the ip address is assigned to (not null only for static nat Ip)"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"virtual machine id the ip address is assigned to (not null only for static nat Ip)"` + VirtualMachineName string `json:"virtualmachinename,omitempty" doc:"virtual machine name the ip address is assigned to (not null only for static nat Ip)"` + VlanID *UUID `json:"vlanid,omitempty" doc:"the ID of the VLAN associated with the IP address. This parameter is visible to ROOT admins only"` + VlanName string `json:"vlanname,omitempty" doc:"the VLAN associated with the IP address"` + VMIPAddress net.IP `json:"vmipaddress,omitempty" doc:"virtual machine (dnat) ip address (not null only for static nat Ip)"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the zone the public IP address belongs to"` + ZoneName string `json:"zonename,omitempty" doc:"the name of the zone the public IP address belongs to"` +} + +// ResourceType returns the type of the resource +func (IPAddress) ResourceType() string { + return "PublicIpAddress" +} + +// ListRequest builds the ListAdresses request +func (ipaddress IPAddress) ListRequest() (ListCommand, error) { + req := &ListPublicIPAddresses{ + AssociatedNetworkID: ipaddress.AssociatedNetworkID, + ID: ipaddress.ID, + IPAddress: ipaddress.IPAddress, + PhysicalNetworkID: ipaddress.PhysicalNetworkID, + VlanID: ipaddress.VlanID, + ZoneID: ipaddress.ZoneID, + } + if ipaddress.IsElastic { + req.IsElastic = &ipaddress.IsElastic + } + if ipaddress.IsSourceNat { + req.IsSourceNat = &ipaddress.IsSourceNat + } + if ipaddress.ForVirtualNetwork { + req.ForVirtualNetwork = &ipaddress.ForVirtualNetwork + } + + return req, nil +} + +// Delete removes the resource +func (ipaddress IPAddress) Delete(ctx context.Context, client *Client) error { + if ipaddress.ID == nil { + return fmt.Errorf("an IPAddress may only be deleted using ID") + } + + return client.BooleanRequestWithContext(ctx, &DisassociateIPAddress{ + ID: ipaddress.ID, + }) +} + +// AssociateIPAddress (Async) represents the IP creation +type AssociateIPAddress struct { + Description string `json:"description,omitempty" doc:"The IP address description."` + HealthcheckInterval int64 `json:"interval,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 10, minimum: 5"` + HealthcheckMode string `json:"mode,omitempty" doc:"healthcheck definition: healthcheck mode can be either 'tcp', 'http', or 'https'"` + HealthcheckPath string `json:"path,omitempty" doc:"healthcheck definition: the path against which the 'http' healthcheck will be performed. Required if mode is 'http' or 'https', ignored otherwise."` + HealthcheckPort int64 `json:"port,omitempty" doc:"healthcheck definition: the port against which the healthcheck will be performed. Required if a 'mode' is provided."` + HealthcheckStrikesFail int64 `json:"strikes-fail,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'dead'. Default: 3"` + HealthcheckStrikesOk int64 `json:"strikes-ok,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'alive'. Default: 2"` + HealthcheckTimeout int64 `json:"timeout,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 2, cannot be greater than interval."` + HealthcheckTLSSkipVerify bool `json:"tls-skip-verify,omitempty" doc:"healthcheck definition: skip TLS verification for HTTPS checks. Default: false"` + HealthcheckTLSSNI string `json:"tls-sni,omitempty" doc:"healthcheck definition: server name to present for HTTPS checks. Default: no server name is presented"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the availability zone you want to acquire a public IP address from"` + _ bool `name:"associateIpAddress" description:"Acquires and associates a public IP to an account."` +} + +// Response returns the struct to unmarshal +func (AssociateIPAddress) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (AssociateIPAddress) AsyncResponse() interface{} { + return new(IPAddress) +} + +// DisassociateIPAddress (Async) represents the IP deletion +type DisassociateIPAddress struct { + ID *UUID `json:"id" doc:"the id of the public ip address to disassociate"` + _ bool `name:"disassociateIpAddress" description:"Disassociates an ip address from the account."` +} + +// Response returns the struct to unmarshal +func (DisassociateIPAddress) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DisassociateIPAddress) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// UpdateIPAddress (Async) represents the IP modification +type UpdateIPAddress struct { + Description string `json:"description,omitempty" doc:"The IP address description."` + HealthcheckInterval int64 `json:"interval,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 10, minimum: 5"` + HealthcheckMode string `json:"mode,omitempty" doc:"healthcheck definition: healthcheck mode can be either 'tcp', 'http', or 'https'"` + HealthcheckPath string `json:"path,omitempty" doc:"healthcheck definition: the path against which the 'http' healthcheck will be performed. Required if mode is 'http', ignored otherwise."` + HealthcheckPort int64 `json:"port,omitempty" doc:"healthcheck definition: the port against which the healthcheck will be performed. Required if a 'mode' is provided."` + HealthcheckStrikesFail int64 `json:"strikes-fail,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'dead'. Default: 3"` + HealthcheckStrikesOk int64 `json:"strikes-ok,omitempty" doc:"healthcheck definition: number of times to retry before declaring the healthcheck 'alive'. Default: 2"` + HealthcheckTimeout int64 `json:"timeout,omitempty" doc:"healthcheck definition: time in seconds to wait for each check. Default: 2, cannot be greater than interval."` + HealthcheckTLSSNI string `json:"tls-sni,omitempty" doc:"healthcheck definition: server name to present for HTTPS checks"` + HealthcheckTLSSkipVerify bool `json:"tls-skip-verify,omitempty" doc:"healthcheck definition: bypass certificate chain verification for HTTPS checks"` + ID *UUID `json:"id" doc:"the id of the public IP address to update"` + _ bool `name:"updateIpAddress" description:"Updates an IP address"` +} + +// Response returns the struct to unmarshal +func (UpdateIPAddress) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (UpdateIPAddress) AsyncResponse() interface{} { + return new(IPAddress) +} + +//go:generate go run generate/main.go -interface=Listable ListPublicIPAddresses + +// ListPublicIPAddresses represents a search for public IP addresses +type ListPublicIPAddresses struct { + AllocatedOnly *bool `json:"allocatedonly,omitempty" doc:"limits search results to allocated public IP addresses"` + AssociatedNetworkID *UUID `json:"associatednetworkid,omitempty" doc:"lists all public IP addresses associated to the network specified"` + ForLoadBalancing *bool `json:"forloadbalancing,omitempty" doc:"list only ips used for load balancing"` + ForVirtualNetwork *bool `json:"forvirtualnetwork,omitempty" doc:"the virtual network for the IP address"` + ID *UUID `json:"id,omitempty" doc:"lists ip address by id"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"lists the specified IP address"` + IsElastic *bool `json:"iselastic,omitempty" doc:"list only elastic ip addresses"` + IsSourceNat *bool `json:"issourcenat,omitempty" doc:"list only source nat ip addresses"` + IsStaticNat *bool `json:"isstaticnat,omitempty" doc:"list only static nat ip addresses"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"lists all public IP addresses by physical network id"` + Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs). Note: multiple tags are OR'ed, not AND'ed."` + VlanID *UUID `json:"vlanid,omitempty" doc:"lists all public IP addresses by VLAN ID"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"lists all public IP addresses by Zone ID"` + _ bool `name:"listPublicIpAddresses" description:"Lists all public ip addresses"` +} + +// ListPublicIPAddressesResponse represents a list of public IP addresses +type ListPublicIPAddressesResponse struct { + Count int `json:"count"` + PublicIPAddress []IPAddress `json:"publicipaddress"` +} diff --git a/vendor/github.com/exoscale/egoscale/affinity_groups.go b/vendor/github.com/exoscale/egoscale/affinity_groups.go new file mode 100644 index 000000000..ae909f6bf --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/affinity_groups.go @@ -0,0 +1,158 @@ +package egoscale + +import ( + "context" + "fmt" + "net/url" +) + +// AffinityGroup represents an Affinity Group. +// +// Affinity and Anti-Affinity Groups provide a way to influence where VMs should run. +// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/stable/virtual_machines.html#affinity-groups +type AffinityGroup struct { + Account string `json:"account,omitempty" doc:"the account owning the Affinity Group"` + Description string `json:"description,omitempty" doc:"the description of the Affinity Group"` + ID *UUID `json:"id,omitempty" doc:"the ID of the Affinity Group"` + Name string `json:"name,omitempty" doc:"the name of the Affinity Group"` + Type string `json:"type,omitempty" doc:"the type of the Affinity Group"` + VirtualMachineIDs []UUID `json:"virtualmachineIds,omitempty" doc:"virtual machine IDs associated with this Affinity Group"` +} + +// ListRequest builds the ListAffinityGroups request. +func (ag AffinityGroup) ListRequest() (ListCommand, error) { + return &ListAffinityGroups{ + ID: ag.ID, + Name: ag.Name, + }, nil +} + +// Delete deletes the given Affinity Group. +func (ag AffinityGroup) Delete(ctx context.Context, client *Client) error { + if ag.ID == nil && ag.Name == "" { + return fmt.Errorf("an Affinity Group may only be deleted using ID or Name") + } + + req := &DeleteAffinityGroup{} + + if ag.ID != nil { + req.ID = ag.ID + } else { + req.Name = ag.Name + } + + return client.BooleanRequestWithContext(ctx, req) +} + +// AffinityGroupType represent an Affinity Group type. +type AffinityGroupType struct { + Type string `json:"type,omitempty" doc:"the type of the Affinity Group"` +} + +// CreateAffinityGroup (Async) represents a new Affinity Group. +type CreateAffinityGroup struct { + Description string `json:"description,omitempty" doc:"Optional description of the Affinity Group"` + Name string `json:"name" doc:"Name of the Affinity Group"` + Type string `json:"type" doc:"Type of the Affinity Group from the available Affinity Group Group types"` + _ bool `name:"createAffinityGroup" description:"Creates an Affinity Group Group"` +} + +func (req CreateAffinityGroup) onBeforeSend(params url.Values) error { + // Name must be set, but can be empty. + if req.Name == "" { + params.Set("name", "") + } + return nil +} + +// Response returns the struct to unmarshal. +func (CreateAffinityGroup) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job. +func (CreateAffinityGroup) AsyncResponse() interface{} { + return new(AffinityGroup) +} + +// UpdateVMAffinityGroup (Async) represents a modification of an Affinity Group. +type UpdateVMAffinityGroup struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + AffinityGroupIDs []UUID `json:"affinitygroupids,omitempty" doc:"comma separated list of Affinity Groups id that are going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter"` + AffinityGroupNames []string `json:"affinitygroupnames,omitempty" doc:"comma separated list of Affinity Groups names that are going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter"` + _ bool `name:"updateVMAffinityGroup" description:"Updates the Affinity Group Group associations of a virtual machine. The VM has to be stopped and restarted for the new properties to take effect."` +} + +func (req UpdateVMAffinityGroup) onBeforeSend(params url.Values) error { + // Either AffinityGroupIDs or AffinityGroupNames must be set. + if len(req.AffinityGroupIDs) == 0 && len(req.AffinityGroupNames) == 0 { + params.Set("affinitygroupids", "") + } + return nil +} + +// Response returns the struct to unmarshal. +func (UpdateVMAffinityGroup) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job. +func (UpdateVMAffinityGroup) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// DeleteAffinityGroup (Async) represents an Affinity Group to be deleted. +type DeleteAffinityGroup struct { + ID *UUID `json:"id,omitempty" doc:"The ID of the Affinity Group. Mutually exclusive with name parameter"` + Name string `json:"name,omitempty" doc:"The name of the Affinity Group. Mutually exclusive with ID parameter"` + _ bool `name:"deleteAffinityGroup" description:"Deletes Affinity Group"` +} + +// Response returns the struct to unmarshal. +func (DeleteAffinityGroup) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job. +func (DeleteAffinityGroup) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +//go:generate go run generate/main.go -interface=Listable ListAffinityGroups + +// ListAffinityGroups represents an Affinity Groups search. +type ListAffinityGroups struct { + ID *UUID `json:"id,omitempty" doc:"List the Affinity Group by the ID provided"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"Lists Affinity Groups by name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + Type string `json:"type,omitempty" doc:"Lists Affinity Groups by type"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"Lists Affinity Groups by virtual machine ID"` + _ bool `name:"listAffinityGroups" description:"Lists Affinity Groups"` +} + +// ListAffinityGroupsResponse represents a list of Affinity Groups. +type ListAffinityGroupsResponse struct { + Count int `json:"count"` + AffinityGroup []AffinityGroup `json:"affinitygroup"` +} + +// ListAffinityGroupTypes represents an Affinity Groups types search. +type ListAffinityGroupTypes struct { + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + _ bool `name:"listAffinityGroupTypes" description:"Lists Affinity Group types available"` +} + +// Response returns the struct to unmarshal. +func (ListAffinityGroupTypes) Response() interface{} { + return new(ListAffinityGroupTypesResponse) +} + +// ListAffinityGroupTypesResponse represents a list of Affinity Group types. +type ListAffinityGroupTypesResponse struct { + Count int `json:"count"` + AffinityGroupType []AffinityGroupType `json:"affinitygrouptype"` +} diff --git a/vendor/github.com/exoscale/egoscale/affinitygroups_response.go b/vendor/github.com/exoscale/egoscale/affinitygroups_response.go new file mode 100644 index 000000000..606598887 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/affinitygroups_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal. +func (ListAffinityGroups) Response() interface{} { + return new(ListAffinityGroupsResponse) +} + +// ListRequest returns itself. +func (ls *ListAffinityGroups) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current page. +func (ls *ListAffinityGroups) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size. +func (ls *ListAffinityGroups) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue. +func (ListAffinityGroups) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListAffinityGroupsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListAffinityGroupsResponse was expected, got %T", resp)) + return + } + + for i := range items.AffinityGroup { + if !callback(&items.AffinityGroup[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/antiaffinity_groups.go b/vendor/github.com/exoscale/egoscale/antiaffinity_groups.go new file mode 100644 index 000000000..bc3d6928c --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/antiaffinity_groups.go @@ -0,0 +1,103 @@ +package egoscale + +import ( + "context" + "fmt" + "net/url" +) + +// AntiAffinityGroup represents an Anti-Affinity Group. +type AntiAffinityGroup struct { + Account string `json:"account,omitempty" doc:"the account owning the Anti-Affinity Group"` + Description string `json:"description,omitempty" doc:"the description of the Anti-Affinity Group"` + ID *UUID `json:"id,omitempty" doc:"the ID of the Anti-Affinity Group"` + Name string `json:"name,omitempty" doc:"the name of the Anti-Affinity Group"` + Type string `json:"type,omitempty" doc:"the type of the Anti-Affinity Group"` + VirtualMachineIDs []UUID `json:"virtualmachineIds,omitempty" doc:"virtual machine IDs associated with this Anti-Affinity Group"` +} + +// ListRequest builds the ListAntiAffinityGroups request. +func (ag AntiAffinityGroup) ListRequest() (ListCommand, error) { + return &ListAffinityGroups{ + ID: ag.ID, + Name: ag.Name, + }, nil +} + +// Delete deletes the given Anti-Affinity Group. +func (ag AntiAffinityGroup) Delete(ctx context.Context, client *Client) error { + if ag.ID == nil && ag.Name == "" { + return fmt.Errorf("an Anti-Affinity Group may only be deleted using ID or Name") + } + + req := &DeleteAffinityGroup{} + + if ag.ID != nil { + req.ID = ag.ID + } else { + req.Name = ag.Name + } + + return client.BooleanRequestWithContext(ctx, req) +} + +// CreateAntiAffinityGroup represents an Anti-Affinity Group creation. +type CreateAntiAffinityGroup struct { + Name string `json:"name" doc:"Name of the Anti-Affinity Group"` + Description string `json:"description,omitempty" doc:"Optional description of the Anti-Affinity Group"` + _ bool `name:"createAntiAffinityGroup" description:"Creates an Anti-Affinity Group"` +} + +func (req CreateAntiAffinityGroup) onBeforeSend(params url.Values) error { + // Name must be set, but can be empty. + if req.Name == "" { + params.Set("name", "") + } + return nil +} + +// Response returns the struct to unmarshal. +func (CreateAntiAffinityGroup) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job. +func (CreateAntiAffinityGroup) AsyncResponse() interface{} { + return new(AffinityGroup) +} + +//go:generate go run generate/main.go -interface=Listable ListAntiAffinityGroups + +// ListAntiAffinityGroups represents an Anti-Affinity Groups search. +type ListAntiAffinityGroups struct { + ID *UUID `json:"id,omitempty" doc:"List the Anti-Affinity Group by the ID provided"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"Lists Anti-Affinity Groups by name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"Lists Anti-Affinity Groups by virtual machine ID"` + _ bool `name:"listAntiAffinityGroups" description:"Lists Anti-Affinity Groups"` +} + +// ListAntiAffinityGroupsResponse represents a list of Anti-Affinity Groups. +type ListAntiAffinityGroupsResponse struct { + Count int `json:"count"` + AntiAffinityGroup []AffinityGroup `json:"antiaffinitygroup"` +} + +// DeleteAntiAffinityGroup (Async) represents an Anti-Affinity Group to be deleted. +type DeleteAntiAffinityGroup struct { + ID *UUID `json:"id,omitempty" doc:"The ID of the Anti-Affinity Group. Mutually exclusive with name parameter"` + Name string `json:"name,omitempty" doc:"The name of the Anti-Affinity Group. Mutually exclusive with ID parameter"` + _ bool `name:"deleteAntiAffinityGroup" description:"Deletes Anti-Affinity Group"` +} + +// Response returns the struct to unmarshal. +func (DeleteAntiAffinityGroup) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job. +func (DeleteAntiAffinityGroup) AsyncResponse() interface{} { + return new(BooleanResponse) +} diff --git a/vendor/github.com/exoscale/egoscale/antiaffinity_groups_response.go b/vendor/github.com/exoscale/egoscale/antiaffinity_groups_response.go new file mode 100644 index 000000000..153516be2 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/antiaffinity_groups_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal. +func (ListAntiAffinityGroups) Response() interface{} { + return new(ListAntiAffinityGroupsResponse) +} + +// ListRequest returns itself. +func (ls *ListAntiAffinityGroups) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current page. +func (ls *ListAntiAffinityGroups) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size. +func (ls *ListAntiAffinityGroups) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue. +func (ListAntiAffinityGroups) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListAntiAffinityGroupsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListAntiAffinityGroupsResponse was expected, got %T", resp)) + return + } + + for i := range items.AntiAffinityGroup { + if !callback(&items.AntiAffinityGroup[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/apis.go b/vendor/github.com/exoscale/egoscale/apis.go new file mode 100644 index 000000000..098a03761 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/apis.go @@ -0,0 +1,48 @@ +package egoscale + +// API represents an API service +type API struct { + Description string `json:"description,omitempty" doc:"description of the api"` + IsAsync bool `json:"isasync" doc:"true if api is asynchronous"` + Name string `json:"name,omitempty" doc:"the name of the api command"` + Related string `json:"related,omitempty" doc:"comma separated related apis"` + Since string `json:"since,omitempty" doc:"version of CloudStack the api was introduced in"` + Type string `json:"type,omitempty" doc:"response field type"` + Params []APIParam `json:"params,omitempty" doc:"the list params the api accepts"` + Response []APIField `json:"response,omitempty" doc:"api response fields"` +} + +// APIParam represents an API parameter field +type APIParam struct { + Description string `json:"description"` + Length int64 `json:"length"` + Name string `json:"name"` + Required bool `json:"required"` + Since string `json:"since,omitempty"` + Type string `json:"type"` +} + +// APIField represents an API response field +type APIField struct { + Description string `json:"description"` + Name string `json:"name"` + Response []APIField `json:"response,omitempty"` + Type string `json:"type"` +} + +// ListAPIs represents a query to list the api +type ListAPIs struct { + Name string `json:"name,omitempty" doc:"API name"` + _ bool `name:"listApis" description:"lists all available apis on the server"` +} + +// ListAPIsResponse represents a list of API +type ListAPIsResponse struct { + Count int `json:"count"` + API []API `json:"api"` +} + +// Response returns the struct to unmarshal +func (*ListAPIs) Response() interface{} { + return new(ListAPIsResponse) +} diff --git a/vendor/github.com/exoscale/egoscale/async_jobs.go b/vendor/github.com/exoscale/egoscale/async_jobs.go new file mode 100644 index 000000000..ab4b52cff --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/async_jobs.go @@ -0,0 +1,138 @@ +package egoscale + +import ( + "encoding/json" + "errors" +) + +// AsyncJobResult represents an asynchronous job result +type AsyncJobResult struct { + AccountID *UUID `json:"accountid,omitempty" doc:"the account that executed the async command"` + Cmd string `json:"cmd,omitempty" doc:"the async command executed"` + Created string `json:"created,omitempty" doc:"the created date of the job"` + JobID *UUID `json:"jobid" doc:"extra field for the initial async call"` + JobInstanceID *UUID `json:"jobinstanceid,omitempty" doc:"the unique ID of the instance/entity object related to the job"` + JobInstanceType string `json:"jobinstancetype,omitempty" doc:"the instance/entity object related to the job"` + JobProcStatus int `json:"jobprocstatus,omitempty" doc:"the progress information of the PENDING job"` + JobResult *json.RawMessage `json:"jobresult,omitempty" doc:"the result reason"` + JobResultCode int `json:"jobresultcode,omitempty" doc:"the result code for the job"` + JobResultType string `json:"jobresulttype,omitempty" doc:"the result type"` + JobStatus JobStatusType `json:"jobstatus,omitempty" doc:"the current job status-should be 0 for PENDING"` + UserID *UUID `json:"userid,omitempty" doc:"the user that executed the async command"` +} + +// DeepCopy create a true copy of the receiver. +func (a *AsyncJobResult) DeepCopy() *AsyncJobResult { + if a == nil { + return nil + } + + return &AsyncJobResult{ + AccountID: a.AccountID.DeepCopy(), + Cmd: a.Cmd, + Created: a.Created, + JobID: a.JobID.DeepCopy(), + JobInstanceID: a.JobInstanceID.DeepCopy(), + JobInstanceType: a.JobInstanceType, + JobProcStatus: a.JobProcStatus, + JobResult: a.JobResult, + JobResultCode: a.JobResultCode, + JobResultType: a.JobResultType, + JobStatus: a.JobStatus, + UserID: a.UserID.DeepCopy(), + } +} + +// DeepCopyInto copies the receiver into out. +// +// In (a) must be non nil. out must be non nil +func (a *AsyncJobResult) DeepCopyInto(out *AsyncJobResult) { + *out = AsyncJobResult{ + AccountID: a.AccountID.DeepCopy(), + Cmd: a.Cmd, + Created: a.Created, + JobID: a.JobID.DeepCopy(), + JobInstanceID: a.JobInstanceID.DeepCopy(), + JobInstanceType: a.JobInstanceType, + JobProcStatus: a.JobProcStatus, + JobResult: a.JobResult, + JobResultCode: a.JobResultCode, + JobResultType: a.JobResultType, + JobStatus: a.JobStatus, + UserID: a.UserID.DeepCopy(), + } +} + +// ListRequest buils the (empty) ListAsyncJobs request +func (a AsyncJobResult) ListRequest() (ListCommand, error) { + req := &ListAsyncJobs{ + StartDate: a.Created, + } + + return req, nil +} + +// Error builds an error message from the result +func (a AsyncJobResult) Error() error { + r := new(ErrorResponse) + if e := json.Unmarshal(*a.JobResult, r); e != nil { + return e + } + return r +} + +// QueryAsyncJobResult represents a query to fetch the status of async job +type QueryAsyncJobResult struct { + JobID *UUID `json:"jobid" doc:"the ID of the asynchronous job"` + _ bool `name:"queryAsyncJobResult" description:"Retrieves the current status of asynchronous job."` +} + +// Response returns the struct to unmarshal +func (QueryAsyncJobResult) Response() interface{} { + return new(AsyncJobResult) +} + +//go:generate go run generate/main.go -interface=Listable ListAsyncJobs + +// ListAsyncJobs list the asynchronous jobs +type ListAsyncJobs struct { + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + StartDate string `json:"startdate,omitempty" doc:"the start date of the async job"` + _ bool `name:"listAsyncJobs" description:"Lists all pending asynchronous jobs for the account."` +} + +// ListAsyncJobsResponse represents a list of job results +type ListAsyncJobsResponse struct { + Count int `json:"count"` + AsyncJob []AsyncJobResult `json:"asyncjobs"` +} + +// Result unmarshals the result of an AsyncJobResult into the given interface +func (a AsyncJobResult) Result(i interface{}) error { + if a.JobStatus == Failure { + return a.Error() + } + + if a.JobStatus == Success { + m := map[string]json.RawMessage{} + err := json.Unmarshal(*(a.JobResult), &m) + + if err == nil { + if len(m) >= 1 { + if _, ok := m["success"]; ok { + return json.Unmarshal(*(a.JobResult), i) + } + + // otherwise, pick the first key + for k := range m { + return json.Unmarshal(m[k], i) + } + } + return errors.New("empty response") + } + } + + return nil +} diff --git a/vendor/github.com/exoscale/egoscale/asyncjobs_response.go b/vendor/github.com/exoscale/egoscale/asyncjobs_response.go new file mode 100644 index 000000000..e4744e8bd --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/asyncjobs_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListAsyncJobs) Response() interface{} { + return new(ListAsyncJobsResponse) +} + +// ListRequest returns itself +func (ls *ListAsyncJobs) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListAsyncJobs) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListAsyncJobs) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListAsyncJobs) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListAsyncJobsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListAsyncJobsResponse was expected, got %T", resp)) + return + } + + for i := range items.AsyncJob { + if !callback(&items.AsyncJob[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/cidr.go b/vendor/github.com/exoscale/egoscale/cidr.go new file mode 100644 index 000000000..74c054b71 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/cidr.go @@ -0,0 +1,62 @@ +package egoscale + +import ( + "bytes" + "encoding/json" + "fmt" + "net" +) + +// CIDR represents a nicely JSON serializable net.IPNet +type CIDR struct { + net.IPNet +} + +// UnmarshalJSON unmarshals the raw JSON into the MAC address +func (cidr *CIDR) UnmarshalJSON(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + c, err := ParseCIDR(s) + if err != nil { + return err + } + *cidr = CIDR{c.IPNet} + + return nil +} + +// MarshalJSON converts the CIDR to a string representation +func (cidr CIDR) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf("%q", cidr)), nil +} + +// String returns the string representation of a CIDR +func (cidr CIDR) String() string { + return cidr.IPNet.String() +} + +// ParseCIDR parses a CIDR from a string +func ParseCIDR(s string) (*CIDR, error) { + _, net, err := net.ParseCIDR(s) + if err != nil { + return nil, err + } + return &CIDR{*net}, nil +} + +// MustParseCIDR forces parseCIDR or panics +func MustParseCIDR(s string) *CIDR { + cidr, err := ParseCIDR(s) + if err != nil { + panic(err) + } + + return cidr +} + +// Equal compare two CIDR +func (cidr CIDR) Equal(c CIDR) bool { + return (cidr.IPNet.IP.Equal(c.IPNet.IP) && bytes.Equal(cidr.IPNet.Mask, c.IPNet.Mask)) +} diff --git a/vendor/github.com/exoscale/egoscale/client.go b/vendor/github.com/exoscale/egoscale/client.go new file mode 100644 index 000000000..97a747c0b --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/client.go @@ -0,0 +1,484 @@ +package egoscale + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "log" + "net/http" + "net/http/httputil" + "os" + "reflect" + "runtime" + "time" + + v2 "github.com/exoscale/egoscale/v2" +) + +const ( + // DefaultTimeout represents the default API client HTTP request timeout. + DefaultTimeout = 60 * time.Second +) + +// UserAgent is the "User-Agent" HTTP request header added to outgoing HTTP requests. +var UserAgent = fmt.Sprintf("egoscale/%s (%s; %s/%s)", + Version, + runtime.Version(), + runtime.GOOS, + runtime.GOARCH) + +// Taggable represents a resource to which tags can be attached +// +// This is a helper to fill the resourcetype of a CreateTags call +type Taggable interface { + // ResourceType is the name of the Taggable type + ResourceType() string +} + +// Deletable represents an Interface that can be "Delete" by the client +type Deletable interface { + // Delete removes the given resource(s) or throws + Delete(context context.Context, client *Client) error +} + +// Listable represents an Interface that can be "List" by the client +type Listable interface { + // ListRequest builds the list command + ListRequest() (ListCommand, error) +} + +// Client represents the API client +type Client struct { + // HTTPClient holds the HTTP client + HTTPClient *http.Client + // Endpoint is the HTTP URL + Endpoint string + // APIKey is the API identifier + APIKey string + // apisecret is the API secret, hence non exposed + apiSecret string + // PageSize represents the default size for a paginated result + PageSize int + // Timeout represents the default timeout for the async requests + Timeout time.Duration + // Expiration representation how long a signed payload may be used + Expiration time.Duration + // RetryStrategy represents the waiting strategy for polling the async requests + RetryStrategy RetryStrategyFunc + // Logger contains any log, plug your own + Logger *log.Logger + + // noV2 represents a flag disabling v2.Client embedding. + noV2 bool + + // Public API secondary client + *v2.Client +} + +// RetryStrategyFunc represents a how much time to wait between two calls to the API +type RetryStrategyFunc func(int64) time.Duration + +// IterateItemFunc represents the callback to iterate a list of results, if false stops +type IterateItemFunc func(interface{}, error) bool + +// WaitAsyncJobResultFunc represents the callback to wait a results of an async request, if false stops +type WaitAsyncJobResultFunc func(*AsyncJobResult, error) bool + +// ClientOpt represents a new Client option. +type ClientOpt func(*Client) + +// WithHTTPClient overrides the Client's default HTTP client. +func WithHTTPClient(hc *http.Client) ClientOpt { + return func(c *Client) { c.HTTPClient = hc } +} + +// WithTimeout overrides the Client's default timeout value (DefaultTimeout). +func WithTimeout(d time.Duration) ClientOpt { + return func(c *Client) { c.Timeout = d } +} + +// WithTrace enables the Client's HTTP request tracing. +func WithTrace() ClientOpt { + return func(c *Client) { c.TraceOn() } +} + +// WithoutV2Client disables implicit v2.Client embedding. +func WithoutV2Client() ClientOpt { + return func(c *Client) { c.noV2 = true } +} + +// NewClient creates an Exoscale API client. +// Note: unless the WithoutV2Client() ClientOpt is passed, this function +// initializes a v2.Client embedded into the returned *Client struct +// inheriting the Exoscale API credentials, endpoint and timeout value, but +// not the custom http.Client. The 2 clients must not share the same +// *http.Client, as it can cause middleware clashes. +func NewClient(endpoint, apiKey, apiSecret string, opts ...ClientOpt) *Client { + client := &Client{ + HTTPClient: &http.Client{ + Transport: &defaultTransport{next: http.DefaultTransport}, + }, + Endpoint: endpoint, + APIKey: apiKey, + apiSecret: apiSecret, + PageSize: 50, + Timeout: DefaultTimeout, + Expiration: 10 * time.Minute, + RetryStrategy: MonotonicRetryStrategyFunc(2), + Logger: log.New(ioutil.Discard, "", 0), + } + + for _, opt := range opts { + opt(client) + } + + if prefix, ok := os.LookupEnv("EXOSCALE_TRACE"); ok { + client.Logger = log.New(os.Stderr, prefix, log.LstdFlags) + client.TraceOn() + } + + if !client.noV2 { + v2Client, err := v2.NewClient( + client.APIKey, + client.apiSecret, + v2.ClientOptWithAPIEndpoint(client.Endpoint), + v2.ClientOptWithTimeout(client.Timeout), + + // Don't use v2.ClientOptWithHTTPClient() with the root API client's http.Client, as the + // v2.Client uses HTTP middleware that can break callers that expect CS-compatible error + // responses. + ) + if err != nil { + panic(fmt.Sprintf("unable to initialize API V2 client: %s", err)) + } + client.Client = v2Client + } + + return client +} + +// Do implemements the v2.HttpRequestDoer interface in order to intercept HTTP response before the +// generated code closes its body, giving us a chance to return meaningful error messages from the API. +// This is only relevant for API v2 operations. +func (c *Client) Do(req *http.Request) (*http.Response, error) { + resp, err := c.HTTPClient.Do(req) + if err != nil { + // If the request returned a Go error don't bother analyzing the response + // body, as there probably won't be any (e.g. connection timeout/refused). + return resp, err + } + + if resp.StatusCode >= 400 && resp.StatusCode <= 599 { + var res struct { + Message string `json:"message"` + } + + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("error reading response body: %s", err) + } + + if json.Valid(data) { + if err = json.Unmarshal(data, &res); err != nil { + return nil, fmt.Errorf("error unmarshaling response: %s", err) + } + } else { + res.Message = string(data) + } + + switch { + case resp.StatusCode == http.StatusNotFound: + return nil, ErrNotFound + + case resp.StatusCode >= 400 && resp.StatusCode < 500: + return nil, fmt.Errorf("%w: %s", ErrInvalidRequest, res.Message) + + case resp.StatusCode >= 500: + return nil, fmt.Errorf("%w: %s", ErrAPIError, res.Message) + } + } + + return resp, nil +} + +// Get populates the given resource or fails +func (c *Client) Get(ls Listable) (interface{}, error) { + ctx, cancel := context.WithTimeout(context.Background(), c.Timeout) + defer cancel() + + return c.GetWithContext(ctx, ls) +} + +// GetWithContext populates the given resource or fails +func (c *Client) GetWithContext(ctx context.Context, ls Listable) (interface{}, error) { + gs, err := c.ListWithContext(ctx, ls) + if err != nil { + return nil, err + } + + switch len(gs) { + case 0: + return nil, ErrNotFound + + case 1: + return gs[0], nil + + default: + return nil, ErrTooManyFound + } +} + +// Delete removes the given resource of fails +func (c *Client) Delete(g Deletable) error { + ctx, cancel := context.WithTimeout(context.Background(), c.Timeout) + defer cancel() + + return c.DeleteWithContext(ctx, g) +} + +// DeleteWithContext removes the given resource of fails +func (c *Client) DeleteWithContext(ctx context.Context, g Deletable) error { + return g.Delete(ctx, c) +} + +// List lists the given resource (and paginate till the end) +func (c *Client) List(g Listable) ([]interface{}, error) { + ctx, cancel := context.WithTimeout(context.Background(), c.Timeout) + defer cancel() + + return c.ListWithContext(ctx, g) +} + +// ListWithContext lists the given resources (and paginate till the end) +func (c *Client) ListWithContext(ctx context.Context, g Listable) (s []interface{}, err error) { + s = make([]interface{}, 0) + + defer func() { + if e := recover(); e != nil { + if g == nil || reflect.ValueOf(g).IsNil() { + err = fmt.Errorf("g Listable shouldn't be nil, got %#v", g) + return + } + + panic(e) + } + }() + + req, e := g.ListRequest() + if e != nil { + err = e + return + } + c.PaginateWithContext(ctx, req, func(item interface{}, e error) bool { + if item != nil { + s = append(s, item) + return true + } + err = e + return false + }) + + return +} + +func (c *Client) AsyncListWithContext(ctx context.Context, g Listable) (<-chan interface{}, <-chan error) { + outChan := make(chan interface{}, c.PageSize) + errChan := make(chan error) + + go func() { + defer close(outChan) + defer close(errChan) + + req, err := g.ListRequest() + if err != nil { + errChan <- err + return + } + c.PaginateWithContext(ctx, req, func(item interface{}, e error) bool { + if item != nil { + outChan <- item + return true + } + errChan <- e + return false + }) + }() + + return outChan, errChan +} + +// Paginate runs the ListCommand and paginates +func (c *Client) Paginate(g Listable, callback IterateItemFunc) { + ctx, cancel := context.WithTimeout(context.Background(), c.Timeout) + defer cancel() + + c.PaginateWithContext(ctx, g, callback) +} + +// PaginateWithContext runs the ListCommand as long as the ctx is valid +func (c *Client) PaginateWithContext(ctx context.Context, g Listable, callback IterateItemFunc) { + req, err := g.ListRequest() + if err != nil { + callback(nil, err) + return + } + + pageSize := c.PageSize + + page := 1 + + for { + req.SetPage(page) + req.SetPageSize(pageSize) + resp, err := c.RequestWithContext(ctx, req) + if err != nil { + // in case of 431, the response is knowingly empty + if errResponse, ok := err.(*ErrorResponse); ok && page == 1 && errResponse.ErrorCode == ParamError { + break + } + + callback(nil, err) + break + } + + size := 0 + didErr := false + req.Each(resp, func(element interface{}, err error) bool { + // If the context was cancelled, kill it in flight + if e := ctx.Err(); e != nil { + element = nil + err = e + } + + if callback(element, err) { + size++ + return true + } + + didErr = true + return false + }) + + if size < pageSize || didErr { + break + } + + page++ + } +} + +// APIName returns the name of the given command +func (c *Client) APIName(command Command) string { + // This is due to a limitation of Go<=1.7 + _, ok := command.(*AuthorizeSecurityGroupEgress) + _, okPtr := command.(AuthorizeSecurityGroupEgress) + if ok || okPtr { + return "authorizeSecurityGroupEgress" + } + + info, err := info(command) + if err != nil { + panic(err) + } + return info.Name +} + +// APIDescription returns the description of the given command +func (c *Client) APIDescription(command Command) string { + info, err := info(command) + if err != nil { + return "*missing description*" + } + return info.Description +} + +// Response returns the response structure of the given command +func (c *Client) Response(command Command) interface{} { + switch c := command.(type) { + case AsyncCommand: + return c.AsyncResponse() + default: + return command.Response() + } +} + +// TraceOn activates the HTTP tracer +func (c *Client) TraceOn() { + if _, ok := c.HTTPClient.Transport.(*traceTransport); !ok { + c.HTTPClient.Transport = &traceTransport{ + next: c.HTTPClient.Transport, + logger: c.Logger, + } + } +} + +// TraceOff deactivates the HTTP tracer +func (c *Client) TraceOff() { + if rt, ok := c.HTTPClient.Transport.(*traceTransport); ok { + c.HTTPClient.Transport = rt.next + } +} + +// defaultTransport is the default HTTP client transport. +type defaultTransport struct { + next http.RoundTripper +} + +// RoundTrip executes a single HTTP transaction while augmenting requests with custom headers. +func (t *defaultTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Add("User-Agent", UserAgent) + + resp, err := t.next.RoundTrip(req) + if err != nil { + return nil, err + } + + return resp, nil +} + +// traceTransport is a client HTTP middleware that dumps HTTP requests and responses content to a logger. +type traceTransport struct { + logger *log.Logger + next http.RoundTripper +} + +// RoundTrip executes a single HTTP transaction +func (t *traceTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Add("User-Agent", UserAgent) + + if dump, err := httputil.DumpRequest(req, true); err == nil { + t.logger.Printf("%s", dump) + } + + resp, err := t.next.RoundTrip(req) + if err != nil { + return nil, err + } + + if dump, err := httputil.DumpResponse(resp, true); err == nil { + t.logger.Printf("%s", dump) + } + + return resp, nil +} + +// MonotonicRetryStrategyFunc returns a function that waits for n seconds for each iteration +func MonotonicRetryStrategyFunc(seconds int) RetryStrategyFunc { + return func(iteration int64) time.Duration { + return time.Duration(seconds) * time.Second + } +} + +// FibonacciRetryStrategy waits for an increasing amount of time following the Fibonacci sequence +func FibonacciRetryStrategy(iteration int64) time.Duration { + var a, b, i, tmp int64 + a = 0 + b = 1 + for i = 0; i < iteration; i++ { + tmp = a + b + a = b + b = tmp + } + return time.Duration(a) * time.Second +} diff --git a/vendor/github.com/exoscale/egoscale/cserrorcode_string.go b/vendor/github.com/exoscale/egoscale/cserrorcode_string.go new file mode 100644 index 000000000..7bfb42100 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/cserrorcode_string.go @@ -0,0 +1,83 @@ +// Code generated by "stringer -type CSErrorCode"; DO NOT EDIT. + +package egoscale + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[CloudRuntimeException-4250] + _ = x[ExecutionException-4260] + _ = x[HypervisorVersionChangedException-4265] + _ = x[CloudException-4275] + _ = x[AccountLimitException-4280] + _ = x[AgentUnavailableException-4285] + _ = x[CloudAuthenticationException-4290] + _ = x[ConcurrentOperationException-4300] + _ = x[ConflictingNetworkSettingsException-4305] + _ = x[DiscoveredWithErrorException-4310] + _ = x[HAStateException-4315] + _ = x[InsufficientAddressCapacityException-4320] + _ = x[InsufficientCapacityException-4325] + _ = x[InsufficientNetworkCapacityException-4330] + _ = x[InsufficientServerCapacityException-4335] + _ = x[InsufficientStorageCapacityException-4340] + _ = x[InternalErrorException-4345] + _ = x[InvalidParameterValueException-4350] + _ = x[ManagementServerException-4355] + _ = x[NetworkRuleConflictException-4360] + _ = x[PermissionDeniedException-4365] + _ = x[ResourceAllocationException-4370] + _ = x[ResourceInUseException-4375] + _ = x[ResourceUnavailableException-4380] + _ = x[StorageUnavailableException-4385] + _ = x[UnsupportedServiceException-4390] + _ = x[VirtualMachineMigrationException-4395] + _ = x[AsyncCommandQueued-4540] + _ = x[RequestLimitException-4545] + _ = x[ServerAPIException-9999] +} + +const _CSErrorCode_name = "CloudRuntimeExceptionExecutionExceptionHypervisorVersionChangedExceptionCloudExceptionAccountLimitExceptionAgentUnavailableExceptionCloudAuthenticationExceptionConcurrentOperationExceptionConflictingNetworkSettingsExceptionDiscoveredWithErrorExceptionHAStateExceptionInsufficientAddressCapacityExceptionInsufficientCapacityExceptionInsufficientNetworkCapacityExceptionInsufficientServerCapacityExceptionInsufficientStorageCapacityExceptionInternalErrorExceptionInvalidParameterValueExceptionManagementServerExceptionNetworkRuleConflictExceptionPermissionDeniedExceptionResourceAllocationExceptionResourceInUseExceptionResourceUnavailableExceptionStorageUnavailableExceptionUnsupportedServiceExceptionVirtualMachineMigrationExceptionAsyncCommandQueuedRequestLimitExceptionServerAPIException" + +var _CSErrorCode_map = map[CSErrorCode]string{ + 4250: _CSErrorCode_name[0:21], + 4260: _CSErrorCode_name[21:39], + 4265: _CSErrorCode_name[39:72], + 4275: _CSErrorCode_name[72:86], + 4280: _CSErrorCode_name[86:107], + 4285: _CSErrorCode_name[107:132], + 4290: _CSErrorCode_name[132:160], + 4300: _CSErrorCode_name[160:188], + 4305: _CSErrorCode_name[188:223], + 4310: _CSErrorCode_name[223:251], + 4315: _CSErrorCode_name[251:267], + 4320: _CSErrorCode_name[267:303], + 4325: _CSErrorCode_name[303:332], + 4330: _CSErrorCode_name[332:368], + 4335: _CSErrorCode_name[368:403], + 4340: _CSErrorCode_name[403:439], + 4345: _CSErrorCode_name[439:461], + 4350: _CSErrorCode_name[461:491], + 4355: _CSErrorCode_name[491:516], + 4360: _CSErrorCode_name[516:544], + 4365: _CSErrorCode_name[544:569], + 4370: _CSErrorCode_name[569:596], + 4375: _CSErrorCode_name[596:618], + 4380: _CSErrorCode_name[618:646], + 4385: _CSErrorCode_name[646:673], + 4390: _CSErrorCode_name[673:700], + 4395: _CSErrorCode_name[700:732], + 4540: _CSErrorCode_name[732:750], + 4545: _CSErrorCode_name[750:771], + 9999: _CSErrorCode_name[771:789], +} + +func (i CSErrorCode) String() string { + if str, ok := _CSErrorCode_map[i]; ok { + return str + } + return "CSErrorCode(" + strconv.FormatInt(int64(i), 10) + ")" +} diff --git a/vendor/github.com/exoscale/egoscale/dns.go b/vendor/github.com/exoscale/egoscale/dns.go new file mode 100644 index 000000000..3d3af4078 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/dns.go @@ -0,0 +1,364 @@ +package egoscale + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "strings" +) + +// DNSDomain represents a domain +type DNSDomain struct { + ID int64 `json:"id"` + Name string `json:"name"` + UnicodeName string `json:"unicode_name"` + Token string `json:"token"` + State string `json:"state"` + Language string `json:"language,omitempty"` + Lockable bool `json:"lockable"` + AutoRenew bool `json:"auto_renew"` + WhoisProtected bool `json:"whois_protected"` + RecordCount int64 `json:"record_count"` + ServiceCount int64 `json:"service_count"` + ExpiresOn string `json:"expires_on,omitempty"` + CreatedAt string `json:"created_at"` + UpdatedAt string `json:"updated_at"` +} + +// DNSDomainResponse represents a domain creation response +type DNSDomainResponse struct { + Domain *DNSDomain `json:"domain"` +} + +// DNSRecord represents a DNS record +type DNSRecord struct { + ID int64 `json:"id,omitempty"` + DomainID int64 `json:"domain_id,omitempty"` + Name string `json:"name"` + TTL int `json:"ttl,omitempty"` + CreatedAt string `json:"created_at,omitempty"` + UpdatedAt string `json:"updated_at,omitempty"` + Content string `json:"content"` + RecordType string `json:"record_type"` + Prio int `json:"prio,omitempty"` +} + +// DNSRecordResponse represents the creation of a DNS record +type DNSRecordResponse struct { + Record DNSRecord `json:"record"` +} + +// UpdateDNSRecord represents a DNS record +type UpdateDNSRecord struct { + ID int64 `json:"id,omitempty"` + DomainID int64 `json:"domain_id,omitempty"` + Name string `json:"name,omitempty"` + TTL int `json:"ttl,omitempty"` + CreatedAt string `json:"created_at,omitempty"` + UpdatedAt string `json:"updated_at,omitempty"` + Content string `json:"content,omitempty"` + RecordType string `json:"record_type,omitempty"` + Prio int `json:"prio,omitempty"` +} + +// UpdateDNSRecordResponse represents the creation of a DNS record +type UpdateDNSRecordResponse struct { + Record UpdateDNSRecord `json:"record"` +} + +// DNSErrorResponse represents an error in the API +type DNSErrorResponse struct { + Message string `json:"message,omitempty"` + Errors map[string][]string `json:"errors"` +} + +// Record represent record type +type Record int + +//go:generate stringer -type=Record +const ( + // A record type + A Record = iota + // AAAA record type + AAAA + // ALIAS record type + ALIAS + // CNAME record type + CNAME + // HINFO record type + HINFO + // MX record type + MX + // NAPTR record type + NAPTR + // NS record type + NS + // POOL record type + POOL + // SPF record type + SPF + // SRV record type + SRV + // SSHFP record type + SSHFP + // TXT record type + TXT + // URL record type + URL +) + +// Error formats the DNSerror into a string +func (req *DNSErrorResponse) Error() string { + if len(req.Errors) > 0 { + errs := []string{} + for name, ss := range req.Errors { + if len(ss) > 0 { + errs = append(errs, fmt.Sprintf("%s: %s", name, strings.Join(ss, ", "))) + } + } + return fmt.Sprintf("dns error: %s (%s)", req.Message, strings.Join(errs, "; ")) + } + return fmt.Sprintf("dns error: %s", req.Message) +} + +// CreateDomain creates a DNS domain +func (client *Client) CreateDomain(ctx context.Context, name string) (*DNSDomain, error) { + m, err := json.Marshal(DNSDomainResponse{ + Domain: &DNSDomain{ + Name: name, + }, + }) + if err != nil { + return nil, err + } + + resp, err := client.dnsRequest(ctx, "/v1/domains", nil, string(m), "POST") + if err != nil { + return nil, err + } + + var d *DNSDomainResponse + if err := json.Unmarshal(resp, &d); err != nil { + return nil, err + } + + return d.Domain, nil +} + +// GetDomain gets a DNS domain +func (client *Client) GetDomain(ctx context.Context, name string) (*DNSDomain, error) { + resp, err := client.dnsRequest(ctx, "/v1/domains/"+name, nil, "", "GET") + if err != nil { + return nil, err + } + + var d *DNSDomainResponse + if err := json.Unmarshal(resp, &d); err != nil { + return nil, err + } + + return d.Domain, nil +} + +// GetDomains gets DNS domains +func (client *Client) GetDomains(ctx context.Context) ([]DNSDomain, error) { + resp, err := client.dnsRequest(ctx, "/v1/domains", nil, "", "GET") + if err != nil { + return nil, err + } + + var d []DNSDomainResponse + if err := json.Unmarshal(resp, &d); err != nil { + return nil, err + } + + domains := make([]DNSDomain, len(d)) + for i := range d { + domains[i] = *d[i].Domain + } + return domains, nil +} + +// DeleteDomain delets a DNS domain +func (client *Client) DeleteDomain(ctx context.Context, name string) error { + _, err := client.dnsRequest(ctx, "/v1/domains/"+name, nil, "", "DELETE") + return err +} + +// GetRecord returns a DNS record +func (client *Client) GetRecord(ctx context.Context, domain string, recordID int64) (*DNSRecord, error) { + id := strconv.FormatInt(recordID, 10) + resp, err := client.dnsRequest(ctx, "/v1/domains/"+domain+"/records/"+id, nil, "", "GET") + if err != nil { + return nil, err + } + + var r DNSRecordResponse + if err = json.Unmarshal(resp, &r); err != nil { + return nil, err + } + + return &(r.Record), nil +} + +// GetRecords returns the DNS records +func (client *Client) GetRecords(ctx context.Context, domain string) ([]DNSRecord, error) { + resp, err := client.dnsRequest(ctx, "/v1/domains/"+domain+"/records", nil, "", "GET") + if err != nil { + return nil, err + } + + var r []DNSRecordResponse + if err = json.Unmarshal(resp, &r); err != nil { + return nil, err + } + + records := make([]DNSRecord, 0, len(r)) + for _, rec := range r { + records = append(records, rec.Record) + } + + return records, nil +} + +// GetRecordsWithFilters returns the DNS records (filters can be empty) +func (client *Client) GetRecordsWithFilters(ctx context.Context, domain, name, recordType string) ([]DNSRecord, error) { + + filters := url.Values{} + if name != "" { + filters.Add("name", name) + } + if recordType != "" { + filters.Add("record_type", recordType) + } + + resp, err := client.dnsRequest(ctx, "/v1/domains/"+domain+"/records", filters, "", "GET") + if err != nil { + return nil, err + } + + var r []DNSRecordResponse + if err = json.Unmarshal(resp, &r); err != nil { + return nil, err + } + + records := make([]DNSRecord, 0, len(r)) + for _, rec := range r { + records = append(records, rec.Record) + } + + return records, nil +} + +// CreateRecord creates a DNS record +func (client *Client) CreateRecord(ctx context.Context, name string, rec DNSRecord) (*DNSRecord, error) { + body, err := json.Marshal(DNSRecordResponse{ + Record: rec, + }) + if err != nil { + return nil, err + } + + resp, err := client.dnsRequest(ctx, "/v1/domains/"+name+"/records", nil, string(body), "POST") + if err != nil { + return nil, err + } + + var r DNSRecordResponse + if err = json.Unmarshal(resp, &r); err != nil { + return nil, err + } + + return &(r.Record), nil +} + +// UpdateRecord updates a DNS record +func (client *Client) UpdateRecord(ctx context.Context, name string, rec UpdateDNSRecord) (*DNSRecord, error) { + body, err := json.Marshal(UpdateDNSRecordResponse{ + Record: rec, + }) + if err != nil { + return nil, err + } + + id := strconv.FormatInt(rec.ID, 10) + resp, err := client.dnsRequest(ctx, "/v1/domains/"+name+"/records/"+id, nil, string(body), "PUT") + if err != nil { + return nil, err + } + + var r DNSRecordResponse + if err = json.Unmarshal(resp, &r); err != nil { + return nil, err + } + + return &(r.Record), nil +} + +// DeleteRecord deletes a record +func (client *Client) DeleteRecord(ctx context.Context, name string, recordID int64) error { + id := strconv.FormatInt(recordID, 10) + _, err := client.dnsRequest(ctx, "/v1/domains/"+name+"/records/"+id, nil, "", "DELETE") + + return err +} + +func (client *Client) dnsRequest(ctx context.Context, uri string, urlValues url.Values, params, method string) (json.RawMessage, error) { + rawURL := client.Endpoint + uri + url, err := url.Parse(rawURL) + if err != nil { + return nil, err + } + + q := url.Query() + for k, vs := range urlValues { + for _, v := range vs { + q.Add(k, v) + } + } + url.RawQuery = q.Encode() + + req, err := http.NewRequest(method, url.String(), strings.NewReader(params)) + if err != nil { + return nil, err + } + + var hdr = make(http.Header) + hdr.Add("X-DNS-TOKEN", client.APIKey+":"+client.apiSecret) + hdr.Add("User-Agent", UserAgent) + hdr.Add("Accept", "application/json") + if params != "" { + hdr.Add("Content-Type", "application/json") + } + req.Header = hdr + + resp, err := client.HTTPClient.Do(req.WithContext(ctx)) + if err != nil { + return nil, err + } + defer resp.Body.Close() // nolint: errcheck + + contentType := resp.Header.Get("content-type") + if !strings.Contains(contentType, "application/json") { + return nil, fmt.Errorf(`response content-type expected to be "application/json", got %q`, contentType) + } + + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + if resp.StatusCode >= 400 { + e := new(DNSErrorResponse) + if err := json.Unmarshal(b, e); err != nil { + return nil, err + } + return nil, e + } + + return b, nil +} diff --git a/vendor/github.com/exoscale/egoscale/doc.go b/vendor/github.com/exoscale/egoscale/doc.go new file mode 100644 index 000000000..ac2a1cd85 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/doc.go @@ -0,0 +1,180 @@ +/* + +Package egoscale is a mapping for the Exoscale API (https://community.exoscale.com/api/compute/). + +Requests and Responses + +To build a request, construct the adequate struct. This library expects a pointer for efficiency reasons only. The response is a struct corresponding to the data at stake. E.g. DeployVirtualMachine gives a VirtualMachine, as a pointer as well to avoid big copies. + +Then everything within the struct is not a pointer. Find below some examples of how egoscale may be used. If anything feels odd or unclear, please let us know: https://github.com/exoscale/egoscale/issues + + req := &egoscale.DeployVirtualMachine{ + Size: 10, + ServiceOfferingID: egoscale.MustParseUUID("..."), + TemplateID: egoscale.MustParseUUID("..."), + ZoneID: egoscale.MastParseUUID("..."), + } + + fmt.Println("Deployment started") + resp, err := cs.Request(req) + if err != nil { + panic(err) + } + + vm := resp.(*egoscale.VirtualMachine) + fmt.Printf("Virtual Machine ID: %s\n", vm.ID) + +This example deploys a virtual machine while controlling the job status as it goes. It enables a finer control over errors, e.g. HTTP timeout, and eventually a way to kill it of (from the client side). + + req := &egoscale.DeployVirtualMachine{ + Size: 10, + ServiceOfferingID: egoscale.MustParseUUID("..."), + TemplateID: egoscale.MustParseUUID("..."), + ZoneID: egoscale.MustParseUUID("..."), + } + vm := &egoscale.VirtualMachine{} + + fmt.Println("Deployment started") + cs.AsyncRequest(req, func(jobResult *egoscale.AsyncJobResult, err error) bool { + if err != nil { + // any kind of error + panic(err) + } + + // Keep waiting + if jobResult.JobStatus == egoscale.Pending { + fmt.Println("wait...") + return true + } + + // Unmarshal the response into the response struct + if err := jobResult.Response(vm); err != nil { + // JSON unmarshaling error + panic(err) + } + + // Stop waiting + return false + }) + + fmt.Printf("Virtual Machine ID: %s\n", vm.ID) + +Debugging and traces + +As this library is mostly an HTTP client, you can reuse all the existing tools around it. + + cs := egoscale.NewClient("https://api.exoscale.com/v1", "EXO...", "...") + // sets a logger on stderr + cs.Logger = log.New(os.Stderr, "prefix", log.LstdFlags) + // activates the HTTP traces + cs.TraceOn() + +Nota bene: when running the tests or the egoscale library via another tool, e.g. the exo cli, the environment variable EXOSCALE_TRACE=prefix does the above configuration for you. As a developer using egoscale as a library, you'll find it more convenient to plug your favorite io.Writer as it's a Logger. + + +APIs + +All the available APIs on the server and provided by the API Discovery plugin. + + cs := egoscale.NewClient("https://api.exoscale.com/v1", "EXO...", "...") + + resp, err := cs.Request(&egoscale.ListAPIs{}) + if err != nil { + panic(err) + } + + for _, api := range resp.(*egoscale.ListAPIsResponse).API { + fmt.Printf("%s %s\n", api.Name, api.Description) + } + // Output: + // listNetworks Lists all available networks + // ... + +Security Groups + +Security Groups provide a way to isolate traffic to VMs. Rules are added via the two Authorization commands. + + resp, err := cs.Request(&egoscale.CreateSecurityGroup{ + Name: "Load balancer", + Description: "Open HTTP/HTTPS ports from the outside world", + }) + securityGroup := resp.(*egoscale.SecurityGroup) + + resp, err = cs.Request(&egoscale.AuthorizeSecurityGroupIngress{ + Description: "SSH traffic", + SecurityGroupID: securityGroup.ID, + CidrList: []CIDR{ + *egoscale.MustParseCIDR("0.0.0.0/0"), + *egoscale.MustParseCIDR("::/0"), + }, + Protocol: "tcp", + StartPort: 22, + EndPort: 22, + }) + // The modified SecurityGroup is returned + securityGroup := resp.(*egoscale.SecurityGroup) + + // ... + err = client.BooleanRequest(&egoscale.DeleteSecurityGroup{ + ID: securityGroup.ID, + }) + // ... + +Security Group also implement the generic List, Get and Delete interfaces (Listable and Deletable). + + // List all Security Groups + sgs, _ := cs.List(&egoscale.SecurityGroup{}) + for _, s := range sgs { + sg := s.(egoscale.SecurityGroup) + // ... + } + + // Get a Security Group + sgQuery := &egoscale.SecurityGroup{Name: "Load balancer"} + resp, err := cs.Get(sgQuery); err != nil { + ... + } + sg := resp.(*egoscale.SecurityGroup) + + if err := cs.Delete(sg); err != nil { + ... + } + // The SecurityGroup has been deleted + +See: https://community.exoscale.com/documentation/compute/security-groups/ + +Zones + +A Zone corresponds to a Data Center. You may list them. Zone implements the Listable interface, which let you perform a list in two different ways. The first exposes the underlying request while the second one hide them and you only manipulate the structs of your interest. + + // Using ListZones request + req := &egoscale.ListZones{} + resp, err := client.Request(req) + if err != nil { + panic(err) + } + + for _, zone := range resp.(*egoscale.ListZonesResponse) { + ... + } + + // Using client.List + zone := &egoscale.Zone{} + zones, err := client.List(zone) + if err != nil { + panic(err) + } + + for _, z := range zones { + zone := z.(egoscale.Zone) + ... + } + +Elastic IPs + +An Elastic IP is a way to attach an IP address to many Virtual Machines. The API side of the story configures the external environment, like the routing. Some work is required within the machine to properly configure the interfaces. + +See: https://community.exoscale.com/documentation/compute/eip/ + +*/ +package egoscale diff --git a/vendor/github.com/exoscale/egoscale/error.go b/vendor/github.com/exoscale/egoscale/error.go new file mode 100644 index 000000000..494c8dc8d --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/error.go @@ -0,0 +1,15 @@ +package egoscale + +import "errors" + +// ErrNotFound represents an error indicating a non-existent resource. +var ErrNotFound = errors.New("resource not found") + +// ErrTooManyFound represents an error indicating multiple results found for a single resource. +var ErrTooManyFound = errors.New("multiple resources found") + +// ErrInvalidRequest represents an error indicating that the caller's request is invalid. +var ErrInvalidRequest = errors.New("invalid request") + +// ErrAPIError represents an error indicating an API-side issue. +var ErrAPIError = errors.New("API error") diff --git a/vendor/github.com/exoscale/egoscale/errorcode_string.go b/vendor/github.com/exoscale/egoscale/errorcode_string.go new file mode 100644 index 000000000..4b46b55bd --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/errorcode_string.go @@ -0,0 +1,60 @@ +// Code generated by "stringer -type ErrorCode"; DO NOT EDIT. + +package egoscale + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[Unauthorized-401] + _ = x[NotFound-404] + _ = x[MethodNotAllowed-405] + _ = x[UnsupportedActionError-422] + _ = x[APILimitExceeded-429] + _ = x[MalformedParameterError-430] + _ = x[ParamError-431] + _ = x[InternalError-530] + _ = x[AccountError-531] + _ = x[AccountResourceLimitError-532] + _ = x[InsufficientCapacityError-533] + _ = x[ResourceUnavailableError-534] + _ = x[ResourceAllocationError-535] + _ = x[ResourceInUseError-536] + _ = x[NetworkRuleConflictError-537] +} + +const ( + _ErrorCode_name_0 = "Unauthorized" + _ErrorCode_name_1 = "NotFoundMethodNotAllowed" + _ErrorCode_name_2 = "UnsupportedActionError" + _ErrorCode_name_3 = "APILimitExceededMalformedParameterErrorParamError" + _ErrorCode_name_4 = "InternalErrorAccountErrorAccountResourceLimitErrorInsufficientCapacityErrorResourceUnavailableErrorResourceAllocationErrorResourceInUseErrorNetworkRuleConflictError" +) + +var ( + _ErrorCode_index_1 = [...]uint8{0, 8, 24} + _ErrorCode_index_3 = [...]uint8{0, 16, 39, 49} + _ErrorCode_index_4 = [...]uint8{0, 13, 25, 50, 75, 99, 122, 140, 164} +) + +func (i ErrorCode) String() string { + switch { + case i == 401: + return _ErrorCode_name_0 + case 404 <= i && i <= 405: + i -= 404 + return _ErrorCode_name_1[_ErrorCode_index_1[i]:_ErrorCode_index_1[i+1]] + case i == 422: + return _ErrorCode_name_2 + case 429 <= i && i <= 431: + i -= 429 + return _ErrorCode_name_3[_ErrorCode_index_3[i]:_ErrorCode_index_3[i+1]] + case 530 <= i && i <= 537: + i -= 530 + return _ErrorCode_name_4[_ErrorCode_index_4[i]:_ErrorCode_index_4[i+1]] + default: + return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")" + } +} diff --git a/vendor/github.com/exoscale/egoscale/events.go b/vendor/github.com/exoscale/egoscale/events.go new file mode 100644 index 000000000..c6adbfd69 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/events.go @@ -0,0 +1,76 @@ +package egoscale + +// Event represents an event in the system +type Event struct { + Account string `json:"account,omitempty" doc:"the account name for the account that owns the object being acted on in the event (e.g. the owner of the virtual machine, ip address, or security group)"` + Created string `json:"created,omitempty" doc:"the date the event was created"` + Description string `json:"description,omitempty" doc:"a brief description of the event"` + ID *UUID `json:"id" doc:"the ID of the event"` + Level string `json:"level,omitempty" doc:"the event level (INFO, WARN, ERROR)"` + ParentID *UUID `json:"parentid,omitempty" doc:"whether the event is parented"` + State string `json:"state,omitempty" doc:"the state of the event"` + Type string `json:"type,omitempty" doc:"the type of the event (see event types)"` + UserName string `json:"username,omitempty" doc:"the name of the user who performed the action (can be different from the account if an admin is performing an action for a user, e.g. starting/stopping a user's virtual machine)"` +} + +// ListRequest builds the ListEvents request +func (event Event) ListRequest() (ListCommand, error) { + req := &ListEvents{ + ID: event.ID, + Level: event.Level, + Type: event.Type, + } + + return req, nil +} + +// EventType represent a type of event +type EventType struct { + Name string `json:"name,omitempty" doc:"Event Type"` +} + +// ListRequest builds the ListEventTypes request +func (EventType) ListRequest() (ListCommand, error) { + req := &ListEventTypes{} + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListEvents + +// ListEvents list the events +type ListEvents struct { + Duration int `json:"duration,omitempty" doc:"the duration of the event"` + EndDate string `json:"enddate,omitempty" doc:"the end date range of the list you want to retrieve (use format \"yyyy-MM-dd\" or the new format \"yyyy-MM-dd HH:mm:ss\")"` + EntryTime int `json:"entrytime,omitempty" doc:"the time the event was entered"` + ID *UUID `json:"id,omitempty" doc:"the ID of the event"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Level string `json:"level,omitempty" doc:"the event level (INFO, WARN, ERROR)"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + StartDate string `json:"startdate,omitempty" doc:"the start date range of the list you want to retrieve (use format \"yyyy-MM-dd\" or the new format \"yyyy-MM-dd HH:mm:ss\")"` + Type string `json:"type,omitempty" doc:"the event type (see event types)"` + _ bool `name:"listEvents" description:"A command to list events."` +} + +// ListEventsResponse represents a response of a list query +type ListEventsResponse struct { + Count int `json:"count"` + Event []Event `json:"event"` +} + +//go:generate go run generate/main.go -interface=Listable ListEventTypes + +// ListEventTypes list the event types +type ListEventTypes struct { + Page int `json:"page,omitempty"` // fake + PageSize int `json:"pagesize,omitempty"` // fake + _ bool `name:"listEventTypes" description:"List Event Types"` +} + +// ListEventTypesResponse represents a response of a list query +type ListEventTypesResponse struct { + Count int `json:"count"` + EventType []EventType `json:"eventtype"` + _ bool `name:"listEventTypes" description:"List Event Types"` +} diff --git a/vendor/github.com/exoscale/egoscale/events_response.go b/vendor/github.com/exoscale/egoscale/events_response.go new file mode 100644 index 000000000..2af10cf45 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/events_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListEvents) Response() interface{} { + return new(ListEventsResponse) +} + +// ListRequest returns itself +func (ls *ListEvents) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListEvents) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListEvents) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListEvents) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListEventsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListEventsResponse was expected, got %T", resp)) + return + } + + for i := range items.Event { + if !callback(&items.Event[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/eventtypes_response.go b/vendor/github.com/exoscale/egoscale/eventtypes_response.go new file mode 100644 index 000000000..073d9648f --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/eventtypes_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListEventTypes) Response() interface{} { + return new(ListEventTypesResponse) +} + +// ListRequest returns itself +func (ls *ListEventTypes) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListEventTypes) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListEventTypes) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListEventTypes) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListEventTypesResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListEventTypesResponse was expected, got %T", resp)) + return + } + + for i := range items.EventType { + if !callback(&items.EventType[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/go.mod b/vendor/github.com/exoscale/egoscale/go.mod new file mode 100644 index 000000000..4a6fe288e --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/go.mod @@ -0,0 +1,13 @@ +module github.com/exoscale/egoscale + +require ( + github.com/deepmap/oapi-codegen v1.3.11 + github.com/gofrs/uuid v3.2.0+incompatible + github.com/jarcoal/httpmock v1.0.6 + github.com/pkg/errors v0.9.1 + github.com/stretchr/objx v0.3.0 // indirect + github.com/stretchr/testify v1.7.0 + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect +) + +go 1.14 diff --git a/vendor/github.com/exoscale/egoscale/go.sum b/vendor/github.com/exoscale/egoscale/go.sum new file mode 100644 index 000000000..a558b1540 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/go.sum @@ -0,0 +1,82 @@ +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/deepmap/oapi-codegen v1.3.11 h1:Nd3tDQfqgquLmCzyRONHzs5SJEwPPoQcFZxT8MKt1Hs= +github.com/deepmap/oapi-codegen v1.3.11/go.mod h1:suMvK7+rKlx3+tpa8ByptmvoXbAV70wERKTOGH3hLp0= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/getkin/kin-openapi v0.13.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/jarcoal/httpmock v1.0.6 h1:e81vOSexXU3mJuJ4l//geOmKIt+Vkxerk1feQBC8D0g= +github.com/jarcoal/httpmock v1.0.6/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +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/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/labstack/echo/v4 v4.1.11 h1:z0BZoArY4FqdpUEl+wlHp4hnr/oSR6MTmQmv8OHSoww= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= +github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +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/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.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.1.0 h1:RZqt0yGBsps8NGvLSGW804QQqCUYYLsaOjTVHy1Ocw4= +github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708 h1:pXVtWnwHkrWD9ru3sDxY/qFK/bfc0egRovX91EjWjf4= +golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343 h1:00ohfJ4K98s3m6BGUoBd8nyfp4Yl0GoIKvw5abItTjI= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/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-20190222072716-a9d3bda3a223/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-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777 h1:wejkGHRTr38uaKRqECZlsCsJ1/TGxIyFbH32x5zUdu4= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/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-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +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-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/exoscale/egoscale/gopher.png b/vendor/github.com/exoscale/egoscale/gopher.png new file mode 100644 index 0000000000000000000000000000000000000000..16420a6182749705d4fbf20d89baecfa266aaad4 GIT binary patch literal 63065 zcmdpd1y@{6ur2QH4hfpz?hu^d6Br=4ySuw<5`qV}1b2tQ-3b!hZGgdD?j+y6??=1^ zvsj#S=ssP&YuB#oB3eyF4ik+G4F(1V^P{}zf3&g#{JypI z1}+9sB8H~p9p#KXO~;DR<)bOvmz5QAIJz%km)_alDBKWx?#qc=(S1>fAPq{$|Bv5{ z?_z$yNeFEEbC4gvW58?$*>}0n5HG?WxMUzm;2`Af;vu)g9Aid#oHgR7!DFPT)Bm*t zYm!|qN8A@=N5U=^LG!@>>93bjG_(VZ4{O==9TPl&{bE=fP8>kk_VN(3GC7(ZdD0Xk{ zbgnpu>|H<5Hm&CCj_s-CcVamW9TFhq@i7P@hB&QwQIKf*%2_C&<%m2JoY&OkF6d+x zgX73JF+dBWA-l{W>x`&Oa4Ey@2oW}6O8+jGjSh}@el3p)Z9(7dO_q@RPv$-3Gp`oU z`FK6IJ<@JDf(^~CcO^iauqA9H37m|a*kCQ#Z2bh3bGd2oizgm09+%2_SfWhO5fO0RBm@HJ z;5tG)*MwXde*dPp=|^+AdAEHyUn6yvC$NDg*bzb#m5bhU{w6&4s=^crlTJ+Rw0iy? zc7~fmKgPdq1zjxI>9@628pki z|3(U#68S;hZhDm)9N#zrJH=D`cx9mt66==B4;prXdH{|DaoFB|xzL_Zn+M&%0L6XV z@8;%5PY~u>nUPsSY|1PP%G-kw8Xjug4}K?+{pj;z)$>Y3$9;gO^(P%01r{+?T~1E zNy_y1B|13LQ-~5)Vo38ZiE}1J>Y96B5&ICQ1({Q%a2R@2)B18|^7|eEbAf zno}4t!=I9@@2B)t+WsOUWU9Uo2_pZ|>aE1>Bk6pT>Q7qhAfQUefA`#em*syWpkC); z^91Eo>bK1=+jFIVgUi4^=9E=H z|Bb<;Erse+&fR*5unH*&ylq{o_|SJ)AZJhnrjjuP$yWX^oDhh7Ixx6!adDMzQ8P5z zOMC$zQO`L!Q)};2d5S#6TmD0452p!gl#f0|LUG*`Z~U>x3HW49>l0e*3rA3PomOSo zzbTzC(j?J*)bqh^Cu)XMp2Rx^;0N=EJ>Fpjix@rBf7`W5@~D}`d!V2m7*aefRuItt zd!-{hczc8r=3&6yh4+8WcA)G2kUD3Bc*XFH6WbDyms+wO5Xsu+89K}ZT&|w@b#+Xu zCG`(t0t(+ZUd;K@Gj%4NTlC*xc*f6Gwnsca-deuLy>WJV_uqgF^;4`w>azhM{XK*0 z0n`_2D%}Q^E&B$@4hwYtlUQ|nSpU7;!E~tdO>x~T;gbWur|66HB7-4|_7L}LIyWNF zeWVB{tT8ce1u@Ti3T|1#FQ6jYry@P3mTTgv=sBxxuyMe*OMsGsR^t5QOjLSy^ z2^J{E6J`=BX%EC+Ytj!bxTWRly!z2pKsQ32`mM*+?4KK)@n3y>Cq!X1>*Ch`!&E`d z)U!LQ8+F=PZfP!$vdV+MZ|LS2qgqQv!Fm-D~`^HiX-=C0?eMR;?d^eHa12>E0{ing3OSF3IwPTAnGri zKk}{^unQt0+O4$4=ge2_gZmYk%6?)z8gouhmp^QXZvB{6YJX@d*9N_59(FPMsYe72 zBN75!La@S|aNA@n8o;>0Ov$b0eoRh;kpe}um{1B!`CSjEs zHL8!3kv$s3p9vnP^dN_N=>2|dR4^|bxnrnHqY%bXHx<59eG--2{7jK+p=&) zi`9W2lOPna3+xT77N!5ZzSj@+2f$bE$Lz4Ls)($n&3oY796@Sol6rM&i2oxK8*@Q^ zX$)BtISddOUA-Kg82yIzUG&7~bh`e2T(H|W5@N;gv)11YuOG1=Wm2kiCx;Z-2DO?h zkgJEy@xmG-S(FIFinn=;q|YXFEhjeW&$qjP%#hZZp&GYp-arJ!$ySf!uI9YZdy9`* z*GHNgCPoQ*Y!X(wLqcv6R;}IVjzMWl!oHTCo2R-KbA*@hlB;PaBvH}v<~?VdKd+Io z1HX*Y|6{B*p7-N;vw3mh*I#yxUtGRrtpWeqd4v#$~#+V!~pqfs$SIQN*`AEE&i z9j$H-zx_O2QGH%vpFhUMVv3o-sU#~h{2T1|{?P^{_oO&--LRVpC^_G0{?0k?;aR@L z>_4MD2WZIg3Y(ctF$zES1#(xVzB3*Co#dU{rpNc+JZ#rW8&D&;O^gVguaE6R1DQl# z0v(LA%i({nDiv30`tlyFqpl7>OTqY(c_@U7dM>?q(k*9#l5zPTuc~-F%pYpRNWN07 zc2zaRIhI(v*=SAb;=oFe6yg5^0oFAAq9o*dI;sykuA4sNyUuLSRW$9L8PtE=87YrO zbhUHmRnYl)RLza$y5IyDaxsqnZv``nNAFv|j>$N_i>XxGc0q<*!Hc!H{kJ&nd%Ev3 zesI1mBQe+HA-An?nKb`dSW<5A|JttJgo6xMMaQuZ6N4NUDP z!Vjcs2n0wk5V+Fd_qlkztL!L$-@je}E$9aMT5n-^y(zJC1eL%oDLOyjU(auuk{~rX z+@^-!C{H+;Dwvhr3b_#W7c8vm&Z4OIBm7o2_72=~@OYPwQNfDXza_DTS9DdwzfQYl zWeK*#S9!1f)~?vu+u^vmNVi*0!Y>V{!Z|DYAlF5;SU!Fgj|ZolsPl+5wy6ah8-yL4 z_|@D0@1};~4?PIk`~uspG-CeVrpV7{@)9*zdwo)5Yk5}1Y($X#vEk}rgoBH&glz|d z9<&h5&arYm=i>WsGbq?okkKF5g*_=jLI;}6cYb4!#<;4J-jS-H$Ig3kbzrv{+#Es% zH4o*JaxI#Jp3x=zWpGtce;1d|)JVX;=^KZ!yMY1~W-XnGkhWB96>^m$e0v ztF6)UrS|lg(o&@H3t46p6EwGDq;yJ}0!q3fDHARM({3}Ys1_R~=7ZLn`{w~oeb`5| zJPvFZ&z@|`YI|-1LW8TkQ+h^4C8kFjg<%b4S{Om?bp1$W5uq0_?(5i1xU%C_GJt1 zG*+lJ5XE0nMgxO*#U&=NhW>cdL2llhaYZP0N;^pWr+$oR&RkC@OX5ie+KF=pf2VB- zBn>Z)SyXGE9WPH_xP$MUuWeE)4Mr>5MLhQQ!gWJ56U*2I5EeEX$ z#b7I)?Xt#rGL9hP(@fdquVbjW%z5mE`jHpX2lZjA6539Da6O-lppHm5;JRgF!~^2pSZI=AH&(%dReq zjf|0o9>;W`p9eq1HGn`UGD)UE;(_fKXb}k%us~o0)4bzYnxaLu)$WK;o2sBA8A$Bz zeG6}Pio2|`MfD#{#pepk&E-iNPvYMil&8tULCZmo@Ne1wQ4R&}zEN|)iTn38yKe9$ z-yyO&9i!_&+Vl@DHYj;0Xx0jo8 z(VX3p-!4+9wNh)c@UYxWt|KlOcYqaxEQ9%X=L!DGcLBV&oGYiI8QbHtNlEDe1BZHE zdxvh2sjn!Jlx5={R)4fjtN%oS#nWbDVnW*}h`70_eSS2lbbNQI2xq_6B%t-G%Ewsq zMKtica#Ba6GQ#J8r=2UOssF6xf`*Xy@o`ouPUJu?{Eu1BX7zSl9G#$8Fe+_?>uB7l z_e9E`u|m3IK4ylb!y#6iI?`3}Zf4Oa*6D>cS%E3#4pz>G8XN0-%g?}W zD%jq^-Xi`F!0^o&&$b@@B#n)SAlN!0)F1eLlEes`9P{_%B;W$_w3}u6`{@$Nv@AWFt~4tB9NAti z9p%athKiYRNHKN!x{#~LEAKimWd|J*sQS{#rgs_%|5|RSM;;)AM*`Cae@Id!hdl%G z^^CZMD7JG)TwWn#_OewK09_3Q=mQFoBSl*bb{gtf!%1WxjziWZS;m+TM86BF@Ib9fGX|I|F z#|B?=r2OKQS90S)6!(i2eVczOa*K*3G8>$_{u*QpX=$2x(PewU6n?$Hpl(&FKdL`u zNcw7VGhw^2-!D7RHf7bt6NkVXGIa#lB|wpsKPDMAsYF^EWV*cPbpo39QEYq_UyE6_ zKriHIZm!V(iIif zFH)1I{*Z3MqC7fz-OIecs&33n7f2-E!rzP$?|My<9IV{b@fi5Ichf9FjQE$*{rlkX zIrR=RgX=iCI(dIup*l}>pevCf&z6t{A2ihHR6L#bSYtAJTf-6^-{pmZchg@TrW3EK z>${mNz+dKY#SGyW)*Pe<76#*LK5dHTcDP~xdqJ_UT@_uaB$d~wk-id-7|j=wUgy+j zhql#srfIjNaU>dsO@o-EN;ZQD%5`Jqq=^2~uK_qM0DgFAZ{oMUm zJE1SV;nHwiw{bgLrp2zrfWM|giw7E%I-EF}a)z<;S#F2-GdK_?$-akKd*TKh6a_ zbL$ARk)_J>tpND@IqULj08CkO=V~qZsC_~4JX=55ebt^sAGr)O;Fi(r3R7MlYi!u4!avU!)GK!cyHXAi%uJfywD{nmYC zq{oj25ghTVAWUrD}A;@Q3dda;Mow5!nv70guy#B z!zu9ftny2>#dTePX@`7{&Lz#=SN#u%qbuZ~nKRo--O=fc`$!7AWX=jQ6^Oh&J88S} z{4sv$mK+i+OvSfyetn2g4lk?7j}K*%Jnus!5oABCzA&3FILKQ12)3OOB{^_ySp{s< zdDanFzn#$qC@S{ttjP|CG0T$!@0|r4hw_%TH}UK0Dg6wZA2hvOu-IGjO?S&vyRlm7(wk+;e&FKZJ zO1>J9I9xL@FYv}xcerL;}$r7rFj1&Ir;oQbiUxdrWuVGy%e z_Q>NtAyu?~i~n17VGYIYa@Yt_L*6#s+$%F4#3SLVKBR8*VD3XAZPxXKIEdb4qt6 zDDG$FsIsz6gVcQ4!#q;akSG*+)RCJ`n{5l7_9sew2@EYO1~N~Co8~08o(a?#O?}gq}YdGbbqQdaa{Mm-kyL#UX9XBY-+6|n%#`O=DQ}3 z5*lma8Z{s-@i=Cbq-;6YdR<{k*;HD~$PQXNEyrlS_E~K2iV{W{ErE0)_8Px1;!F=T zC|&jzEp(eYM%Z$qYGY{^#iIRXc&`UI5L|&IUz;;Sc_#Mr1MJ-3A^9PPpV4zybCcNf*wF6U zOz1X?1yQBm=Y?nE@JdQs%m_WFHNk2Rv6TQ(Y1uIEs@F~oP!5tftJU(?Glx{b@7)&c zH>}JWu?bxwae8O}^pk`LYP(X@!%hrZP6w9i%Us&*fUgKEUz)%G)6%ERXLIxR+g&|c zj7}NdA42PF&%Y+v$_Q(P0iO1q=q9Gn5Y*d)ohz5h0cm=%yxYd`I#3lBn5S#|h2#|qHn zU~-xE+3ZD%w*?`h9pBpH5%ZJ8uhRi6@iBD?ThIbl1FV`B_O}-(g5()$>ynLE!hJcXnOMl2 zcdPv&Pf<(2@!QuIkHZlh`w_)>6t5=oh&bzlrc$i001gkXavivE?{3T=T^ezBi5)Wy z;T9)bE@)vyvV0uG1vs*l$9#8Z^a9)8Qx;+yPlJwe=!Io5$%Z0TMO8kTm^}AE20xE6 zzi0N|+12{{Irjo1lcyF%(%pXx%Ts$KpaWqbXby0b;@yeZ4qF)|w^y=8L!epx(~Sw|L^UI*0_Qa5)KswGR!O>4~k^sg+9 zK=K&kLa1<5C0QhoxC;GA*F}uuAs!!_%inA1x_O+A$zP{iK{wFva{m3Dp4c_Z!_}!d z#gxr+T5oz^sgKp=0-INFjHG7<LRK%rA4@KRS_|E zgDOZ`Kxi)({vcVn?L-a+D(MGhZmhJi2=o{1z+nDY;$r37&a+g;yw~c+!w}DfuIHw% zR7kjx4%!%u7^X;U5k?s_%GL|{z=Dw35b$)CQ~A?r*an8&#e7io{Mdd7eGRp(pB5nT z)2gLTsR$9K4w)lY8M{4MLal70C{_u%GINsV-7vO_V2oQwRs|u|Swvdn?}iD#!V>GD z0txMpQOiQs(F3y(b0$#ddf@fY+SwETsxd3fv|#xSzm3Tc`vrKPfc=Fe4pu+_fH0h? zEUP|E;8VV7bYfJ`p%adAjj^V3nlb~lKurZoRcOkb$#{PQOit3$Q8ES!>U70d90~;} z_g2{+$Q?d3EXR2tfY~D1DB}o98So<+E>5bC<-Bf`y&&AQSQFd!KB}%XYzci{X=1!* z{&+y3vf4=Q0;;$bk18b5$?fTp?*)=rA26^rRpz5Yc@{_vy zJ0>O+Zx$h;jF=cc<6iqNFrtsJ-UAy&7 zJ~|rSSGvNgxhw23_-8YGQ}ZW99)kYr3?6adZqZK4iKXYcm#10eO~e( z!>$Mprm!NeBRQc}B~VaMn`-qJWK1xhLr6M*?**^%lAaH|ULd2iaC{M(J*skOBqZq8 z5YxRL>5g?k0UKIDbFAp=>(llV0~r8;q&KK3DJil60RgrTpBIb^?N4kMOX9cdEByuO z+lZx>%#-%w=s8C|N=ox+w$ake`#d|{6m&i&2W>1Y@rawxB_CIn8U+Fog=5k0jh7iZ zAKfX*(QYXISPeL6gH0o#8A|R#S5Wn%K(nTSr<6l*O+-gCfeRW94HrVwMt6P;Mvw28NhcUPj#xZ3@z^!zs3N>D)!gxmP}2`8sC5qj;5$6`=6hK`9TpY5{>xb3@%P4KG{dPJ{4jWHzncr09w5NWFv93OrMq zYCx|G1Fw@|C)O7Xk>4TytRW~5!xFNxI&wguBOC*)Xy)CCVvu?3MBwe|xbG@>u3?a> zEos@|@iF?Lr3ALgly1c8i}kY{SH-$hgy(_6lTf=;nKWgaTV3p!%f52pHVA2F|YXO zj$%w!9;=@4voV)FbKoo}Ayppbv%amB1x#;Q-yT$a|Nfoe=5*Ef!3>K(`5E@rK$@SbnZd9J<=&9y)ggZ?D2k<~&w)jsJ?q+H2t1!w+ zdtMD9ksYuWwp`;7co@4lKB^#I(#Yh2@|pDAvdm~y032YU)_k=hFad0vgl>WL!`8QN zAz8eF2x`fu&zoHqE9)9FA5mP`W=iQ&V^|c%>A4PT1&|3R^GE zZUMCbvYX>*S%fx|tsSS<_iCR}X9JKgJF#aip3kmvUT(`|A zVOT^&L^HF(>rVu`tTKQH-ib6}we@ z_KEdUAnBuiIg`Te07}c?c7AC)-cdmFPUi}?W64*xO#OIb|6V7xcPv#gd_#qgU@w-ul;3}SRUnvKN&6o0W zo||J_0I`JQo5GS3DDwpx)wd}DzUN`umWNb=we7GTu&9QooGqt175RUhqb?pN=xDYi zlnuzpSaS*rH`UslHS{d1x5M7#wZxrlbwKG-)hel22T7G56FLi$1~cI*E0Zg+U8+m#hS}U5Wv36s}UCx6-{mzp^XO0 z%4R471k?e)ErY*rKY`KQ^m9(n?}&+rPVG;BNkAbv1ZDX^qVM1y%3JRafwu*RqFxBJ zDw&e&-34mOL@Sl={lutSHO1$C<})#s#tfSc>^T{IQrbCQ>6wA-)jD5uH9G3V=D$xH zPw7Sd5MK%A-`UyeAR_silmohz4>V!l_#Agpd@UapxA!n@>2zCYy=d1sUvpeu^x2Gv zeA&hG;%Teu&ShHx>WN~jW+LCmxTNMgO#m<@r9>SQ@(bfC!A)A4nqmez zI;X_M?I=F6G_ZzBnqqS<>UtRjSmM_2@&$)xc~4RmcgN@&CZ zP>WfOYCcS;G(QSyw+IxnnIIG!Bz`rnq=H650wN+R4zW|XT_UpdvyT9bs{DoRfo+fN z>t+Cuu&zJG=F_x0C1^5oVY}as)3jl^<_`t3;R4Fb$+hOHo|@Ww%^;MAXj)cQ%%qPW z)d+S?jWm8HY?M|OPkxzRxnCS5fH2$5@TRvGZ^x-_w5h(1mZ`2p&e;gBJU+VX2Uge4 zcp91&%8ZVW+m8+E;X7P8YAUbzKOjDN&p2{4^}i)!?Q_WidGmq-Au<81W5RaGRAM*= z0T@1JO`EPJ5oL}MT5G7TE2PMd6OlJr%PA#8K={BHO21d{W};ZQP{>Rxk{nt~i|inSaNhROKFzbFM&|v%(re0FjDw{BO#uk>CM&B5^iQutg1yozf;h^fB9|I z7ROWkoQ(bv4WL}i@JiKMxfvBz%n^vqF6M(R%vaHCQ%AMO``|7p=soEPS<4w2ncLY3 zv$H^^LU7ns8<-7sQ&8GGcdarz`r^D%nnIrcnN^*e>1@6ha<_n;Q^)2>JQo?Q+H8cj z;=+n?1b-tRC*5O@$|&-}^t4N@Mrh*=>V>@(MaM6u^38rFx(w5dvw8uoJ80OT+duD_ zXxQp%+T-cCkMP%0<@}Gl7pumYC!zcBOAR+vZpug)G_%+ zb;3^4(!p?`O2huA#Jy_kaV~{ev>NRS%ss3r9(x@JhnH8MtAoB`<>jJv>NY7wD;7dR zSsT@o*?V!BUy#;M1c-8GJPT{*Fbs91Md>WsGJv!Dc4^r`j*H*Ji?mtgI!}~DWxVAL zl}saMCEP-uk2kDkCZ@ulG&RXq`a%GQhZ$<29hZ-o+ga&NT=lN1rtdPQ+7HOA$o!Yx zH)FcDNmeSk4aV1vg42|BH{x$MOXiGtC8|1usn#?xH2LF5kV1WWwa_J_S|^d$17Qix zIXu2Oqc?^BqNyVtP>v|%(Y{drX>P9)S5(Ls+56HlxlhZ@?f<>Blsa^#BCqMjyTeO_ zDk4ER^wM%|NHFy^;iY%L#8p~N|MN#>cS5n8Tcew%4a_dcB|u$2ysR~5u~|AIE>rq7 z&$L?b?Vt7=OC<|+smWT`{DOkcrA~iU2MY_b-QDDw+kQ#$04Q{nfdtpvQ}Zp6?}!b? zo4MJ$a7o>NH#8&?0D*u1`sI3IxmtS+Q?yU7wK6L+DM`Faw~6iPVsw6KP}7Jm`RCyH z_QY1rrA5Ai&>(({>SbM7^OsC9uW)ugo_3dEo8W|#%|m2p4-728k=Yn4c+7=%BA9a1 z1mzJcIPiI42)U{uSp-F>To<-U4~hPF=9UgI_91hYqUFN>bSK@1}`eEZv zt8C$`OX+ON*}DBKjbPKwoB{ zHS7MP=3LKXTfe!q%t>07668<`HuE@^)UjaHWYrI<4A)s2r=z~p#TTKG`WpIT&3wu>FCJA8jp+->KY4$npbOoOW6y>cbz3}03_T9VW zccRG7_g`u>yjROd{@~uw3*UCFKsLs2C0u)>BuKvES1i(2WEibD3AodZ-7`rCwJpFa zf+FL~jK}&KH}j`>Og}H5sptAS-rZb&X*uaIV4s_l%?<9|%q?yIz9uEhxm_%7>M6bD z+*YkqA>H4{tLt7554c4A_)A(^w#IlD@Ap)MY)EBYL4Ll8jETwHxw(8Wbibu#!ku0F z`ve?e9+1&n+ln(j?&~X<*a#g6wHD*z?uxvjM{w6?d_zy^D@~BOz=BO`R0>wp*5>&Q zS>TfTya#%^H*`}_Nov@wD1x>uo#O(OPWVI0BH}F7jj`@`>Aj@JK0ojl+}vrQZ>(2I z`qkI0j2DuPZt60h)NNc?pIu|C)rp%AxM zf}8amMn*?Sc+XiX+s*mrk|RrVWTXXa1S!VX7Tom!@5_v63a zgDy|P;4cW3#*tyUpo$`U!%iVCV_GlRf(u!QK0e7JFebd1d z<#L_IsQeH;Xnycf(&hac5}bj%axZCS*HTV^(PTn}+3k^>GH@5bI(+Tj;Wl(S9FaWA z^nOTCpou!HrM-PC@a>-5Vf|P2DS_JBna5zR#M}_1*5a>oMdZY;I-1Bl z71ju=W_+eK+SAkL&3e$rp23rWrJ&?IYqFSpm;Jf@tzW+i+w;HG)?WCW_g7T2rTQX!Ysm z)yGIJY=YQ(lj^!p(3X{W)6+cqua!FP6zqaa6S}1ZO}#d$Z_iE!T{+T~+^7XYd|$7r zM{bCD(>RLXbpO%%K1rFH^-)Q3h@~D;ET_yr;3eSK1s##k<))jgrv|~ULKl%8uVp=0 zDe*-rL=PauP=^>h?lI;dnz`D&a{JmF+BCKi>uEq=XG)CsY33IbtAmp_H04iIV)(?h zRCBlN4Gn|8ZIkdQN5AR5sAx*oMtPGD*wk`(Z^&1Ya#2<7SsDTn>E||+ya-MrJ;lTK z*Esf8?KPv^f>wtCggXMbbS2&Hsa@>L#-leJb@J$YJ;l6JEy#t1P4UgRGMwet&Xyle z9hgS=zn%V`_0PgA3ou!egKS(rM8&Jp2r*PnTo$yJhA_Uk(4K!BUOdL~urnB)s!4Jh z7@(fx;@4mJsHCzxSS8-Q?Gfp+ZX1(7!OC9sJqB8W8JBZ&bJLOmurdC0sIEa0$*lB8 zn)4=MiV0cYr`;l1D99YMxbT4N{Q6TDZKC=q+f8JhRQ8t%#|sH6m#ci zpvTKgF*+6z5>k9$tsUnaR+{0|X2UeL9$K2gw7Txpd3RK*VBmEurpJ4oW5%xU2Vdd= zVK)ij%Cp_L{sMKgxn5P%Zsps{?eRcUHO+k_Lrr~n@yejV>_~3*$goq6OP#y(!Jx?z z$Us4Uv)7J8R4nS{cFe`*OQx{~ zQTr9i@fy-xazt~}-cd*l8vbOsOxtEmW*n>{ie9CSo3a#uAm+lAX=K^;%=;72VBnpl z^5AZ%*dBe$#A35kwhTT~^bB|6+7SWSrN|UvQ+^nm>*l3byj#qhW811hDQjok^XPXH zt}3#eb?`FSY6N<7Krc}TXd&UD``!-G(oST$#<>}u*0OAMVqV#nlrMmbs)=07ofn#x zISgf_W+&VsJon$^KO7O~u8v6D0)4PBQn%$_XuOWd%X z1c0E?K}T^nn0LE1A-^;(nHE_RvKz=aqnIG2KL16zoOC}lMN!c+!Rwa^Ptzc5T9$D)N3^NX>1oAs z@Web3GOu&KR@G+V)0pd9TUkZkuhsze1J&aPPkK(Hx=y1uBE54i{GK$ zKuW&Omx=@xp>bPudpr20V{^O&+JNNLKdwf=7T2{MLBCF>>xR+CK%&^o@QQ?#Ai$Gv zZLPSjF<0FKoWnWyGzfARmpXi@_FuQ~bh?q@u356P3W!%OOWC^g!mbpD2pW-0Pmq+B zm8vC7pP2Avl4rcHSFj|IaI`?rdM}fQ7FEW*q>)=&i=jN*Q^dnFQ|lvoyqqZ|=^{k` z7}NZ+0?^RXobsJQsqEO6*uqPSR#ocPSJ!7;lm>J`uBTgk#WmUWqxwzg%$V3&i;FeC zU%-0$DFf;61>3w|uPx6JSU*SCFM02NTgN9p#7KYt2?s0TZE$mxe1ylr$nwGyHM^$f z*?}kZ~yxnFlhLAiknp+=+{6)C{hG6v9Cq0@Aum|+_^o7P>Gz9QFUAj zv1p>B4!=8IdqHoSOdH$a#3ylH`h0c3PokyFJC{s|Y`E{SF!f80`bmsE#zcA^oRQPf z;wwLFrN!9XXV<{>I(s{`3Irj{DH0p1La_A7^)lb1T=%Vl-^@5z-uxa-_urH8>#!!w zDc7A)ZELE1Z|OTkP=~qc(M!BeLjJ)F;p!Brqg4`e`XvM5@Yfdt>313myyB`(L)zK!vwZvSZh85N*HyGXiqnf14uqHnu z+SVLGwHdEYVBsGn7ZRo_xa+|v0&qR2*m(D}gnpPzk?I582gb6%)<21)e=ZZESjpp0 zMsMS2TA4~}WMqSB@xINz>45hAlPQjD;n8p{kpLDcB3XRLEw%rM<#47N8ldgctJM>u zxzLCs-w=KP(rW-o3__8h%`H7P4bCIqFVkH%F=pz7U}QZ$PI2lgwZC4dOABGkU==rk zrTtuV(zNqvJCfZ>-;bU@`lW%9_wR#E4xON2RR{7X1!(8y=d9Lm zb=z8FM9dj`B^=`WxoONXl0b9BDzR&)jzr3NvCPlgli!|>CGq1O;(ggTxib2OtdPt+ zb`qlZ>p=N&O`1<#nao7hT$a9FFrq@XmE|joSk)%1?H3NKe5f^FR#98sI2x}shEVLR zhX+1%`5~wZXoUl8=1+pHElIyVy>ac~M*>lgD8yA1xtDzk8PthVU^|EC&pA;qJ@x)4v%&68CZ<2{QV^lW}%;ic$BSXAePnrR`z&pmOt< zD%;OVZJ`~z<^;eLz-ejsx-=>3ZEDX;aOnNvGC&U9@*TVNo&{=16i9z9g)IDNdTKWZKiA;X5^yugH6!4Tm4JzJ5<^BTw$HLg* zFsw8nVcD>qodq{v5@OkK+^S8#Lj&ok1J;4P#n4ZPxx zO3`TLe804Pnte*s;P%Na_^knSnX9;+u2k1D@OpxsXR8uEOeM@5Iz=`py%uYLv$xS* zh=DU;_hnXmSIWWit0%?94cYYq zllD-(?d`^4&DTU<5^`>`$pV7!1WVoBmjZN~<}?AetBdb9kZ_Yl@o2)1MI90+@1C7K zjr~uXL%)QrJl=clNbHF9tvs$(EnGGj2Dl;lpGAaxA*9#LZOXasm`v5YnR_Vo#U1Xn zNP~aP48r-)dpp8WcDLi6G4~*vUbkA$&lO z6w+ljuToLF+p|_n zmCZu<<+j!8n|L-FV<)5&9$Zo=|A(fl0II5a`!tuX3tSqcySrOJNu@gk1nCCJOLqt& z(kd+>-JME^beD94H2nAdX1|>1f%CIKn{%L$ zr2!$#{hXJf5~0sG9G32^tkO>Prh?iqCo+L3k4Rt~iyS|q50Q8v?K<&uFNSR7SnQ?e zhsKR1y%Up|P*K@J*8AJ{k(M5$zyPyRY7vt z3#N}ho2vdUnAZ_^OZu>g%^RMq%$UgtkRLfcXqV}k!_Z_q@UQ~i$iC%B&~S{DaJ<%{ zg@^^5+@4?GZg{tlN-5G47+>uVBsqI~M$Qa%u?nJU;!`Ai(Az;7a7(gL@pO$XV5!nS zKRwvET8-U$icl)j!#b1DF*5STA%3R1(}vWrAew_;^QcMHPYXR+>qmczyO-Oh3(X-Q z*u6OMsJD99(>T41!CO7|@QR$r<7KcW)5?@}mtUfz;rLnz9sXpYWj7kKl!mOAK+NU- z^9RjaP6gLMx`-{}XVPQoBAfaTh@5OMaMDqI5Cw4reXM%k-rH^n>$eq2Y)O-8iQ(Fs zxQM>_Wdu=4$31;R7J=Hs2ksfWClo)_yb}*heF+n)6Hm{sg(<|2nXurMNSV&W;IT0C z&O{fMsOKzkE+QzrS;8pn zLsEg#DHW2vBd5nkj_6&Mw}iW2<+^H!Ok{A5xLw_C=~H8a8DZIUFq?sGkV0oCVCPia zx4`{`V-|Ezjm>1GddClitiq!wUH+zg9c&O?uM^_Eten`>thSNNd4Es+kt5w{!}8~5 zroPYG@7Wta2}n2+z9NCP040C32rk^B(^aAzHGCD7Q(wsITVLTYJ}xSrKnyWzKPCHj z39H|TJwI^W9Mvl;-d#6VRpA5w;?*~n{42~7XC`=@mVbrEy2s~^3pBXA@(i`o`m_tr z&cMRcHG93YF?!g9NANQ`c<07x-j7Ln=``w#y}DKe&ViotNvrw1wT}jT}$PHM}u_aks4Zt^zT~h6XaiM0;j82vicI@SJsDG z0ud`rv)+DYgBnESO<4`SZpiboW-UnOf%MRlV{Am5nc#G%IB^H#BULQp^PBhXglNfa znWNF&iQ;2g8-%bnAS6m%O(Ux13y4WhS3W{DBwhF~&y;QVgE83;xyz_PBj$g}l zq~o6n*Uelg5pi|gJR<+Yq``qI$~xuXE>0;&+eyn5VU*OCA)sB z2JXI`vx*^)C20qTeQvLoisFi|6+3C;{)j}(2}(LTw!A$&Wr(wQfs&NC7G1s>mbdn{ z*3fh{RD*Pjn$0}70g~3ogX6WsJ%o`O2nv#&!~Wp&aZu?53^@hJso>YS&JCs zb^?Yw*h)JaW@3c|eqk7XVFZTRQjh!|<8M7dEjtNC$RX`Kmk==}D)W2Ef>0+UP`6Jy zM!_WXQ^gWGVF#UXfvvgVuW3S(HCZ0t_dV=iw(tgGwT9n?^%;h_Cla3um`(sm>6JTQXb>jnWvy{=3#QWA>u{<{%jI{6KjKeYTuoE&q7Ci%4$u+^_1o zG|Tnx`UnB$br(L`FPu7`_0cjbWXD&5+=|JzQ`15LiqbDZRYlACg_e*?mQI|5I;bs} zXqaNX_>>VuM;=f8u(6!otdDjStT2;LCv~xa|5urR9HA?o$Nw6WiZj<`lv`Ltj zkc%l>7OrlKFmhh)MU;R{`jqqf&N*lQ@9O(r$|t8M)qf9gZBdeC*0~_m-jMt$IAYaP zu1xuFA#xmg@@QH@40>{0dhnAF^BEMopsoZFr_O&u-zfa{Q(JMxd_^<+V2E}cR?azyW{)qC4UtpB>5jNRL*`)Ha; zz*l_Y!{1DMPruJWbDkf?{JB0W%F94f9r1(|@sj;6kKFEepO#QMisKFL(zDrAX5x(4VW+$h>EzLn*{E`6yA0vhg{LcUlz1W>l7i$M9dpcwhdZ{{Z>jJg${}f{Z|D zoj?1@*3mot*VU*FrNeYKlqR%;KZw_vGae|~eN)A$%7vNVcql z2B1&OGpp+z44C)2V`Bt%Sf3$+?06^-Z)P$h#*LSrH&h0ZHuhOT3M65plaC`5G3e?A zPH-3U47aSU5kE``EVDe0jgaPMF+*QfjJC1oz?@0CiKJxf>0Fo!DRX+lQB{Y{NPgJ0 zBjz5d@!4pSF0efJHh&dk2BCw5hkgv4H_-PRd9QM}cJ+FeZ%Kg=7nJ}5od9E?b>2<@ zo0mMCMafFC{*IXJFj1dZt6VX1L!?RqFK5O>4;PD^vsO$JmLAS=JmSy(V0VH=_od}m zl#M74c36En)2no6#jS*j*(NJ~L-IW^_Av?dBvBJ~iH}cen3Ukr$!n=gEsE+kx}UAp z>RbG=%iBWT5kUmdt@Cu1j6`BU)?B|TdT%$(kiv#hSC4j>upk9q45hdric!J`wKOVX z4J&ed=TO1ZAB%0_Q&m|Vf%vDl69gwTr*~B?=oULs+MnI}ML+VL*B*tk$H*TWc|Qz2 zYJEc%;G2{FSGV#4eJj{5(@k^JG1s_ee5cmu?}Y!!gI+GeX?I6j2dR9L*-rnTxpN-Z zeo8w}Ke&9CK5;vPg;}yWhnuZCl*%&dsIro<5`&ymxAGbx$bS=eQ~&%=T#JxFf2OCW z=gRK|S&X)svz$NK9hoW`XweQ4_Fkv8SHTn&px|K;#3`)C!V^08b(M2|g|PB#bTzW_ z^E6sBd=87D8{uQnlB*Y1@5ff;%0aWTLQ@xs`<@`=(>zab;)j3YOMrPxfQg15Ule7n zxQiR+&VkPJ!qMkNYn^(Luv}T<(1)QEEO<T0eSgl?V=#Hy8B(b;N!# zeq5po@uwIw%Y!sB$Te=q!Pm}RbqDU|ys7n1ip(KaWK+;D1uQgE)6=;snc;+fK_|bD z>EIGy{(WLm;yp}5{TOtlsI0ydgQSx{Ow;~IsM~(Wy%Wzgl}n6?;<9HD>$)b`AeZt* zKU}P*;70|Sc!QJ7>ptBB)|Hs_Z+?R*vz*s4ztuQJU4PSIBPVQiI@GdIyCNwiWQS^P zFco&L9sOIpd+(zQ#*7atDn#V(eWUC65XdR?aDwCIv?Q|HGcp}O@#d!}5i_?w%64A< z5*mG9`zU^d&BVlX=$?tVW`j5B+p7aPc~8cGWiFN)D7~3tg8v*wF6od18=?Kjht^vK zk2nh$XvolJwES^FnAa7)2pUd!OCyS51vT74)666~(y0;Bs`R|cm=TJ((cBV<LFQf1D4*>Baf<5q9Oy~XyfyQZB)lcCqWQzQnnZ#(z>*^G3d`rA##~| zhnH7YNaa5)Y;~3Ja<<76xp{uUGPMYX#zAyWcuT}OoB~nQGUsIJ{iwohu{k^Bg2Nip zWgW6?x0l1dl$#8h`ay}Vs0F-_5TLeLfbsjUyeJ#-cjx1G=j+!!o)Sh(?_G@V;(!ke zxfrDtb1qzkIUD;b$s&n?Rj8a%E%J~dqKBm>4sZs|&dBfex(D;^1h2&#EUy0jI`I{= zMEON20^6RAN+mr1d8HQ1ikXz<+_RdZ#X>ELcH>2w<9lEVLCUzeiu#&m=yI5yXs$2^ z|FSD*kOHWh-1uH9IUV*$LDP3~yoWPOms5i?wvMae`T5%>`3P*e*RKUx!0?I2#C%pm zIO9WD8>hg6_sAN*AE1YcxnUy(nkmUGO)o}m=d|K!e)*DP#z5XT$V&t`RzdYQ%$jEd z%9>1Q))zr6HI!KU?3h16)r^fS^x1@AQ%I8Zs4>fo+a*#US?H5EN)UHdaon5Y%^Q+W zEdPclOp|!j*5$Q*C8Mf%X$Od?tv`FS*nFa$wTnhqN>-#q78R-&vm>rBX0{V_)}*Q> zW|f5;J9`?gvrb>y~l-7WC|QoSN3C05;d925QDN z2VG}_$#N8eZ2*<4T0*;1Ey2M{yRArbvMSbwLLS*xK=r3!-w%04tZOiwPYhMd6pe%M>}?l zuc?Sy6W@C?ru%OH{%Z1tiTg6W;S@pl4Ofpk^~&6c$6j9vM&QNMi<66q!T+kimd~IH zL3^;XFPArRrx#lQ(Wz4js&^o%2)S*oCMXItGkh}3AvNdulrKzXF;8WtF1jX4q zFQ|xdRSQ~Iio+o_O7FRZk1SEvS8Bb*In#V~2;#sg1odII@t;~i+Zl4L&>uS3iI;yB zI%zl#iUPd_N7Eij+RMxkO`hTcBPfJCyHq{ZhV0knl+R9oZ2rXCRMg!ZLdBa5F{+}2 zIeFo4+H%L}E+Uk6c6Py2Zw1M*n=ug*tgRhJhkA$`BvG=}J1RTGF+efT@mqZ(@JcUq zBYgSmq!a3QO2U`on#HLd%aaj`j*mjI7?T?PtXM%vku9)RTI?73*0`Vhy;m8eeoOw` z2;SR)<`xpJ2sAiTH~yw7c+FzLY~?DWg&z-}c%>IFSSHo$ZT4M;XBBxtqxE>1#~O^4 z%O%x+lf3uKnzw9WI3st^ipeV|?5AksrEO8q}DDGQVKq-b{dt_Nv0q6#t~lVQeEyBV$01;9q(7Yba_B zhdi{;N3azsTOA#IDs-{Jx)9oy5x_6m>R7Vl9>@CX9JSBmOoRWDYG$upx6Bjog!dh z{gFrx|KzUfdN_;c&2JTR{qHSDHY<0@vYj%8lOY?vAKlMRZhv$P#CV&AFI%gpSm`~! z($NVbYI98+zhgwhVUzRp#94IO{t8dpMsV57`3A{ejyumVOFi}dUp+ll z^RQ>o25og8TY3vKBvSswr+IvOI;6BzQorL7-EpBFXKHF{XKydG%RE@AP=!4^?_Z97 zf_z{;(MC~rT+_BOxD<$1-0zX+t_r< zeHtAuG1g-_6y9eUGUo{PyHUHjxtR+YnG5vC*~KeOR(!HTbBE?@B1oAbP-~FRFDy(< zOduu}VM*oUnV6WI__dv8?--s)1R?BRp-k{|U|p>ee&*R#NP8)UVc52YpJ<{51?|hx zpaacW>TW=v?(<%h-q*||JC&C&V`sM56ild=N|i9$XnMebq95?xOwP_3lNbrqzPA(8 zt1`>PkdmQ3NR^xYz|0N0$Svf06I)>em4$Szc7^e}ZL++`62h_SPoonSCS^)xbuxdh zT&MhL+jqx942B)yM8E1{_wJpnq9STKw^>4E$0Me=cmG?;oJ^x1 z<+*7UzjcQu{8egwn*T9d^$&}sCg4whElZ5K0f|!sMPHx1macBZ@88-Yl_Mug1sbpA-;wE;~1 zV{IYw_`xym;E}EFC<1z(zP6rR~{y(Fq+?)G)OVi2rfAR2#L z$C@toCGqdyHvzZ1Mfz>G?2dCar~vWWIXfRG;C?BxvsR!dNJ~o?*p+UF(f7YV;kMgZ zbiwrO8{na(Ew23DJ3l7Xtw+-l>%#NVanwhfELw@)97aMC3wAi6!UXJil;U8~H8p&3 z+}Py`(M~qwYP_d z`SvJgz};cP^=jBvwbK&tF0tOFs2bF{69|aKab&?!rJJDg$_b)86|%{ft0L4U+3)mk zj`$q)&shQR-)K6&u;wN~!s~Ksu)4k2{V3u}7=c59mN9~wI)t6GO{a1<&oh}Up0nK& zZw*%DyPyB8PfY~K6^)E2O3TWs{jazjms`oq-d{2fj{wCY++2X1|JjuS)l2mpoUcUR zx<02ydYj&ed!WhJ1Zn59oVCu+N4$;g3;q6`%a4pTp9U|d8Ts-O$3+D5l5*gIs z@`sIq5(~7u%A&{RsA=2cXi;=Y?hf1(&d7dGsbK+1Ex7|UZjkz(Z(rAbKx7E;#q`}iQ~CuI-MdfVDVu4+lw`|H!j z>vc8W!24^b9#I|NWE(Qdfi63NZficz5fkU(i~<&*stO7UUT>x*o({8Df^m+CduDYf z&WxZ^S4daDGVBS~33uaCI8efT-Bou6SYu+0xsk6~gXv>5)KX9qHq7e`!S|zZn6{#9 z^vB2gUU!)rQa2W`EGcB4pe1}`sc4v(osA+j3qU+>yW%1zC&!Og_^mAl#EY6C{;Hh< z2Xk*y`iXYMWSf`-eBh3(huMs6EQ~#3B}fNci)o#dOxT$>EbzMj<+#5d*tWPnSv$FV zi2By_g_)P;8G-7|+d7`CU-rt`eneYaTl)0}f&r&}q{S5#A!FP7k4uS!$J2lQWXn50 zW4zb^r3SgK4(IeZyMq>f&q}1N!4fx=%DhoK`PcmRB31L10HgpG{;}WX6MP#?$aPM; z=A+Mxr!nd2BphasbjtzfIOQfSLY!d?){u`y6n_`jOujm+9pvcx!6_yl1U8_Bqj6(bU@(thEGEWHI~` ztB2c5{U$d?sarcyHa0d|NOhOIa&Y`wl|Wfj(}Y^veTzcdbr~{GsMjXHE z)(5?AC-30cu^o-8c81L{MxLn|Xq_}J$@hvfxn2i_tee_xmx`9zwX75Q%HPH3b)mWtqSS-&rheVEB z&t2#3t3}Z={|8QA~)m+WY$ySD0zwMH{{byn!oZLa0VAMLFIwuWIVeMTLvv)H1qIN@r3XjYa=LtO@Yk=GEmJQ5UZ^wFuh6xt zn=h~2Oi*~H|Kp9|QS-j~D_z}h<;1{N4^@h#F>yit%h9~rXkf3J{OPBSN_UNIU?feu zDJn0yN)wkpR1r+=MUTl}BA0(A&4scina)tE$*|Ej|Nf;GZaU3@4{US^uatN7;7P|F zE;M{K+T7NGZjFJf^+vv%4`B5}eyZ2 zri<2!BNxt$SV?q;ha$G#1|_aXPL<)d_-blFdY>h=l>oU^X{B=@zZP_%DAQylE;o;$@nfp+Vk^i3cM{#ei ze+MOU!2A*``>bIOdjs~88lU%(I?S7Jp+gy`O=N)1HU`!lB7&k~LK%id4!UO2o^QuW zA}SWi>QT#a-=C7n-|d~z6W_rgfv|($roB1nC?9#P(1hO2!*6eIzvxuK(iMS3?b9Nr zDddYL*|?z+;z~)r|8G5fWhwHEQ(ERZuaGD{#C$l7wejf@-SupU*%oT52So)ZLxXQ+ zN{t@Q#dH*+AmNh0;>y4>3%o&<%O7838pEN7-w#^zRj#x&H2aOylFrYI?Z{H2?o>!% zGB9;F87Gv%B78ABEnfaJa%v*B&8}nlfftPr=7$IOtNcOi_H2N_PgRW}Mk%v6~qH|I~ zO%02y?Sjy8wn{2Hv`JU7%eSu1(+vEHyszP0j``Gn+}&F>J^Pnk-~*s_oW)1d>i>^?9zTqkRIzy3cb+B0cPL%zI3`nGJhBU^frlL8G>KUk}hIp{wvW=`= zdRSguv;M)_9{`9BXaqi|cvppQG*DqmCLe}suq$+9W4YT=gqN>J;*=ToJ;WM~xjroq zcMlcPNb8~Y~jcqVJKYPtn!s3-cAKe~`4zi)NT%gy3)Z|dYGphWJ(P;SsNb*Ob=|I+EJwK_(d9@qv1=~%&QSny=*Nm@aCZWuxz z^Gsd*9qv)bQy`Q?j5cPM6&hi&>LOzI{Rn2h-mAjG%G#CX+@8#L-|n!W1f9)>33zN0 zaJJ`*crmP9`JJrO91Sd+ETod~0tV8ulrTUOgha%wuIlj0ZGFX+5*=W^!incwmFOz}-V`Z` zuS5u75s8z|u<_js`vwK@okf!>@&N<*^vVgnjjkIfk9Wt+75$9x)w@bP3!hz-&4ujR zuNAp6aY`qnBTtdPRsuhy!K@9GEG+1#{SPp(X{6Spw2cSO+ru8C?(YMB<_3wiKi;y} z*42IGOA~;vLVwI%8B8s_sZ)XN*M8&-+1%MF)U$gPfH6vzt_rU_1AT z=>B%b+j}fTeSjY{dKa;5?(xmTy02tX72@I zOb->Npi&8C9lE@uhDt{9S`CA#ce?CSE}TkpL+a>=wmtoc`vv$M1D#YLp7U*AYkj&KlCwIzdYcd=YH;yY02UMOX>R#hea z-M>Wu5H_;Qyf=n8x7ZIGj$bP@Et_rwgpd!^`ZU2j*j`RIh|Uss{?Aj2RsSL+rKZM4 z(gdRP_4Sd3&vBAqot>YT++Pw3kmIO}ZoLA>zfb|3Q9@mZWL-Yzc(3v9ojik9hk`7| zL)4m^==kz-$fEIxBs^&(Rgx4plGp#Aqr~;9vkXK<{HGINCP2NrvR8E9)Uz>j$H1St zmTk+9x2blxQ-X@2=iALbAFNTps~}xFbR6h-Jk|oxxg<~uNJ2%EYwdTBG~Zrie$qnx zJm(nk>rG+g;>fB9uI*=6rs;}1k`}MS7tMt^_I{2bX8tNB{{*;;#|($dnDf5pf1 z^@u%c1N6d`_%U+qEB=b7=Sa(bYh$ywJ>*lS=kT@rLHdq9fbo7iVSTV61J8|xg(WX? zG4e~hc^BDi`+EwngV|)ZqQI0n$I_KLhhsb;BWf{m$%~VeV5YbfzrS98riD7UYVa%! z&fc#`YDEo6x~&cdpjL^m65SWZZq* z5OYYY{QB1gp-sZ!iBw59*tmQcG@1MGRSY9|t`tzxc?*`}K$c zexJK=_*wh)Yvha(S-b>7zc>E{v?lE*3A)=+WHMgx0-&@0Zz1SIvK!!Dp!L=w6y?%M zOVd=g-x@j+84+%2x8L{&JWZ+k=?@t4@^b7s{9Bdgmipi^7sD~~Uw0d9~-UsDB;fK;fE|)Wd(mO z0=F5v$9?JP|Jn>x3q?gmpNols{K;Lux2&}bhqYs^G{Z|f6U?j9PrmGH$z_sn=;1C* zsVC8MpUcMW-O|PC4#HP0mp}jA^y?Rv+QqGtS)tkp&t0=+|fJio$)p8>voPmBIp(NmC|5Fc(qXZ zwdGK|NcSeu$@AEao41~iE~uRE!jtS{y1xVJP?`VwI5M<9;7a%jx7h1-4yw79zj_M8 z&uno#+uZl+N1XzH`fKbskI9TnYP{jJ8WcG<)SYCSgx$GCu?VAt*!D!H`r z)K2S|cq7jiDm?-@b&Y?55V|^5pv0;2ZG1G?S10K&^mjBnL+g_oJ_>;1ew_~w=i4HSe*5oO zxTrs|#jmgXK0YDjwYMizlQVjF9xR*SWQ_1e;r|V>9zzL}HTK>5z`{zFGeh;JwAjP0O}ewig$=Lj;eh$htFw`Opb z7?IOnqH60Q)F_2+dv>B9b1&rI53o`PoXBo&ZIzHa$2{98OI!(GQMPt1WUs{QcY)z^y|zLN!~Xj6FOXw*J$}~?x<(Ocd`hfQ>weN1fS!Kx7+m}YJL~==4S!$%; zDQ6_)UDm=$JGb1*C>%r4*q42AOb#n(|JaFJMkVu1m*0bY4i78uiswuvLG+hgVOv;) zx}`({!QIc}hzUD&#@xgvW1;r?^nc%UeIS7(3v!0BTjpD3WIB}mU>cf-I~#}x#R38OOYBnb46B9Py3%A0l@!-$gIFG) zlhwEaT7V4=E7GY?T;p`qMN!?iM^$zc3A&e%dX+qN{;Ts<95?c8+=q+qV8e$D18`bZ78dz4&ko7;Xc^IVg zdhQ9tk?Ew@dvlHOff32>7m?A_)($PJY-j3A7qqm2ov9%dS2`EKb3kURLW5=B0ik#_ z6zCw0hxH4S)aC@|{|vw~(NUo^|0o?Kr7q$6Y0ppHAie6QW$MJsb3AN#P~5gUU=B-V z##X6N%h>AS3_Q-k6nzv%&4o_p`rn|##|tRQ^Pq5LaEB9=M14b z8rfl|8v{j>y&we(PU9Ib{f7u%i&N#XOT4!S$A9&~SyuiRwVx)Lf~1$@HOWgAZQ?Z- zSS(4lCrmN0*jpW41V;j2&Sikg``f%{5K<3M(cGcex|fdJn5sy&7m_(O!W28uqg;j< zGr(qtq6%7{oFd6>WElUOp9(4}DujH=C%;M)?dtqLCD~w5Ob2Gx)|lW6{KpUpu+e@$ zW`b!jyn@j8S=3!qH=XTL&S|w#7eSsi-m}%{3HJY+2rtD@$6aH+iD#F^1j`o+=S53&^WdQutMV# za5Oh35 zQjdTAJs*0jlaBAEQ8N>#B(L;-J9^k_FB>la(0trNrFh+6+pZFkmu8i60_14L89BzM zJlO3I2OTPAG(zPlU@rdLvHiU>+Zj2z+uI#(%UEIm4F1zyP-j!+h7p^I6KXBHG0Z^p#iBt@1V+c1lw%3)urO5h^v#cucZZg0A$Sy_E4 zV&~?N4qxdjJ!tr_S^6rVmZ}C{e%AbanKu3d`F$J2( zv?En6YX(E-EiqvKMLVjDq=%r3MB;IWafpll`z(@yQ-B$qlv+l?P%nW~30+!ZtL!EW zR4)1HtP^^)K7ME#EBBx)pO#3#cT1ml0BX{7xd9-vWS8xKH#ap^M))`k+(P!M=oGc8 ziUP3irJBQE;?yu$ffd(TdXb}+0te99@?f@FKujqa3U2UyDT$EqNX?J`hU3D|LIPom z4h3WnV@b`D_G&1R;+2qP^At7bB5uyNdIT(BRp=K&jHAy%bc*KMd7DRXf0oe`4A2tmDT!4hJZ`9#Wcc) zhDRNzRj6dMNd1uXojtdST*OfrQk(g6cCj{R+W zP-J8YZu5g#*U|~H2#ZwQmqTxS#1|%BH3;wSyZ`<9(jP&@?vm8{Tnes zCuxsbq5L+*C5IY)4wzJckJ1ks4>782?2NBK{!=uVn}uG5bD#wSZ$fnk83$NL7=k?P zbNslGR9qSC@51FE`8O>b1HjXo65b~Wea--1S`ZGgu@`@h^y{(?Qugyrh7B1o?D+Rc z@^`snevCDAsdUV}AXR7V*Z8OQf0HO#6x)Vy3_BOFeL?A2#_bl*$=zd{?69 z6OgxMUUUt4_=D>tLJ>AvKU$Dd7(%t?6pAM7G`0C84sY-%2PQ1|pa{WW`h6+=>f-Xb z9@gmv?h=KU4;?~Rit3uL3DGIafvBizWU|D7h3x)nYJ`f4O26rh2>2T$;@(GcIy&?q z8A*VvOshf&p~FW(1bQ8ABr?5HT=!?uqO~~w(J!wjAFxAd&96@gu7OyHd)bSjsaHp| z@$FXx3a`Uhl!g95$!zIf2zyK@c&X#gC7MEEa_y!@+0^f1bW{X$pfI>J8QZ;mtKC9G zF2@r=c#9A=X)lcAQqo2et>E%oh54(b6JLIBB3yre@9pWVRpL6J{YoN~5ezCxHe~Q5 z`9M=1m;x=njFlC=kkevR!?GWdqGH%dFOkM-FHw<>%8~L%J{vaOO4Ij)q4-Fl&21kH zG^BtwI#Z8h{`zb?8q-^Lb&~1AO7Jc}KOYe&kBsg2XIOv0p*C%8$Ur}o7^7z%`0v{P z)5Csd3F9#l;oMwd5yp<;`93{dO%;42mm3@`7mYnQ#fJ$88w+j$WQbKXnfZ^8L=NJU zGZr;oR#tX;F&Q+#KPG{buz?GUNLHOY*0`wQuo}ye1Wk<#1R_Wq0S~gbFqQ5Ck{m&_ z0&YbaEegmSB`NThjVY%v{5h^b>7n+UDV$*GPoT=0;QNxJ>aF;U09dc)H)p`{awHRS zUjAc3)5G%i~~*;_5J#`d^Rp;WFfNZ>bSkdA1BiLX48dn9Co1Ph%xIy&=urIAgEuzdhWVZE_d>_v-b=QsQGIk?qf)*S0krSU|n+iya$K zrg^Uro{yK5k%1n|$Q*s7OwiN0>4tOv%fUc)N7sQG`GaQ(hO=<0Yb6GrlkG7V>u_EO}y zoxtF)*Lo}kFxm0rU-Lhbtub;Eyoym-tPLW1)&^PR`dy9t;nbMnC*$&XYu#Af!CiLU zX1TtI9qo5cAoe>!jM}PYe$X53b5kdLnu^6GQSem^WEZ5LZtAW9=PH)D-~*x>IQdk- z#F7CH+uuWb{99K(n7{84iW^+&%LG9JVH*B_ajD@N?CjnfxBEc}-@ku%;>%#b=uwT> z@DB3B?CVkPvW`-G6qiIyb6$=za&9N66P!}66;uUwVQVlD55S4yzrOw0x`S|xJmcnW ziljcV;m#i^fN0oK{9*bF_PpHRBTX&(X>)JpS=M;~Iv~9EaJ3SqM8A5^NV5mL-rdK?E7)ph_HX&67EMW)% z%90m|2y!qSgx9;j-`0_7d{+IN4RDzMaT_|2==O9)s^cA*?(f?0c;EgMfrO&1vEV24 zch_zdsSm7}`Cv3n7gD@z1m+RQk%X&ynHls`qL)pTs_xV<&_OY+8zPtIzN`Op#gjA$ zlq9-Qi(vn*AJee%hzE-R%T2%a8c8A5de)kZXJ4>!wLop{>Ml`c2H$b9k)X2e9~*Iu zsbH}vlw@8ffD85sXFG{e)I$*=Z+KpU+q$)y)xhT@oHVBg$dW#tDC|I=yrT|)iIV92 zt}CZk`mnAXJ1Sbb1U9?l<-Y&N%9*s!E^GPm%LIW+3O-I`az)mJjh4dr@$1V{kbkHfi4p-av&w*t83G0D9j4sGD{F)o z9|g9G{T#?5^5M$^aGAmsMfZSU^@nE#dK|-o%A@l zqg`lk+tqT5e#6m%ymiVp>it8Bbbi|svY>MAMsT9u`v^~m8A`3>y+G;@COxawWmQ0P8}+7|L zj^yR^uBb6US7;OUVD)XL)A9}ca#j@aUsnS)RAs(R4k4iaEu+x8*GGs!+lkj?SC6HDmsf4s>X=R zCwwvYGskb{C}OyHF?8-S*70~-(=%#C3(qSoq}p$PKwBxlxed0^k`yhN**@3m+F|^1 z`x7ICiDH!2NWvqA=VQ5?p;OXYa|84$CH+UlY4iK!bTsMf{Mb{cM}i|9;d*T z+-zg@(DUnH;6jC4B*({b4UEyx)x~A&jVW@4cG0r2Pnzjv*;5#6ko!UQt8`uh6E({}#Z;pY=X@X;d7CZK4ENPxmNW?NqpZ<9DxO#~d$ z+x!ax?K*6?&j=}BdA;2}dgtsOz+ag<^S};-f4~Uk-C6w9NPk>l*KEFLD@l|8MqF{n zt+VEf3qCjjra1e zc=OA`?;sYPrvcL>eXbl?wI^x#q2IYQlqU?c-BHLN4RaoM3L0B+h zH$8)I6FZWWR;{QtY?p^chf=_Dq`V`cs-}T3!uLKPQ}IP6U!57t4@WqI%Fe;TtJf?b zIyt_V)K(fHgI}w%HMDX1r6P)0QKiXg)^bSJ$;qjs5igZl1Hh24-4kkgI($DO$NR1` zF!N*a`!24MXI{PC5o% z{8C{#&htJVY~aN4ot0~E4dS3711|r2+xNnpC#o-&`%CD=h;0rB_BWQ8G#uNcm+tDggYygGeQYFGCCz?4JMjG(tAk^I3-BlzEXj2i0oWMluOYRiZWx&@!L5$ z4Y6znR>{8S0d`H)=g*&|&VS42;{)I>20?mfu>aD-%j-+C@*yCoxX*?-YC#?yZ;G-h z5*I=GZcY)TGF^u6m#ceAigF@8f2L%cdXLhvlIwBsJ#V7hyvBN~2_FI5!V>LF+bM}BW*a4XW{?_6G$v0%o;#=0*1O6SW>jDQV}&k1(v-p#q78OZIZ!Ze#- znOxZk*tBTzg%`Yekbb--de7(g8aRL;%a=#E6nWw!v9qIj1zx0$1@1?@D1tyHB=mDY zRx^?%3@{z}lrOby9x5rg`|r&>r=~y@v+d|Bk(|qfBI%@4s+5e8ky^}{qJ05eO49?A z&LY@@>3qCx`R89wW~{qkIg%6^rhfL7;miMZlY?F=??sFsKpTeb4xyoy6bYcDU*R%>=W=3@+NlyxI_dk zDm8&X7y3tAj)oR&B#1$3U1gPAg@vYfkQ$D{>S}_avPBhQ#tXzP#ym1M4jMOS83wE<20BP(DCy?T|#OtvS#%EEReeBO5# zGr_15;qV;8`U9#E<$%S^_n2A-Y^b7&cm*Q_$<$|!(b!{xF-pNN=MSR_eCllp~{0jRBXpeiCYv9*dIsc14QvvuNMDS z*nd=UTlxtVWM%l+h8_?=a8Aj{=q^8*P!W+E;(|k+-Udn@2$jWf^k}^*7kiUw0Xvwl zqey=4$3T_!loLo-2AtQzM5&0C$A1&E$G_#zV9^Soh}s3*pJM*}B$$OMM*}#y6&6vYdry+c4SI-MW?AeD(To@Usyho{x6PcNKG3L=*Sd z<$e7sSaG4%eCA!X7I?FzR_%4@{ZabK1L*r6iOIhh_>!I%&K=?|0)MCa?Nm|K!r`m` z(R9^OQFdR~Lb_8x5Ex1t=@g{9Vdxq{x*J3g1f)w^kPuM1^QB|xk?!v9{;t2ZKG&MR zTrQvIx%ZxX&OUqZgK|S+XJ-dg19BJ6!cUBN(mzc6R@Nj?lScXcWB{2d^x|R)Yh9tq z8f3x$IK=sxPqZ{Nf&(6J?V9dRh`tM?Y_6Ur(HyKQIDDyg{1M`C2$gXa`g-_8*$;SOx!Tb+< zbz1E<1Mu;`_nk?dh#namdzQto{XY)0^w!y*U zCBNlRieZgIjX7_#wm3S~-%m1xxT-i3dHSj)3~$0GJ;$@Cr`B@}zeE_UwG%#N49|Wc zE-NmOYd14w&oi69U!~sCDr#XlZEk5H&x2EO+GNPIv^SJ~owRxScbF!4T#qob5MwyA z+5=8f6}%P+e^tIh^0_>qik10c zt*eARU$J(jqZ7gLbc>r?v#P3!DtL-UcI?wz&c^v6rqZSX0LXAMzmM)R1w2ixYkoO- z`TCok;(tGA?SUeN_ZAg^XYv-_-Ug!C9L#y?gB_*sJ}vFY7p|TbB{dDm8poc>O0;Gk z4M1NeGQr>>*jq7|oUCQX^CE?)+x4wjU2(h)L_(SCa~Xzh(d+0%9~mk> z)BYCulnmMKUBB{aK2;DE_(mogwx2e+{>^iLs{FaZWGF#%93;$~GYn^?>>GYE{0n?N zr>H2rP`!W%`|OrrBrP?S9fOAQ2XA%Ni-=GDzh&g*DP>10|GN%tDX}Kqoh+r~fv3Ts zovX*VUZ|&=Y{n0FNbmE-EC1Mu9($5QwSb>O*G2MWSkuLf4S&Hos)?$)C{n?!AX+un zv%!P^@@K+aJw|4lLNAgmbT7HfYpt2=27R^;Z0RW?s4GUFK*jqX+A%mII%#4d35yS)WYR`Ky{`;vnt^ zb7IUy9fy>psLDM1nrGi5KDD^-r}`S(KWXgg*PZGf>z0qJMoUPiP`0sQy1lH$LrK7x z*6SN`rm&u3W5Nmz3JK|68T8GP8PGg8Pdbr@Nog_>RROx^3$*@hQGL|fjEaTok;y}oqYVxBs!iSr~y)Ao3Uf>C#+Xk z_tZb4?ZPCe0Z)m=$ei99I&nk&gE9yYZQJ4HGdW)NH@JUxU+zx)0i0u(5Xt#exx6yw zVwnTZmw7*b1`Ve1ZZ132zVqtVhgh3$ipQBlUQyf+1|0u2qJaD!Sm#W0%Qm33+j;2`<`)r0t9LG&Gr$Z_T9X;R!8_@cEP1 zocDJQE%iy$m6q7kzm(|W{UmK9U!|Q)=;>{3ZFTORZ+P>wz7PbT{o5-7QeJ!VQLBQd z)CJWRwKl)?>z#Yg;-MUhE>nn^aA(`zi9ZgN9*3FfpAOIyR5?ogrw$9JUrRIyUiX*< ztZYQ5w;2WaP=+gdO@3t1(3Bk4c(`fIa#@v(@Y;x7jQ!f9!hQRzN>;$Yu;?S1_v*{% zqPJO(cRgkQK_|~I&EKf0Mo~cPoncfF&X)4>Ha55;(Hz$M^XgQdT(#1W(Z7Es7`TKU z0&V4?s@<7F7gJ_l!hK-F$uWf(BAWp1Q)zMm<+bpo@4D2(xvvUyrZ=v}%!~iEj1`}^xz^J_nps- zLMhqutL0cu)$h1N-)#Yk`>d=neAH!UpAa`JTG@U`(HC$lD8M_p27_Lve9IjfJaEL@ zx8J0HJU+bJkG@We?rK&4w7G;-!c_kQn15? z=Dqnww$i5z!JZ_>yA!V^--}L|w|(Y+A{dOr@A7tfC4Bj9i>rX2glA5K^I1RT!;#?1 z@!a@Qg{j#Bs=PB6^{b=Cif@pW;z3redZOOkKMn(mWngyOgUUHGb!_D{?qgQZMe_rVC3I% z%^q4=T~v&(ZQt|zZq9f4cYjxg3SBcYWvgtJ70*YUJj5D3-e~hT%fKrDcPzKYgfoQ0 z)1Eg&?ik@PC;savVFBC#N5Aq3=y5vnX8`FNkRYTMnN~9L8L;l90^XiruUX%-pE%DD z>@vFo#}c1Cg_M+)v6p3nWw^p2vQsCY+(O)SmM z4VI{OE1NQ6Y_3TZbFBDNiaf_}Xr=emgntruiB9@Ep0zK;hCk}-`7OUID;Mb8w8^`S z`>wxe3=lphc5i8>NE=Kd9;ke;ucZr^#p>UuMr7PHxoHERD1|;(M1UAxm#zeSg-`-b zNc=>n+ku}BPP3t-q!)iACZ<*r(c~UeBJACW#;U7%OB%a7^3K z2J4`^uB++zTRPosx?JIo&hs}Y^V0! z^OaKCr!6yOCB3{BT0I)(eqYUI$#$EucZ$80!!nap)v#dGPj`9!6yycnATJ21X3JLj z<;m9*1GHta7Z(@4yuXn|q z{tmR++ihs_n`>(P(A^vN#-EOcx+uPZY7~A)mc7mkrW9Zw;ggbC+kTHZ9=r9b6h|?K z=2um@>L8i8E1LBTWiT`wH<=*l7W8YeI@oW}wl;=RI{q@MJCm_|0@K7U+TU4SWUt@a z_5bIElyAcB_khZmULv%h9W!3MNHVbiu4q%I9THpw7qt4LW;RDdX%NBhKd<%TkGdg0 zYHNEis5;fJpWK5Sv!J-xX3DSuCuanuHK*y3M(}ReXt>;Av1M+dxCj2Z%MxQ|hV}_m z)pI>7deyb@G|1}%4OSzK1M9-!Iu1xkKcp#Yf~)E|jPNgy(vWqGOdRM23S~|P4O^?c>Mq;J zC0@U0D%bh8nPsH zTl-%%m9B5E#}wxa*$yCS1gdt0I_3(?d6Ln<`R*wUJzuMWs=zzPQBJWH`+!7&bg#@uOxt==FPW7OJhsLkZk_2lJA)16K z;K!uppAY($f^mCgAIFPKLg#5^a~c~PxAG{>@WLeOc1sR%P+mB<9569jwlP{_6kh71 zpcl+$#Lvqltt%M)(YX2s-B^yqOzb^#P)=umS_}UIgX-k>1zxy=AcEjZbwBJ*>JUtV zgn>2rXB94MjT8qVeBmw|Hv+Qx5HV{>LiJ7NcCN^D8=&H}e|Wg0cj5~nVu^>PfC|Qx z^`0cDrslcOwYmQZ6;Wac~_bT zMxRH^>Ej7rA4$W|t4*Vjo?Xhgo{uSX>*Li^`}NnOU~d*TI$}!eDo3LUrkara{reYK z=@k_@|7Zqm@a?UwH+Wbyn^!Gy%$23qWQ#X<^mV5p@UM~`b;2#5?L1O^eWDIim0V`L zfH<=zy>u2ROYSyBvEaKz;sl3_9L$#sw}{W%bcm`0vSOQe-A@g+{(FAi6h3Jb5D8FG z+@?|q>R5)FQF59JvmWY^-Lc_xc0co=aRw@h(=8OCe1lzxky%pH3DvD&Af*5aZELB zb{~M{rCGeWmBMpxms5Xvl!uqWE{yXvHTS=Dj!R8y%V3W!jg3A!KXpI?5N4fvcTw94 zh6O?Mf!CT*gyML}9>?r!rH8{>QTn;@sDuJLMPSLpa|pl9OyTL{+jhMvlfLwxx8E2{ z>DWtoXKia`yjf!Kfz*>a_3X5FSLc&{JVE$?AVQySR2fL{>0lI+UaSk~XgI^Ebr)`mIrO*kkh} zy#!76XXA7Qy6O62#?{C*G(UN~Seal~T~S+Q;iXG;0|P}%OM0N&>hKYza^y3R=r9nv zE2caSD)qO2AKifStN@-^%k$s^?`bvEo}R{`m>SI3@By>Bi> zl0XpAit95!aLOv`XS6i>iV(ii;D)M}F-Hs=xC=Ox24JQQ@-SG*#YyNYS6=^N(aBFK zSRrp;X76UdsXi4p^6=m-Egf2_zyF~(Xc|9=wZK^ zXTQ75na&xC)<@bzQr>Tc0% z!uUzDkTc{!9NAa^Y9hokCoJl>#Pw^O2 zdudZxF|Fb5Fx&noi!aNS6SSwvo&QQvtBbYxZDO^@vWHV+KXHdwZ0+n($I6(uFLj(v zRPx`B+f1&wZus-aqsToIDSF%gRqEZU+^JvqyuIao5#im|E^mDJtu3)kDm_MI4@dMgT)Gy*)zBe3iTEWMbg`6m9**tw%7^?_S2>p;) z?k{68oC$hfJ_=dGWT3`w*Kai=5vX8xS_z}ajHoYa<&=ZqS*7x<@efOSIlw^iIOo)} z?RI!)nmmR0$=YmsioxF)Q^LV zZF3cBkjg$&R7d9K;?k7l#h7rIdcXT{@5K~K3v$G;lg8VY9xuy`{@>g2UVi&@;;{@- zLe2lB&Wma5p*xg#$4bf%cON*Ot3TMtWyxUB zM%}pF^vLdv41;vX_G8cH7Tf?W&Xmr5_vo+7#SDj;ovTgC00 z%Gz3E3~OYT&sAr%Z`=^qNK+fB$zWzn6xGRu{mD!tlvmNjjgEX+r*)& zsXoq+SWn_}F?wb%^64fV=Dx;07rG5_{3Y0acyLQGt_hQ=7`U4GSaQ83dDe+rBgpcI+AaT93#1ZVZ+(y2puUU%aA-fRNa3{8d-(S|;%( zRX`B~-(dHg!X4K{b;0lYte|uqTq4&OLpb7hdJsI!iN6{+k=+rWM3VCI^V26L>=B!% zQna!S43mehZf>f&y4`@pD0Ro5ZyhHC0dy%z718kZ;eZExu#JXYyj|KWj*$B6j+s0N z&n^hMq?+jawM&{`C~7(rS3eCgQ3Ew+B4x{`(;@x#sQKHi1FUQUPX}m{Y+hWIM->7; z`Z7Nk2?Z6J6k}e`CXpcnVP`>ySBxO6frsE=+ncl+TPkua?45Gb{JspMra;M4i?|(2 z+pUncl!DCO;2Yf<+gVv{kAq79`y@3hcA9YzWq9*|q0Fjwkd=D=Nfv~;z8}qPY7Op= zt+aqdpnRMJ07k-d$~=!(Oh%h54zqez89(3L$~;`u_IMt(A*1i5csA76uTvN+1bN|( z_|W>G_=+eOLu5CfXx1le0eBjSqp_FHy`?qkS!LC5|3*7|0WL=UaW@&x=XAqjX1MRw z%rJrvWz`?v`Q23{Dv^mc$DSMwM=t_=!tBin8n&d~xBfdwFR2_;6oUQ;i$hr9zPR=2u^Z z1Ovf36K_B&tbm0s@h81VtO7@Qc~l-fTTXpmWWMm=ubuZQwX?5nXX}UpJ9E^B#g+3$ zBDtg%M0`*KtodhoTT|l2hAb-onOTsM(X-o3{HChplmjGO62I6A>R*)i;4z>rce_Z^ zKT`ASxJV#ZIw z5Nk7o1WUD$+^wIcJulf%oS6vT$cEUU=m9sW-UvxN0ibVqCxG7zZs|eLE0oAl9TM^5 zAkOk2vYy|1hw}wzAcG&wW#yc(o%+lplcvQJfMtw|j^N_J0ASxc(U1jRB5pxvx3YK1 z+sjx^kI}7zeLcg&@a@c}GWd$)e5Zf$r|&M@1sa^=8K+-kEg06O0tZo5{t^-Vwy%<> zAvf~<#ajnfKUwN{m0w6Kk82y5ZI9)>covvV{OaOeQM2KpN$oA+dT&2qKDFInJ_;PB z5Q@)HV$>{TISquzUxa^J0GWJ<3{Y~|gYj0Y?`2tO#{k^ockgL2@SP*)S^aNwVWecZ z=8N;6??HwNK$}g_=r?N%glPL66ennEtRvw-Rlj~|sK33~b=)kh1tqp6n{W#HFn^>> z?&ceBO^`%l2F;|twNS{AL1bFsh5h|nG#Sbyj-r6bsVVwwbbpn`H8Ht{bQ&nat?#=4 z6}oIMb`24qawZWf${(w8dqdx(r2CgD#}FmAP>RgBabpY-}m{K9lrB_yj@&JV(S>W-a0ojJvf#}BWkY~ z7HM%`T}OfU76vOI*6Qlt@gMHxb*`eCL;F`Hbzj^WZVYEeA(ofkOA{~4xJvx~5|kzR z^&C=W!vmsVm+x}7^3tW(C^{kh^+${+`6kY7`~~G72fb$m1d!9Mfh1+X~s%>3hs%AKRoxTjDb@(|ybL*IQO@L@v6 z%9bNrDW)HXmp-b5 zU#iKFYwl&^B!q~%I2AUsd|$R#$k5><(N}AZbC(4y+KXo(zjQ@6k1PY-;aF=#K4NN$ z&(^H7g4wiOr#$bB0eBX7M)DdOIksowtTcjTv}b3hC`=;!6L@X%xYshvr(O(kImP$fMA-e4md+^5qy z#I1P>3kKEGj*aOF$w}TaeqYgt_#^SMk~Q86f870;LUd}OY`I=+ zvxSAp?2FjL;%U7W*fjJe3|Ev?GmrCNKz%2^ZRO275cNV1D+U=t=A|M)vO+42;F zRC&@Z1EDM$xsLHjZaW!;Jtm^Op#8)ZVm+_<*tyVpJYRZ?6+ zd>-PRBcld}B-`@TI2iV1`TG;gWj^BrfM-$B%7Rb8P@U5_jfES=i)RVIMTf1==M5Rp z@69-QR#q;7sWN6KHTJ2B{F0IokPxoq5DK5&sp;ze0fir}@d();1~e8HF@08gK+hzt zF8tVMj%P6G)HvT&lS=aj{LK*Ptv56@oP_9L8f;c5&kw9rvNE7-#1sNp+)G$lWD9m>?I^4kr=5Du5}CKD}6NH>3m7YJu#|d^kKhFu3ujM z$ZHO4{cviU&ZQtNsnzR#xO|wDk4`IW_fvXn4nuHbqfXPFZ!nHks#e*1B^@Hd)sIem z^R}~1JeDHDf_?|rn~z<{qMjmAh7HrP5<3_j|LwaIv%wn~K+`6IwISx<;GpSJ4aJ{2 z_^NqwxAJov^>^Z@emIPb$2TzO4fWEi{zJW_u76z%$7LtLwf+_!m+-H#Hm&{CXka%o z({`pR7S4LhZeWn%wM!U`!z_G>H`I7HBPI+W9gzS=(c2B;(fF`*2;MPIYynDdFZ;?`~;pH@&DACJ;(_wasy1Sg`WNo{C&iyvy-G!BpgirlQ-plc`|5kHJ8|-fJyREz4 z7{<09I(Gzs+Qs3bvb40clMB{|%zy_kk+W=hG@$iC7`InJeQ)F!JGY%T(`WsD)d`7Y z`ki6dHMgXH(#1RCaFe46;c$M>s~DexpySBSu5sv}iS75JMCJEyvo)6-+IBjeuRs6c zc8Vl-y3y-XEl^~!8BXR<&{RQpD9~G>ppHH2q zc?RgMAP0FJ1$?x(zh-(5XeLgh;h#j-X!}sN^0QYj)`kP$hPMNDD$pi0Mt?0p%+D*b zlRz?*h-R ziuCZEnWj~n%F2<_hMiSFl|LvG-vs&;V2JVBeI}Oy8JJkE-RzcH=^X+U(FYphUXNK`{JvGw8n5h&fIr7|E=N$V{*#(d@|O= z_Xby7Mcp6}zD+K}Nz(_eS@hH|4uYNTHdnzEhQC~MDLO`tFO zi|S4)J=m>p$OnYbv{2dr4djE?Zyn%EMd_wI&yE3564aMLk`CFQK)L7yOtOyudwxlL zv4oj%6Nb1N*k7bm;c3c|>as91LTD{m--+;XvX^ILNxr%!EM{iQ>pbk>`g6H2fP4SkSMbzb_I#^$$8WLiFDGTs1u+JO0CIAa;^ z*OJ{izspO{gZcn0Gi-_2?>|wtXyPjLcd7eoTF7teZcz1a`i6F>T?Kgbap{Vxa z9rs5vy7fQYpgZiy2Oe>=Zapc$a=yV0WdFE6yI~Tafw^QuVLK%5wAb#h*UoZ^qD+tQNf4NErr)gtcMkrCQ&eUnTh0>+s~$jWio+;kyM< zXPk&GAkfJJ4{#6V<3_8npHKUzu(>-c5EYv||BU2VX#N>S*$~cD(hB;R!lolt%n=gG z%0sQS(**kV^fX?U9bDi}Gt=#nTBH3_5O&__qRUz|A4?U6du{i$b~w6&yRHDV;s**KX3^*PVg z$bak+Y1<>YiC*B)xwp`qCIjKLXg_KwIRz)j1vm$uT+BL9!JSQ_<>TsZT#VLpic2WV zEf*G7-?<7G5SR3#?Vw!hRWrJ}hp0pa^3TUXM#l;1Ch#fCCX#SGeFF!Y8OkiG+pU zF2$C|d!MTgN`FyL3CLyQnP5hEab29`d&(%QHIuKEg`}zT{7ZOQr_06AioKlAncwG2 zj=R|W12;2oH-F&{6R3Se#v%tU2jCz@LDx;8L~PAx)Rfn~usLTqaW4jLJQ@Q*&{+S+ zlE!^KW|7UD&+i69%coFG2tDoA9Ohq#RhUg0#`S5G2EH*L{(^Jri4;yLy?70oGF>_uV9=P{r%;F$dlV4nHw}&56>c!4fuZ0vJ#g8()q6M zNxb&y8A2I^4QX3XOX$wU!Mr>Ozah)F+qqzKzFNFpxI|m9ESL>KtheFuPY%9x29;kd zb%BZK@wJelY+MOa;ls$JzCESyV#>&5>SsaWd|aG9zA z*^+dXxUe4PA_DQDBAN15Cv~aDMjO9&(Vq->Zbbt!$?%WmMh)trIeew{)U?*_;KE8N z#nJxo_6bazsmjy+r=P69)4eND%7HAA9aBi1WCZtP^-;Y{V z^_FSA5AUeOZu#c^rr_lSIhICR(kXjUQHD)xSvq+Ajq1`3<|KH?V!+u?%7598eIqEP zb*a*t`9Kr~y&DDsY8;fM%iG1;+js@K`rVSotE|WRR_w1KYL1?xn!FWzanUqP{lB~w z!*f8_B*uk-5zfAi6&jm+gByAd+;zAVy;o2ncqp9-}!$pWT-94+a%Bm}O3@FYQ~d zPnq@Hv49cd>wnQvvYzu&_+MLP+3|aLIGTP*`MNP3o@~oiSHNZ;eHJsxdD*lE>;0PI z0KW+%Q>HKE5Q@|OHtN5BVY4LrrJB-vZEisx79&Ne?%Dd~sK&ZSWcYN|&HA&-3_HLN zHUb3bwFy0kpSihf2B?FtLd1N01n1}HUp#v{XMgz%@t1;ey0tZtkV(t&a(@2{@gsGyg z+1A(So1wEkTMUyfn(aS&uy+b5{9|e-TcfPEyn3oEFsm&yy;8vi*r&)l-?`Ey z4@y2#4x<(m5W#z2HfKjWtUXV})2 zoZM-CxjD3m*;E5}Bov=ogBJDjy$u=HpkbLJOYxGZ|EiskZ)<;Q;&Ap_xtyjZtSdZV zbix0Vp8Yj7Ix)p%35Ibj1Qo&cueC~mw(Q6UfO6noL!(vZ!B+v!Keq6hWv2HIV~y?f zxA_ASf&mt|coHlr(}S_V=m@vy;|?f-lCqPu&lurOT=#Yc7-;8avJ)V74noK~8UP__q!dK(AfXESk?o+0QWe zJza(bkaVuZ{tC4nn;uYGb|i#hDx{6|c7}M9r%G`q(#0y6LMH@cKO27NC@HF&SIYF+ z=5Bd3dJIb49NH=*h)7CTwDuwtF7G{>Y_D*v7iI_-hx|1d=^z&WG5uQKb^Tl+RV0)+ z%R3>e=1oyj>#2n1c+1z3vuyY?lW=vb*eNkehPQO5WYD z0Rju(*}A_gj3?#ue_)PE6HH5WA_UAY0%#i^QJ+K{H(Bk`Y^%`F#OsvfeEzJ$%P66v zOYY8`P-Qb)C{gy1`uI!f!0_zuVz1t596bK)+E?GP4axTgF$r3v*lD-G z4o;tyIPm?_*Xrt)*^`kE0j5AGcy@M%F=KZU2rpUwjV?N~dG#wbLvvVoh^^Iw-q7ex zkBE*34{xo1!B-7%mB#@}Kza_t7&^HwGlT4ausxy z4<#kLAFPu)?@BJf`|>FgL;CgWqoMwjTZ-R(HPB2zvs)o{Sz;fuR@4a01y0FY4V-! zIP=A`Bky_sU9^fZe9X$b)(3_A&O$H71nHc9>Sflr56jSGh;32-OyZ+?S3Gw7)+=vU zg-JJn#QIpg#Gaxly2A2vKf3L`F z1mnPuWUKA8_jp&Qm7bJP#0gGp;T>)O3W#+Im1VR=D=-xi%**JrSxI zY4?xAKOafwGm!rsw5g+Rc?kZo@A&xh1L?Pk?VG2-kqhr16a!w#9I*Iu)e3RvrynFU zl>nAU6K|-ddH!ptR+`!b&>L|5ui-{xf2%5u)6@aRjPQt&vdUw@HUt)5+(v^$Y{`vWx09oengL#{_=D0}Bp9cy*t!>K> zN#Qv^b_Lj4?>M7{FSI904CM7@{ei}9(Fa@e`c=bFReg^Wm@Su6;)LcNdMdnIUpuW~ z7_bcWf5@0UMv`+TB}jsqsN24HCK8p#8=s<1ud20js5$Wrju%X=dU0T5vfo{6Wi9-k zGee3OBcZL=Ii$)0Z1eL#hsS0i0*$C(0F>m=4}I<`aJhD?U1DPtG|jS1eOWH^)m*u0 ziDY6grG_~In5tw3oR}==UcM}{pd9m#SXhx)L;!07%Z-5)eeZ1;IHNf&>DSAy7`+wW z1}%WKGzbt%1*gLBda{twOB#udR!Z+J<-6nP0Q2F@dBFQ-7fiZ+Ivu3DkS;vz-Z zij3@MPvvyUg3Q50-UTc?K7HvHEt&=VpY(X7&ab}YFxW2M(G5Q=9-?@7U^d?lS9 zT?0TdhyhELlTP9Lr%^H%zI30odqGgt&)b6wHpiMYH6Qb62^qn5oe8SYpihDsN&rCw zy!1oqBp853+5#Rg*??$|;>4@)SIPQM-nsD7+;4GX;ps>n;wW*)B(=V_uUM6p+J}0; z&NkHe-_9QY&}tBu`_xq`$@*k;*J1S=x`@zTj8A}#;M{!I;=>X8f-ejyqy)S0O%InM z=p`DKCez9%{qrb!=XGLURNMo!^P^mt29wfrYVSxXe0VUjWFTL=a)2~&Y-Xk(FjAqd z{?CELfrcE5Mi$S#(NBj$zPpU0Z1(kE<<#yR^`VX2%AuYENAmKW^Vl4%(;+*dqg98o z^43?Hn&=18?wBtLs!%!1A1;||0lwwgEYc5W`UUuFJAb!@&PK9s-UH88m&^G}$Nm-d zuk?8L6Gq~b2tSvW%Y%715E8ryVtElX=;y;TR%t@|(px~$%Z(nd*WiN-yC;8=u^h*qB9J*WB`XxQ_L$b z52Te>f(@nfb8&I07#apH{#yc9gTs9Sl7(i%Py+G(iaBCh_{JjkAHTi_e=TM6*DpKR z*%d1f`LPsh0ljK#%XqTHpy{}KSLpojA}E7Dd~C*V7gx1a$O?Ey*>tDQH&4;j@}x#c z70_zN3JGcr-B^qA*Jp}}FZR(h4ga@vgd>MZknI}%PY(cF>B^zCjFpRQs^E4BLo`(% zU}j#e2H?+CRvPaPWG4dyDRXEy=$$~Jl3-GZdcFeeV6I*voiFy}#95zJ+vsb{M3-+vw4L51-_8bxa2kX0hTg zrL}kb2Y)NA(uMG&**?Kiq-nMN-linGFfRoAr`n`g*~=F(VA0UJXo00bCv~ z7GSm*paZA@&x=YcrGlxMdc((N|InSIi={zUgh?8dR@YwrgFqG1T*xW1vNWgzOLH-5 zCoc~UvTz{rsNOlt3%W^d9Y+;8BjD<`nYCE(JchbEEPhi|4K)v@{1~H`^aWVPR#hbw zf#i61H-+DY4xN}ax1}X>Y|PnJcop*!d2)Fnr2~qvl^Xyqaj8V08KYI|4~mC?j6Zs{ zV`FizM1C^#$57iOS+BVI@ZH8mzq4631y`%Kt`=}KLcu^R)hMSYvyGL}#iC@5jN&rI zt#7`QiI8`U(O4I`8ls5N zzg6+XhMpAg3Lw5qNJvoA)9V2DPKt=105^B_m9NO1zo=3{Wi)lQXdR{g$eGfCV4~b8 z00#hv9*}^60Tw_b;3Wov(=C32$XHeQky0RlJ$Ekm3x(%LsXXfbN)3u163VJ%eIUsr zO!SkR;)?uvaWwT>iJX-;>#-aAdezUPa(z(K>SFZgJ?PO`amhiU{6MBkD4(1e)nPIm z(|vYOP_mngc$u1iPG||^@4nSmwoDlS!R?jD=&&`bCUVf$F}y(8GU?6M-Y5-Ybp`WrFFQ)FvzC zR$^rY;>M&e0o?TJRLOYbbNtj~RU)CXkc8vqkcpq`;c zrR&R()K*^1pzgxTs}b(3uKnYmQ?>~S+E|%rZ{GctsT7pibWcwYU(ujSdMmC8YC3Ad zde$%))YJDtm8HSCK}g@J!;U;)re5g$C}?k?f&Zsf2=oc9EM9mHV9J7p7@e7EFVZZQ zDL{Z571&nWd;G9|>)tpa4_WPAcBGcY<4OC&yO-3La(>ns*5fnc_H)>#cVnyq?L8=h zViuM+^uOSsz{TTWLWZJ*t2^I)+VP@9_x0tNie%~IuaSR{+bx$Y-1$!i-ute&7@4eB z2CR=0D&rq~JX|fNC?p9HGcXVaT2znkU?+u1C*g9qgRc0E(edsL;`G#$R+OeM>cwVKu!A6;G@Um2I^~Y3!R*xfuSN2A3i)!OiX<7j27&9Aqs4e^Q9^Fu_IlO zVvJD*txFy*y+I7*{;nu&l!1uzk>?Z_M*y4{#56F`7$1NX5gN!LIyD3RC=%?ywTVzaT4#gme_BRyK zi1G3H-NDyFn9Rw^na#%c&9|yI7vJ;0WEVL3_;M*_^nF93=P=n(*r8YGI&cLSS7GO^ zO-mIH5mo`dgY2v25_cu2J4a=dV2T~tWQEf?d~dEI(^VkSq84mN;QpZ!h1gMyUF+u{ z4QT_`mn5S8LSR&h7omCgfAPoO&B5Z?B0;4;e>M-J$QK}(b;{nbeYgBXmqnb$n2GM; zW||^}l{d?#%p$9k6b9e#&{hivQN4`<)s`pn{l9K|oJ3Qo2DQjml?a?mHiZr|-h$nK z45MM@veL4L$lV?~JXFgYvlVu}zwLNvo3A-2c@a(p6Wg~MMUYeBCH_YfABOtL^ zty3Si*to+#2I1lzh0&9O*{(89AdcE`q;8+Df9QYN{#1fN4jjEV^~zPhmz*1-QFgzN z+bk=maA%<+EGqXtXrFYW51*Wf0;d)|oGuG8u1(&*Dsw)HTCpsS>UM7<<1HQAw>LTM z4yf;F*QdOj9~9(uZ~S~dDInVS&rP=&@yZ#nl0&`dSz!;d1=+g-iVhBIf80t(D*(i% zLcG0T$})KHMnxA~dj&8Db&AF@QkAyM;k3)!`@QMPf?>qY-kwApkVEjDZVt1dY&;pY zqR3|pTWG+J?Ws(>8LIww0~HaC+f(8i-Qo&`J+X2}F0$x3@(la(Ay=($A&}?G1P^{a zNRmmh@z-7xOXj; zob@sWx+3K*Mj+Wn%&)|GRC9|6*$pr05Q>aCjw)fUzbC#sev#eGEnm=Y++XD$)R57ry?NcI< zM<8MekxWouXt81R|4QxF+g)4=r1ZTnD}s}elJZ}##e1zr^4mO->YjD0hd&g2|3I-bJa^TaxDCUrFFJ2sHEuyC;outas_Cvz65PBq+%itVsVJesRjQv-?Y~)c>{!TIKr6g@{Eg ziSW!7P4-zMB65*#&!C({>gD|rs080hInCoNwA#W{<2-z!aaAnH@%n~SdAT0I(1&B zw~^`=YP=?L`8M8XeifX>wAfnq9&9&ZGj^CL*eC zGH8D~xNfRINC#K5;hgT9f^xGJ3jIah+1BnaUM*-NxE4#(Lf*uysc;LjM#~B$=F*eC za$VaI?2eq)zEw4Zet@~LR7UB2%TxkFj4dmhJlHT+jRREL$0o)+2iXMGJdYPS>MT=o zu>z?m-}(&`kM9E>-C%l8!ZbRGw&>GF#Fu>7*BFJ4|F&4p&Tj6l+&6#W7(zjdbb}i$ zoaz!F7t=x-E^XB?)IEE8wNm1{OoOV0=Le1r;N256G&q2=3&Qw(Zq$*N<<@<4epCvc znNhW8M@_mzm!V+ZD}CllmoR0Md-mAV)=Pcv9f1~J1ncfDawk_J{@T)CPEI<1``Pe6(KTw_2_5@agHM7x*1NZlW8@%Vk_{YV+f9~*ILV#@8RBtkPlfx% zQ2>w^85!yKxOjDp*?S^r7xs_X7c%4w#tAu#W)+!Ea{lpb2R(T5(0u+IG?r*uRRVy) zMZ))~5*5Y}_-!(ne$=Mj9fPi-U=>s61ADaFJGWi_G*QG#8aaC5$DB=A$d7TgiP_=>lT4;w(A4x-IRJPdg@^S2xCcJ)*ZXk9%CgB*n^MZ&x)nJMxRH-078)$-rjpA%3HxB?hqj zmN;kMKs?)`kW4v~?^5~uWs9UT&FVXQO7u$F7DV@3`1G(V@)LqC#y8UuGr1s}ijAA2 z;zBRzNmi{RZ~p5&jpnTISo*3Bgd zlD_mD9@^Nrdfkz)>iCb`e^!u#z-3KHoAoinUTkapUq@E~4|gBN)#+xsPK{w=YH|+K zCpRXhySt{&IW;wHP9J7+Om}z9^rj}KnVEe5ULTy#onQQa`8?kzz8(tuE&#NK`j%Nr z1Z=pQFd+=oBVlM}Cf*rAn9Ghq+dHyibF(*@cOfIfSFJWzW7SH-Gm?OLZf35^MZRVM zu%%IcT$CIaOMW?0H&v`$qJ!DdfJK~65IKTe%hPfS$`!fN#+($szIQzu#r#z^Tz8-C z*cBqt`!0rhu(=`4U@(`Vw28fpU(FmiC;!kH{TUPSG86 z3hX3Ds*a1NcF`t@Ja6}P{+shGWO;Az;HN4@z^A?7U_&o&k;%20PiNWN(%V5R)qjT2 zgh5D{OincWHX>qdczEO%gS@Ya(wf>t+L3C-f+DJH5oG7$5IT!LWuQ{u6~m;hH6Xwa z_}O5r^mM&sEc{eer4$%wRGHHihB>xzRm&(oDO_wemY0|QO79;*q;-!wE6AkDRcNI} zuED{Os-Q-^?zJ*Uvhw*~aIy;X-LCuvgK6N;3|6V>+-LUM}EF(EL3m6?<~lhP9{+PA|cxJGuOy&CQ@DRZBz1^NWkFvsU@Eb0;UK7f({@bX$yY!=_L10Wh&sxB^ys z^V(0Fnh4C!Iz_`eWl)bQ`zU?pQ@g#A>D1qy*s1yI%J2{h5+=02)W%-An3&g~Ks+~C z<-YdSkT;m9E3ZBgsH1A#gvv2b^lRyZ4sxXD6#W%Bj1yo`PT%~mPB_y70v*A4S@aj( z3{)@w5|F609(PN$o*|Fu+$~KIznHYdb=vBWlpN}P-JY+VK#urA=WNuh0Y4JwX zLQ#-8!R>1ERpgUeBL0G3O|%_bK@voBW1XHR_ddQpJEo@SpUjn<79@^}cTMAK8R*ke zokQrfIxHmkpW{cpgFTH{<@3eAx-8bQ*1A**d^)@}8nJyUDwesg!2wY8q%nK4-d+5< z@AS$h+fL=+Kmk0l+5pNNI5jsXRy_B|4zc3Fyr1V=%5V}EhF)&kA)|H9H_~0erhgn4 zU~+U)oz`3bte8G`+rRzeU*l3Io>!axO{3)Z7}-p0Fi4CsT^5)FZoV}ROuz4laK8^x0b<2bW0Jma3@xudx@tT|a(;WT~OcCbPVkSjV1c09=(R2c#FmZNvjLu=-CITft@Cqq# znoK%(%=ie9f!TqxD_Gf)(jaACfR85aKx~i0>WNIs!n@UumSdA9&r>qbX#s#&3IVvb z#a{lKI8stk!2`lU2X2CZT#h}Ebh;@!-sje*17@@ja6baJoyO4^=Ze?@z!Dr(gxD&D`xa62Y z=x5UkfC(y`2aHOPY92Y1^Dg|pF z+uV>?p?(sBpf8ErXfCC@z?#SHP%(WKuvw5m*&FeO&2WRpvL2sA%HA*mGI;AdVt`C_ zYGEOX!V8Rb*!Gv{-Sv_$25Gf3kG@cS5j#^rdyXo~ZKz`z4JF){tsY%KpGGS&2Y;ci zTG>l^exuCNI8nJVpE$jWo5XFKS4Dl)cw;*CeJWn|ey@a!`4!j&?p(tN;6T4z#C*N# zaEfabS(5}erR4cX?Bh6;Dten-1OJwnFF=cNs?NFY(ZH;}7jyRy=R?$g&a}~ z;Ct>E#zxH&Hf?(r*D`?>R-b%IMKH#m!Xz^f|3#}+wUKSVJ!irNbAIKH8L#)_<3@%r z1)q}cE2mgMi}j{ZNprRmUOQep|9nMs`olS+5f?^mr#AeV<04Q;W&72(xgg4s1ZngT zlUo5%S7U;SF&6SzW*;S9utMbr1Bp}xiPY}aD-OSJwA<@2Uz7L`(?V%doVt}e2z$g! z#R#)OV2uufbbEWKrtO5Gkq~^y40@ax^2CPMupXlVhwh~NS;CsD<_%s@+Yh$_K?T++ z<5HdN;n0|6YiI=!mfHG0R$U@OU4jTVuc(e;0Qrs+D)IZ>sHq=T*%rS7J6-rd9B(Ez zVb7>9`T{!J2ry5?CVl9Z`;8^7EJiAg-QVR>ps6@_w3j!B|!`_}?$ro(ZCNv=7&Jz}R zmj-WUaU9Q=ugmg}eynq8Pm*x#hS~0@@+hdOuKF|S&MJ51r9gzKl!V{HyoAE8P_CV1 zBd=d%aV~q&?Y>{}G~(Ix{qq5vaAf#GBmLO8BbgeW8^cKy=4THg9D$um#XQfPHTj(K zGADL$kqkzRgyn>g_rc<=Q*;24pf)|Rbf+jW`~8Yvj}L1#GHOLp!;uDoHxm7Vn`Bs5 zYjMPT?Sl?PxyLowJR|tyn3J?$#h;?L^=wwl1y*#4th}!b3{-1$7(mketW-twhTIC4 z99l61jNE4CO7+QEqyj~~$0#?iE5pgn=RTTjps#dlY^IASFxHPpAZb~Yd91ZT#8XI& z$}t`{6=4rt021q;scMf{mS62eBgII15n1UiN|GMS3WlpkbI}T!qQrG^$EJ~#=dJVL zJM1L8_l5GfU|kMXNH=Z;C61b-oLos>WT6P;baJiX{jUmB2yP}F9G9qx0A1cOCtr8+ zY$CVQ0|p`Vsa?MT!xKNfNl>heHA72Ff%$fD?f6GyY4Uck;5>XnaV|wvLl~OA&b9Ne zM9XZ@L>c{?g*huwp^)|m@|S+$RJsr1lQh4C)>ja_diWG0@DU^&1eQ;Djv_5zQjwd` zT%~OmE;7~6AcYK4?lujk*JFd(y<=fHzSyALd^J3K0eKiHq*!a>jLG{6s*wxm9=YF{ zMog>ib2ur4^X>H6jK^c(E}__&n6Cy`aR93bKQBJ1o8JtT`2bxtV1e+;SEVOr6YN?7daNq~96ywo~5>JmV^(Q=h zEa`Pg`w|>L49ak+*X-mSBG( zs4m?k_{`9;>lB!~>S#9Wyu9B|rf=!aGi#5i*IxbmI?KjHb0_^WNOpfaykM)DwkR2| z=z~g;PPF+%vT_OeVA1rT)wEk}g1SVUIwz(W62kd62tVg{_lOm+N2DhHbm%il%|)CV z`{m%w{Rycw=6~Fn^E;kYW7A)2_}-tFil98snFf)Y#jVjHk-i(^N`tN50~6NBCcIDpK&I88 zlx;9ll@$qn_?@f@2L4Ef{sW?h6>2ARhp=>_v2=#ei##FO3YIdF)(SxCHdA7)KEMSY4tUNDg;fPhH&$)&DXwf~ z!X!J&Bs&J+`!zeplFt`Zp z?gARg;J@6Ij^Ln3&Iowon}M_-jTdHl9n?WTkUIy55K~R+tLB!exuuAohfmM{`dH>Q z;M@kaDWk~SYrRcY#+si>i6witzS)-CZ#r!iT+gDIDSv^3R~BlDR=D%~Hi39MvP~4- zP7|C-^Fl~az@t#$iLq>>ed6@sOI&rDVi8sgGsA@=KKhdnI)IrdudWrt`cWzuUzNf_ zwki;aThMCp6nHdMe=S2f9-<1pi>7t=7h(A#W=o=Vvthm&buUv2734@v$GR`Vby&`A zu%C~Td}g8`m{KilC?PO8;M;L>l(RMBX_hdYTF43dISc!FI9`4nv+8>+u&Javq>iv( zlKLf!O^eS`>Lkn|okL4y*UvU3zBM~4uc*Pd^?G7pIqP4BktFl0uijDVW3>K}=JTBK z>LX9wqfScXffMTpTmIWD?>CD!j&Z*hn5qF%mV z3tI|_q>+qG+d)4}j-~hmb9f@hbvF$fpo3r=+dL|Eid(zoT1KLl`pxVnojd)JdTp5o zy3|)+xpIx-VwyxsOUt^l%jgsePnNYqlcn*ioox-oO^G7@48g%?Tluxjz=7tq4lk;( zKhTf7cAs)U^;%e|F5$cyH+d? z>rJ3jiq>ONdaoyX9){^z1Dy_Cuz{)nf?9M8W{3f&T2K8MDhmhj*QNBrCCiDF@e7ue zq>_Bz?f& za?eAt9(jHiv~?lc()(x1^LabJte*JQ8CBkwW>I?DL2G{8hS!8<2n z>}t&x(D1L!TZ{;~mv@}kgAk@_Y)4KOL0}C$trHe8`;n!TpMvwPuKKbxRor6}&%kFCuQbz? zq(}HR(%gn%PyIeXB%f1_Tfsu`#pf5#D!DmPQHYiMY?2Nq)?_MEmXSb&^>H5 z&*haq-+IwP)F*VDj~DsCi}M&xp7GqhEg>etyfgY(IXW?OZ_n2`h*nb6Idt1Us((GB z!;X7vj=#S(B34_Zia1r|O#6*ANs=8ebus@T{RM{M?mG~^A9p;AX>T%|U}UFjX(gF$ z6|r{orA;0C+Q+3Yhta6o_nK4qU@0!_PKF)lDsksX=}G2stgDqtgR^Al*kKra6p);J zH(t-S9j>%7#x&>sR7H~m<<8fH4CoIxm*3W?#LcTI~pLR z&Jx|nTCK?*&IH70ab?`2pLkO8%uc`Zr6Q0>TVV0Q+Zup`A9c-nqLSX|!r1B%n?)E#S#m zg$w@mr^+_mo4xsDzmQ~YS1A~C#HZS-ug1XV{KUZPmtbjzQN-!6gTe;K%55kYi6#T z3}ce;9<6p4;A4|ba1%#Ed-UOfBfyAHgXOtEXjnVbxsUJacj~$I&94(?b6e?XQBHKx z=m;1txX;SqhQO1_$7M0Jf_`qDdgWR5e#VCT@{p~?g5cx4A}8W?lr^bEDg2=5{!<;o z+Lp1I=3`2wh`|UF#w6p9!5@RmlB#TWhWI+)cJK(;?P0gqKKcIlG94e1?7MB6X~0(4 zEGYD)6ULiLV8E_F)2}KN82I%H@ftKU#3o2#t0g>V0&X5R6Y898=-WTk73MUYUZS4P z=dNV1W<@!Yvuy|s&7Wz;2hG6n&xyY2Z?{vJbDsm)qUKK%de_Oyr zx1HX%A3mY^Q6Nc$=!rA-0PfGQKRcS=&%JIvK?LmuVgCzQO;_Y8O?PKmfaKBLb0 z-5%dBMCa3sN3=@-9{vY?*if2g*Lo0K@Y?tf%`T8(*2S7x50e!2HQScnYxCWyfsHz` zjz_TxhS6R^ySWV=qT$3N(Qu|Ig05~MKsp{OjF|L4Wy1x-fB7CDxRZdr7T_jpNG!Zw zl^_lGC!pTwj$Mh|9B3yKT2i)Yjd8)P*F@!Y5Swh10wR5Hqc50{!D%_R#ifPz`x*6m zQSDFIqsKWh|Nf|vM)$A!uYsKEW~&RecaE(y?HwQ5!@=t`yEg&U7xAK$sNVIRU5A0a zl^+SV`m*q5wlwoim6C^yze>B=_(i%yXy$VZ_`c@xZv}oqXlI-8u&9lgN z^~eM3+hW=zMK@}I3UtTs0<-TcLl6fF{dIvNR(^UWj$?}p{=M%>fg4LH3Rk6Y1T5=o3CmR><5gueikylCr%&{@CJe4OfwPqG_C zkF(!X=p#S!8Cq`j29Sm+*ECdK`t`gTXYjZxL!{NV+!y%=7L`2t) z&jGz3(8ur>>#h|Y(K>}SIy76-!*nEgE>}^Fq`>J-3Q=BbhJJ%ND|y=PK_15CF`QJV zuF_<98Ly^~EI%)@v&R#H%YB&|u)~W~>Z3fLY-4sMAOnh3eP_VHziRXi0vd=3Ei2P$ zK1UPhf>V;Ja&w`~45q^} z&@c>y2@`Um5}~L>8fBJDn$TG~o#7MTNmeTi!S{_s=gkaw_!3}Hx))v3(o-HYC&+`l9gjAD=Y*f6mxPAn zy9Zpb!EWUYGB-JUJdE|D%uk41r4Oqj*#pBu4_S`$l;WG%xggYY3 z|IB^kzK!@Oeo6Um|FQDX649E%DS`iFh}sjp!XnC=k)M&a+ut`XT0)}Y_}g&@%nwL} z{9%X9ho_i0S-x(1FNJ>V)&oY*bj(JWZkT#%h8p)ts^np(lEahLn^kC0y>mo0@2cB) zJ_?JFVz;fu+}RI(JI9~1Y+Rb;vwqb$((z+)X5gVe)7C_8LQDIFNcPovq4LeuwwCk{ z(zM&GJ_a=v57WkKyk|XO~0w4#KW`j@B^+fgnsD`qpwa=EKq7 zRJ@(xvbT6t_m`5&vbR`yGr#X|A!rbmHcR?!O_Kzpl@N}fH)##WV*uskgg4g?T%8#> zSQl-v5xhCNvYiXk-hO>$T}FAwMN%8q5wis0%M zb0fA$$1R7R(eK{u%mmEuQ(?ohvhbz$V<0@~i`vxRLS}Une%6t$&V-}>KAwcG;SEi* z9i)2iWBW_n7@HIrbZ|!Zl}UJP{2St%1H3#S34@?WLStCiSIxE2!gr(`C9DWzwldvTQVsvnFq&ZEa*?0P+#RmUV{_aOx@z^#a z&}^UX8Y!j66nOMFT9bI0hQ4ogjbbA_85*T4YJC`l##-F>PL!Sn#kIaoklAm_^U((W zNdjPeA5I;>s0g%ieG)AUnC_EbJe|7D|lV&~K`>X!lV3y>t6!I|~5{!Pq&{F|NNg4c3Zz3SogWxih zQ+XNmZ59SZ_oCa;4;JBF{cH&IwF9M^&$1Bm<$$=XspQJEPvn*&8U!D`xBLJ{{ z*r27>24vCNJonjmT7|PvG&%f_DFC%_1GJ_U+wv6Qu8W30quV z-~A;pFKBvYw(=ISJfuL!e*s7UIE8StON4q_9-h=#~yZ< z+-z1~WUX`nZpM)4h}~DEQRCqyKgyTKmhVxo@VEI}@JXbr>Ef>G{d$mEE#h3dAbonF z%v!a)kUWxx;D4g6*E?IP<|BNP>K5 z{gEeH$+#(DO&f8;&np#$!uN;|Lw_v*!3vOg!T`5$`wg|mYuTd#`l@RznHzP?QP%hA z{`dx378}jY;_Wx7A>rGC^NO5Z-f>@z$>Q;WRn}cYqq90kA`?ZCU=(cx^~Z4uu0)U5 zmMW_h*0NB!x$7=G?n^L^{SkOk-O7{6tHSI&?0?ULMjVqHJ}%`YBwg?n%jIg6Puyqa ztZ_F*QPK0F5M8g&X*uL4+2xk4Y_x4|V7vts7Zj95%_*wz_#5v|z4OKuy)1&QK`Nf4 zqlT%hv!n={RD@_b*n^1a-(E&$~MzcjaZnUebtK*Y|U`poq z!fW^C**J0CWgqfHv@A0Hj=QbruR8ypBnKXDetd}wYFoVs&XPe=!gQHwXgVJqb+_VoBPJ3&wj^Z9g6JTFiP> z{a_U%sjl0pHG%s^i7brhx0u$TiW~r} zpqY)VEFnM;<+t4Y}n6R}+Q#`s%o?mkESE*=yapS#4W0t1*k*4}#O)~n&qjTdb9uwj54?cCB;ZYX=c5pwL(-xHG@ z--*hVrms4eiq`z$MKS#eFsDx=HYs< zyL&4-V8gC%gsCs6b5oErWOWQM3!4v&GhX&H-p6&^xY56TTT5@ao4?*qS6xW;^LqDe zQhz$?w`(ieC%qU5G=>!Uiw3J4#DIb7eC8!255N7c|F+LM-83fV8%5(Kg>7Mg97sxE z&L4jur-?8<=pV0C)23MCU5^+`lCs;Rat)ne+Hc~}hUF1e)rdrWv{IWvB;_s6qCg^$ zs&amBV5-pY_>TT*m@19<^|~0VkC&{={jC1U422_L&OkorraB?UZxZ`+e*Uwsh89o$ zaKHYgO`h(Y;YQ8(1oNI)dbe$)uf@UQwHbYqwSFZO^tpp_`f`;@~FS0fUD8mtTkk$|S%HPW(` zr6EW1f?Lt|p-MO@%pY)i=!{O{;qBRH0!m;!BCcp&~FiHCBu>LGf5_ltuY`axVY@a_K$NGVqzFa;krE6a#mcCEDMu2KzK#nnvSX0I7RLunX&!6zZ{GvG zg?%{6qrQIrloCKPzMgnr-M0j3Ca%PK(^|hW*tyv@BV+XajWdh8~ zl#>XrQMDfokMINDGLpPg#RXe6a|E3eAQ>p|17ye_zz-eDcmRum-DUZNJ|H2UZN-4B zMF9XU=)`TAg)iio#Ryw~C+t!U;28-0zeAT;?^4!)vXtj@>y!3Vc;F(IO_To(=2h^= zO862=5B1ErX-{(R{PTI&y7e%XUo3px3AuKv+^GizS>TBn0>(Wmm=b;3`FS0$RsILJ z&eg7tU7J&e2GlKyO)j$ne(1 zynh6um2WF2(&94`Ws?0=bG&Wq@5j7lh%tM=AcMy9njr$n4u%>Tw&=isQ$iTf^GqCX z*-&P9VG>XZol#tH0N+TA2fMO%S)&d&YPrLqqRQS$>R3RDJ^LQ?tpEF-P0igWG~i1` L5vouLF@yaF`QC3= literal 0 HcmV?d00001 diff --git a/vendor/github.com/exoscale/egoscale/iam_apikey.go b/vendor/github.com/exoscale/egoscale/iam_apikey.go new file mode 100644 index 000000000..23cf2a934 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/iam_apikey.go @@ -0,0 +1,92 @@ +package egoscale + +// APIKeyType holds the type of the API key +type APIKeyType string + +const ( + // APIKeyTypeUnrestricted is unrestricted + APIKeyTypeUnrestricted APIKeyType = "unrestricted" + // APIKeyTypeRestricted is restricted + APIKeyTypeRestricted APIKeyType = "restricted" +) + +// APIKey represents an API key +type APIKey struct { + Name string `json:"name"` + Key string `json:"key"` + Secret string `json:"secret,omitempty"` + Operations []string `json:"operations,omitempty"` + Resources []string `json:"resources,omitempty"` + Type APIKeyType `json:"type"` +} + +// CreateAPIKey represents an API key creation +type CreateAPIKey struct { + Name string `json:"name"` + Operations string `json:"operations,omitempty"` + Resources string `json:"resources,omitempty"` + _ bool `name:"createApiKey" description:"Create an API key."` +} + +// Response returns the struct to unmarshal +func (CreateAPIKey) Response() interface{} { + return new(APIKey) +} + +// ListAPIKeys represents a search for API keys +type ListAPIKeys struct { + _ bool `name:"listApiKeys" description:"List API keys."` +} + +// ListAPIKeysResponse represents a list of API keys +type ListAPIKeysResponse struct { + Count int `json:"count"` + APIKeys []APIKey `json:"apikey"` +} + +// Response returns the struct to unmarshal +func (ListAPIKeys) Response() interface{} { + return new(ListAPIKeysResponse) +} + +// ListAPIKeyOperations represents a search for operations for the current API key +type ListAPIKeyOperations struct { + _ bool `name:"listApiKeyOperations" description:"List operations allowed for the current API key."` +} + +// ListAPIKeyOperationsResponse represents a list of operations for the current API key +type ListAPIKeyOperationsResponse struct { + Operations []string `json:"operations"` +} + +// Response returns the struct to unmarshal +func (ListAPIKeyOperations) Response() interface{} { + return new(ListAPIKeyOperationsResponse) +} + +// GetAPIKey get an API key +type GetAPIKey struct { + Key string `json:"key"` + _ bool `name:"getApiKey" description:"Get an API key."` +} + +// Response returns the struct to unmarshal +func (GetAPIKey) Response() interface{} { + return new(APIKey) +} + +// RevokeAPIKey represents a revocation of an API key +type RevokeAPIKey struct { + Key string `json:"key"` + _ bool `name:"revokeApiKey" description:"Revoke an API key."` +} + +// RevokeAPIKeyResponse represents the response to an API key revocation +type RevokeAPIKeyResponse struct { + Success bool `json:"success"` +} + +// Response returns the struct to unmarshal +func (RevokeAPIKey) Response() interface{} { + return new(RevokeAPIKeyResponse) +} diff --git a/vendor/github.com/exoscale/egoscale/instance_groups.go b/vendor/github.com/exoscale/egoscale/instance_groups.go new file mode 100644 index 000000000..52bffba9a --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/instance_groups.go @@ -0,0 +1,71 @@ +package egoscale + +// InstanceGroup represents a group of VM +type InstanceGroup struct { + Account string `json:"account,omitempty" doc:"the account owning the instance group"` + Created string `json:"created,omitempty" doc:"time and date the instance group was created"` + ID *UUID `json:"id,omitempty" doc:"the id of the instance group"` + Name string `json:"name,omitempty" doc:"the name of the instance group"` +} + +// ListRequest builds the ListInstanceGroups request +func (ig InstanceGroup) ListRequest() (ListCommand, error) { + req := &ListInstanceGroups{ + ID: ig.ID, + Name: ig.Name, + } + + return req, nil +} + +// CreateInstanceGroup creates a VM group +type CreateInstanceGroup struct { + Name string `json:"name" doc:"the name of the instance group"` + _ bool `name:"createInstanceGroup" description:"Creates a vm group"` +} + +// Response returns the struct to unmarshal +func (CreateInstanceGroup) Response() interface{} { + return new(InstanceGroup) +} + +// UpdateInstanceGroup updates a VM group +type UpdateInstanceGroup struct { + ID *UUID `json:"id" doc:"Instance group ID"` + Name string `json:"name,omitempty" doc:"new instance group name"` + _ bool `name:"updateInstanceGroup" description:"Updates a vm group"` +} + +// Response returns the struct to unmarshal +func (UpdateInstanceGroup) Response() interface{} { + return new(InstanceGroup) +} + +// DeleteInstanceGroup deletes a VM group +type DeleteInstanceGroup struct { + ID *UUID `json:"id" doc:"the ID of the instance group"` + _ bool `name:"deleteInstanceGroup" description:"Deletes a vm group"` +} + +// Response returns the struct to unmarshal +func (DeleteInstanceGroup) Response() interface{} { + return new(BooleanResponse) +} + +//go:generate go run generate/main.go -interface=Listable ListInstanceGroups + +// ListInstanceGroups lists VM groups +type ListInstanceGroups struct { + ID *UUID `json:"id,omitempty" doc:"List instance groups by ID"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"List instance groups by name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + _ bool `name:"listInstanceGroups" description:"Lists vm groups"` +} + +// ListInstanceGroupsResponse represents a list of instance groups +type ListInstanceGroupsResponse struct { + Count int `json:"count"` + InstanceGroup []InstanceGroup `json:"instancegroup"` +} diff --git a/vendor/github.com/exoscale/egoscale/instance_pool.go b/vendor/github.com/exoscale/egoscale/instance_pool.go new file mode 100644 index 000000000..9c415654f --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/instance_pool.go @@ -0,0 +1,170 @@ +package egoscale + +// InstancePoolState represents the state of an Instance Pool. +type InstancePoolState string + +const ( + // InstancePoolCreating creating state. + InstancePoolCreating InstancePoolState = "creating" + // InstancePoolRunning running state. + InstancePoolRunning InstancePoolState = "running" + // InstancePoolDestroying destroying state. + InstancePoolDestroying InstancePoolState = "destroying" + // InstancePoolScalingUp scaling up state. + InstancePoolScalingUp InstancePoolState = "scaling-up" + // InstancePoolScalingDown scaling down state. + InstancePoolScalingDown InstancePoolState = "scaling-down" +) + +// InstancePool represents an Instance Pool. +type InstancePool struct { + ID *UUID `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + ServiceOfferingID *UUID `json:"serviceofferingid"` + TemplateID *UUID `json:"templateid"` + ZoneID *UUID `json:"zoneid"` + AntiAffinityGroupIDs []UUID `json:"affinitygroupids"` + SecurityGroupIDs []UUID `json:"securitygroupids"` + NetworkIDs []UUID `json:"networkids"` + IPv6 bool `json:"ipv6"` + KeyPair string `json:"keypair"` + UserData string `json:"userdata"` + Size int `json:"size"` + RootDiskSize int `json:"rootdisksize"` + State InstancePoolState `json:"state"` + VirtualMachines []VirtualMachine `json:"virtualmachines"` +} + +// CreateInstancePool represents an Instance Pool creation API request. +type CreateInstancePool struct { + Name string `json:"name"` + Description string `json:"description,omitempty"` + ServiceOfferingID *UUID `json:"serviceofferingid"` + TemplateID *UUID `json:"templateid"` + ZoneID *UUID `json:"zoneid"` + AntiAffinityGroupIDs []UUID `json:"affinitygroupids,omitempty"` + SecurityGroupIDs []UUID `json:"securitygroupids,omitempty"` + NetworkIDs []UUID `json:"networkids,omitempty"` + IPv6 bool `json:"ipv6,omitempty"` + KeyPair string `json:"keypair,omitempty"` + UserData string `json:"userdata,omitempty"` + Size int `json:"size"` + RootDiskSize int `json:"rootdisksize,omitempty"` + _ bool `name:"createInstancePool" description:"Create an Instance Pool"` +} + +// CreateInstancePoolResponse represents an Instance Pool creation API response. +type CreateInstancePoolResponse struct { + ID *UUID `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + ServiceOfferingID *UUID `json:"serviceofferingid"` + TemplateID *UUID `json:"templateid"` + ZoneID *UUID `json:"zoneid"` + AntiAffinityGroupIDs []UUID `json:"affinitygroupids"` + SecurityGroupIDs []UUID `json:"securitygroupids"` + NetworkIDs []UUID `json:"networkids"` + IPv6 bool `json:"ipv6"` + KeyPair string `json:"keypair"` + UserData string `json:"userdata"` + Size int64 `json:"size"` + RootDiskSize int `json:"rootdisksize"` + State InstancePoolState `json:"state"` +} + +// Response returns an empty structure to unmarshal an Instance Pool creation API response into. +func (CreateInstancePool) Response() interface{} { + return new(CreateInstancePoolResponse) +} + +// UpdateInstancePool represents an Instance Pool update API request. +type UpdateInstancePool struct { + ID *UUID `json:"id"` + ZoneID *UUID `json:"zoneid"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + TemplateID *UUID `json:"templateid,omitempty"` + RootDiskSize int `json:"rootdisksize,omitempty"` + UserData string `json:"userdata,omitempty"` + IPv6 bool `json:"ipv6,omitempty"` + _ bool `name:"updateInstancePool" description:"Update an Instance Pool"` +} + +// Response returns an empty structure to unmarshal an Instance Pool update API response into. +func (UpdateInstancePool) Response() interface{} { + return new(BooleanResponse) +} + +// ScaleInstancePool represents an Instance Pool scaling API request. +type ScaleInstancePool struct { + ID *UUID `json:"id"` + ZoneID *UUID `json:"zoneid"` + Size int `json:"size"` + _ bool `name:"scaleInstancePool" description:"Scale an Instance Pool"` +} + +// Response returns an empty structure to unmarshal an Instance Pool scaling API response into. +func (ScaleInstancePool) Response() interface{} { + return new(BooleanResponse) +} + +// DestroyInstancePool represents an Instance Pool destruction API request. +type DestroyInstancePool struct { + ID *UUID `json:"id"` + ZoneID *UUID `json:"zoneid"` + _ bool `name:"destroyInstancePool" description:"Destroy an Instance Pool"` +} + +// Response returns an empty structure to unmarshal an Instance Pool destruction API response into. +func (DestroyInstancePool) Response() interface{} { + return new(BooleanResponse) +} + +// GetInstancePool retrieves an Instance Pool's details. +type GetInstancePool struct { + ID *UUID `json:"id"` + ZoneID *UUID `json:"zoneid"` + _ bool `name:"getInstancePool" description:"Get an Instance Pool"` +} + +// GetInstancePoolResponse get Instance Pool API response. +type GetInstancePoolResponse struct { + Count int + InstancePools []InstancePool `json:"instancepool"` +} + +// Response returns an empty structure to unmarshal an Instance Pool get API response into. +func (GetInstancePool) Response() interface{} { + return new(GetInstancePoolResponse) +} + +// ListInstancePools represents a list Instance Pool API request. +type ListInstancePools struct { + ZoneID *UUID `json:"zoneid"` + _ bool `name:"listInstancePools" description:"List Instance Pools"` +} + +// ListInstancePoolsResponse represents a list Instance Pool API response. +type ListInstancePoolsResponse struct { + Count int + InstancePools []InstancePool `json:"instancepool"` +} + +// Response returns an empty structure to unmarshal an Instance Pool list API response into. +func (ListInstancePools) Response() interface{} { + return new(ListInstancePoolsResponse) +} + +// EvictInstancePoolMembers represents an Instance Pool members eviction API request. +type EvictInstancePoolMembers struct { + ID *UUID `json:"id"` + ZoneID *UUID `json:"zoneid"` + MemberIDs []UUID `json:"memberids"` + _ bool `name:"evictInstancePoolMembers" description:"Evict some Instance Pool members"` +} + +// Response returns an empty structure to unmarshal an Instance Pool members eviction API response into. +func (EvictInstancePoolMembers) Response() interface{} { + return new(BooleanResponse) +} diff --git a/vendor/github.com/exoscale/egoscale/instancegroups_response.go b/vendor/github.com/exoscale/egoscale/instancegroups_response.go new file mode 100644 index 000000000..90fc1dbac --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/instancegroups_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListInstanceGroups) Response() interface{} { + return new(ListInstanceGroupsResponse) +} + +// ListRequest returns itself +func (ls *ListInstanceGroups) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListInstanceGroups) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListInstanceGroups) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListInstanceGroups) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListInstanceGroupsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListInstanceGroupsResponse was expected, got %T", resp)) + return + } + + for i := range items.InstanceGroup { + if !callback(&items.InstanceGroup[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/isos.go b/vendor/github.com/exoscale/egoscale/isos.go new file mode 100644 index 000000000..9eda54f2f --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/isos.go @@ -0,0 +1,94 @@ +package egoscale + +// ISO represents an attachable ISO disc +type ISO Template + +// ResourceType returns the type of the resource +func (ISO) ResourceType() string { + return "ISO" +} + +// ListRequest produces the ListIsos command. +func (iso ISO) ListRequest() (ListCommand, error) { + req := &ListISOs{ + ID: iso.ID, + Name: iso.Name, + ZoneID: iso.ZoneID, + } + if iso.Bootable { + *req.Bootable = true + } + if iso.IsFeatured { + req.IsoFilter = "featured" + } + if iso.IsPublic { + *req.IsPublic = true + } + if iso.IsReady { + *req.IsReady = true + } + + for i := range iso.Tags { + req.Tags = append(req.Tags, iso.Tags[i]) + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListISOs + +// ListISOs represents the list all available ISO files request +type ListISOs struct { + _ bool `name:"listIsos" description:"Lists all available ISO files."` + Bootable *bool `json:"bootable,omitempty" doc:"True if the ISO is bootable, false otherwise"` + ID *UUID `json:"id,omitempty" doc:"List ISO by id"` + IsoFilter string `json:"isofilter,omitempty" doc:"Possible values are \"featured\", \"self\", \"selfexecutable\",\"sharedexecutable\",\"executable\", and \"community\". * featured : templates that have been marked as featured and public. * self : templates that have been registered or created by the calling user. * selfexecutable : same as self, but only returns templates that can be used to deploy a new VM. * sharedexecutable : templates ready to be deployed that have been granted to the calling user by another user. * executable : templates that are owned by the calling user, or public templates, that can be used to deploy a VM. * community : templates that have been marked as public but not featured. * all : all templates (only usable by admins)."` + IsPublic *bool `json:"ispublic,omitempty" doc:"True if the ISO is publicly available to all users, false otherwise."` + IsReady *bool `json:"isready,omitempty" doc:"True if this ISO is ready to be deployed"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"List all isos by name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + ShowRemoved *bool `json:"showremoved,omitempty" doc:"Show removed ISOs as well"` + Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs). Note: multiple tags are OR'ed, not AND'ed."` + ZoneID *UUID `json:"zoneid,omitempty" doc:"The ID of the zone"` +} + +// ListISOsResponse represents a list of ISO files +type ListISOsResponse struct { + Count int `json:"count"` + ISO []ISO `json:"iso"` +} + +// AttachISO represents the request to attach an ISO to a virtual machine. +type AttachISO struct { + _ bool `name:"attachIso" description:"Attaches an ISO to a virtual machine."` + ID *UUID `json:"id" doc:"the ID of the ISO file"` + VirtualMachineID *UUID `json:"virtualmachineid" doc:"the ID of the virtual machine"` +} + +// Response returns the struct to unmarshal +func (AttachISO) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (AttachISO) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// DetachISO represents the request to detach an ISO to a virtual machine. +type DetachISO struct { + _ bool `name:"detachIso" description:"Detaches any ISO file (if any) currently attached to a virtual machine."` + VirtualMachineID *UUID `json:"virtualmachineid" doc:"The ID of the virtual machine"` +} + +// Response returns the struct to unmarshal +func (DetachISO) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DetachISO) AsyncResponse() interface{} { + return new(VirtualMachine) +} diff --git a/vendor/github.com/exoscale/egoscale/isos_response.go b/vendor/github.com/exoscale/egoscale/isos_response.go new file mode 100644 index 000000000..2faa45a88 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/isos_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListISOs) Response() interface{} { + return new(ListISOsResponse) +} + +// ListRequest returns itself +func (ls *ListISOs) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListISOs) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListISOs) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListISOs) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListISOsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListISOsResponse was expected, got %T", resp)) + return + } + + for i := range items.ISO { + if !callback(&items.ISO[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/jobstatustype_string.go b/vendor/github.com/exoscale/egoscale/jobstatustype_string.go new file mode 100644 index 000000000..12401c454 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/jobstatustype_string.go @@ -0,0 +1,25 @@ +// Code generated by "stringer -type JobStatusType"; DO NOT EDIT. + +package egoscale + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[Pending-0] + _ = x[Success-1] + _ = x[Failure-2] +} + +const _JobStatusType_name = "PendingSuccessFailure" + +var _JobStatusType_index = [...]uint8{0, 7, 14, 21} + +func (i JobStatusType) String() string { + if i < 0 || i >= JobStatusType(len(_JobStatusType_index)-1) { + return "JobStatusType(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _JobStatusType_name[_JobStatusType_index[i]:_JobStatusType_index[i+1]] +} diff --git a/vendor/github.com/exoscale/egoscale/macaddress.go b/vendor/github.com/exoscale/egoscale/macaddress.go new file mode 100644 index 000000000..3c1dcaea4 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/macaddress.go @@ -0,0 +1,63 @@ +package egoscale + +import ( + "encoding/json" + "fmt" + "net" +) + +// MACAddress is a nicely JSON serializable net.HardwareAddr +type MACAddress net.HardwareAddr + +// String returns the MAC address in standard format +func (mac MACAddress) String() string { + return (net.HardwareAddr)(mac).String() +} + +// MAC48 builds a MAC-48 MACAddress +func MAC48(a, b, c, d, e, f byte) MACAddress { + m := make(MACAddress, 6) + m[0] = a + m[1] = b + m[2] = c + m[3] = d + m[4] = e + m[5] = f + return m +} + +// UnmarshalJSON unmarshals the raw JSON into the MAC address +func (mac *MACAddress) UnmarshalJSON(b []byte) error { + var addr string + if err := json.Unmarshal(b, &addr); err != nil { + return err + } + hw, err := ParseMAC(addr) + if err != nil { + return err + } + + *mac = make(MACAddress, 6) + copy(*mac, hw) + return nil +} + +// MarshalJSON converts the MAC Address to a string representation +func (mac MACAddress) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf("%q", mac.String())), nil +} + +// ParseMAC converts a string into a MACAddress +func ParseMAC(s string) (MACAddress, error) { + hw, err := net.ParseMAC(s) + return (MACAddress)(hw), err +} + +// MustParseMAC acts like ParseMAC but panics if in case of an error +func MustParseMAC(s string) MACAddress { + mac, err := ParseMAC(s) + if err != nil { + panic(err) + } + return mac +} diff --git a/vendor/github.com/exoscale/egoscale/networks.go b/vendor/github.com/exoscale/egoscale/networks.go new file mode 100644 index 000000000..7a454a450 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/networks.go @@ -0,0 +1,221 @@ +package egoscale + +import ( + "net" + "net/url" +) + +// Network represents a network +// +// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/networking_and_traffic.html +type Network struct { + Account string `json:"account,omitempty" doc:"the owner of the network"` + AccountID *UUID `json:"accountid,omitempty" doc:"the owner ID of the network"` + BroadcastDomainType string `json:"broadcastdomaintype,omitempty" doc:"Broadcast domain type of the network"` + BroadcastURI string `json:"broadcasturi,omitempty" doc:"broadcast uri of the network."` + CanUseForDeploy bool `json:"canusefordeploy,omitempty" doc:"list networks available for vm deployment"` + CIDR *CIDR `json:"cidr,omitempty" doc:"Cloudstack managed address space, all CloudStack managed VMs get IP address from CIDR"` + DisplayText string `json:"displaytext,omitempty" doc:"the displaytext of the network"` + DNS1 net.IP `json:"dns1,omitempty" doc:"the first DNS for the network"` + DNS2 net.IP `json:"dns2,omitempty" doc:"the second DNS for the network"` + EndIP net.IP `json:"endip,omitempty" doc:"the ending IP address in the network IP range. Required for managed networks."` + Gateway net.IP `json:"gateway,omitempty" doc:"the network's gateway"` + ID *UUID `json:"id,omitempty" doc:"the id of the network"` + IP6CIDR *CIDR `json:"ip6cidr,omitempty" doc:"the cidr of IPv6 network"` + IP6Gateway net.IP `json:"ip6gateway,omitempty" doc:"the gateway of IPv6 network"` + IsDefault bool `json:"isdefault,omitempty" doc:"true if network is default, false otherwise"` + IsPersistent bool `json:"ispersistent,omitempty" doc:"list networks that are persistent"` + IsSystem bool `json:"issystem,omitempty" doc:"true if network is system, false otherwise"` + Name string `json:"name,omitempty" doc:"the name of the network"` + Netmask net.IP `json:"netmask,omitempty" doc:"the network's netmask"` + NetworkCIDR *CIDR `json:"networkcidr,omitempty" doc:"the network CIDR of the guest network configured with IP reservation. It is the summation of CIDR and RESERVED_IP_RANGE"` + NetworkDomain string `json:"networkdomain,omitempty" doc:"the network domain"` + PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"the physical network id"` + Related string `json:"related,omitempty" doc:"related to what other network configuration"` + ReservedIPRange string `json:"reservediprange,omitempty" doc:"the network's IP range not to be used by CloudStack guest VMs and can be used for non CloudStack purposes"` + RestartRequired bool `json:"restartrequired,omitempty" doc:"true network requires restart"` + Service []Service `json:"service,omitempty" doc:"the list of services"` + SpecifyIPRanges bool `json:"specifyipranges,omitempty" doc:"true if network supports specifying ip ranges, false otherwise"` + StartIP net.IP `json:"startip,omitempty" doc:"the beginning IP address in the network IP range. Required for managed networks."` + State string `json:"state,omitempty" doc:"state of the network"` + StrechedL2Subnet bool `json:"strechedl2subnet,omitempty" doc:"true if network can span multiple zones"` + SubdomainAccess bool `json:"subdomainaccess,omitempty" doc:"true if users from subdomains can access the domain level network"` + Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with network"` + TrafficType string `json:"traffictype,omitempty" doc:"the traffic type of the network"` + Type string `json:"type,omitempty" doc:"the type of the network"` + Vlan string `json:"vlan,omitempty" doc:"The vlan of the network. This parameter is visible to ROOT admins only"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"zone id of the network"` + ZoneName string `json:"zonename,omitempty" doc:"the name of the zone the network belongs to"` + ZonesNetworkSpans []Zone `json:"zonesnetworkspans,omitempty" doc:"If a network is enabled for 'streched l2 subnet' then represents zones on which network currently spans"` +} + +// ListRequest builds the ListNetworks request +func (network Network) ListRequest() (ListCommand, error) { + req := &ListNetworks{ + ID: network.ID, + Keyword: network.Name, // this is a hack as listNetworks doesn't support to search by name. + PhysicalNetworkID: network.PhysicalNetworkID, + TrafficType: network.TrafficType, + Type: network.Type, + ZoneID: network.ZoneID, + } + + if network.CanUseForDeploy { + req.CanUseForDeploy = &network.CanUseForDeploy + } + if network.RestartRequired { + req.RestartRequired = &network.RestartRequired + } + + return req, nil +} + +// ResourceType returns the type of the resource +func (Network) ResourceType() string { + return "Network" +} + +// Service is a feature of a network +type Service struct { + Capability []ServiceCapability `json:"capability,omitempty"` + Name string `json:"name"` + Provider []ServiceProvider `json:"provider,omitempty"` +} + +// ServiceCapability represents optional capability of a service +type ServiceCapability struct { + CanChooseServiceCapability bool `json:"canchooseservicecapability"` + Name string `json:"name"` + Value string `json:"value"` +} + +// ServiceProvider represents the provider of the service +type ServiceProvider struct { + CanEnableIndividualService bool `json:"canenableindividualservice"` + DestinationPhysicalNetworkID *UUID `json:"destinationphysicalnetworkid"` + ID *UUID `json:"id"` + Name string `json:"name"` + PhysicalNetworkID *UUID `json:"physicalnetworkid"` + ServiceList []string `json:"servicelist,omitempty"` +} + +// CreateNetwork creates a network +type CreateNetwork struct { + DisplayText string `json:"displaytext,omitempty" doc:"the display text of the network"` // This field is required but might be empty + EndIP net.IP `json:"endip,omitempty" doc:"the ending IP address in the network IP range. Required for managed networks."` + EndIpv6 net.IP `json:"endipv6,omitempty" doc:"the ending IPv6 address in the IPv6 network range"` + Gateway net.IP `json:"gateway,omitempty" doc:"the gateway of the network. Required for Shared networks and Isolated networks when it belongs to VPC"` + IP6CIDR *CIDR `json:"ip6cidr,omitempty" doc:"the CIDR of IPv6 network, must be at least /64"` + IP6Gateway net.IP `json:"ip6gateway,omitempty" doc:"the gateway of the IPv6 network. Required for Shared networks and Isolated networks when it belongs to VPC"` + IsolatedPVlan string `json:"isolatedpvlan,omitempty" doc:"the isolated private vlan for this network"` + Name string `json:"name,omitempty" doc:"the name of the network"` // This field is required but might be empty + Netmask net.IP `json:"netmask,omitempty" doc:"the netmask of the network. Required for managed networks."` + NetworkDomain string `json:"networkdomain,omitempty" doc:"network domain"` + PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"the Physical Network ID the network belongs to"` + StartIP net.IP `json:"startip,omitempty" doc:"the beginning IP address in the network IP range. Required for managed networks."` + StartIpv6 net.IP `json:"startipv6,omitempty" doc:"the beginning IPv6 address in the IPv6 network range"` + Vlan string `json:"vlan,omitempty" doc:"the ID or VID of the network"` + ZoneID *UUID `json:"zoneid" doc:"the Zone ID for the network"` + _ bool `name:"createNetwork" description:"Creates a network"` +} + +// Response returns the struct to unmarshal +func (CreateNetwork) Response() interface{} { + return new(Network) +} + +func (req CreateNetwork) onBeforeSend(params url.Values) error { + // Those fields are required but might be empty + if req.Name == "" { + params.Set("name", "") + } + if req.DisplayText == "" { + params.Set("displaytext", "") + } + return nil +} + +// UpdateNetwork (Async) updates a network +type UpdateNetwork struct { + _ bool `name:"updateNetwork" description:"Updates a network"` + ChangeCIDR *bool `json:"changecidr,omitempty" doc:"Force update even if cidr type is different"` + DisplayText string `json:"displaytext,omitempty" doc:"the new display text for the network"` + EndIP net.IP `json:"endip,omitempty" doc:"the ending IP address in the network IP range. Required for managed networks."` + GuestVMCIDR *CIDR `json:"guestvmcidr,omitempty" doc:"CIDR for Guest VMs,Cloudstack allocates IPs to Guest VMs only from this CIDR"` + ID *UUID `json:"id" doc:"the ID of the network"` + Name string `json:"name,omitempty" doc:"the new name for the network"` + Netmask net.IP `json:"netmask,omitempty" doc:"the netmask of the network. Required for managed networks."` + NetworkDomain string `json:"networkdomain,omitempty" doc:"network domain"` + StartIP net.IP `json:"startip,omitempty" doc:"the beginning IP address in the network IP range. Required for managed networks."` +} + +// Response returns the struct to unmarshal +func (UpdateNetwork) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (UpdateNetwork) AsyncResponse() interface{} { + return new(Network) +} + +// RestartNetwork (Async) updates a network +type RestartNetwork struct { + ID *UUID `json:"id" doc:"The id of the network to restart."` + Cleanup *bool `json:"cleanup,omitempty" doc:"If cleanup old network elements"` + _ bool `name:"restartNetwork" description:"Restarts the network; includes 1) restarting network elements - virtual routers, dhcp servers 2) reapplying all public ips 3) reapplying loadBalancing/portForwarding rules"` +} + +// Response returns the struct to unmarshal +func (RestartNetwork) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RestartNetwork) AsyncResponse() interface{} { + return new(Network) +} + +// DeleteNetwork deletes a network +type DeleteNetwork struct { + ID *UUID `json:"id" doc:"the ID of the network"` + Forced *bool `json:"forced,omitempty" doc:"Force delete a network. Network will be marked as 'Destroy' even when commands to shutdown and cleanup to the backend fails."` + _ bool `name:"deleteNetwork" description:"Deletes a network"` +} + +// Response returns the struct to unmarshal +func (DeleteNetwork) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DeleteNetwork) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +//go:generate go run generate/main.go -interface=Listable ListNetworks + +// ListNetworks represents a query to a network +type ListNetworks struct { + CanUseForDeploy *bool `json:"canusefordeploy,omitempty" doc:"List networks available for vm deployment"` + ID *UUID `json:"id,omitempty" doc:"List networks by id"` + IsSystem *bool `json:"issystem,omitempty" doc:"true If network is system, false otherwise"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + PhysicalNetworkID *UUID `json:"physicalnetworkid,omitempty" doc:"List networks by physical network id"` + RestartRequired *bool `json:"restartrequired,omitempty" doc:"List networks by restartRequired"` + SpecifyIPRanges *bool `json:"specifyipranges,omitempty" doc:"True if need to list only networks which support specifying ip ranges"` + SupportedServices []Service `json:"supportedservices,omitempty" doc:"List networks supporting certain services"` + Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs). Note: multiple tags are OR'ed, not AND'ed."` + TrafficType string `json:"traffictype,omitempty" doc:"Type of the traffic"` + Type string `json:"type,omitempty" doc:"The type of the network. Supported values are: Isolated and Shared"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"The Zone ID of the network"` + _ bool `name:"listNetworks" description:"Lists all available networks."` +} + +// ListNetworksResponse represents the list of networks +type ListNetworksResponse struct { + Count int `json:"count"` + Network []Network `json:"network"` +} diff --git a/vendor/github.com/exoscale/egoscale/networks_response.go b/vendor/github.com/exoscale/egoscale/networks_response.go new file mode 100644 index 000000000..058890624 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/networks_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListNetworks) Response() interface{} { + return new(ListNetworksResponse) +} + +// ListRequest returns itself +func (ls *ListNetworks) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListNetworks) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListNetworks) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListNetworks) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListNetworksResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListNetworksResponse was expected, got %T", resp)) + return + } + + for i := range items.Network { + if !callback(&items.Network[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/nics.go b/vendor/github.com/exoscale/egoscale/nics.go new file mode 100644 index 000000000..755e70395 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/nics.go @@ -0,0 +1,120 @@ +package egoscale + +import ( + "net" +) + +// Nic represents a Network Interface Controller (NIC) +// +// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/networking_and_traffic.html#configuring-multiple-ip-addresses-on-a-single-nic +type Nic struct { + BroadcastURI string `json:"broadcasturi,omitempty" doc:"the broadcast uri of the nic"` + DeviceID *UUID `json:"deviceid,omitempty" doc:"device id for the network when plugged into the virtual machine"` + Gateway net.IP `json:"gateway,omitempty" doc:"the gateway of the nic"` + ID *UUID `json:"id,omitempty" doc:"the ID of the nic"` + IP6Address net.IP `json:"ip6address,omitempty" doc:"the IPv6 address of network"` + IP6CIDR *CIDR `json:"ip6cidr,omitempty" doc:"the cidr of IPv6 network"` + IP6Gateway net.IP `json:"ip6gateway,omitempty" doc:"the gateway of IPv6 network"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"the ip address of the nic"` + IsDefault bool `json:"isdefault,omitempty" doc:"true if nic is default, false otherwise"` + IsolationURI string `json:"isolationuri,omitempty" doc:"the isolation uri of the nic"` + MACAddress MACAddress `json:"macaddress,omitempty" doc:"true if nic is default, false otherwise"` + Netmask net.IP `json:"netmask,omitempty" doc:"the netmask of the nic"` + NetworkID *UUID `json:"networkid,omitempty" doc:"the ID of the corresponding network"` + NetworkName string `json:"networkname,omitempty" doc:"the name of the corresponding network"` + ReverseDNS []ReverseDNS `json:"reversedns,omitempty" doc:"the list of PTR record(s) associated with the virtual machine"` + SecondaryIP []NicSecondaryIP `json:"secondaryip,omitempty" doc:"the Secondary ipv4 addr of nic"` + TrafficType string `json:"traffictype,omitempty" doc:"the traffic type of the nic"` + Type string `json:"type,omitempty" doc:"the type of the nic"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"Id of the vm to which the nic belongs"` +} + +// ListRequest build a ListNics request from the given Nic +func (nic Nic) ListRequest() (ListCommand, error) { + req := &ListNics{ + VirtualMachineID: nic.VirtualMachineID, + NicID: nic.ID, + NetworkID: nic.NetworkID, + } + + return req, nil +} + +// NicSecondaryIP represents a link between NicID and IPAddress +type NicSecondaryIP struct { + ID *UUID `json:"id,omitempty" doc:"the ID of the secondary private IP addr"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"Secondary IP address"` + NetworkID *UUID `json:"networkid,omitempty" doc:"the ID of the network"` + NicID *UUID `json:"nicid,omitempty" doc:"the ID of the nic"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the ID of the vm"` +} + +//go:generate go run generate/main.go -interface=Listable ListNics + +// ListNics represents the NIC search +type ListNics struct { + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + NetworkID *UUID `json:"networkid,omitempty" doc:"list nic of the specific vm's network"` + NicID *UUID `json:"nicid,omitempty" doc:"the ID of the nic to to list IPs"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the ID of the vm"` + _ bool `name:"listNics" description:"list the vm nics IP to NIC"` +} + +// ListNicsResponse represents a list of templates +type ListNicsResponse struct { + Count int `json:"count"` + Nic []Nic `json:"nic"` +} + +// AddIPToNic (Async) represents the assignation of a secondary IP +type AddIPToNic struct { + NicID *UUID `json:"nicid" doc:"the ID of the nic to which you want to assign private IP"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"Secondary IP Address"` + _ bool `name:"addIpToNic" description:"Assigns secondary IP to NIC"` +} + +// Response returns the struct to unmarshal +func (AddIPToNic) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (AddIPToNic) AsyncResponse() interface{} { + return new(NicSecondaryIP) +} + +// RemoveIPFromNic (Async) represents a deletion request +type RemoveIPFromNic struct { + ID *UUID `json:"id" doc:"the ID of the secondary ip address to nic"` + _ bool `name:"removeIpFromNic" description:"Removes secondary IP from the NIC."` +} + +// Response returns the struct to unmarshal +func (RemoveIPFromNic) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RemoveIPFromNic) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// ActivateIP6 (Async) activates the IP6 on the given NIC +// +// Exoscale specific API: https://community.exoscale.com/api/compute/#activateip6_GET +type ActivateIP6 struct { + NicID *UUID `json:"nicid" doc:"the ID of the nic to which you want to assign the IPv6"` + _ bool `name:"activateIp6" description:"Activate the IPv6 on the VM's nic"` +} + +// Response returns the struct to unmarshal +func (ActivateIP6) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (ActivateIP6) AsyncResponse() interface{} { + return new(Nic) +} diff --git a/vendor/github.com/exoscale/egoscale/nics_response.go b/vendor/github.com/exoscale/egoscale/nics_response.go new file mode 100644 index 000000000..dcf960915 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/nics_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListNics) Response() interface{} { + return new(ListNicsResponse) +} + +// ListRequest returns itself +func (ls *ListNics) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListNics) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListNics) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListNics) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListNicsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListNicsResponse was expected, got %T", resp)) + return + } + + for i := range items.Nic { + if !callback(&items.Nic[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/oscategories_response.go b/vendor/github.com/exoscale/egoscale/oscategories_response.go new file mode 100644 index 000000000..985f875df --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/oscategories_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListOSCategories) Response() interface{} { + return new(ListOSCategoriesResponse) +} + +// ListRequest returns itself +func (ls *ListOSCategories) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListOSCategories) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListOSCategories) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListOSCategories) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListOSCategoriesResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListOSCategoriesResponse was expected, got %T", resp)) + return + } + + for i := range items.OSCategory { + if !callback(&items.OSCategory[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/publicipaddresses_response.go b/vendor/github.com/exoscale/egoscale/publicipaddresses_response.go new file mode 100644 index 000000000..2ee92bd7a --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/publicipaddresses_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListPublicIPAddresses) Response() interface{} { + return new(ListPublicIPAddressesResponse) +} + +// ListRequest returns itself +func (ls *ListPublicIPAddresses) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListPublicIPAddresses) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListPublicIPAddresses) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListPublicIPAddresses) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListPublicIPAddressesResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListPublicIPAddressesResponse was expected, got %T", resp)) + return + } + + for i := range items.PublicIPAddress { + if !callback(&items.PublicIPAddress[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/record_string.go b/vendor/github.com/exoscale/egoscale/record_string.go new file mode 100644 index 000000000..71285c696 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/record_string.go @@ -0,0 +1,36 @@ +// Code generated by "stringer -type=Record"; DO NOT EDIT. + +package egoscale + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[A-0] + _ = x[AAAA-1] + _ = x[ALIAS-2] + _ = x[CNAME-3] + _ = x[HINFO-4] + _ = x[MX-5] + _ = x[NAPTR-6] + _ = x[NS-7] + _ = x[POOL-8] + _ = x[SPF-9] + _ = x[SRV-10] + _ = x[SSHFP-11] + _ = x[TXT-12] + _ = x[URL-13] +} + +const _Record_name = "AAAAAALIASCNAMEHINFOMXNAPTRNSPOOLSPFSRVSSHFPTXTURL" + +var _Record_index = [...]uint8{0, 1, 5, 10, 15, 20, 22, 27, 29, 33, 36, 39, 44, 47, 50} + +func (i Record) String() string { + if i < 0 || i >= Record(len(_Record_index)-1) { + return "Record(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _Record_name[_Record_index[i]:_Record_index[i+1]] +} diff --git a/vendor/github.com/exoscale/egoscale/request.go b/vendor/github.com/exoscale/egoscale/request.go new file mode 100644 index 000000000..450a56469 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/request.go @@ -0,0 +1,404 @@ +package egoscale + +import ( + "bytes" + "context" + "crypto/hmac" + "crypto/sha1" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "sort" + "strconv" + "strings" + "time" +) + +// Error formats a CloudStack error into a standard error +func (e ErrorResponse) Error() string { + return fmt.Sprintf("API error %s %d (%s %d): %s", e.ErrorCode, e.ErrorCode, e.CSErrorCode, e.CSErrorCode, e.ErrorText) +} + +// Error formats a CloudStack job response into a standard error +func (e BooleanResponse) Error() error { + if !e.Success { + return fmt.Errorf("API error: %s", e.DisplayText) + } + + return nil +} + +func responseKey(key string) (string, bool) { + // XXX: addIpToNic, activateIp6, restorevmresponse are kind of special + var responseKeys = map[string]string{ + "addiptonicresponse": "addiptovmnicresponse", + "activateip6response": "activateip6nicresponse", + "restorevirtualmachineresponse": "restorevmresponse", + "updatevmaffinitygroupresponse": "updatevirtualmachineresponse", + } + + k, ok := responseKeys[key] + return k, ok +} + +func (client *Client) parseResponse(resp *http.Response, apiName string) (json.RawMessage, error) { + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + m := map[string]json.RawMessage{} + if err := json.Unmarshal(b, &m); err != nil { + return nil, err + } + + key := fmt.Sprintf("%sresponse", strings.ToLower(apiName)) + response, ok := m[key] + if !ok { + if resp.StatusCode >= 400 { + response, ok = m["errorresponse"] + } + + if !ok { + // try again with the special keys + value, ok := responseKey(key) + if ok { + key = value + } + + response, ok = m[key] + + if !ok { + return nil, fmt.Errorf("malformed JSON response %d, %q was expected.\n%s", resp.StatusCode, key, b) + } + } + } + + if resp.StatusCode >= 400 { + errorResponse := new(ErrorResponse) + if e := json.Unmarshal(response, errorResponse); e != nil && errorResponse.ErrorCode <= 0 { + return nil, fmt.Errorf("%d %s", resp.StatusCode, b) + } + return nil, errorResponse + } + + n := map[string]json.RawMessage{} + if err := json.Unmarshal(response, &n); err != nil { + return nil, err + } + + // list response may contain only one key + if len(n) > 1 || strings.HasPrefix(key, "list") { + return response, nil + } + + if len(n) == 1 { + for k := range n { + // boolean response and asyncjob result may also contain + // only one key + if k == "success" || k == "jobid" { + return response, nil + } + return n[k], nil + } + } + + return response, nil +} + +// asyncRequest perform an asynchronous job with a context +func (client *Client) asyncRequest(ctx context.Context, asyncCommand AsyncCommand) (interface{}, error) { + var err error + + resp := asyncCommand.AsyncResponse() + client.AsyncRequestWithContext( + ctx, + asyncCommand, + func(j *AsyncJobResult, e error) bool { + if e != nil { + err = e + return false + } + if j.JobStatus != Pending { + if r := j.Result(resp); r != nil { + err = r + } + return false + } + return true + }, + ) + return resp, err +} + +// SyncRequestWithContext performs a sync request with a context +func (client *Client) SyncRequestWithContext(ctx context.Context, command Command) (interface{}, error) { + body, err := client.request(ctx, command) + if err != nil { + return nil, err + } + + response := command.Response() + b, ok := response.(*BooleanResponse) + if ok { + m := make(map[string]interface{}) + if errUnmarshal := json.Unmarshal(body, &m); errUnmarshal != nil { + return nil, errUnmarshal + } + + b.DisplayText, _ = m["displaytext"].(string) + + if success, okSuccess := m["success"].(string); okSuccess { + b.Success = success == "true" + } + + if success, okSuccess := m["success"].(bool); okSuccess { + b.Success = success + } + + return b, nil + } + + if err := json.Unmarshal(body, response); err != nil { + errResponse := new(ErrorResponse) + if e := json.Unmarshal(body, errResponse); e == nil && errResponse.ErrorCode > 0 { + return errResponse, nil + } + return nil, err + } + + return response, nil +} + +// BooleanRequest performs the given boolean command +func (client *Client) BooleanRequest(command Command) error { + resp, err := client.Request(command) + if err != nil { + return err + } + + if b, ok := resp.(*BooleanResponse); ok { + return b.Error() + } + + panic(fmt.Errorf("command %q is not a proper boolean response. %#v", client.APIName(command), resp)) +} + +// BooleanRequestWithContext performs the given boolean command +func (client *Client) BooleanRequestWithContext(ctx context.Context, command Command) error { + resp, err := client.RequestWithContext(ctx, command) + if err != nil { + return err + } + + if b, ok := resp.(*BooleanResponse); ok { + return b.Error() + } + + panic(fmt.Errorf("command %q is not a proper boolean response. %#v", client.APIName(command), resp)) +} + +// Request performs the given command +func (client *Client) Request(command Command) (interface{}, error) { + ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) + defer cancel() + + return client.RequestWithContext(ctx, command) +} + +// RequestWithContext preforms a command with a context +func (client *Client) RequestWithContext(ctx context.Context, command Command) (interface{}, error) { + switch c := command.(type) { + case AsyncCommand: + return client.asyncRequest(ctx, c) + default: + return client.SyncRequestWithContext(ctx, command) + } +} + +// SyncRequest performs the command as is +func (client *Client) SyncRequest(command Command) (interface{}, error) { + ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) + defer cancel() + + return client.SyncRequestWithContext(ctx, command) +} + +// AsyncRequest performs the given command +func (client *Client) AsyncRequest(asyncCommand AsyncCommand, callback WaitAsyncJobResultFunc) { + ctx, cancel := context.WithTimeout(context.Background(), client.Timeout) + defer cancel() + + client.AsyncRequestWithContext(ctx, asyncCommand, callback) +} + +// AsyncRequestWithContext preforms a request with a context +func (client *Client) AsyncRequestWithContext(ctx context.Context, asyncCommand AsyncCommand, callback WaitAsyncJobResultFunc) { + result, err := client.SyncRequestWithContext(ctx, asyncCommand) + if err != nil { + if !callback(nil, err) { + return + } + } + + jobResult, ok := result.(*AsyncJobResult) + if !ok { + callback(nil, fmt.Errorf("wrong type, AsyncJobResult was expected instead of %T", result)) + } + + // Successful response + if jobResult.JobID == nil || jobResult.JobStatus != Pending { + callback(jobResult, nil) + // without a JobID, the next requests will only fail + return + } + + for iteration := 0; ; iteration++ { + time.Sleep(client.RetryStrategy(int64(iteration))) + + req := &QueryAsyncJobResult{JobID: jobResult.JobID} + resp, err := client.SyncRequestWithContext(ctx, req) + if err != nil && !callback(nil, err) { + return + } + + result, ok := resp.(*AsyncJobResult) + if !ok { + if !callback(nil, fmt.Errorf("wrong type. AsyncJobResult expected, got %T", resp)) { + return + } + } + + if !callback(result, nil) { + return + } + } +} + +// Payload builds the HTTP request params from the given command +func (client *Client) Payload(command Command) (url.Values, error) { + params, err := prepareValues("", command) + if err != nil { + return nil, err + } + if hookReq, ok := command.(onBeforeHook); ok { + if err := hookReq.onBeforeSend(params); err != nil { + return params, err + } + } + params.Set("apikey", client.APIKey) + params.Set("command", client.APIName(command)) + params.Set("response", "json") + + if params.Get("expires") == "" && client.Expiration >= 0 { + params.Set("signatureversion", "3") + params.Set("expires", time.Now().Add(client.Expiration).Local().Format("2006-01-02T15:04:05-0700")) + } + + return params, nil +} + +// Sign signs the HTTP request and returns the signature as as base64 encoding +func (client *Client) Sign(params url.Values) (string, error) { + query := encodeValues(params) + query = strings.ToLower(query) + mac := hmac.New(sha1.New, []byte(client.apiSecret)) + _, err := mac.Write([]byte(query)) + if err != nil { + return "", err + } + + signature := base64.StdEncoding.EncodeToString(mac.Sum(nil)) + return signature, nil +} + +// request makes a Request while being close to the metal +func (client *Client) request(ctx context.Context, command Command) (json.RawMessage, error) { + params, err := client.Payload(command) + if err != nil { + return nil, err + } + signature, err := client.Sign(params) + if err != nil { + return nil, err + } + params.Add("signature", signature) + + method := "GET" + query := params.Encode() + url := fmt.Sprintf("%s?%s", client.Endpoint, query) + + var body io.Reader + // respect Internet Explorer limit of 2048 + if len(url) > 2048 { + url = client.Endpoint + method = "POST" + body = strings.NewReader(query) + } + + request, err := http.NewRequest(method, url, body) + if err != nil { + return nil, err + } + request = request.WithContext(ctx) + + if method == "POST" { + request.Header.Add("Content-Type", "application/x-www-form-urlencoded") + request.Header.Add("Content-Length", strconv.Itoa(len(query))) + } + + resp, err := client.HTTPClient.Do(request) + if err != nil { + return nil, err + } + defer resp.Body.Close() // nolint: errcheck + + contentType := resp.Header.Get("content-type") + + if !strings.Contains(contentType, "application/json") { + return nil, fmt.Errorf(`body content-type response expected "application/json", got %q`, contentType) + } + + text, err := client.parseResponse(resp, client.APIName(command)) + if err != nil { + return nil, err + } + + return text, nil +} + +func encodeValues(params url.Values) string { + // This code is borrowed from net/url/url.go + // The way it's encoded by net/url doesn't match + // how CloudStack works to determine the signature. + // + // CloudStack only encodes the values of the query parameters + // and furthermore doesn't use '+' for whitespaces. Therefore + // after encoding the values all '+' are replaced with '%20'. + if params == nil { + return "" + } + + var buf bytes.Buffer + keys := make([]string, 0, len(params)) + for k := range params { + keys = append(keys, k) + } + + sort.Strings(keys) + for _, k := range keys { + prefix := k + "=" + for _, v := range params[k] { + if buf.Len() > 0 { + buf.WriteByte('&') + } + buf.WriteString(prefix) + buf.WriteString(csEncode(v)) + } + } + return buf.String() +} diff --git a/vendor/github.com/exoscale/egoscale/request_type.go b/vendor/github.com/exoscale/egoscale/request_type.go new file mode 100644 index 000000000..6775cde69 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/request_type.go @@ -0,0 +1,186 @@ +package egoscale + +import ( + "net/url" +) + +// Command represents a generic request +type Command interface { + Response() interface{} +} + +// AsyncCommand represents a async request +type AsyncCommand interface { + Command + AsyncResponse() interface{} +} + +// ListCommand represents a listing request +type ListCommand interface { + Listable + Command + // SetPage defines the current pages + SetPage(int) + // SetPageSize defines the size of the page + SetPageSize(int) + // Each reads the data from the response and feeds channels, and returns true if we are on the last page + Each(interface{}, IterateItemFunc) +} + +// onBeforeHook represents an action to be done on the params before sending them +// +// This little took helps with issue of relying on JSON serialization logic only. +// `omitempty` may make sense in some cases but not all the time. +type onBeforeHook interface { + onBeforeSend(params url.Values) error +} + +// CommandInfo represents the meta data related to a Command +type CommandInfo struct { + Name string + Description string + RootOnly bool +} + +// JobStatusType represents the status of a Job +type JobStatusType int + +//go:generate stringer -type JobStatusType +const ( + // Pending represents a job in progress + Pending JobStatusType = iota + // Success represents a successfully completed job + Success + // Failure represents a job that has failed to complete + Failure +) + +// ErrorCode represents the CloudStack ApiErrorCode enum +// +// See: https://github.com/apache/cloudstack/blob/master/api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java +type ErrorCode int + +//go:generate stringer -type ErrorCode +const ( + // Unauthorized represents ... (TODO) + Unauthorized ErrorCode = 401 + // NotFound represents ... (TODO) + NotFound ErrorCode = 404 + // MethodNotAllowed represents ... (TODO) + MethodNotAllowed ErrorCode = 405 + // UnsupportedActionError represents ... (TODO) + UnsupportedActionError ErrorCode = 422 + // APILimitExceeded represents ... (TODO) + APILimitExceeded ErrorCode = 429 + // MalformedParameterError represents ... (TODO) + MalformedParameterError ErrorCode = 430 + // ParamError represents ... (TODO) + ParamError ErrorCode = 431 + + // InternalError represents a server error + InternalError ErrorCode = 530 + // AccountError represents ... (TODO) + AccountError ErrorCode = 531 + // AccountResourceLimitError represents ... (TODO) + AccountResourceLimitError ErrorCode = 532 + // InsufficientCapacityError represents ... (TODO) + InsufficientCapacityError ErrorCode = 533 + // ResourceUnavailableError represents ... (TODO) + ResourceUnavailableError ErrorCode = 534 + // ResourceAllocationError represents ... (TODO) + ResourceAllocationError ErrorCode = 535 + // ResourceInUseError represents ... (TODO) + ResourceInUseError ErrorCode = 536 + // NetworkRuleConflictError represents ... (TODO) + NetworkRuleConflictError ErrorCode = 537 +) + +// CSErrorCode represents the CloudStack CSExceptionErrorCode enum +// +// See: https://github.com/apache/cloudstack/blob/master/utils/src/main/java/com/cloud/utils/exception/CSExceptionErrorCode.java +type CSErrorCode int + +//go:generate stringer -type CSErrorCode +const ( + // CloudRuntimeException ... (TODO) + CloudRuntimeException CSErrorCode = 4250 + // ExecutionException ... (TODO) + ExecutionException CSErrorCode = 4260 + // HypervisorVersionChangedException ... (TODO) + HypervisorVersionChangedException CSErrorCode = 4265 + // CloudException ... (TODO) + CloudException CSErrorCode = 4275 + // AccountLimitException ... (TODO) + AccountLimitException CSErrorCode = 4280 + // AgentUnavailableException ... (TODO) + AgentUnavailableException CSErrorCode = 4285 + // CloudAuthenticationException ... (TODO) + CloudAuthenticationException CSErrorCode = 4290 + // ConcurrentOperationException ... (TODO) + ConcurrentOperationException CSErrorCode = 4300 + // ConflictingNetworksException ... (TODO) + ConflictingNetworkSettingsException CSErrorCode = 4305 + // DiscoveredWithErrorException ... (TODO) + DiscoveredWithErrorException CSErrorCode = 4310 + // HAStateException ... (TODO) + HAStateException CSErrorCode = 4315 + // InsufficientAddressCapacityException ... (TODO) + InsufficientAddressCapacityException CSErrorCode = 4320 + // InsufficientCapacityException ... (TODO) + InsufficientCapacityException CSErrorCode = 4325 + // InsufficientNetworkCapacityException ... (TODO) + InsufficientNetworkCapacityException CSErrorCode = 4330 + // InsufficientServerCapaticyException ... (TODO) + InsufficientServerCapacityException CSErrorCode = 4335 + // InsufficientStorageCapacityException ... (TODO) + InsufficientStorageCapacityException CSErrorCode = 4340 + // InternalErrorException ... (TODO) + InternalErrorException CSErrorCode = 4345 + // InvalidParameterValueException ... (TODO) + InvalidParameterValueException CSErrorCode = 4350 + // ManagementServerException ... (TODO) + ManagementServerException CSErrorCode = 4355 + // NetworkRuleConflictException ... (TODO) + NetworkRuleConflictException CSErrorCode = 4360 + // PermissionDeniedException ... (TODO) + PermissionDeniedException CSErrorCode = 4365 + // ResourceAllocationException ... (TODO) + ResourceAllocationException CSErrorCode = 4370 + // ResourceInUseException ... (TODO) + ResourceInUseException CSErrorCode = 4375 + // ResourceUnavailableException ... (TODO) + ResourceUnavailableException CSErrorCode = 4380 + // StorageUnavailableException ... (TODO) + StorageUnavailableException CSErrorCode = 4385 + // UnsupportedServiceException ... (TODO) + UnsupportedServiceException CSErrorCode = 4390 + // VirtualMachineMigrationException ... (TODO) + VirtualMachineMigrationException CSErrorCode = 4395 + // AsyncCommandQueued ... (TODO) + AsyncCommandQueued CSErrorCode = 4540 + // RequestLimitException ... (TODO) + RequestLimitException CSErrorCode = 4545 + // ServerAPIException ... (TODO) + ServerAPIException CSErrorCode = 9999 +) + +// ErrorResponse represents the standard error response +type ErrorResponse struct { + CSErrorCode CSErrorCode `json:"cserrorcode"` + ErrorCode ErrorCode `json:"errorcode"` + ErrorText string `json:"errortext"` + UUIDList []UUIDItem `json:"uuidList,omitempty"` // uuid*L*ist is not a typo +} + +// UUIDItem represents an item of the UUIDList part of an ErrorResponse +type UUIDItem struct { + Description string `json:"description,omitempty"` + SerialVersionUID int64 `json:"serialVersionUID,omitempty"` + UUID string `json:"uuid"` +} + +// BooleanResponse represents a boolean response (usually after a deletion) +type BooleanResponse struct { + DisplayText string `json:"displaytext,omitempty"` + Success bool `json:"success"` +} diff --git a/vendor/github.com/exoscale/egoscale/resource_limits.go b/vendor/github.com/exoscale/egoscale/resource_limits.go new file mode 100644 index 000000000..56011dc66 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/resource_limits.go @@ -0,0 +1,100 @@ +package egoscale + +// https://github.com/apache/cloudstack/blob/master/api/src/main/java/com/cloud/configuration/Resource.java + +// ResourceTypeName represents the name of a resource type (for limits) +type ResourceTypeName string + +const ( + // VirtualMachineTypeName is the resource type name of a VM + VirtualMachineTypeName ResourceTypeName = "user_vm" + // IPAddressTypeName is the resource type name of an IP address + IPAddressTypeName ResourceTypeName = "public_ip" + // VolumeTypeName is the resource type name of a volume + VolumeTypeName ResourceTypeName = "volume" + // SnapshotTypeName is the resource type name of a snapshot + SnapshotTypeName ResourceTypeName = "snapshot" + // TemplateTypeName is the resource type name of a template + TemplateTypeName ResourceTypeName = "template" + // ProjectTypeName is the resource type name of a project + ProjectTypeName ResourceTypeName = "project" + // NetworkTypeName is the resource type name of a network + NetworkTypeName ResourceTypeName = "network" + // VPCTypeName is the resource type name of a VPC + VPCTypeName ResourceTypeName = "vpc" + // CPUTypeName is the resource type name of a CPU + CPUTypeName ResourceTypeName = "cpu" + // MemoryTypeName is the resource type name of Memory + MemoryTypeName ResourceTypeName = "memory" + // PrimaryStorageTypeName is the resource type name of primary storage + PrimaryStorageTypeName ResourceTypeName = "primary_storage" + // SecondaryStorageTypeName is the resource type name of secondary storage + SecondaryStorageTypeName ResourceTypeName = "secondary_storage" +) + +// ResourceType represents the ID of a resource type (for limits) +type ResourceType string + +const ( + // VirtualMachineType is the resource type ID of a VM + VirtualMachineType ResourceType = "0" + // IPAddressType is the resource type ID of an IP address + IPAddressType ResourceType = "1" + // VolumeType is the resource type ID of a volume + VolumeType ResourceType = "2" + // SnapshotType is the resource type ID of a snapshot + SnapshotType ResourceType = "3" + // TemplateType is the resource type ID of a template + TemplateType ResourceType = "4" + // ProjectType is the resource type ID of a project + ProjectType ResourceType = "5" + // NetworkType is the resource type ID of a network + NetworkType ResourceType = "6" + // VPCType is the resource type ID of a VPC + VPCType ResourceType = "7" + // CPUType is the resource type ID of a CPU + CPUType ResourceType = "8" + // MemoryType is the resource type ID of Memory + MemoryType ResourceType = "9" + // PrimaryStorageType is the resource type ID of primary storage + PrimaryStorageType ResourceType = "10" + // SecondaryStorageType is the resource type ID of secondary storage + SecondaryStorageType ResourceType = "11" +) + +// ResourceLimit represents the limit on a particular resource +type ResourceLimit struct { + Max int64 `json:"max,omitempty" doc:"the maximum number of the resource. A -1 means the resource currently has no limit."` + ResourceType ResourceType `json:"resourcetype,omitempty" doc:"resource type. Values include 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11. See the resourceType parameter for more information on these values."` + ResourceTypeName string `json:"resourcetypename,omitempty" doc:"resource type name. Values include user_vm, public_ip, volume, snapshot, template, network, cpu, memory, primary_storage, secondary_storage."` +} + +// ListRequest builds the ListResourceLimits request +func (limit ResourceLimit) ListRequest() (ListCommand, error) { + req := &ListResourceLimits{ + ResourceType: limit.ResourceType, + ResourceTypeName: limit.ResourceTypeName, + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListResourceLimits + +// ListResourceLimits lists the resource limits +type ListResourceLimits struct { + ID int64 `json:"id,omitempty" doc:"Lists resource limits by ID."` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + ResourceType ResourceType `json:"resourcetype,omitempty" doc:"Type of resource. Values are 0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 12, and 13. 0 - Instance. Number of instances a user can create. 1 - IP. Number of public IP addresses an account can own. 2 - Volume. Number of disk volumes an account can own. 3 - Snapshot. Number of snapshots an account can own. 4 - Template. Number of templates an account can register/create. 6 - Network. Number of networks an account can own. 8 - CPU. Number of CPU an account can allocate for his resources. 9 - Memory. Amount of RAM an account can allocate for his resources. 10 - PrimaryStorage. Total primary storage space (in GiB) a user can use. 11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use. 12 - Elastic IP. Number of public elastic IP addresses an account can own. 13 - SMTP. If the account is allowed SMTP outbound traffic."` + ResourceTypeName string `json:"resourcetypename,omitempty" doc:"Type of resource (wins over resourceType if both are provided). Values are: user_vm - Instance. Number of instances a user can create. public_ip - IP. Number of public IP addresses an account can own. volume - Volume. Number of disk volumes an account can own. snapshot - Snapshot. Number of snapshots an account can own. template - Template. Number of templates an account can register/create. network - Network. Number of networks an account can own. cpu - CPU. Number of CPU an account can allocate for his resources. memory - Memory. Amount of RAM an account can allocate for his resources. primary_storage - PrimaryStorage. Total primary storage space (in GiB) a user can use. secondary_storage - SecondaryStorage. Total secondary storage space (in GiB) a user can use. public_elastic_ip - IP. Number of public elastic IP addresses an account can own. smtp - SG. If the account is allowed SMTP outbound traffic."` + + _ bool `name:"listResourceLimits" description:"Lists resource limits."` +} + +// ListResourceLimitsResponse represents a list of resource limits +type ListResourceLimitsResponse struct { + Count int `json:"count"` + ResourceLimit []ResourceLimit `json:"resourcelimit"` +} diff --git a/vendor/github.com/exoscale/egoscale/resource_metadata.go b/vendor/github.com/exoscale/egoscale/resource_metadata.go new file mode 100644 index 000000000..52c5ee8b0 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/resource_metadata.go @@ -0,0 +1,41 @@ +package egoscale + +import "fmt" + +// ResourceDetail represents extra details +type ResourceDetail ResourceTag + +// ListRequest builds the ListResourceDetails request +func (detail ResourceDetail) ListRequest() (ListCommand, error) { + if detail.ResourceType == "" { + return nil, fmt.Errorf("the resourcetype parameter is required") + } + + req := &ListResourceDetails{ + ResourceType: detail.ResourceType, + ResourceID: detail.ResourceID, + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListResourceDetails + +// ListResourceDetails lists the resource tag(s) (but different from listTags...) +type ListResourceDetails struct { + ResourceType string `json:"resourcetype" doc:"list by resource type"` + ForDisplay bool `json:"fordisplay,omitempty" doc:"if set to true, only details marked with display=true, are returned. False by default"` + Key string `json:"key,omitempty" doc:"list by key"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + ResourceID *UUID `json:"resourceid,omitempty" doc:"list by resource id"` + Value string `json:"value,omitempty" doc:"list by key, value. Needs to be passed only along with key"` + _ bool `name:"listResourceDetails" description:"List resource detail(s)"` +} + +// ListResourceDetailsResponse represents a list of resource details +type ListResourceDetailsResponse struct { + Count int `json:"count"` + ResourceDetail []ResourceTag `json:"resourcedetail"` +} diff --git a/vendor/github.com/exoscale/egoscale/resourcedetails_response.go b/vendor/github.com/exoscale/egoscale/resourcedetails_response.go new file mode 100644 index 000000000..2a08cd825 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/resourcedetails_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListResourceDetails) Response() interface{} { + return new(ListResourceDetailsResponse) +} + +// ListRequest returns itself +func (ls *ListResourceDetails) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListResourceDetails) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListResourceDetails) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListResourceDetails) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListResourceDetailsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListResourceDetailsResponse was expected, got %T", resp)) + return + } + + for i := range items.ResourceDetail { + if !callback(&items.ResourceDetail[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/resourcelimits_response.go b/vendor/github.com/exoscale/egoscale/resourcelimits_response.go new file mode 100644 index 000000000..656febfc9 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/resourcelimits_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListResourceLimits) Response() interface{} { + return new(ListResourceLimitsResponse) +} + +// ListRequest returns itself +func (ls *ListResourceLimits) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListResourceLimits) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListResourceLimits) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListResourceLimits) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListResourceLimitsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListResourceLimitsResponse was expected, got %T", resp)) + return + } + + for i := range items.ResourceLimit { + if !callback(&items.ResourceLimit[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/reversedns.go b/vendor/github.com/exoscale/egoscale/reversedns.go new file mode 100644 index 000000000..e8bd124ce --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/reversedns.go @@ -0,0 +1,83 @@ +package egoscale + +import ( + "net" +) + +// ReverseDNS represents the PTR record linked with an IPAddress or IP6Address belonging to a Virtual Machine or a Public IP Address (Elastic IP) instance +type ReverseDNS struct { + DomainName string `json:"domainname,omitempty" doc:"the domain name of the PTR record"` + IP6Address net.IP `json:"ip6address,omitempty" doc:"the IPv6 address linked with the PTR record (mutually exclusive with ipaddress)"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"the IPv4 address linked with the PTR record (mutually exclusive with ip6address)"` + NicID *UUID `json:"nicid,omitempty" doc:"the virtual machine default NIC ID"` + PublicIPID *UUID `json:"publicipid,omitempty" doc:"the public IP address ID"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the virtual machine ID"` +} + +// DeleteReverseDNSFromPublicIPAddress is a command to create/delete the PTR record of a public IP address +type DeleteReverseDNSFromPublicIPAddress struct { + ID *UUID `json:"id,omitempty" doc:"the ID of the public IP address"` + _ bool `name:"deleteReverseDnsFromPublicIpAddress" description:"delete the PTR DNS record from the public IP address"` +} + +// Response returns the struct to unmarshal +func (*DeleteReverseDNSFromPublicIPAddress) Response() interface{} { + return new(BooleanResponse) +} + +// DeleteReverseDNSFromVirtualMachine is a command to create/delete the PTR record(s) of a virtual machine +type DeleteReverseDNSFromVirtualMachine struct { + ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` + _ bool `name:"deleteReverseDnsFromVirtualMachine" description:"Delete the PTR DNS record(s) from the virtual machine"` +} + +// Response returns the struct to unmarshal +func (*DeleteReverseDNSFromVirtualMachine) Response() interface{} { + return new(BooleanResponse) +} + +// QueryReverseDNSForPublicIPAddress is a command to create/query the PTR record of a public IP address +type QueryReverseDNSForPublicIPAddress struct { + ID *UUID `json:"id,omitempty" doc:"the ID of the public IP address"` + _ bool `name:"queryReverseDnsForPublicIpAddress" description:"Query the PTR DNS record for the public IP address"` +} + +// Response returns the struct to unmarshal +func (*QueryReverseDNSForPublicIPAddress) Response() interface{} { + return new(IPAddress) +} + +// QueryReverseDNSForVirtualMachine is a command to create/query the PTR record(s) of a virtual machine +type QueryReverseDNSForVirtualMachine struct { + ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` + _ bool `name:"queryReverseDnsForVirtualMachine" description:"Query the PTR DNS record(s) for the virtual machine"` +} + +// Response returns the struct to unmarshal +func (*QueryReverseDNSForVirtualMachine) Response() interface{} { + return new(VirtualMachine) +} + +// UpdateReverseDNSForPublicIPAddress is a command to create/update the PTR record of a public IP address +type UpdateReverseDNSForPublicIPAddress struct { + DomainName string `json:"domainname,omitempty" doc:"the domain name for the PTR record. It must have a valid TLD"` + ID *UUID `json:"id,omitempty" doc:"the ID of the public IP address"` + _ bool `name:"updateReverseDnsForPublicIpAddress" description:"Update/create the PTR DNS record for the public IP address"` +} + +// Response returns the struct to unmarshal +func (*UpdateReverseDNSForPublicIPAddress) Response() interface{} { + return new(IPAddress) +} + +// UpdateReverseDNSForVirtualMachine is a command to create/update the PTR record(s) of a virtual machine +type UpdateReverseDNSForVirtualMachine struct { + DomainName string `json:"domainname,omitempty" doc:"the domain name for the PTR record(s). It must have a valid TLD"` + ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` + _ bool `name:"updateReverseDnsForVirtualMachine" description:"Update/create the PTR DNS record(s) for the virtual machine"` +} + +// Response returns the struct to unmarshal +func (*UpdateReverseDNSForVirtualMachine) Response() interface{} { + return new(VirtualMachine) +} diff --git a/vendor/github.com/exoscale/egoscale/runstatus.go b/vendor/github.com/exoscale/egoscale/runstatus.go new file mode 100644 index 000000000..e1b6eb5e6 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/runstatus.go @@ -0,0 +1,130 @@ +package egoscale + +import ( + "context" + "crypto/hmac" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strings" + "time" +) + +// RunstatusValidationErrorResponse represents an error in the API +type RunstatusValidationErrorResponse map[string][]string + +// RunstatusErrorResponse represents the default errors +type RunstatusErrorResponse struct { + Detail string `json:"detail"` +} + +// runstatusPagesURL is the only URL that cannot be guessed +const runstatusPagesURL = "/pages" + +// Error formats the DNSerror into a string +func (req RunstatusErrorResponse) Error() string { + return fmt.Sprintf("Runstatus error: %s", req.Detail) +} + +// Error formats the DNSerror into a string +func (req RunstatusValidationErrorResponse) Error() string { + if len(req) > 0 { + errs := []string{} + for name, ss := range req { + if len(ss) > 0 { + errs = append(errs, fmt.Sprintf("%s: %s", name, strings.Join(ss, ", "))) + } + } + return fmt.Sprintf("Runstatus error: %s", strings.Join(errs, "; ")) + } + return "Runstatus error" +} + +func (client *Client) runstatusRequest(ctx context.Context, uri string, structParam interface{}, method string) (json.RawMessage, error) { + reqURL, err := url.Parse(uri) + if err != nil { + return nil, err + } + if reqURL.Scheme == "" { + return nil, fmt.Errorf("only absolute URI are considered valid, got %q", uri) + } + + var params string + if structParam != nil { + m, err := json.Marshal(structParam) + if err != nil { + return nil, err + } + params = string(m) + } + + req, err := http.NewRequest(method, reqURL.String(), strings.NewReader(params)) + if err != nil { + return nil, err + } + + time := time.Now().Local().Format("2006-01-02T15:04:05-0700") + + payload := fmt.Sprintf("%s%s%s", req.URL.String(), time, params) + + mac := hmac.New(sha256.New, []byte(client.apiSecret)) + _, err = mac.Write([]byte(payload)) + if err != nil { + return nil, err + } + signature := hex.EncodeToString(mac.Sum(nil)) + + var hdr = make(http.Header) + + hdr.Add("Authorization", fmt.Sprintf("Exoscale-HMAC-SHA256 %s:%s", client.APIKey, signature)) + hdr.Add("Exoscale-Date", time) + hdr.Add("Accept", "application/json") + if params != "" { + hdr.Add("Content-Type", "application/json") + } + req.Header = hdr + + req = req.WithContext(ctx) + + resp, err := client.HTTPClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() // nolint: errcheck + + if resp.StatusCode == 204 { + if method != "DELETE" { + return nil, fmt.Errorf("only DELETE is expected to produce 204, was %q", method) + } + return nil, nil + } + + contentType := resp.Header.Get("content-type") + if !strings.Contains(contentType, "application/json") { + return nil, fmt.Errorf(`response %d content-type expected to be "application/json", got %q`, resp.StatusCode, contentType) + } + + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + if resp.StatusCode >= 400 { + rerr := new(RunstatusValidationErrorResponse) + if err := json.Unmarshal(b, rerr); err == nil { + return nil, rerr + } + rverr := new(RunstatusErrorResponse) + if err := json.Unmarshal(b, rverr); err != nil { + return nil, err + } + + return nil, rverr + } + + return b, nil +} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_event.go b/vendor/github.com/exoscale/egoscale/runstatus_event.go new file mode 100644 index 000000000..1509e43d6 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/runstatus_event.go @@ -0,0 +1,37 @@ +package egoscale + +import ( + "context" + "fmt" + "time" +) + +// RunstatusEvent is a runstatus event +type RunstatusEvent struct { + Created *time.Time `json:"created,omitempty"` + State string `json:"state,omitempty"` + Status string `json:"status"` + Text string `json:"text"` +} + +// UpdateRunstatusIncident create runstatus incident event +// Events can be updates or final message with status completed. +func (client *Client) UpdateRunstatusIncident(ctx context.Context, incident RunstatusIncident, event RunstatusEvent) error { + if incident.EventsURL == "" { + return fmt.Errorf("empty Events URL for %#v", incident) + } + + _, err := client.runstatusRequest(ctx, incident.EventsURL, event, "POST") + return err +} + +// UpdateRunstatusMaintenance adds a event to a maintenance. +// Events can be updates or final message with status completed. +func (client *Client) UpdateRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance, event RunstatusEvent) error { + if maintenance.EventsURL == "" { + return fmt.Errorf("empty Events URL for %#v", maintenance) + } + + _, err := client.runstatusRequest(ctx, maintenance.EventsURL, event, "POST") + return err +} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_incident.go b/vendor/github.com/exoscale/egoscale/runstatus_incident.go new file mode 100644 index 000000000..456f81352 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/runstatus_incident.go @@ -0,0 +1,176 @@ +package egoscale + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "time" +) + +// RunstatusIncident is a runstatus incident +type RunstatusIncident struct { + EndDate *time.Time `json:"end_date,omitempty"` + Events []RunstatusEvent `json:"events,omitempty"` + EventsURL string `json:"events_url,omitempty"` + ID int `json:"id,omitempty"` + PageURL string `json:"page_url,omitempty"` // fake field + PostMortem string `json:"post_mortem,omitempty"` + RealTime bool `json:"real_time,omitempty"` + Services []string `json:"services"` + StartDate *time.Time `json:"start_date,omitempty"` + State string `json:"state"` + Status string `json:"status"` + StatusText string `json:"status_text"` + Title string `json:"title"` + URL string `json:"url,omitempty"` +} + +// Match returns true if the other incident has got similarities with itself +func (incident RunstatusIncident) Match(other RunstatusIncident) bool { + if other.Title != "" && incident.Title == other.Title { + return true + } + + if other.ID > 0 && incident.ID == other.ID { + return true + } + + return false +} + +// RunstatusIncidentList is a list of incident +type RunstatusIncidentList struct { + Next string `json:"next"` + Previous string `json:"previous"` + Incidents []RunstatusIncident `json:"results"` +} + +// GetRunstatusIncident retrieves the details of a specific incident. +func (client *Client) GetRunstatusIncident(ctx context.Context, incident RunstatusIncident) (*RunstatusIncident, error) { + if incident.URL != "" { + return client.getRunstatusIncident(ctx, incident.URL) + } + + if incident.PageURL == "" { + return nil, fmt.Errorf("empty Page URL for %#v", incident) + } + + page, err := client.getRunstatusPage(ctx, incident.PageURL) + if err != nil { + return nil, err + } + + for i := range page.Incidents { + j := &page.Incidents[i] + if j.Match(incident) { + return j, nil + } + } + + return nil, errors.New("incident not found") +} + +func (client *Client) getRunstatusIncident(ctx context.Context, incidentURL string) (*RunstatusIncident, error) { + resp, err := client.runstatusRequest(ctx, incidentURL, nil, "GET") + if err != nil { + return nil, err + } + + i := new(RunstatusIncident) + if err := json.Unmarshal(resp, i); err != nil { + return nil, err + } + return i, nil +} + +// ListRunstatusIncidents lists the incidents for a specific page. +func (client *Client) ListRunstatusIncidents(ctx context.Context, page RunstatusPage) ([]RunstatusIncident, error) { + if page.IncidentsURL == "" { + return nil, fmt.Errorf("empty Incidents URL for %#v", page) + } + + results := make([]RunstatusIncident, 0) + + var err error + client.PaginateRunstatusIncidents(ctx, page, func(incident *RunstatusIncident, e error) bool { + if e != nil { + err = e + return false + } + + results = append(results, *incident) + return true + }) + + return results, err +} + +// PaginateRunstatusIncidents paginate Incidents +func (client *Client) PaginateRunstatusIncidents(ctx context.Context, page RunstatusPage, callback func(*RunstatusIncident, error) bool) { + if page.IncidentsURL == "" { + callback(nil, fmt.Errorf("empty Incidents URL for %#v", page)) + return + } + + incidentsURL := page.IncidentsURL + for incidentsURL != "" { + resp, err := client.runstatusRequest(ctx, incidentsURL, nil, "GET") + if err != nil { + callback(nil, err) + return + } + + var is *RunstatusIncidentList + if err := json.Unmarshal(resp, &is); err != nil { + callback(nil, err) + return + } + + for i := range is.Incidents { + if cont := callback(&is.Incidents[i], nil); !cont { + return + } + } + + incidentsURL = is.Next + } +} + +// CreateRunstatusIncident create runstatus incident +func (client *Client) CreateRunstatusIncident(ctx context.Context, incident RunstatusIncident) (*RunstatusIncident, error) { + if incident.PageURL == "" { + return nil, fmt.Errorf("empty Page URL for %#v", incident) + } + + page, err := client.getRunstatusPage(ctx, incident.PageURL) + if err != nil { + return nil, err + } + + if page.IncidentsURL == "" { + return nil, fmt.Errorf("empty Incidents URL for %#v", page) + } + + resp, err := client.runstatusRequest(ctx, page.IncidentsURL, incident, "POST") + if err != nil { + return nil, err + } + + i := &RunstatusIncident{} + if err := json.Unmarshal(resp, &i); err != nil { + return nil, err + } + + return i, nil +} + +// DeleteRunstatusIncident delete runstatus incident +func (client *Client) DeleteRunstatusIncident(ctx context.Context, incident RunstatusIncident) error { + if incident.URL == "" { + return fmt.Errorf("empty URL for %#v", incident) + } + + _, err := client.runstatusRequest(ctx, incident.URL, nil, "DELETE") + return err +} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_maintenance.go b/vendor/github.com/exoscale/egoscale/runstatus_maintenance.go new file mode 100644 index 000000000..07372466c --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/runstatus_maintenance.go @@ -0,0 +1,209 @@ +package egoscale + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "log" + "net/url" + "path" + "strconv" + "time" +) + +// RunstatusMaintenance is a runstatus maintenance +type RunstatusMaintenance struct { + Created *time.Time `json:"created,omitempty"` + Description string `json:"description,omitempty"` + EndDate *time.Time `json:"end_date"` + Events []RunstatusEvent `json:"events,omitempty"` + EventsURL string `json:"events_url,omitempty"` + ID int `json:"id,omitempty"` // missing field + PageURL string `json:"page_url,omitempty"` // fake field + RealTime bool `json:"real_time,omitempty"` + Services []string `json:"services"` + StartDate *time.Time `json:"start_date"` + Status string `json:"status"` + Title string `json:"title"` + URL string `json:"url,omitempty"` +} + +// Match returns true if the other maintenance has got similarities with itself +func (maintenance RunstatusMaintenance) Match(other RunstatusMaintenance) bool { + if other.Title != "" && maintenance.Title == other.Title { + return true + } + + if other.ID > 0 && maintenance.ID == other.ID { + return true + } + + return false +} + +// FakeID fills up the ID field as it's currently missing +func (maintenance *RunstatusMaintenance) FakeID() error { + if maintenance.ID > 0 { + return nil + } + + if maintenance.URL == "" { + return fmt.Errorf("empty URL for %#v", maintenance) + } + + u, err := url.Parse(maintenance.URL) + if err != nil { + return err + } + + s := path.Base(u.Path) + id, err := strconv.Atoi(s) + if err != nil { + return err + } + maintenance.ID = id + return nil +} + +// RunstatusMaintenanceList is a list of incident +type RunstatusMaintenanceList struct { + Next string `json:"next"` + Previous string `json:"previous"` + Maintenances []RunstatusMaintenance `json:"results"` +} + +// GetRunstatusMaintenance retrieves the details of a specific maintenance. +func (client *Client) GetRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance) (*RunstatusMaintenance, error) { + if maintenance.URL != "" { + return client.getRunstatusMaintenance(ctx, maintenance.URL) + } + + if maintenance.PageURL == "" { + return nil, fmt.Errorf("empty Page URL for %#v", maintenance) + } + + page, err := client.getRunstatusPage(ctx, maintenance.PageURL) + if err != nil { + return nil, err + } + + for i := range page.Maintenances { + m := &page.Maintenances[i] + if m.Match(maintenance) { + if err := m.FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", m, err) + } + return m, nil + } + } + + return nil, errors.New("maintenance not found") +} + +func (client *Client) getRunstatusMaintenance(ctx context.Context, maintenanceURL string) (*RunstatusMaintenance, error) { + resp, err := client.runstatusRequest(ctx, maintenanceURL, nil, "GET") + if err != nil { + return nil, err + } + + m := new(RunstatusMaintenance) + if err := json.Unmarshal(resp, m); err != nil { + return nil, err + } + return m, nil +} + +// ListRunstatusMaintenances returns the list of maintenances for the page. +func (client *Client) ListRunstatusMaintenances(ctx context.Context, page RunstatusPage) ([]RunstatusMaintenance, error) { + if page.MaintenancesURL == "" { + return nil, fmt.Errorf("empty Maintenances URL for %#v", page) + } + + results := make([]RunstatusMaintenance, 0) + + var err error + client.PaginateRunstatusMaintenances(ctx, page, func(maintenance *RunstatusMaintenance, e error) bool { + if e != nil { + err = e + return false + } + + results = append(results, *maintenance) + return true + }) + + return results, err +} + +// PaginateRunstatusMaintenances paginate Maintenances +func (client *Client) PaginateRunstatusMaintenances(ctx context.Context, page RunstatusPage, callback func(*RunstatusMaintenance, error) bool) { // nolint: dupl + if page.MaintenancesURL == "" { + callback(nil, fmt.Errorf("empty Maintenances URL for %#v", page)) + return + } + + maintenancesURL := page.MaintenancesURL + for maintenancesURL != "" { + resp, err := client.runstatusRequest(ctx, maintenancesURL, nil, "GET") + if err != nil { + callback(nil, err) + return + } + + var ms *RunstatusMaintenanceList + if err := json.Unmarshal(resp, &ms); err != nil { + callback(nil, err) + return + } + + for i := range ms.Maintenances { + if err := ms.Maintenances[i].FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", ms.Maintenances[i], err) + } + if cont := callback(&ms.Maintenances[i], nil); !cont { + return + } + } + + maintenancesURL = ms.Next + } +} + +// CreateRunstatusMaintenance create runstatus Maintenance +func (client *Client) CreateRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance) (*RunstatusMaintenance, error) { + if maintenance.PageURL == "" { + return nil, fmt.Errorf("empty Page URL for %#v", maintenance) + } + + page, err := client.getRunstatusPage(ctx, maintenance.PageURL) + if err != nil { + return nil, err + } + + resp, err := client.runstatusRequest(ctx, page.MaintenancesURL, maintenance, "POST") + if err != nil { + return nil, err + } + + m := &RunstatusMaintenance{} + if err := json.Unmarshal(resp, &m); err != nil { + return nil, err + } + + if err := m.FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", m, err) + } + + return m, nil +} + +// DeleteRunstatusMaintenance delete runstatus Maintenance +func (client *Client) DeleteRunstatusMaintenance(ctx context.Context, maintenance RunstatusMaintenance) error { + if maintenance.URL == "" { + return fmt.Errorf("empty URL for %#v", maintenance) + } + + _, err := client.runstatusRequest(ctx, maintenance.URL, nil, "DELETE") + return err +} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_page.go b/vendor/github.com/exoscale/egoscale/runstatus_page.go new file mode 100644 index 000000000..a38f94a51 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/runstatus_page.go @@ -0,0 +1,169 @@ +package egoscale + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "log" + "time" +) + +// RunstatusPage runstatus page +type RunstatusPage struct { + Created *time.Time `json:"created,omitempty"` + DarkTheme bool `json:"dark_theme,omitempty"` + Domain string `json:"domain,omitempty"` + GradientEnd string `json:"gradient_end,omitempty"` + GradientStart string `json:"gradient_start,omitempty"` + HeaderBackground string `json:"header_background,omitempty"` + ID int `json:"id,omitempty"` + Incidents []RunstatusIncident `json:"incidents,omitempty"` + IncidentsURL string `json:"incidents_url,omitempty"` + Logo string `json:"logo,omitempty"` + Maintenances []RunstatusMaintenance `json:"maintenances,omitempty"` + MaintenancesURL string `json:"maintenances_url,omitempty"` + Name string `json:"name"` // fake field (used to post a new runstatus page) + OkText string `json:"ok_text,omitempty"` + Plan string `json:"plan,omitempty"` + PublicURL string `json:"public_url,omitempty"` + Services []RunstatusService `json:"services,omitempty"` + ServicesURL string `json:"services_url,omitempty"` + State string `json:"state,omitempty"` + Subdomain string `json:"subdomain"` + SupportEmail string `json:"support_email,omitempty"` + TimeZone string `json:"time_zone,omitempty"` + Title string `json:"title,omitempty"` + TitleColor string `json:"title_color,omitempty"` + TwitterUsername string `json:"twitter_username,omitempty"` + URL string `json:"url,omitempty"` +} + +// Match returns true if the other page has got similarities with itself +func (page RunstatusPage) Match(other RunstatusPage) bool { + if other.Subdomain != "" && page.Subdomain == other.Subdomain { + return true + } + + if other.ID > 0 && page.ID == other.ID { + return true + } + + return false +} + +// RunstatusPageList runstatus page list +type RunstatusPageList struct { + Next string `json:"next"` + Previous string `json:"previous"` + Pages []RunstatusPage `json:"results"` +} + +// CreateRunstatusPage create runstatus page +func (client *Client) CreateRunstatusPage(ctx context.Context, page RunstatusPage) (*RunstatusPage, error) { + resp, err := client.runstatusRequest(ctx, client.Endpoint+runstatusPagesURL, page, "POST") + if err != nil { + return nil, err + } + + var p *RunstatusPage + if err := json.Unmarshal(resp, &p); err != nil { + return nil, err + } + + return p, nil +} + +// DeleteRunstatusPage delete runstatus page +func (client *Client) DeleteRunstatusPage(ctx context.Context, page RunstatusPage) error { + if page.URL == "" { + return fmt.Errorf("empty URL for %#v", page) + } + _, err := client.runstatusRequest(ctx, page.URL, nil, "DELETE") + return err +} + +// GetRunstatusPage fetches the runstatus page +func (client *Client) GetRunstatusPage(ctx context.Context, page RunstatusPage) (*RunstatusPage, error) { + if page.URL != "" { + return client.getRunstatusPage(ctx, page.URL) + } + + ps, err := client.ListRunstatusPages(ctx) + if err != nil { + return nil, err + } + + for i := range ps { + if ps[i].Match(page) { + return client.getRunstatusPage(ctx, ps[i].URL) + } + } + + return nil, errors.New("page not found") +} + +func (client *Client) getRunstatusPage(ctx context.Context, pageURL string) (*RunstatusPage, error) { + resp, err := client.runstatusRequest(ctx, pageURL, nil, "GET") + if err != nil { + return nil, err + } + + p := new(RunstatusPage) + if err := json.Unmarshal(resp, p); err != nil { + return nil, err + } + + // NOTE: fix the missing IDs + for i := range p.Maintenances { + if err := p.Maintenances[i].FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", p.Maintenances[i], err) + } + } + for i := range p.Services { + if err := p.Services[i].FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", p.Services[i], err) + } + } + + return p, nil +} + +// ListRunstatusPages list all the runstatus pages +func (client *Client) ListRunstatusPages(ctx context.Context) ([]RunstatusPage, error) { + resp, err := client.runstatusRequest(ctx, client.Endpoint+runstatusPagesURL, nil, "GET") + if err != nil { + return nil, err + } + + var p *RunstatusPageList + if err := json.Unmarshal(resp, &p); err != nil { + return nil, err + } + + return p.Pages, nil +} + +// PaginateRunstatusPages paginate on runstatus pages +func (client *Client) PaginateRunstatusPages(ctx context.Context, callback func(pages []RunstatusPage, e error) bool) { + pageURL := client.Endpoint + runstatusPagesURL + for pageURL != "" { + resp, err := client.runstatusRequest(ctx, pageURL, nil, "GET") + if err != nil { + callback(nil, err) + return + } + + var p *RunstatusPageList + if err := json.Unmarshal(resp, &p); err != nil { + callback(nil, err) + return + } + + if ok := callback(p.Pages, nil); ok { + return + } + + pageURL = p.Next + } +} diff --git a/vendor/github.com/exoscale/egoscale/runstatus_service.go b/vendor/github.com/exoscale/egoscale/runstatus_service.go new file mode 100644 index 000000000..764eeea5b --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/runstatus_service.go @@ -0,0 +1,202 @@ +package egoscale + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "log" + "net/url" + "path" + "strconv" +) + +// RunstatusService is a runstatus service +type RunstatusService struct { + ID int `json:"id"` // missing field + Name string `json:"name"` + PageURL string `json:"page_url,omitempty"` // fake field + State string `json:"state,omitempty"` + URL string `json:"url,omitempty"` +} + +// FakeID fills up the ID field as it's currently missing +func (service *RunstatusService) FakeID() error { + if service.ID > 0 { + return nil + } + + if service.URL == "" { + return fmt.Errorf("empty URL for %#v", service) + } + + u, err := url.Parse(service.URL) + if err != nil { + return err + } + + s := path.Base(u.Path) + id, err := strconv.Atoi(s) + if err != nil { + return err + } + service.ID = id + return nil +} + +// Match returns true if the other service has got similarities with itself +func (service RunstatusService) Match(other RunstatusService) bool { + if other.Name != "" && service.Name == other.Name { + return true + } + + if other.ID > 0 && service.ID == other.ID { + return true + } + + return false +} + +// RunstatusServiceList service list +type RunstatusServiceList struct { + Next string `json:"next"` + Previous string `json:"previous"` + Services []RunstatusService `json:"results"` +} + +// DeleteRunstatusService delete runstatus service +func (client *Client) DeleteRunstatusService(ctx context.Context, service RunstatusService) error { + if service.URL == "" { + return fmt.Errorf("empty URL for %#v", service) + } + + _, err := client.runstatusRequest(ctx, service.URL, nil, "DELETE") + return err +} + +// CreateRunstatusService create runstatus service +func (client *Client) CreateRunstatusService(ctx context.Context, service RunstatusService) (*RunstatusService, error) { + if service.PageURL == "" { + return nil, fmt.Errorf("empty Page URL for %#v", service) + } + + page, err := client.GetRunstatusPage(ctx, RunstatusPage{URL: service.PageURL}) + if err != nil { + return nil, err + } + + resp, err := client.runstatusRequest(ctx, page.ServicesURL, service, "POST") + if err != nil { + return nil, err + } + + s := &RunstatusService{} + if err := json.Unmarshal(resp, s); err != nil { + return nil, err + } + + return s, nil +} + +// GetRunstatusService displays service detail. +func (client *Client) GetRunstatusService(ctx context.Context, service RunstatusService) (*RunstatusService, error) { + if service.URL != "" { + return client.getRunstatusService(ctx, service.URL) + } + + if service.PageURL == "" { + return nil, fmt.Errorf("empty Page URL in %#v", service) + } + + page, err := client.getRunstatusPage(ctx, service.PageURL) + if err != nil { + return nil, err + } + + for i := range page.Services { + s := &page.Services[i] + if s.Match(service) { + if err := s.FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", s, err) + } + return s, nil + } + } + + return nil, errors.New("service not found") +} + +func (client *Client) getRunstatusService(ctx context.Context, serviceURL string) (*RunstatusService, error) { + resp, err := client.runstatusRequest(ctx, serviceURL, nil, "GET") + if err != nil { + return nil, err + } + + s := &RunstatusService{} + if err := json.Unmarshal(resp, &s); err != nil { + return nil, err + } + + if err := s.FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", s, err) + } + + return s, nil +} + +// ListRunstatusServices displays the list of services. +func (client *Client) ListRunstatusServices(ctx context.Context, page RunstatusPage) ([]RunstatusService, error) { + if page.ServicesURL == "" { + return nil, fmt.Errorf("empty Services URL for %#v", page) + } + + results := make([]RunstatusService, 0) + + var err error + client.PaginateRunstatusServices(ctx, page, func(service *RunstatusService, e error) bool { + if e != nil { + err = e + return false + } + + results = append(results, *service) + return true + }) + + return results, err +} + +// PaginateRunstatusServices paginates Services +func (client *Client) PaginateRunstatusServices(ctx context.Context, page RunstatusPage, callback func(*RunstatusService, error) bool) { // nolint: dupl + if page.ServicesURL == "" { + callback(nil, fmt.Errorf("empty Services URL for %#v", page)) + return + } + + servicesURL := page.ServicesURL + for servicesURL != "" { + resp, err := client.runstatusRequest(ctx, servicesURL, nil, "GET") + if err != nil { + callback(nil, err) + return + } + + var ss *RunstatusServiceList + if err := json.Unmarshal(resp, &ss); err != nil { + callback(nil, err) + return + } + + for i := range ss.Services { + if err := ss.Services[i].FakeID(); err != nil { + log.Printf("bad fake ID for %#v, %s", ss.Services[i], err) + } + + if cont := callback(&ss.Services[i], nil); !cont { + return + } + } + + servicesURL = ss.Next + } +} diff --git a/vendor/github.com/exoscale/egoscale/security_groups.go b/vendor/github.com/exoscale/egoscale/security_groups.go new file mode 100644 index 000000000..a11e53a4f --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/security_groups.go @@ -0,0 +1,226 @@ +package egoscale + +import ( + "context" + "fmt" + "net/url" + "strconv" + "strings" +) + +// SecurityGroup represent a firewalling set of rules +type SecurityGroup struct { + Account string `json:"account,omitempty" doc:"the account owning the security group"` + Description string `json:"description,omitempty" doc:"the description of the security group"` + EgressRule []EgressRule `json:"egressrule,omitempty" doc:"the list of egress rules associated with the security group"` + ID *UUID `json:"id" doc:"the ID of the security group"` + IngressRule []IngressRule `json:"ingressrule,omitempty" doc:"the list of ingress rules associated with the security group"` + Name string `json:"name,omitempty" doc:"the name of the security group"` +} + +// UserSecurityGroup converts a SecurityGroup to a UserSecurityGroup +func (sg SecurityGroup) UserSecurityGroup() UserSecurityGroup { + return UserSecurityGroup{ + Group: sg.Name, + } +} + +// ListRequest builds the ListSecurityGroups request +func (sg SecurityGroup) ListRequest() (ListCommand, error) { + req := &ListSecurityGroups{ + ID: sg.ID, + SecurityGroupName: sg.Name, + } + + return req, nil +} + +// Delete deletes the given Security Group +func (sg SecurityGroup) Delete(ctx context.Context, client *Client) error { + if sg.ID == nil && sg.Name == "" { + return fmt.Errorf("a SecurityGroup may only be deleted using ID or Name") + } + + req := &DeleteSecurityGroup{} + + if sg.ID != nil { + req.ID = sg.ID + } else { + req.Name = sg.Name + } + + return client.BooleanRequestWithContext(ctx, req) +} + +// RuleByID returns IngressRule or EgressRule by a rule ID +func (sg SecurityGroup) RuleByID(ruleID UUID) (*IngressRule, *EgressRule) { + for i, in := range sg.IngressRule { + if in.RuleID.Equal(ruleID) { + return &sg.IngressRule[i], nil + } + } + + for i, out := range sg.EgressRule { + if out.RuleID.Equal(ruleID) { + return nil, &sg.EgressRule[i] + } + } + + return nil, nil +} + +// IngressRule represents the ingress rule +type IngressRule struct { + CIDR *CIDR `json:"cidr,omitempty" doc:"the CIDR notation for the base IP address of the security group rule"` + Description string `json:"description,omitempty" doc:"description of the security group rule"` + EndPort uint16 `json:"endport,omitempty" doc:"the ending port of the security group rule "` + IcmpCode uint8 `json:"icmpcode,omitempty" doc:"the code for the ICMP message response"` + IcmpType uint8 `json:"icmptype,omitempty" doc:"the type of the ICMP message response"` + Protocol string `json:"protocol,omitempty" doc:"the protocol of the security group rule"` + RuleID *UUID `json:"ruleid" doc:"the id of the security group rule"` + SecurityGroupName string `json:"securitygroupname,omitempty" doc:"security group name"` + StartPort uint16 `json:"startport,omitempty" doc:"the starting port of the security group rule"` +} + +// EgressRule represents the ingress rule +type EgressRule IngressRule + +// UserSecurityGroup represents the traffic of another security group +type UserSecurityGroup struct { + Group string `json:"group,omitempty"` +} + +// String gives the UserSecurityGroup name +func (usg UserSecurityGroup) String() string { + return usg.Group +} + +// CreateSecurityGroup represents a security group creation +type CreateSecurityGroup struct { + Name string `json:"name" doc:"name of the security group"` + Description string `json:"description,omitempty" doc:"the description of the security group"` + _ bool `name:"createSecurityGroup" description:"Creates a security group"` +} + +// Response returns the struct to unmarshal +func (CreateSecurityGroup) Response() interface{} { + return new(SecurityGroup) +} + +// DeleteSecurityGroup represents a security group deletion +type DeleteSecurityGroup struct { + ID *UUID `json:"id,omitempty" doc:"The ID of the security group. Mutually exclusive with name parameter"` + Name string `json:"name,omitempty" doc:"The ID of the security group. Mutually exclusive with id parameter"` + _ bool `name:"deleteSecurityGroup" description:"Deletes security group"` +} + +// Response returns the struct to unmarshal +func (DeleteSecurityGroup) Response() interface{} { + return new(BooleanResponse) +} + +// AuthorizeSecurityGroupIngress (Async) represents the ingress rule creation +type AuthorizeSecurityGroupIngress struct { + CIDRList []CIDR `json:"cidrlist,omitempty" doc:"the cidr list associated"` + Description string `json:"description,omitempty" doc:"the description of the ingress/egress rule"` + EndPort uint16 `json:"endport,omitempty" doc:"end port for this ingress/egress rule"` + IcmpCode uint8 `json:"icmpcode,omitempty" doc:"error code for this icmp message"` + IcmpType uint8 `json:"icmptype,omitempty" doc:"type of the icmp message being sent"` + Protocol string `json:"protocol,omitempty" doc:"TCP is default. UDP, ICMP, ICMPv6, AH, ESP, GRE, IPIP are the other supported protocols"` + SecurityGroupID *UUID `json:"securitygroupid,omitempty" doc:"The ID of the security group. Mutually exclusive with securitygroupname parameter"` + SecurityGroupName string `json:"securitygroupname,omitempty" doc:"The name of the security group. Mutually exclusive with securitygroupid parameter"` + StartPort uint16 `json:"startport,omitempty" doc:"start port for this ingress/egress rule"` + UserSecurityGroupList []UserSecurityGroup `json:"usersecuritygrouplist,omitempty" doc:"user to security group mapping"` + _ bool `name:"authorizeSecurityGroupIngress" description:"Authorize a particular ingress/egress rule for this security group"` +} + +// Response returns the struct to unmarshal +func (AuthorizeSecurityGroupIngress) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (AuthorizeSecurityGroupIngress) AsyncResponse() interface{} { + return new(SecurityGroup) +} + +func (req AuthorizeSecurityGroupIngress) onBeforeSend(params url.Values) error { + // ICMP code and type may be zero but can also be omitted... + if strings.HasPrefix(strings.ToLower(req.Protocol), "icmp") { + params.Set("icmpcode", strconv.FormatInt(int64(req.IcmpCode), 10)) + params.Set("icmptype", strconv.FormatInt(int64(req.IcmpType), 10)) + } + // StartPort may be zero but can also be omitted... + if req.EndPort != 0 && req.StartPort == 0 { + params.Set("startport", "0") + } + return nil +} + +// AuthorizeSecurityGroupEgress (Async) represents the egress rule creation +type AuthorizeSecurityGroupEgress AuthorizeSecurityGroupIngress + +// Response returns the struct to unmarshal +func (AuthorizeSecurityGroupEgress) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (AuthorizeSecurityGroupEgress) AsyncResponse() interface{} { + return new(SecurityGroup) +} + +func (req AuthorizeSecurityGroupEgress) onBeforeSend(params url.Values) error { + return (AuthorizeSecurityGroupIngress)(req).onBeforeSend(params) +} + +// RevokeSecurityGroupIngress (Async) represents the ingress/egress rule deletion +type RevokeSecurityGroupIngress struct { + ID *UUID `json:"id" doc:"The ID of the ingress rule"` + _ bool `name:"revokeSecurityGroupIngress" description:"Deletes a particular ingress rule from this security group"` +} + +// Response returns the struct to unmarshal +func (RevokeSecurityGroupIngress) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RevokeSecurityGroupIngress) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// RevokeSecurityGroupEgress (Async) represents the ingress/egress rule deletion +type RevokeSecurityGroupEgress struct { + ID *UUID `json:"id" doc:"The ID of the egress rule"` + _ bool `name:"revokeSecurityGroupEgress" description:"Deletes a particular egress rule from this security group"` +} + +// Response returns the struct to unmarshal +func (RevokeSecurityGroupEgress) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RevokeSecurityGroupEgress) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +//go:generate go run generate/main.go -interface=Listable ListSecurityGroups + +// ListSecurityGroups represents a search for security groups +type ListSecurityGroups struct { + ID *UUID `json:"id,omitempty" doc:"list the security group by the id provided"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + SecurityGroupName string `json:"securitygroupname,omitempty" doc:"lists security groups by name"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"lists security groups by virtual machine id"` + _ bool `name:"listSecurityGroups" description:"Lists security groups"` +} + +// ListSecurityGroupsResponse represents a list of security groups +type ListSecurityGroupsResponse struct { + Count int `json:"count"` + SecurityGroup []SecurityGroup `json:"securitygroup"` +} diff --git a/vendor/github.com/exoscale/egoscale/securitygroups_response.go b/vendor/github.com/exoscale/egoscale/securitygroups_response.go new file mode 100644 index 000000000..ff08f333c --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/securitygroups_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListSecurityGroups) Response() interface{} { + return new(ListSecurityGroupsResponse) +} + +// ListRequest returns itself +func (ls *ListSecurityGroups) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListSecurityGroups) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListSecurityGroups) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListSecurityGroups) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListSecurityGroupsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListSecurityGroupsResponse was expected, got %T", resp)) + return + } + + for i := range items.SecurityGroup { + if !callback(&items.SecurityGroup[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/serialization.go b/vendor/github.com/exoscale/egoscale/serialization.go new file mode 100644 index 000000000..9794c57c0 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/serialization.go @@ -0,0 +1,404 @@ +package egoscale + +import ( + "encoding/base64" + "fmt" + "log" + "net" + "net/url" + "reflect" + "strconv" + "strings" +) + +func csQuotePlus(s string) string { + s = strings.ReplaceAll(s, "+", "%20") + // This line is used to safeguard the "*" when producing the signature + s = strings.ReplaceAll(s, "%2A", "*") + return s +} + +func csEncode(s string) string { + return csQuotePlus(url.QueryEscape(s)) +} + +// info returns the meta info of a command +// +// command is not a Command so it's easier to Test +func info(command interface{}) (*CommandInfo, error) { + typeof := reflect.TypeOf(command) + + // Going up the pointer chain to find the underlying struct + for typeof.Kind() == reflect.Ptr { + typeof = typeof.Elem() + } + + field, ok := typeof.FieldByName("_") + if !ok { + return nil, fmt.Errorf(`missing meta ("_") field in %#v`, command) + } + + name, nameOk := field.Tag.Lookup("name") + description, _ := field.Tag.Lookup("description") + + if !nameOk { + return nil, fmt.Errorf(`missing "name" key in the tag string of %#v`, command) + } + + info := &CommandInfo{ + Name: name, + Description: description, + } + + return info, nil +} + +// prepareValues uses a command to build a POST request +// +// command is not a Command so it's easier to Test +func prepareValues(prefix string, command interface{}) (url.Values, error) { + params := url.Values{} + + value := reflect.ValueOf(command) + typeof := reflect.TypeOf(command) + + // Going up the pointer chain to find the underlying struct + for typeof.Kind() == reflect.Ptr { + typeof = typeof.Elem() + value = value.Elem() + } + + // Checking for nil commands + if !value.IsValid() { + return nil, fmt.Errorf("cannot serialize the invalid value %#v", command) + } + + for i := 0; i < typeof.NumField(); i++ { + field := typeof.Field(i) + if field.Name == "_" { + continue + } + + val := value.Field(i) + tag := field.Tag + + var err error + var name string + var value interface{} + + if json, ok := tag.Lookup("json"); ok { + n, required := ExtractJSONTag(field.Name, json) + name = prefix + n + + switch val.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + value, err = prepareInt(val.Int(), required) + + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + value, err = prepareUint(val.Uint(), required) + + case reflect.Float32, reflect.Float64: + value, err = prepareFloat(val.Float(), required) + + case reflect.String: + value, err = prepareString(val.String(), required) + + case reflect.Bool: + value, err = prepareBool(val.Bool(), required) + + case reflect.Map: + if val.Len() == 0 { + if required { + err = fmt.Errorf("field is required, got empty map") + } + } else { + value, err = prepareMap(name, val.Interface()) + } + + case reflect.Ptr: + value, err = preparePtr(field.Type.Elem().Kind(), val, required) + + case reflect.Slice: + value, err = prepareSlice(name, field.Type, val, required) + + case reflect.Struct: + value, err = prepareStruct(val.Interface(), required) + + default: + if required { + err = fmt.Errorf("unsupported type") + } + } + } else { + switch val.Kind() { + case reflect.Struct: + value, err = prepareEmbedStruct(val.Interface()) + default: + log.Printf("[SKIP] %s.%s no json label found", typeof.Name(), field.Name) + } + } + + if err != nil { + return nil, fmt.Errorf("%s.%s (%v) %s", typeof.Name(), field.Name, val.Kind(), err) + } + + switch v := value.(type) { + case *string: + if name != "" && v != nil { + params.Set(name, *v) + } + case url.Values: + for k, xs := range v { + for _, x := range xs { + params.Add(k, x) + } + } + } + } + + return params, nil +} + +func prepareInt(v int64, required bool) (*string, error) { + if v == 0 { + if required { + return nil, fmt.Errorf("field is required, got %d", v) + } + return nil, nil + } + value := strconv.FormatInt(v, 10) + return &value, nil +} + +func prepareUint(v uint64, required bool) (*string, error) { + if v == 0 { + if required { + return nil, fmt.Errorf("field is required, got %d", v) + } + return nil, nil + } + + value := strconv.FormatUint(v, 10) + return &value, nil +} + +func prepareFloat(v float64, required bool) (*string, error) { + if v == 0 { + if required { + return nil, fmt.Errorf("field is required, got %f", v) + } + return nil, nil + } + value := strconv.FormatFloat(v, 'f', -1, 64) + return &value, nil +} + +func prepareString(v string, required bool) (*string, error) { + if v == "" { + if required { + return nil, fmt.Errorf("field is required, got %q", v) + } + return nil, nil + } + return &v, nil +} + +func prepareBool(v bool, required bool) (*string, error) { + value := strconv.FormatBool(v) + if !v { + if required { + return &value, nil + } + return nil, nil + } + + return &value, nil +} + +func prepareList(prefix string, slice interface{}) (url.Values, error) { + params := url.Values{} + value := reflect.ValueOf(slice) + + for i := 0; i < value.Len(); i++ { + ps, err := prepareValues(fmt.Sprintf("%s[%d].", prefix, i), value.Index(i).Interface()) + if err != nil { + return nil, err + } + + for k, xs := range ps { + for _, x := range xs { + params.Add(k, x) + } + } + } + + return params, nil +} + +func prepareMap(prefix string, m interface{}) (url.Values, error) { + value := url.Values{} + v := reflect.ValueOf(m) + + for i, key := range v.MapKeys() { + var keyName string + var keyValue string + + switch key.Kind() { + case reflect.String: + keyName = key.String() + default: + return value, fmt.Errorf("only map[string]string are supported (XXX)") + } + + val := v.MapIndex(key) + switch val.Kind() { + case reflect.String: + keyValue = val.String() + default: + return value, fmt.Errorf("only map[string]string are supported (XXX)") + } + + value.Set(fmt.Sprintf("%s[%d].%s", prefix, i, keyName), keyValue) + } + + return value, nil +} + +func preparePtr(kind reflect.Kind, val reflect.Value, required bool) (*string, error) { + if val.IsNil() { + if required { + return nil, fmt.Errorf("field is required, got empty ptr") + } + return nil, nil + } + + switch kind { + case reflect.Bool: + return prepareBool(val.Elem().Bool(), true) + case reflect.Struct: + return prepareStruct(val.Interface(), required) + default: + return nil, fmt.Errorf("kind %v is not supported as a ptr", kind) + } +} + +func prepareSlice(name string, fieldType reflect.Type, val reflect.Value, required bool) (interface{}, error) { + switch fieldType.Elem().Kind() { + case reflect.Uint8: + switch fieldType { + case reflect.TypeOf(net.IPv4zero): + ip := (net.IP)(val.Bytes()) + if ip == nil || ip.Equal(net.IP{}) { + if required { + return nil, fmt.Errorf("field is required, got zero IPv4 address") + } + } else { + value := ip.String() + return &value, nil + } + + case reflect.TypeOf(MAC48(0, 0, 0, 0, 0, 0)): + mac := val.Interface().(MACAddress) + s := mac.String() + if s == "" { + if required { + return nil, fmt.Errorf("field is required, got empty MAC address") + } + } else { + return &s, nil + } + default: + if val.Len() == 0 { + if required { + return nil, fmt.Errorf("field is required, got empty slice") + } + } else { + value := base64.StdEncoding.EncodeToString(val.Bytes()) + return &value, nil + } + } + case reflect.String: + if val.Len() == 0 { + if required { + return nil, fmt.Errorf("field is required, got empty slice") + } + } else { + elems := make([]string, 0, val.Len()) + for i := 0; i < val.Len(); i++ { + // XXX what if the value contains a comma? Double encode? + s := val.Index(i).String() + elems = append(elems, s) + } + value := strings.Join(elems, ",") + return &value, nil + } + default: + switch fieldType.Elem() { + case reflect.TypeOf(CIDR{}), reflect.TypeOf(UUID{}): + if val.Len() == 0 { + if required { + return nil, fmt.Errorf("field is required, got empty slice") + } + } else { + v := reflect.ValueOf(val.Interface()) + ss := make([]string, val.Len()) + for i := 0; i < v.Len(); i++ { + e := v.Index(i).Interface() + s, ok := e.(fmt.Stringer) + if !ok { + return nil, fmt.Errorf("not a String, %T", e) + } + ss[i] = s.String() + } + value := strings.Join(ss, ",") + return &value, nil + } + default: + if val.Len() == 0 { + if required { + return nil, fmt.Errorf("field is required, got empty slice") + } + } else { + return prepareList(name, val.Interface()) + } + } + } + + return nil, nil +} + +func prepareStruct(i interface{}, required bool) (*string, error) { + s, ok := i.(fmt.Stringer) + if !ok { + return nil, fmt.Errorf("struct field not a Stringer") + } + + if s == nil { + if required { + return nil, fmt.Errorf("field is required, got %#v", s) + } + } + + return prepareString(s.String(), required) +} + +func prepareEmbedStruct(i interface{}) (url.Values, error) { + return prepareValues("", i) +} + +// ExtractJSONTag returns the variable name or defaultName as well as if the field is required (!omitempty) +func ExtractJSONTag(defaultName, jsonTag string) (string, bool) { + tags := strings.Split(jsonTag, ",") + name := tags[0] + required := true + for _, tag := range tags { + if tag == "omitempty" { + required = false + } + } + + if name == "" || name == "omitempty" { + name = defaultName + } + return name, required +} diff --git a/vendor/github.com/exoscale/egoscale/service_offerings.go b/vendor/github.com/exoscale/egoscale/service_offerings.go new file mode 100644 index 000000000..8d3551467 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/service_offerings.go @@ -0,0 +1,77 @@ +package egoscale + +// ServiceOffering corresponds to the Compute Offerings +// +// A service offering correspond to some hardware features (CPU, RAM). +// +// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/service_offerings.html +type ServiceOffering struct { + Authorized bool `json:"authorized,omitempty" doc:"is the account/domain authorized to use this service offering"` + CPUNumber int `json:"cpunumber,omitempty" doc:"the number of CPU"` + CPUSpeed int `json:"cpuspeed,omitempty" doc:"the clock rate CPU speed in Mhz"` + Created string `json:"created,omitempty" doc:"the date this service offering was created"` + DefaultUse bool `json:"defaultuse,omitempty" doc:"is this a default system vm offering"` + DeploymentPlanner string `json:"deploymentplanner,omitempty" doc:"deployment strategy used to deploy VM."` + DiskBytesReadRate int64 `json:"diskBytesReadRate,omitempty" doc:"bytes read rate of the service offering"` + DiskBytesWriteRate int64 `json:"diskBytesWriteRate,omitempty" doc:"bytes write rate of the service offering"` + DiskIopsReadRate int64 `json:"diskIopsReadRate,omitempty" doc:"io requests read rate of the service offering"` + DiskIopsWriteRate int64 `json:"diskIopsWriteRate,omitempty" doc:"io requests write rate of the service offering"` + Displaytext string `json:"displaytext,omitempty" doc:"an alternate display text of the service offering."` + HostTags string `json:"hosttags,omitempty" doc:"the host tag for the service offering"` + HypervisorSnapshotReserve int `json:"hypervisorsnapshotreserve,omitempty" doc:"Hypervisor snapshot reserve space as a percent of a volume (for managed storage using Xen or VMware)"` + ID *UUID `json:"id" doc:"the id of the service offering"` + IsCustomized bool `json:"iscustomized,omitempty" doc:"is true if the offering is customized"` + IsCustomizedIops bool `json:"iscustomizediops,omitempty" doc:"true if disk offering uses custom iops, false otherwise"` + IsSystem bool `json:"issystem,omitempty" doc:"is this a system vm offering"` + IsVolatile bool `json:"isvolatile,omitempty" doc:"true if the vm needs to be volatile, i.e., on every reboot of vm from API root disk is discarded and creates a new root disk"` + LimitCPUUse bool `json:"limitcpuuse,omitempty" doc:"restrict the CPU usage to committed service offering"` + MaxIops int64 `json:"maxiops,omitempty" doc:"the max iops of the disk offering"` + Memory int `json:"memory,omitempty" doc:"the memory in MB"` + MinIops int64 `json:"miniops,omitempty" doc:"the min iops of the disk offering"` + Name string `json:"name,omitempty" doc:"the name of the service offering"` + NetworkRate int `json:"networkrate,omitempty" doc:"data transfer rate in megabits per second allowed."` + OfferHA bool `json:"offerha,omitempty" doc:"the ha support in the service offering"` + Restricted bool `json:"restricted,omitempty" doc:"is this offering restricted"` + ServiceOfferingDetails map[string]string `json:"serviceofferingdetails,omitempty" doc:"additional key/value details tied with this service offering"` + StorageType string `json:"storagetype,omitempty" doc:"the storage type for this service offering"` + SystemVMType string `json:"systemvmtype,omitempty" doc:"is this a the systemvm type for system vm offering"` + Tags string `json:"tags,omitempty" doc:"the tags for the service offering"` +} + +// ListRequest builds the ListSecurityGroups request +func (so ServiceOffering) ListRequest() (ListCommand, error) { + // Restricted cannot be applied here because it really has three states + req := &ListServiceOfferings{ + ID: so.ID, + Name: so.Name, + SystemVMType: so.SystemVMType, + } + + if so.IsSystem { + req.IsSystem = &so.IsSystem + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListServiceOfferings + +// ListServiceOfferings represents a query for service offerings +type ListServiceOfferings struct { + ID *UUID `json:"id,omitempty" doc:"ID of the service offering"` + IsSystem *bool `json:"issystem,omitempty" doc:"is this a system vm offering"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"name of the service offering"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + Restricted *bool `json:"restricted,omitempty" doc:"filter by the restriction flag: true to list only the restricted service offerings, false to list non-restricted service offerings, or nothing for all."` + SystemVMType string `json:"systemvmtype,omitempty" doc:"the system VM type. Possible types are \"consoleproxy\", \"secondarystoragevm\" or \"domainrouter\"."` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"the ID of the virtual machine. Pass this in if you want to see the available service offering that a virtual machine can be changed to."` + _ bool `name:"listServiceOfferings" description:"Lists all available service offerings."` +} + +// ListServiceOfferingsResponse represents a list of service offerings +type ListServiceOfferingsResponse struct { + Count int `json:"count"` + ServiceOffering []ServiceOffering `json:"serviceoffering"` +} diff --git a/vendor/github.com/exoscale/egoscale/serviceofferings_response.go b/vendor/github.com/exoscale/egoscale/serviceofferings_response.go new file mode 100644 index 000000000..a01d4aaf4 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/serviceofferings_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListServiceOfferings) Response() interface{} { + return new(ListServiceOfferingsResponse) +} + +// ListRequest returns itself +func (ls *ListServiceOfferings) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListServiceOfferings) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListServiceOfferings) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListServiceOfferings) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListServiceOfferingsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListServiceOfferingsResponse was expected, got %T", resp)) + return + } + + for i := range items.ServiceOffering { + if !callback(&items.ServiceOffering[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/snapshots.go b/vendor/github.com/exoscale/egoscale/snapshots.go new file mode 100644 index 000000000..ecd99d5b7 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/snapshots.go @@ -0,0 +1,160 @@ +package egoscale + +// SnapshotState represents the Snapshot.State enum +// +// See: https://github.com/apache/cloudstack/blob/master/api/src/main/java/com/cloud/storage/Snapshot.java +type SnapshotState string + +const ( + // Allocated ... (TODO) + Allocated SnapshotState = "Allocated" + // Creating ... (TODO) + Creating SnapshotState = "Creating" + // CreatedOnPrimary ... (TODO) + CreatedOnPrimary SnapshotState = "CreatedOnPrimary" + // BackingUp ... (TODO) + BackingUp SnapshotState = "BackingUp" + // BackedUp ... (TODO) + BackedUp SnapshotState = "BackedUp" + // Copying ... (TODO) + Copying SnapshotState = "Copying" + // Destroying ... (TODO) + Destroying SnapshotState = "Destroying" + // Destroyed ... (TODO) + Destroyed SnapshotState = "Destroyed" + // Error is a state where the user can't see the snapshot while the snapshot may still exist on the storage + Error SnapshotState = "Error" +) + +// Snapshot represents a volume snapshot +type Snapshot struct { + Account string `json:"account,omitempty" doc:"the account associated with the snapshot"` + AccountID *UUID `json:"accountid,omitempty" doc:"the account ID associated with the snapshot"` + Created string `json:"created,omitempty" doc:"the date the snapshot was created"` + ID *UUID `json:"id,omitempty" doc:"ID of the snapshot"` + IntervalType string `json:"intervaltype,omitempty" doc:"valid types are hourly, daily, weekly, monthy, template, and none."` + Name string `json:"name,omitempty" doc:"name of the snapshot"` + PhysicalSize int64 `json:"physicalsize,omitempty" doc:"physical size of the snapshot on image store"` + Revertable *bool `json:"revertable,omitempty" doc:"indicates whether the underlying storage supports reverting the volume to this snapshot"` + Size int64 `json:"size,omitempty" doc:"the size of original volume"` + SnapshotType string `json:"snapshottype,omitempty" doc:"the type of the snapshot"` + State string `json:"state,omitempty" doc:"the state of the snapshot. BackedUp means that snapshot is ready to be used; Creating - the snapshot is being allocated on the primary storage; BackingUp - the snapshot is being backed up on secondary storage"` + Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with snapshot"` + VolumeID *UUID `json:"volumeid,omitempty" doc:"ID of the disk volume"` + VolumeName string `json:"volumename,omitempty" doc:"name of the disk volume"` + VolumeType string `json:"volumetype,omitempty" doc:"type of the disk volume"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"id of the availability zone"` +} + +// ResourceType returns the type of the resource +func (Snapshot) ResourceType() string { + return "Snapshot" +} + +// CreateSnapshot (Async) creates an instant snapshot of a volume +type CreateSnapshot struct { + VolumeID *UUID `json:"volumeid" doc:"The ID of the disk volume"` + QuiesceVM *bool `json:"quiescevm,omitempty" doc:"quiesce vm if true"` + _ bool `name:"createSnapshot" description:"Creates an instant snapshot of a volume."` +} + +// Response returns the struct to unmarshal +func (CreateSnapshot) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (CreateSnapshot) AsyncResponse() interface{} { + return new(Snapshot) +} + +// ListRequest builds the ListSnapshot request +func (ss Snapshot) ListRequest() (ListCommand, error) { + // Restricted cannot be applied here because it really has three states + req := &ListSnapshots{ + ID: ss.ID, + Name: ss.Name, + VolumeID: ss.VolumeID, + SnapshotType: ss.SnapshotType, + ZoneID: ss.ZoneID, + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListSnapshots + +// ListSnapshots lists the volume snapshots +type ListSnapshots struct { + ID *UUID `json:"id,omitempty" doc:"lists snapshot by snapshot ID"` + IntervalType string `json:"intervaltype,omitempty" doc:"valid values are HOURLY, DAILY, WEEKLY, and MONTHLY."` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"lists snapshot by snapshot name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + SnapshotType string `json:"snapshottype,omitempty" doc:"valid values are MANUAL or RECURRING."` + Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs). Note: multiple tags are OR'ed, not AND'ed."` + VolumeID *UUID `json:"volumeid,omitempty" doc:"the ID of the disk volume"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"list snapshots by zone id"` + _ bool `name:"listSnapshots" description:"Lists all available snapshots for the account."` +} + +// ListSnapshotsResponse represents a list of volume snapshots +type ListSnapshotsResponse struct { + Count int `json:"count"` + Snapshot []Snapshot `json:"snapshot"` +} + +// DeleteSnapshot (Async) deletes a snapshot of a disk volume +type DeleteSnapshot struct { + ID *UUID `json:"id" doc:"The ID of the snapshot"` + _ bool `name:"deleteSnapshot" description:"Deletes a snapshot of a disk volume."` +} + +// Response returns the struct to unmarshal +func (DeleteSnapshot) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DeleteSnapshot) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// RevertSnapshot (Async) reverts a volume snapshot +type RevertSnapshot struct { + ID *UUID `json:"id" doc:"The ID of the snapshot"` + _ bool `name:"revertSnapshot" description:"revert a volume snapshot."` +} + +// Response returns the struct to unmarshal +func (RevertSnapshot) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RevertSnapshot) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// ExportSnapshot (Async) exports a volume snapshot +type ExportSnapshot struct { + ID *UUID `json:"id" doc:"The ID of the snapshot"` + _ bool `name:"exportSnapshot" description:"Exports an instant snapshot of a volume."` +} + +// ExportSnapshotResponse represents the response of a snapshot export operation +type ExportSnapshotResponse struct { + PresignedURL string `json:"presignedurl"` + MD5sum string `json:"md5sum"` +} + +// Response returns the struct to unmarshal +func (ExportSnapshot) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (ExportSnapshot) AsyncResponse() interface{} { + return new(ExportSnapshotResponse) +} diff --git a/vendor/github.com/exoscale/egoscale/snapshots_response.go b/vendor/github.com/exoscale/egoscale/snapshots_response.go new file mode 100644 index 000000000..2ca9cff5a --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/snapshots_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListSnapshots) Response() interface{} { + return new(ListSnapshotsResponse) +} + +// ListRequest returns itself +func (ls *ListSnapshots) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListSnapshots) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListSnapshots) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListSnapshots) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListSnapshotsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListSnapshotsResponse was expected, got %T", resp)) + return + } + + for i := range items.Snapshot { + if !callback(&items.Snapshot[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/sos_buckets_usage.go b/vendor/github.com/exoscale/egoscale/sos_buckets_usage.go new file mode 100644 index 000000000..4d0b49495 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/sos_buckets_usage.go @@ -0,0 +1,25 @@ +package egoscale + +// BucketUsage represents the usage (in bytes) for a bucket +type BucketUsage struct { + Created string `json:"created"` + Name string `json:"name"` + Region string `json:"region"` + Usage int64 `json:"usage"` +} + +// ListBucketsUsage represents a listBucketsUsage API request +type ListBucketsUsage struct { + _ bool `name:"listBucketsUsage" description:"List"` +} + +// ListBucketsUsageResponse represents a listBucketsUsage API response +type ListBucketsUsageResponse struct { + Count int `json:"count"` + BucketsUsage []BucketUsage `json:"bucketsusage"` +} + +// Response returns the struct to unmarshal +func (ListBucketsUsage) Response() interface{} { + return new(ListBucketsUsageResponse) +} diff --git a/vendor/github.com/exoscale/egoscale/ssh_keypairs.go b/vendor/github.com/exoscale/egoscale/ssh_keypairs.go new file mode 100644 index 000000000..9f2bedca0 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/ssh_keypairs.go @@ -0,0 +1,105 @@ +package egoscale + +import ( + "context" + "fmt" +) + +// SSHKeyPair represents an SSH key pair +// +// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/stable/virtual_machines.html#creating-the-ssh-keypair +type SSHKeyPair struct { + Fingerprint string `json:"fingerprint,omitempty" doc:"Fingerprint of the public key"` + Name string `json:"name,omitempty" doc:"Name of the keypair"` + PrivateKey string `json:"privatekey,omitempty" doc:"Private key"` +} + +// Delete removes the given SSH key, by Name +func (ssh SSHKeyPair) Delete(ctx context.Context, client *Client) error { + if ssh.Name == "" { + return fmt.Errorf("an SSH Key Pair may only be deleted using Name") + } + + return client.BooleanRequestWithContext(ctx, &DeleteSSHKeyPair{ + Name: ssh.Name, + }) +} + +// ListRequest builds the ListSSHKeyPairs request +func (ssh SSHKeyPair) ListRequest() (ListCommand, error) { + req := &ListSSHKeyPairs{ + Fingerprint: ssh.Fingerprint, + Name: ssh.Name, + } + + return req, nil +} + +// CreateSSHKeyPair represents a new keypair to be created +type CreateSSHKeyPair struct { + Name string `json:"name" doc:"Name of the keypair"` + _ bool `name:"createSSHKeyPair" description:"Create a new keypair and returns the private key"` +} + +// Response returns the struct to unmarshal +func (CreateSSHKeyPair) Response() interface{} { + return new(SSHKeyPair) +} + +// DeleteSSHKeyPair represents a new keypair to be created +type DeleteSSHKeyPair struct { + Name string `json:"name" doc:"Name of the keypair"` + _ bool `name:"deleteSSHKeyPair" description:"Deletes a keypair by name"` +} + +// Response returns the struct to unmarshal +func (DeleteSSHKeyPair) Response() interface{} { + return new(BooleanResponse) +} + +// RegisterSSHKeyPair represents a new registration of a public key in a keypair +type RegisterSSHKeyPair struct { + Name string `json:"name" doc:"Name of the keypair"` + PublicKey string `json:"publickey" doc:"Public key material of the keypair"` + _ bool `name:"registerSSHKeyPair" description:"Register a public key in a keypair under a certain name"` +} + +// Response returns the struct to unmarshal +func (RegisterSSHKeyPair) Response() interface{} { + return new(SSHKeyPair) +} + +//go:generate go run generate/main.go -interface=Listable ListSSHKeyPairs + +// ListSSHKeyPairs represents a query for a list of SSH KeyPairs +type ListSSHKeyPairs struct { + Fingerprint string `json:"fingerprint,omitempty" doc:"A public key fingerprint to look for"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"A key pair name to look for"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + _ bool `name:"listSSHKeyPairs" description:"List registered keypairs"` +} + +// ListSSHKeyPairsResponse represents a list of SSH key pairs +type ListSSHKeyPairsResponse struct { + Count int `json:"count"` + SSHKeyPair []SSHKeyPair `json:"sshkeypair"` +} + +// ResetSSHKeyForVirtualMachine (Async) represents a change for the key pairs +type ResetSSHKeyForVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + KeyPair string `json:"keypair" doc:"Name of the ssh key pair used to login to the virtual machine"` + _ bool `name:"resetSSHKeyForVirtualMachine" description:"Resets the SSH Key for virtual machine. The virtual machine must be in a \"Stopped\" state."` +} + +// Response returns the struct to unmarshal +func (ResetSSHKeyForVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (ResetSSHKeyForVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} diff --git a/vendor/github.com/exoscale/egoscale/sshkeypairs_response.go b/vendor/github.com/exoscale/egoscale/sshkeypairs_response.go new file mode 100644 index 000000000..31c471df2 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/sshkeypairs_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListSSHKeyPairs) Response() interface{} { + return new(ListSSHKeyPairsResponse) +} + +// ListRequest returns itself +func (ls *ListSSHKeyPairs) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListSSHKeyPairs) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListSSHKeyPairs) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListSSHKeyPairs) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListSSHKeyPairsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListSSHKeyPairsResponse was expected, got %T", resp)) + return + } + + for i := range items.SSHKeyPair { + if !callback(&items.SSHKeyPair[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/tags.go b/vendor/github.com/exoscale/egoscale/tags.go new file mode 100644 index 000000000..56e014850 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/tags.go @@ -0,0 +1,84 @@ +package egoscale + +// ResourceTag is a tag associated with a resource +// +// https://community.exoscale.com/documentation/compute/instance-tags/ +type ResourceTag struct { + Account string `json:"account,omitempty" doc:"the account associated with the tag"` + Customer string `json:"customer,omitempty" doc:"customer associated with the tag"` + Key string `json:"key,omitempty" doc:"tag key name"` + ResourceID *UUID `json:"resourceid,omitempty" doc:"id of the resource"` + ResourceType string `json:"resourcetype,omitempty" doc:"resource type"` + Value string `json:"value,omitempty" doc:"tag value"` +} + +// ListRequest builds the ListZones request +func (tag ResourceTag) ListRequest() (ListCommand, error) { + req := &ListTags{ + Customer: tag.Customer, + Key: tag.Key, + ResourceID: tag.ResourceID, + ResourceType: tag.ResourceType, + Value: tag.Value, + } + + return req, nil +} + +// CreateTags (Async) creates resource tag(s) +type CreateTags struct { + ResourceIDs []UUID `json:"resourceids" doc:"list of resources to create the tags for"` + ResourceType string `json:"resourcetype" doc:"type of the resource"` + Tags []ResourceTag `json:"tags" doc:"Map of tags (key/value pairs)"` + Customer string `json:"customer,omitempty" doc:"identifies client specific tag. When the value is not null, the tag can't be used by cloudStack code internally"` + _ bool `name:"createTags" description:"Creates resource tag(s)"` +} + +// Response returns the struct to unmarshal +func (CreateTags) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (CreateTags) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// DeleteTags (Async) deletes the resource tag(s) +type DeleteTags struct { + ResourceIDs []UUID `json:"resourceids" doc:"Delete tags for resource id(s)"` + ResourceType string `json:"resourcetype" doc:"Delete tag by resource type"` + Tags []ResourceTag `json:"tags,omitempty" doc:"Delete tags matching key/value pairs"` + _ bool `name:"deleteTags" description:"Deleting resource tag(s)"` +} + +// Response returns the struct to unmarshal +func (DeleteTags) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DeleteTags) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +//go:generate go run generate/main.go -interface=Listable ListTags + +// ListTags list resource tag(s) +type ListTags struct { + Customer string `json:"customer,omitempty" doc:"list by customer name"` + Key string `json:"key,omitempty" doc:"list by key"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + ResourceID *UUID `json:"resourceid,omitempty" doc:"list by resource id"` + ResourceType string `json:"resourcetype,omitempty" doc:"list by resource type"` + Value string `json:"value,omitempty" doc:"list by value"` + _ bool `name:"listTags" description:"List resource tag(s)"` +} + +// ListTagsResponse represents a list of resource tags +type ListTagsResponse struct { + Count int `json:"count"` + Tag []ResourceTag `json:"tag"` +} diff --git a/vendor/github.com/exoscale/egoscale/tags_response.go b/vendor/github.com/exoscale/egoscale/tags_response.go new file mode 100644 index 000000000..870ef49a8 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/tags_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListTags) Response() interface{} { + return new(ListTagsResponse) +} + +// ListRequest returns itself +func (ls *ListTags) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListTags) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListTags) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListTags) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListTagsResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListTagsResponse was expected, got %T", resp)) + return + } + + for i := range items.Tag { + if !callback(&items.Tag[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/templates.go b/vendor/github.com/exoscale/egoscale/templates.go new file mode 100644 index 000000000..51d57fe7f --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/templates.go @@ -0,0 +1,165 @@ +package egoscale + +// Template represents a machine to be deployed. +type Template struct { + Account string `json:"account,omitempty" doc:"the account name to which the template belongs"` + AccountID *UUID `json:"accountid,omitempty" doc:"the account id to which the template belongs"` + Bootable bool `json:"bootable,omitempty" doc:"true if the ISO is bootable, false otherwise"` + BootMode string `json:"bootmode" doc:"the template boot mode (legacy/uefi)"` + Checksum string `json:"checksum,omitempty" doc:"checksum of the template"` + Created string `json:"created,omitempty" doc:"the date this template was created"` + CrossZones bool `json:"crossZones,omitempty" doc:"true if the template is managed across all Zones, false otherwise"` + Details map[string]string `json:"details,omitempty" doc:"additional key/value details tied with template"` + DisplayText string `json:"displaytext,omitempty" doc:"the template display text"` + Format string `json:"format,omitempty" doc:"the format of the template."` + HostID *UUID `json:"hostid,omitempty" doc:"the ID of the secondary storage host for the template"` + HostName string `json:"hostname,omitempty" doc:"the name of the secondary storage host for the template"` + Hypervisor string `json:"hypervisor,omitempty" doc:"the target hypervisor for the template"` + ID *UUID `json:"id,omitempty" doc:"the template ID"` + IsDynamicallyScalable bool `json:"isdynamicallyscalable,omitempty" doc:"true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory"` + IsExtractable bool `json:"isextractable,omitempty" doc:"true if the template is extractable, false otherwise"` + IsFeatured bool `json:"isfeatured,omitempty" doc:"true if this template is a featured template, false otherwise"` + IsPublic bool `json:"ispublic,omitempty" doc:"true if this template is a public template, false otherwise"` + IsReady bool `json:"isready,omitempty" doc:"true if the template is ready to be deployed from, false otherwise."` + Name string `json:"name,omitempty" doc:"the template name"` + OsCategoryID *UUID `json:"oscategoryid,omitempty" doc:"the ID of the OS category for this template"` + OsCategoryName string `json:"oscategoryname,omitempty" doc:"the name of the OS category for this template"` + OsTypeID *UUID `json:"ostypeid,omitempty" doc:"the ID of the OS type for this template"` + OsTypeName string `json:"ostypename,omitempty" doc:"the name of the OS type for this template"` + PasswordEnabled bool `json:"passwordenabled,omitempty" doc:"true if the reset password feature is enabled, false otherwise"` + Removed string `json:"removed,omitempty" doc:"the date this template was removed"` + Size int64 `json:"size,omitempty" doc:"the size of the template"` + SourceTemplateID *UUID `json:"sourcetemplateid,omitempty" doc:"the template ID of the parent template if present"` + SSHKeyEnabled bool `json:"sshkeyenabled,omitempty" doc:"true if template is sshkey enabled, false otherwise"` + Status string `json:"status,omitempty" doc:"the status of the template"` + Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with tempate"` + TemplateDirectory string `json:"templatedirectory,omitempty" doc:"Template directory"` + TemplateTag string `json:"templatetag,omitempty" doc:"the tag of this template"` + TemplateType string `json:"templatetype,omitempty" doc:"the type of the template"` + URL string `json:"url,omitempty" doc:"Original URL of the template where it was downloaded"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the zone for this template"` + ZoneName string `json:"zonename,omitempty" doc:"the name of the zone for this template"` +} + +// ResourceType returns the type of the resource +func (Template) ResourceType() string { + return "Template" +} + +// ListRequest builds the ListTemplates request +func (template Template) ListRequest() (ListCommand, error) { + req := &ListTemplates{ + ID: template.ID, + Name: template.Name, + ZoneID: template.ZoneID, + } + if template.IsFeatured { + req.TemplateFilter = "featured" + } + if template.Removed != "" { + *req.ShowRemoved = true + } + + for i := range template.Tags { + req.Tags = append(req.Tags, template.Tags[i]) + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListTemplates + +// ListTemplates represents a template query filter +type ListTemplates struct { + TemplateFilter string `json:"templatefilter,omitempty" doc:"Possible values are \"featured\", \"self\", \"selfexecutable\",\"sharedexecutable\",\"executable\", and \"community\". * featured : templates that have been marked as featured and public. * self : templates that have been registered or created by the calling user. * selfexecutable : same as self, but only returns templates that can be used to deploy a new VM. * sharedexecutable : templates ready to be deployed that have been granted to the calling user by another user. * executable : templates that are owned by the calling user, or public templates, that can be used to deploy a VM. * community : templates that have been marked as public but not featured."` + ID *UUID `json:"id,omitempty" doc:"the template ID"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"the template name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + ShowRemoved *bool `json:"showremoved,omitempty" doc:"Show removed templates as well"` + Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs). Note: multiple tags are OR'ed, not AND'ed."` + ZoneID *UUID `json:"zoneid,omitempty" doc:"list templates by zoneid"` + _ bool `name:"listTemplates" description:"List all public, private, and privileged templates."` +} + +// ListTemplatesResponse represents a list of templates +type ListTemplatesResponse struct { + Count int `json:"count"` + Template []Template `json:"template"` +} + +// OSCategory represents an OS category +type OSCategory struct { + ID *UUID `json:"id,omitempty" doc:"the ID of the OS category"` + Name string `json:"name,omitempty" doc:"the name of the OS category"` +} + +// ListRequest builds the ListOSCategories request +func (osCat OSCategory) ListRequest() (ListCommand, error) { + req := &ListOSCategories{ + Name: osCat.Name, + ID: osCat.ID, + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListOSCategories + +// ListOSCategories lists the OS categories +type ListOSCategories struct { + ID *UUID `json:"id,omitempty" doc:"list Os category by id"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"list os category by name"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + _ bool `name:"listOsCategories" description:"Lists all supported OS categories for this cloud."` +} + +// ListOSCategoriesResponse represents a list of OS categories +type ListOSCategoriesResponse struct { + Count int `json:"count"` + OSCategory []OSCategory `json:"oscategory"` +} + +// DeleteTemplate deletes a template by ID +type DeleteTemplate struct { + _ bool `name:"deleteTemplate" description:"Deletes a template"` + ID *UUID `json:"id" doc:"the ID of the template"` +} + +// Response returns the struct to unmarshal +func (DeleteTemplate) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DeleteTemplate) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// RegisterCustomTemplate registers a new template +type RegisterCustomTemplate struct { + _ bool `name:"registerCustomTemplate" description:"Register a new template."` + BootMode string `json:"bootmode" doc:"the template boot mode (legacy/uefi)"` + Checksum string `json:"checksum" doc:"the MD5 checksum value of this template"` + Details map[string]string `json:"details,omitempty" doc:"Template details in key/value pairs"` + Displaytext string `json:"displaytext,omitempty" doc:"the display text of the template"` + Name string `json:"name" doc:"the name of the template"` + PasswordEnabled *bool `json:"passwordenabled,omitempty" doc:"true if the template supports the password reset feature; default is false"` + SSHKeyEnabled *bool `json:"sshkeyenabled,omitempty" doc:"true if the template supports the sshkey upload feature; default is false"` + TemplateTag string `json:"templatetag,omitempty" doc:"the tag for this template"` + URL string `json:"url" doc:"the URL of where the template is hosted"` + ZoneID *UUID `json:"zoneid" doc:"the ID of the zone the template is to be hosted on"` +} + +// Response returns the struct to unmarshal +func (RegisterCustomTemplate) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RegisterCustomTemplate) AsyncResponse() interface{} { + return new([]Template) +} diff --git a/vendor/github.com/exoscale/egoscale/templates_response.go b/vendor/github.com/exoscale/egoscale/templates_response.go new file mode 100644 index 000000000..b9d61b546 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/templates_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListTemplates) Response() interface{} { + return new(ListTemplatesResponse) +} + +// ListRequest returns itself +func (ls *ListTemplates) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListTemplates) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListTemplates) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListTemplates) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListTemplatesResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListTemplatesResponse was expected, got %T", resp)) + return + } + + for i := range items.Template { + if !callback(&items.Template[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/users.go b/vendor/github.com/exoscale/egoscale/users.go new file mode 100644 index 000000000..71078a97b --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/users.go @@ -0,0 +1,63 @@ +package egoscale + +// User represents a User +type User struct { + APIKey string `json:"apikey,omitempty" doc:"the api key of the user"` + Account string `json:"account,omitempty" doc:"the account name of the user"` + AccountID *UUID `json:"accountid,omitempty" doc:"the account ID of the user"` + Created string `json:"created,omitempty" doc:"the date and time the user account was created"` + Email string `json:"email,omitempty" doc:"the user email address"` + FirstName string `json:"firstname,omitempty" doc:"the user firstname"` + ID *UUID `json:"id,omitempty" doc:"the user ID"` + IsDefault bool `json:"isdefault,omitempty" doc:"true if user is default, false otherwise"` + LastName string `json:"lastname,omitempty" doc:"the user lastname"` + RoleID *UUID `json:"roleid,omitempty" doc:"the ID of the role"` + RoleName string `json:"rolename,omitempty" doc:"the name of the role"` + RoleType string `json:"roletype,omitempty" doc:"the type of the role"` + SecretKey string `json:"secretkey,omitempty" doc:"the secret key of the user"` + State string `json:"state,omitempty" doc:"the user state"` + Timezone string `json:"timezone,omitempty" doc:"the timezone user was created in"` + UserName string `json:"username,omitempty" doc:"the user name"` +} + +// ListRequest builds the ListUsers request +func (user User) ListRequest() (ListCommand, error) { + req := &ListUsers{ + ID: user.ID, + UserName: user.UserName, + } + + return req, nil +} + +// RegisterUserKeys registers a new set of key of the given user +// +// NB: only the APIKey and SecretKey will be filled +type RegisterUserKeys struct { + ID *UUID `json:"id" doc:"User id"` + _ bool `name:"registerUserKeys" description:"This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user"` +} + +// Response returns the struct to unmarshal +func (RegisterUserKeys) Response() interface{} { + return new(User) +} + +//go:generate go run generate/main.go -interface=Listable ListUsers + +// ListUsers represents the search for Users +type ListUsers struct { + ID *UUID `json:"id,omitempty" doc:"List user by ID."` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + State string `json:"state,omitempty" doc:"List users by state of the user account."` + UserName string `json:"username,omitempty" doc:"List user by the username"` + _ bool `name:"listUsers" description:"Lists user accounts"` +} + +// ListUsersResponse represents a list of users +type ListUsersResponse struct { + Count int `json:"count"` + User []User `json:"user"` +} diff --git a/vendor/github.com/exoscale/egoscale/users_response.go b/vendor/github.com/exoscale/egoscale/users_response.go new file mode 100644 index 000000000..4bd4bf473 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/users_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListUsers) Response() interface{} { + return new(ListUsersResponse) +} + +// ListRequest returns itself +func (ls *ListUsers) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListUsers) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListUsers) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListUsers) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListUsersResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListUsersResponse was expected, got %T", resp)) + return + } + + for i := range items.User { + if !callback(&items.User[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/uuid.go b/vendor/github.com/exoscale/egoscale/uuid.go new file mode 100644 index 000000000..dd8be1557 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/uuid.go @@ -0,0 +1,79 @@ +package egoscale + +import ( + "encoding/json" + "fmt" + + uuid "github.com/gofrs/uuid" +) + +// UUID holds a UUID v4 +type UUID struct { + uuid.UUID +} + +// DeepCopy create a true copy of the receiver. +func (u *UUID) DeepCopy() *UUID { + if u == nil { + return nil + } + + out := [uuid.Size]byte{} + copy(out[:], u.Bytes()) + + return &UUID{ + (uuid.UUID)(out), + } +} + +// DeepCopyInto copies the receiver into out. +// +// In must be non nil. +func (u *UUID) DeepCopyInto(out *UUID) { + o := [uuid.Size]byte{} + copy(o[:], u.Bytes()) + + out.UUID = (uuid.UUID)(o) +} + +// Equal returns true if itself is equal to other. +func (u UUID) Equal(other UUID) bool { + return u == other +} + +// UnmarshalJSON unmarshals the raw JSON into the UUID. +func (u *UUID) UnmarshalJSON(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + + new, err := ParseUUID(s) + if err == nil { + u.UUID = new.UUID + } + return err +} + +// MarshalJSON converts the UUID to a string representation. +func (u UUID) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf("%q", u.String())), nil +} + +// ParseUUID parses a string into a UUID. +func ParseUUID(s string) (*UUID, error) { + u, err := uuid.FromString(s) + if err != nil { + return nil, err + } + return &UUID{u}, nil +} + +// MustParseUUID acts like ParseUUID but panic in case of a failure. +func MustParseUUID(s string) *UUID { + u, e := ParseUUID(s) + if e != nil { + panic(e) + } + return u +} diff --git a/vendor/github.com/exoscale/egoscale/v2/api/api.go b/vendor/github.com/exoscale/egoscale/v2/api/api.go new file mode 100644 index 000000000..c0660f863 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/api/api.go @@ -0,0 +1,3 @@ +// Package api implements low-level primitives for interacting with the +// Exoscale API. +package api diff --git a/vendor/github.com/exoscale/egoscale/v2/api/error.go b/vendor/github.com/exoscale/egoscale/v2/api/error.go new file mode 100644 index 000000000..cc90d8cee --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/api/error.go @@ -0,0 +1,14 @@ +package api + +import "errors" + +var ( + // ErrNotFound represents an error indicating a non-existent resource. + ErrNotFound = errors.New("resource not found") + + // ErrInvalidRequest represents an error indicating that the caller's request is invalid. + ErrInvalidRequest = errors.New("invalid request") + + // ErrAPIError represents an error indicating an API-side issue. + ErrAPIError = errors.New("API error") +) diff --git a/vendor/github.com/exoscale/egoscale/v2/api/middleware.go b/vendor/github.com/exoscale/egoscale/v2/api/middleware.go new file mode 100644 index 000000000..3020f2eda --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/api/middleware.go @@ -0,0 +1,67 @@ +package api + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" +) + +type Middleware interface { + http.RoundTripper +} + +// ErrorHandlerMiddleware is an Exoscale API HTTP client middleware that +// returns concrete Go errors according to API response errors. +type ErrorHandlerMiddleware struct { + next http.RoundTripper +} + +func NewAPIErrorHandlerMiddleware(next http.RoundTripper) Middleware { + if next == nil { + next = http.DefaultTransport + } + + return &ErrorHandlerMiddleware{next: next} +} + +func (m *ErrorHandlerMiddleware) RoundTrip(req *http.Request) (*http.Response, error) { + resp, err := m.next.RoundTrip(req) + if err != nil { + // If the request returned a Go error don't bother analyzing the response + // body, as there probably won't be any (e.g. connection timeout/refused). + return resp, err + } + + if resp.StatusCode >= 400 && resp.StatusCode <= 599 { + var res struct { + Message string `json:"message"` + } + + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("error reading response body: %s", err) + } + + if json.Valid(data) { + if err = json.Unmarshal(data, &res); err != nil { + return nil, fmt.Errorf("error unmarshaling response: %s", err) + } + } else { + res.Message = string(data) + } + + switch { + case resp.StatusCode == http.StatusNotFound: + return nil, ErrNotFound + + case resp.StatusCode >= 400 && resp.StatusCode < 500: + return nil, fmt.Errorf("%w: %s", ErrInvalidRequest, res.Message) + + case resp.StatusCode >= 500: + return nil, fmt.Errorf("%w: %s", ErrAPIError, res.Message) + } + } + + return resp, err +} diff --git a/vendor/github.com/exoscale/egoscale/v2/api/request.go b/vendor/github.com/exoscale/egoscale/v2/api/request.go new file mode 100644 index 000000000..36bd7286b --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/api/request.go @@ -0,0 +1,67 @@ +package api + +import ( + "context" + "fmt" +) + +const ( + EndpointURL = "https://api.exoscale.com/" + Prefix = "v2.alpha" +) + +const defaultReqEndpointEnv = "api" + +// ReqEndpoint represents an Exoscale API request endpoint. +type ReqEndpoint struct { + env string + zone string +} + +// NewReqEndpoint returns a new Exoscale API request endpoint from an environment and zone. +func NewReqEndpoint(env, zone string) ReqEndpoint { + re := ReqEndpoint{ + env: env, + zone: zone, + } + + if re.env == "" { + re.env = defaultReqEndpointEnv + } + + return re +} + +// Env returns the Exoscale API endpoint environment. +func (r *ReqEndpoint) Env() string { + return r.env +} + +// Zone returns the Exoscale API endpoint zone. +func (r *ReqEndpoint) Zone() string { + return r.zone +} + +// Host returns the Exoscale API endpoint host FQDN. +func (r *ReqEndpoint) Host() string { + return fmt.Sprintf("%s-%s.exoscale.com", r.env, r.zone) +} + +// WithEndpoint returns an augmented context instance containing the Exoscale endpoint to send +// the request to. +func WithEndpoint(ctx context.Context, endpoint ReqEndpoint) context.Context { + return context.WithValue(ctx, ReqEndpoint{}, endpoint) +} + +// WithZone is a shorthand to WithEndpoint where only the endpoint zone has to be specified. +// If a request endpoint is already set in the specified context instance, the value currently +// set for the environment will be reused. +func WithZone(ctx context.Context, zone string) context.Context { + var env string + + if v, ok := ctx.Value(ReqEndpoint{}).(ReqEndpoint); ok { + env = v.Env() + } + + return WithEndpoint(ctx, NewReqEndpoint(env, zone)) +} diff --git a/vendor/github.com/exoscale/egoscale/v2/api/security.go b/vendor/github.com/exoscale/egoscale/v2/api/security.go new file mode 100644 index 000000000..dd925be66 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/api/security.go @@ -0,0 +1,127 @@ +package api + +import ( + "bytes" + "context" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "errors" + "fmt" + "io/ioutil" + "net/http" + "sort" + "strings" + "time" +) + +// SecurityProviderExoscale represents an Exoscale public API security +// provider. +type SecurityProviderExoscale struct { + // ReqExpire represents the request expiration duration. + ReqExpire time.Duration + + apiKey string + apiSecret string +} + +// NewSecurityProvider returns a new Exoscale public API security +// provider to sign API requests using the specified API key/secret. +func NewSecurityProvider(apiKey, apiSecret string) (*SecurityProviderExoscale, error) { + if apiKey == "" { + return nil, errors.New("missing API key") + } + + if apiSecret == "" { + return nil, errors.New("missing API secret") + } + + return &SecurityProviderExoscale{ + ReqExpire: 10 * time.Minute, + apiKey: apiKey, + apiSecret: apiSecret, + }, nil +} + +// Intercept is an HTTP middleware that intercepts and signs client requests +// before sending them to the API endpoint. +func (s *SecurityProviderExoscale) Intercept(_ context.Context, req *http.Request) error { + return s.signRequest(req, time.Now().UTC().Add(s.ReqExpire)) +} + +func (s *SecurityProviderExoscale) signRequest(req *http.Request, expiration time.Time) error { + var ( + sigParts []string + headerParts []string + ) + + // Request method/URL path + sigParts = append(sigParts, fmt.Sprintf("%s %s", req.Method, req.URL.Path)) + headerParts = append(headerParts, "EXO2-HMAC-SHA256 credential="+s.apiKey) + + // Request body if present + body := "" + if req.Body != nil { + data, err := ioutil.ReadAll(req.Body) + if err != nil { + return err + } + err = req.Body.Close() + if err != nil { + return err + } + body = string(data) + req.Body = ioutil.NopCloser(bytes.NewReader(data)) + } + sigParts = append(sigParts, body) + + // Request query string parameters + // Important: this is order-sensitive, we have to have to sort parameters alphabetically to ensure signed + // values match the names listed in the "signed-query-args=" signature pragma. + signedParams, paramsValues := extractRequestParameters(req) + sigParts = append(sigParts, paramsValues) + if len(signedParams) > 0 { + headerParts = append(headerParts, "signed-query-args="+strings.Join(signedParams, ";")) + } + + // Request headers -- none at the moment + // Note: the same order-sensitive caution for query string parameters applies to headers. + sigParts = append(sigParts, "") + + // Request expiration date (UNIX timestamp, no line return) + sigParts = append(sigParts, fmt.Sprint(expiration.Unix())) + headerParts = append(headerParts, "expires="+fmt.Sprint(expiration.Unix())) + + h := hmac.New(sha256.New, []byte(s.apiSecret)) + if _, err := h.Write([]byte(strings.Join(sigParts, "\n"))); err != nil { + return err + } + headerParts = append(headerParts, "signature="+base64.StdEncoding.EncodeToString(h.Sum(nil))) + + req.Header.Set("Authorization", strings.Join(headerParts, ",")) + + return nil +} + +// extractRequestParameters returns the list of request URL parameters names +// and a strings concatenating the values of the parameters. +func extractRequestParameters(req *http.Request) ([]string, string) { + var ( + names []string + values string + ) + + for param, values := range req.URL.Query() { + // Keep only parameters that hold exactly 1 value (i.e. no empty or multi-valued parameters) + if len(values) == 1 { + names = append(names, param) + } + } + sort.Strings(names) + + for _, param := range names { + values += req.URL.Query().Get(param) + } + + return names, values +} diff --git a/vendor/github.com/exoscale/egoscale/v2/client.go b/vendor/github.com/exoscale/egoscale/v2/client.go new file mode 100644 index 000000000..2ec492492 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/client.go @@ -0,0 +1,133 @@ +package v2 + +import ( + "context" + "errors" + "fmt" + "net/http" + "net/url" + "time" + + "github.com/exoscale/egoscale/v2/api" + papi "github.com/exoscale/egoscale/v2/internal/public-api" +) + +const defaultTimeout = 60 * time.Second + +// ClientOpt represents a function setting Exoscale API client option. +type ClientOpt func(*Client) error + +// ClientOptWithAPIEndpoint returns a ClientOpt overriding the default Exoscale API endpoint. +func ClientOptWithAPIEndpoint(v string) ClientOpt { + return func(c *Client) error { + endpointURL, err := url.Parse(v) + if err != nil { + return fmt.Errorf("failed to parse URL: %s", err) + } + + endpointURL = endpointURL.ResolveReference(&url.URL{Path: api.Prefix}) + c.apiEndpoint = endpointURL.String() + + return nil + } +} + +// ClientOptWithTimeout returns a ClientOpt overriding the default client timeout. +func ClientOptWithTimeout(v time.Duration) ClientOpt { + return func(c *Client) error { + c.timeout = v + + if v <= 0 { + return errors.New("timeout value must be greater than 0") + } + + return nil + } +} + +// ClientOptWithHTTPClient returns a ClientOpt overriding the default http.Client. +// Note: the Exoscale API client will chain additional middleware +// (http.RoundTripper) on the HTTP client internally, which can alter the HTTP +// requests and responses. If you don't want any other middleware than the ones +// currently set to your HTTP client, you should duplicate it and pass a copy +// instead. +func ClientOptWithHTTPClient(v *http.Client) ClientOpt { + return func(c *Client) error { + c.httpClient = v + + return nil + } +} + +// Client represents an Exoscale API client. +type Client struct { + apiKey string + apiSecret string + apiEndpoint string + timeout time.Duration + httpClient *http.Client + + *papi.ClientWithResponses +} + +// NewClient returns a new Exoscale API client, or an error if one couldn't be initialized. +func NewClient(apiKey, apiSecret string, opts ...ClientOpt) (*Client, error) { + client := Client{ + apiKey: apiKey, + apiSecret: apiSecret, + apiEndpoint: api.EndpointURL, + httpClient: http.DefaultClient, + timeout: defaultTimeout, + } + + if client.apiKey == "" || client.apiSecret == "" { + return nil, fmt.Errorf("%w: missing or incomplete API credentials", ErrClientConfig) + } + + for _, opt := range opts { + if err := opt(&client); err != nil { + return nil, fmt.Errorf("%w: %s", ErrClientConfig, err) + } + } + + apiSecurityProvider, err := api.NewSecurityProvider(client.apiKey, client.apiSecret) + if err != nil { + return nil, fmt.Errorf("unable to initialize API security provider: %s", err) + } + + apiURL, err := url.Parse(client.apiEndpoint) + if err != nil { + return nil, fmt.Errorf("unable to initialize API client: %s", err) + } + apiURL = apiURL.ResolveReference(&url.URL{Path: api.Prefix}) + + client.httpClient.Transport = api.NewAPIErrorHandlerMiddleware(client.httpClient.Transport) + + papiOpts := []papi.ClientOption{ + papi.WithHTTPClient(client.httpClient), + papi.WithRequestEditorFn( + papi.MultiRequestsEditor( + apiSecurityProvider.Intercept, + setEndpointFromContext, + ), + ), + } + + if client.ClientWithResponses, err = papi.NewClientWithResponses(apiURL.String(), papiOpts...); err != nil { + return nil, fmt.Errorf("unable to initialize API client: %s", err) + } + + return &client, nil +} + +// setEndpointFromContext is an HTTP client request interceptor that overrides the "Host" header +// with information from a request endpoint optionally set in the context instance. If none is +// found, the request is left untouched. +func setEndpointFromContext(ctx context.Context, req *http.Request) error { + if v, ok := ctx.Value(api.ReqEndpoint{}).(api.ReqEndpoint); ok { + req.Host = v.Host() + req.URL.Host = v.Host() + } + + return nil +} diff --git a/vendor/github.com/exoscale/egoscale/v2/error.go b/vendor/github.com/exoscale/egoscale/v2/error.go new file mode 100644 index 000000000..62d7b4086 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/error.go @@ -0,0 +1,5 @@ +package v2 + +import "errors" + +var ErrClientConfig = errors.New("client configuration error") diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/async.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/async.go new file mode 100644 index 000000000..dedbfb1d5 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/async.go @@ -0,0 +1,123 @@ +package publicapi + +import ( + "context" + "errors" + "fmt" + "net/http" + "time" + + v2 "github.com/exoscale/egoscale/v2/api" +) + +const ( + operationStatePending = "pending" + operationStateSuccess = "success" + operationStateFailure = "failure" + operationStateTimeout = "timeout" + + defaultPollingInterval = 3 * time.Second +) + +// PollFunc represents a function invoked periodically in a polling loop. It returns a boolean flag +// true if the job is completed or false if polling must continue, and any error that occurred +// during the polling (which interrupts the polling regardless of the boolean flag value). +// Upon successful completion, an interface descring an opaque operation can be returned to the +// caller, which will have to perform type assertion depending on the PollFunc implementation. +type PollFunc func(ctx context.Context) (bool, interface{}, error) + +// Poller represents a poller instance. +type Poller struct { + interval time.Duration + timeout time.Duration +} + +// NewPoller returns a Poller instance. +func NewPoller() *Poller { + return &Poller{ + interval: defaultPollingInterval, + } +} + +// WithInterval sets the interval at which the polling function will be executed (default: 3s). +func (p *Poller) WithInterval(interval time.Duration) *Poller { + if interval > 0 { + p.interval = interval + } + + return p +} + +// WithTimeout sets the time out value after which the polling routine will be cancelled +// (default: no time out). +func (p *Poller) WithTimeout(timeout time.Duration) *Poller { + if timeout > 0 { + p.timeout = timeout + } + + return p +} + +// Poll starts the polling routine, executing the provided polling function at the configured +// polling interval. Upon successful polling, an opaque operation is returned to the caller, which +// actual type has to asserted depending on the PollFunc executed. +func (p *Poller) Poll(ctx context.Context, pf PollFunc) (interface{}, error) { + if p.timeout > 0 { + ctxWithTimeout, cancel := context.WithTimeout(ctx, p.timeout) + defer cancel() + ctx = ctxWithTimeout + } + + ticker := time.NewTicker(p.interval) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + done, res, err := pf(ctx) + if err != nil { + return nil, err + } + if !done { + continue + } + + return res, nil + + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +// OperationPoller returns a PollFunc function which queries the state of the specified job. +// Upon successful job completion, the type of the interface{} returned by the PollFunc is a +// pointer to a Resource object (*Resource). +func (c *ClientWithResponses) OperationPoller(zone string, jobID string) PollFunc { + return func(ctx context.Context) (bool, interface{}, error) { + resp, err := c.GetOperationWithResponse(v2.WithZone(ctx, zone), jobID) + if err != nil { + return true, nil, err + } + if resp.StatusCode() != http.StatusOK { + return true, nil, fmt.Errorf("unexpected response from API: %s", resp.Status()) + } + + switch *resp.JSON200.State { + case operationStatePending: + return false, nil, nil + + case operationStateSuccess: + return true, resp.JSON200.Reference, nil + + case operationStateFailure: + return true, nil, errors.New("job failed") + + case operationStateTimeout: + return true, nil, errors.New("job timed out") + + default: + return true, nil, fmt.Errorf("unknown job state: %s", *resp.JSON200.State) + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/loadbalancer.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/loadbalancer.go new file mode 100644 index 000000000..cfd51d1ea --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/loadbalancer.go @@ -0,0 +1,70 @@ +package publicapi + +import ( + "encoding/json" + "time" +) + +// UnmarshalJSON unmarshals a LoadBalancer structure into a temporary structure whose "CreatedAt" field of type +// string to be able to parse the original timestamp (ISO 8601) into a time.Time object, since json.Unmarshal() +// only supports RFC 3339 format. +func (lb *LoadBalancer) UnmarshalJSON(data []byte) error { + raw := struct { + CreatedAt *string `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + Ip *string `json:"ip,omitempty"` // nolint:golint + Name *string `json:"name,omitempty"` + Services *[]LoadBalancerService `json:"services,omitempty"` + State *string `json:"state,omitempty"` + }{} + + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + + if raw.CreatedAt != nil { + createdAt, err := time.Parse(iso8601Format, *raw.CreatedAt) + if err != nil { + return err + } + lb.CreatedAt = &createdAt + } + + lb.Description = raw.Description + lb.Id = raw.Id + lb.Ip = raw.Ip + lb.Name = raw.Name + lb.Services = raw.Services + lb.State = raw.State + + return nil +} + +// MarshalJSON returns the JSON encoding of a LoadBalancer structure after having formatted the CreatedAt field +// in the original timestamp (ISO 8601), since time.MarshalJSON() only supports RFC 3339 format. +func (lb *LoadBalancer) MarshalJSON() ([]byte, error) { + raw := struct { + CreatedAt *string `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + Ip *string `json:"ip,omitempty"` // nolint:golint + Name *string `json:"name,omitempty"` + Services *[]LoadBalancerService `json:"services,omitempty"` + State *string `json:"state,omitempty"` + }{} + + if lb.CreatedAt != nil { + createdAt := lb.CreatedAt.Format(iso8601Format) + raw.CreatedAt = &createdAt + } + + raw.Description = lb.Description + raw.Id = lb.Id + raw.Ip = lb.Ip + raw.Name = lb.Name + raw.Services = lb.Services + raw.State = lb.State + + return json.Marshal(raw) +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/mock.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/mock.go new file mode 100644 index 000000000..0d5c918db --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/mock.go @@ -0,0 +1,28 @@ +package publicapi + +import ( + "net/http" + + "github.com/jarcoal/httpmock" + "github.com/stretchr/testify/mock" +) + +type MockClient struct { + mock.Mock + *httpmock.MockTransport + ClientWithResponsesInterface +} + +func NewMockClient() *MockClient { + var c MockClient + + c.MockTransport = httpmock.NewMockTransport() + + return &c +} + +func (c *MockClient) Do(req *http.Request) (*http.Response, error) { + hc := http.Client{Transport: c.MockTransport} + + return hc.Do(req) +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.gen.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.gen.go new file mode 100644 index 000000000..ace97c7b4 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.gen.go @@ -0,0 +1,9554 @@ +// Package publicapi provides primitives to interact the openapi HTTP API. +// +// Code generated by github.com/deepmap/oapi-codegen DO NOT EDIT. +package publicapi + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "strings" + "time" + + "github.com/deepmap/oapi-codegen/pkg/runtime" + "github.com/pkg/errors" +) + +// AntiAffinityGroup defines model for anti-affinity-group. +type AntiAffinityGroup struct { + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` + Instances *[]Instance `json:"instances,omitempty"` + Name *string `json:"name,omitempty"` +} + +// ElasticIp defines model for elastic-ip. +type ElasticIp struct { + Id *string `json:"id,omitempty"` + Ip *string `json:"ip,omitempty"` +} + +// Event defines model for event. +type Event struct { + Payload *Event_Payload `json:"payload,omitempty"` + Timestamp *time.Time `json:"timestamp,omitempty"` +} + +// Event_Payload defines model for Event.Payload. +type Event_Payload struct { + AdditionalProperties map[string]interface{} `json:"-"` +} + +// Healthcheck defines model for healthcheck. +type Healthcheck struct { + Interval *int64 `json:"interval,omitempty"` + Mode string `json:"mode"` + Port int64 `json:"port"` + Retries *int64 `json:"retries,omitempty"` + Timeout *int64 `json:"timeout,omitempty"` + TlsSni *string `json:"tls-sni,omitempty"` + Uri *string `json:"uri,omitempty"` +} + +// Instance defines model for instance. +type Instance struct { + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` +} + +// InstancePool defines model for instance-pool. +type InstancePool struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize *int64 `json:"disk-size,omitempty"` + ElasticIps *[]ElasticIp `json:"elastic-ips,omitempty"` + Id *string `json:"id,omitempty"` + InstanceType *InstanceType `json:"instance-type,omitempty"` + Instances *[]Instance `json:"instances,omitempty"` + Ipv6Enabled *bool `json:"ipv6-enabled,omitempty"` + Manager *Manager `json:"manager,omitempty"` + Name *string `json:"name,omitempty"` + PrivateNetworks *[]PrivateNetwork `json:"private-networks,omitempty"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + Size *int64 `json:"size,omitempty"` + SshKey *SshKey `json:"ssh-key,omitempty"` + State *string `json:"state,omitempty"` + Template *Template `json:"template,omitempty"` + UserData *string `json:"user-data,omitempty"` +} + +// InstanceType defines model for instance-type. +type InstanceType struct { + Authorized *bool `json:"authorized,omitempty"` + Cpus *int64 `json:"cpus,omitempty"` + Family *string `json:"family,omitempty"` + Gpus *int64 `json:"gpus,omitempty"` + Id *string `json:"id,omitempty"` + Memory *int64 `json:"memory,omitempty"` + Size *string `json:"size,omitempty"` +} + +// LoadBalancer defines model for load-balancer. +type LoadBalancer struct { + CreatedAt *time.Time `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` + Ip *string `json:"ip,omitempty"` + Name *string `json:"name,omitempty"` + Services *[]LoadBalancerService `json:"services,omitempty"` + State *string `json:"state,omitempty"` +} + +// LoadBalancerServerStatus defines model for load-balancer-server-status. +type LoadBalancerServerStatus struct { + PublicIp *string `json:"public-ip,omitempty"` + Status *string `json:"status,omitempty"` +} + +// LoadBalancerService defines model for load-balancer-service. +type LoadBalancerService struct { + Description *string `json:"description,omitempty"` + Healthcheck *Healthcheck `json:"healthcheck,omitempty"` + HealthcheckStatus *[]LoadBalancerServerStatus `json:"healthcheck-status,omitempty"` + Id *string `json:"id,omitempty"` + InstancePool *InstancePool `json:"instance-pool,omitempty"` + Name *string `json:"name,omitempty"` + Port *int64 `json:"port,omitempty"` + Protocol *string `json:"protocol,omitempty"` + State *string `json:"state,omitempty"` + Strategy *string `json:"strategy,omitempty"` + TargetPort *int64 `json:"target-port,omitempty"` +} + +// Manager defines model for manager. +type Manager struct { + Id *string `json:"id,omitempty"` + Type *string `json:"type,omitempty"` +} + +// Operation defines model for operation. +type Operation struct { + Id *string `json:"id,omitempty"` + Message *string `json:"message,omitempty"` + Reason *string `json:"reason,omitempty"` + Reference *Reference `json:"reference,omitempty"` + State *string `json:"state,omitempty"` +} + +// PrivateNetwork defines model for private-network. +type PrivateNetwork struct { + Description *string `json:"description,omitempty"` + EndIp *string `json:"end-ip,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Netmask *string `json:"netmask,omitempty"` + StartIp *string `json:"start-ip,omitempty"` +} + +// Reference defines model for reference. +type Reference struct { + Command *string `json:"command,omitempty"` + Id *string `json:"id,omitempty"` + Link *string `json:"link,omitempty"` +} + +// SecurityGroup defines model for security-group. +type SecurityGroup struct { + Description *string `json:"description,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + Rules *[]SecurityGroupRule `json:"rules,omitempty"` +} + +// SecurityGroupResource defines model for security-group-resource. +type SecurityGroupResource struct { + Id *string `json:"id,omitempty"` + Name string `json:"name"` +} + +// SecurityGroupRule defines model for security-group-rule. +type SecurityGroupRule struct { + Description *string `json:"description,omitempty"` + EndPort *int64 `json:"end-port,omitempty"` + FlowDirection *string `json:"flow-direction,omitempty"` + Icmp *struct { + Code *int64 `json:"code,omitempty"` + Type *int64 `json:"type,omitempty"` + } `json:"icmp,omitempty"` + Id *string `json:"id,omitempty"` + Network *string `json:"network,omitempty"` + Protocol *string `json:"protocol,omitempty"` + SecurityGroup *SecurityGroupResource `json:"security-group,omitempty"` + StartPort *int64 `json:"start-port,omitempty"` +} + +// SksCluster defines model for sks-cluster. +type SksCluster struct { + Addons *[]string `json:"addons,omitempty"` + Cni *string `json:"cni,omitempty"` + CreatedAt *time.Time `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + Endpoint *string `json:"endpoint,omitempty"` + Id *string `json:"id,omitempty"` + Level *string `json:"level,omitempty"` + Name *string `json:"name,omitempty"` + Nodepools *[]SksNodepool `json:"nodepools,omitempty"` + State *string `json:"state,omitempty"` + Version *string `json:"version,omitempty"` +} + +// SksKubeconfigRequest defines model for sks-kubeconfig-request. +type SksKubeconfigRequest struct { + Groups *[]string `json:"groups,omitempty"` + Ttl *int64 `json:"ttl,omitempty"` + User *string `json:"user,omitempty"` +} + +// SksNodepool defines model for sks-nodepool. +type SksNodepool struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + CreatedAt *time.Time `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize *int64 `json:"disk-size,omitempty"` + Id *string `json:"id,omitempty"` + InstancePool *InstancePool `json:"instance-pool,omitempty"` + InstanceType *InstanceType `json:"instance-type,omitempty"` + Name *string `json:"name,omitempty"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + Size *int64 `json:"size,omitempty"` + State *string `json:"state,omitempty"` + Template *Template `json:"template,omitempty"` + Version *string `json:"version,omitempty"` +} + +// Snapshot defines model for snapshot. +type Snapshot struct { + CreatedAt *time.Time `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + Export *struct { + Md5sum *string `json:"md5sum,omitempty"` + PresignedUrl *string `json:"presigned-url,omitempty"` + } `json:"export,omitempty"` + Id *string `json:"id,omitempty"` + Instance *Instance `json:"instance,omitempty"` + Name *string `json:"name,omitempty"` + State *string `json:"state,omitempty"` +} + +// SshKey defines model for ssh-key. +type SshKey struct { + Fingerprint *string `json:"fingerprint,omitempty"` + Name *string `json:"name,omitempty"` +} + +// Template defines model for template. +type Template struct { + BootMode *string `json:"boot-mode,omitempty"` + Build *string `json:"build,omitempty"` + Checksum *string `json:"checksum,omitempty"` + CreatedAt *time.Time `json:"created-at,omitempty"` + DefaultUser *string `json:"default-user,omitempty"` + Description *string `json:"description,omitempty"` + Family *string `json:"family,omitempty"` + Id *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + PasswordEnabled *bool `json:"password-enabled,omitempty"` + Size *int64 `json:"size,omitempty"` + SshKeyEnabled *bool `json:"ssh-key-enabled,omitempty"` + Url *string `json:"url,omitempty"` + Version *string `json:"version,omitempty"` + Visibility *string `json:"visibility,omitempty"` +} + +// Zone defines model for zone. +type Zone struct { + Name *string `json:"name,omitempty"` +} + +// CreateAntiAffinityGroupJSONBody defines parameters for CreateAntiAffinityGroup. +type CreateAntiAffinityGroupJSONBody struct { + Description *string `json:"description,omitempty"` + Name string `json:"name"` +} + +// ListEventsParams defines parameters for ListEvents. +type ListEventsParams struct { + From *time.Time `json:"from,omitempty"` + To *time.Time `json:"to,omitempty"` +} + +// CreateInstanceJSONBody defines parameters for CreateInstance. +type CreateInstanceJSONBody Instance + +// CreateInstanceParams defines parameters for CreateInstance. +type CreateInstanceParams struct { + Start *bool `json:"start,omitempty"` +} + +// CreateInstancePoolJSONBody defines parameters for CreateInstancePool. +type CreateInstancePoolJSONBody struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize int64 `json:"disk-size"` + ElasticIps *[]ElasticIp `json:"elastic-ips,omitempty"` + InstanceType InstanceType `json:"instance-type"` + Ipv6Enabled *bool `json:"ipv6-enabled,omitempty"` + Name string `json:"name"` + PrivateNetworks *[]PrivateNetwork `json:"private-networks,omitempty"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + Size int64 `json:"size"` + SshKey *SshKey `json:"ssh-key,omitempty"` + Template Template `json:"template"` + UserData *string `json:"user-data,omitempty"` +} + +// UpdateInstancePoolJSONBody defines parameters for UpdateInstancePool. +type UpdateInstancePoolJSONBody struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize *int64 `json:"disk-size,omitempty"` + ElasticIps *[]ElasticIp `json:"elastic-ips,omitempty"` + InstanceType *InstanceType `json:"instance-type,omitempty"` + Ipv6Enabled *bool `json:"ipv6-enabled,omitempty"` + Name *string `json:"name,omitempty"` + PrivateNetworks *[]PrivateNetwork `json:"private-networks,omitempty"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + SshKey *SshKey `json:"ssh-key,omitempty"` + Template *Template `json:"template,omitempty"` + UserData *string `json:"user-data,omitempty"` +} + +// EvictInstancePoolMembersJSONBody defines parameters for EvictInstancePoolMembers. +type EvictInstancePoolMembersJSONBody struct { + Instances *[]string `json:"instances,omitempty"` +} + +// ScaleInstancePoolJSONBody defines parameters for ScaleInstancePool. +type ScaleInstancePoolJSONBody struct { + Size int64 `json:"size"` +} + +// RevertInstanceToSnapshotJSONBody defines parameters for RevertInstanceToSnapshot. +type RevertInstanceToSnapshotJSONBody struct { + Id string `json:"id"` +} + +// CreateLoadBalancerJSONBody defines parameters for CreateLoadBalancer. +type CreateLoadBalancerJSONBody struct { + Description *string `json:"description,omitempty"` + Name string `json:"name"` +} + +// UpdateLoadBalancerJSONBody defines parameters for UpdateLoadBalancer. +type UpdateLoadBalancerJSONBody struct { + Description *string `json:"description,omitempty"` + Name *string `json:"name,omitempty"` +} + +// AddServiceToLoadBalancerJSONBody defines parameters for AddServiceToLoadBalancer. +type AddServiceToLoadBalancerJSONBody struct { + Description *string `json:"description,omitempty"` + Healthcheck Healthcheck `json:"healthcheck"` + InstancePool InstancePool `json:"instance-pool"` + Name string `json:"name"` + Port int64 `json:"port"` + Protocol string `json:"protocol"` + Strategy string `json:"strategy"` + TargetPort int64 `json:"target-port"` +} + +// UpdateLoadBalancerServiceJSONBody defines parameters for UpdateLoadBalancerService. +type UpdateLoadBalancerServiceJSONBody struct { + Description *string `json:"description,omitempty"` + Healthcheck *Healthcheck `json:"healthcheck,omitempty"` + Name *string `json:"name,omitempty"` + Port *int64 `json:"port,omitempty"` + Protocol *string `json:"protocol,omitempty"` + Strategy *string `json:"strategy,omitempty"` + TargetPort *int64 `json:"target-port,omitempty"` +} + +// CreatePrivateNetworkJSONBody defines parameters for CreatePrivateNetwork. +type CreatePrivateNetworkJSONBody struct { + Description *string `json:"description,omitempty"` + EndIp *string `json:"end-ip,omitempty"` + Name string `json:"name"` + Netmask *string `json:"netmask,omitempty"` + StartIp *string `json:"start-ip,omitempty"` +} + +// UpdatePrivateNetworkJSONBody defines parameters for UpdatePrivateNetwork. +type UpdatePrivateNetworkJSONBody struct { + Description *string `json:"description,omitempty"` + EndIp *string `json:"end-ip,omitempty"` + Name *string `json:"name,omitempty"` + Netmask *string `json:"netmask,omitempty"` + StartIp *string `json:"start-ip,omitempty"` +} + +// CreateSecurityGroupJSONBody defines parameters for CreateSecurityGroup. +type CreateSecurityGroupJSONBody struct { + Description *string `json:"description,omitempty"` + Name string `json:"name"` +} + +// AddRuleToSecurityGroupJSONBody defines parameters for AddRuleToSecurityGroup. +type AddRuleToSecurityGroupJSONBody struct { + Description *string `json:"description,omitempty"` + EndPort *int64 `json:"end-port,omitempty"` + FlowDirection string `json:"flow-direction"` + Icmp *struct { + Code *int64 `json:"code,omitempty"` + Type *int64 `json:"type,omitempty"` + } `json:"icmp,omitempty"` + Network *string `json:"network,omitempty"` + Protocol *string `json:"protocol,omitempty"` + SecurityGroup *SecurityGroupResource `json:"security-group,omitempty"` + StartPort *int64 `json:"start-port,omitempty"` +} + +// CreateSksClusterJSONBody defines parameters for CreateSksCluster. +type CreateSksClusterJSONBody struct { + Addons *[]string `json:"addons,omitempty"` + Cni *string `json:"cni,omitempty"` + Description *string `json:"description,omitempty"` + Level string `json:"level"` + Name string `json:"name"` + Version string `json:"version"` +} + +// GenerateSksClusterKubeconfigJSONBody defines parameters for GenerateSksClusterKubeconfig. +type GenerateSksClusterKubeconfigJSONBody SksKubeconfigRequest + +// UpdateSksClusterJSONBody defines parameters for UpdateSksCluster. +type UpdateSksClusterJSONBody struct { + Description *string `json:"description,omitempty"` + Name *string `json:"name,omitempty"` +} + +// CreateSksNodepoolJSONBody defines parameters for CreateSksNodepool. +type CreateSksNodepoolJSONBody struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize int64 `json:"disk-size"` + InstanceType InstanceType `json:"instance-type"` + Name string `json:"name"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + Size int64 `json:"size"` +} + +// UpdateSksNodepoolJSONBody defines parameters for UpdateSksNodepool. +type UpdateSksNodepoolJSONBody struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize *int64 `json:"disk-size,omitempty"` + InstanceType *InstanceType `json:"instance-type,omitempty"` + Name *string `json:"name,omitempty"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` +} + +// EvictSksNodepoolMembersJSONBody defines parameters for EvictSksNodepoolMembers. +type EvictSksNodepoolMembersJSONBody struct { + Instances *[]string `json:"instances,omitempty"` +} + +// ScaleSksNodepoolJSONBody defines parameters for ScaleSksNodepool. +type ScaleSksNodepoolJSONBody struct { + Size int64 `json:"size"` +} + +// UpgradeSksClusterJSONBody defines parameters for UpgradeSksCluster. +type UpgradeSksClusterJSONBody struct { + Version string `json:"version"` +} + +// GetSosPresignedUrlParams defines parameters for GetSosPresignedUrl. +type GetSosPresignedUrlParams struct { + Key *string `json:"key,omitempty"` +} + +// ListTemplatesParams defines parameters for ListTemplates. +type ListTemplatesParams struct { + Visibility *string `json:"visibility,omitempty"` + Family *string `json:"family,omitempty"` +} + +// RegisterTemplateJSONBody defines parameters for RegisterTemplate. +type RegisterTemplateJSONBody struct { + BootMode *string `json:"boot-mode,omitempty"` + Checksum string `json:"checksum"` + DefaultUser *string `json:"default-user,omitempty"` + Description *string `json:"description,omitempty"` + Name string `json:"name"` + PasswordEnabled bool `json:"password-enabled"` + Size *int64 `json:"size,omitempty"` + SshKeyEnabled bool `json:"ssh-key-enabled"` + Url string `json:"url"` +} + +// CopyTemplateJSONBody defines parameters for CopyTemplate. +type CopyTemplateJSONBody struct { + TargetZone string `json:"target-zone"` +} + +// CreateAntiAffinityGroupRequestBody defines body for CreateAntiAffinityGroup for application/json ContentType. +type CreateAntiAffinityGroupJSONRequestBody CreateAntiAffinityGroupJSONBody + +// CreateInstanceRequestBody defines body for CreateInstance for application/json ContentType. +type CreateInstanceJSONRequestBody CreateInstanceJSONBody + +// CreateInstancePoolRequestBody defines body for CreateInstancePool for application/json ContentType. +type CreateInstancePoolJSONRequestBody CreateInstancePoolJSONBody + +// UpdateInstancePoolRequestBody defines body for UpdateInstancePool for application/json ContentType. +type UpdateInstancePoolJSONRequestBody UpdateInstancePoolJSONBody + +// EvictInstancePoolMembersRequestBody defines body for EvictInstancePoolMembers for application/json ContentType. +type EvictInstancePoolMembersJSONRequestBody EvictInstancePoolMembersJSONBody + +// ScaleInstancePoolRequestBody defines body for ScaleInstancePool for application/json ContentType. +type ScaleInstancePoolJSONRequestBody ScaleInstancePoolJSONBody + +// RevertInstanceToSnapshotRequestBody defines body for RevertInstanceToSnapshot for application/json ContentType. +type RevertInstanceToSnapshotJSONRequestBody RevertInstanceToSnapshotJSONBody + +// CreateLoadBalancerRequestBody defines body for CreateLoadBalancer for application/json ContentType. +type CreateLoadBalancerJSONRequestBody CreateLoadBalancerJSONBody + +// UpdateLoadBalancerRequestBody defines body for UpdateLoadBalancer for application/json ContentType. +type UpdateLoadBalancerJSONRequestBody UpdateLoadBalancerJSONBody + +// AddServiceToLoadBalancerRequestBody defines body for AddServiceToLoadBalancer for application/json ContentType. +type AddServiceToLoadBalancerJSONRequestBody AddServiceToLoadBalancerJSONBody + +// UpdateLoadBalancerServiceRequestBody defines body for UpdateLoadBalancerService for application/json ContentType. +type UpdateLoadBalancerServiceJSONRequestBody UpdateLoadBalancerServiceJSONBody + +// CreatePrivateNetworkRequestBody defines body for CreatePrivateNetwork for application/json ContentType. +type CreatePrivateNetworkJSONRequestBody CreatePrivateNetworkJSONBody + +// UpdatePrivateNetworkRequestBody defines body for UpdatePrivateNetwork for application/json ContentType. +type UpdatePrivateNetworkJSONRequestBody UpdatePrivateNetworkJSONBody + +// CreateSecurityGroupRequestBody defines body for CreateSecurityGroup for application/json ContentType. +type CreateSecurityGroupJSONRequestBody CreateSecurityGroupJSONBody + +// AddRuleToSecurityGroupRequestBody defines body for AddRuleToSecurityGroup for application/json ContentType. +type AddRuleToSecurityGroupJSONRequestBody AddRuleToSecurityGroupJSONBody + +// CreateSksClusterRequestBody defines body for CreateSksCluster for application/json ContentType. +type CreateSksClusterJSONRequestBody CreateSksClusterJSONBody + +// GenerateSksClusterKubeconfigRequestBody defines body for GenerateSksClusterKubeconfig for application/json ContentType. +type GenerateSksClusterKubeconfigJSONRequestBody GenerateSksClusterKubeconfigJSONBody + +// UpdateSksClusterRequestBody defines body for UpdateSksCluster for application/json ContentType. +type UpdateSksClusterJSONRequestBody UpdateSksClusterJSONBody + +// CreateSksNodepoolRequestBody defines body for CreateSksNodepool for application/json ContentType. +type CreateSksNodepoolJSONRequestBody CreateSksNodepoolJSONBody + +// UpdateSksNodepoolRequestBody defines body for UpdateSksNodepool for application/json ContentType. +type UpdateSksNodepoolJSONRequestBody UpdateSksNodepoolJSONBody + +// EvictSksNodepoolMembersRequestBody defines body for EvictSksNodepoolMembers for application/json ContentType. +type EvictSksNodepoolMembersJSONRequestBody EvictSksNodepoolMembersJSONBody + +// ScaleSksNodepoolRequestBody defines body for ScaleSksNodepool for application/json ContentType. +type ScaleSksNodepoolJSONRequestBody ScaleSksNodepoolJSONBody + +// UpgradeSksClusterRequestBody defines body for UpgradeSksCluster for application/json ContentType. +type UpgradeSksClusterJSONRequestBody UpgradeSksClusterJSONBody + +// RegisterTemplateRequestBody defines body for RegisterTemplate for application/json ContentType. +type RegisterTemplateJSONRequestBody RegisterTemplateJSONBody + +// CopyTemplateRequestBody defines body for CopyTemplate for application/json ContentType. +type CopyTemplateJSONRequestBody CopyTemplateJSONBody + +// Getter for additional properties for Event_Payload. Returns the specified +// element and whether it was found +func (a Event_Payload) Get(fieldName string) (value interface{}, found bool) { + if a.AdditionalProperties != nil { + value, found = a.AdditionalProperties[fieldName] + } + return +} + +// Setter for additional properties for Event_Payload +func (a *Event_Payload) Set(fieldName string, value interface{}) { + if a.AdditionalProperties == nil { + a.AdditionalProperties = make(map[string]interface{}) + } + a.AdditionalProperties[fieldName] = value +} + +// Override default JSON handling for Event_Payload to handle AdditionalProperties +func (a *Event_Payload) UnmarshalJSON(b []byte) error { + object := make(map[string]json.RawMessage) + err := json.Unmarshal(b, &object) + if err != nil { + return err + } + + if len(object) != 0 { + a.AdditionalProperties = make(map[string]interface{}) + for fieldName, fieldBuf := range object { + var fieldVal interface{} + err := json.Unmarshal(fieldBuf, &fieldVal) + if err != nil { + return errors.Wrap(err, fmt.Sprintf("error unmarshaling field %s", fieldName)) + } + a.AdditionalProperties[fieldName] = fieldVal + } + } + return nil +} + +// Override default JSON handling for Event_Payload to handle AdditionalProperties +func (a Event_Payload) MarshalJSON() ([]byte, error) { + var err error + object := make(map[string]json.RawMessage) + + for fieldName, field := range a.AdditionalProperties { + object[fieldName], err = json.Marshal(field) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("error marshaling '%s'", fieldName)) + } + } + return json.Marshal(object) +} + +// RequestEditorFn is the function signature for the RequestEditor callback function +type RequestEditorFn func(ctx context.Context, req *http.Request) error + +// Doer performs HTTP requests. +// +// The standard http.Client implements this interface. +type HttpRequestDoer interface { + Do(req *http.Request) (*http.Response, error) +} + +// Client which conforms to the OpenAPI3 specification for this service. +type Client struct { + // The endpoint of the server conforming to this interface, with scheme, + // https://api.deepmap.com for example. This can contain a path relative + // to the server, such as https://api.deepmap.com/dev-test, and all the + // paths in the swagger spec will be appended to the server. + Server string + + // Doer for performing requests, typically a *http.Client with any + // customized settings, such as certificate chains. + Client HttpRequestDoer + + // A callback for modifying requests which are generated before sending over + // the network. + RequestEditor RequestEditorFn +} + +// ClientOption allows setting custom parameters during construction +type ClientOption func(*Client) error + +// Creates a new Client, with reasonable defaults +func NewClient(server string, opts ...ClientOption) (*Client, error) { + // create a client with sane default values + client := Client{ + Server: server, + } + // mutate client and add all optional params + for _, o := range opts { + if err := o(&client); err != nil { + return nil, err + } + } + // ensure the server URL always has a trailing slash + if !strings.HasSuffix(client.Server, "/") { + client.Server += "/" + } + // create httpClient, if not already present + if client.Client == nil { + client.Client = http.DefaultClient + } + return &client, nil +} + +// WithHTTPClient allows overriding the default Doer, which is +// automatically created using http.Client. This is useful for tests. +func WithHTTPClient(doer HttpRequestDoer) ClientOption { + return func(c *Client) error { + c.Client = doer + return nil + } +} + +// WithRequestEditorFn allows setting up a callback function, which will be +// called right before sending the request. This can be used to mutate the request. +func WithRequestEditorFn(fn RequestEditorFn) ClientOption { + return func(c *Client) error { + c.RequestEditor = fn + return nil + } +} + +// The interface specification for the client above. +type ClientInterface interface { + // ListAntiAffinityGroups request + ListAntiAffinityGroups(ctx context.Context) (*http.Response, error) + + // CreateAntiAffinityGroup request with any body + CreateAntiAffinityGroupWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) + + CreateAntiAffinityGroup(ctx context.Context, body CreateAntiAffinityGroupJSONRequestBody) (*http.Response, error) + + // DeleteAntiAffinityGroup request + DeleteAntiAffinityGroup(ctx context.Context, id string) (*http.Response, error) + + // GetAntiAffinityGroup request + GetAntiAffinityGroup(ctx context.Context, id string) (*http.Response, error) + + // GetElasticIp request + GetElasticIp(ctx context.Context, id string) (*http.Response, error) + + // ListEvents request + ListEvents(ctx context.Context, params *ListEventsParams) (*http.Response, error) + + // CreateInstance request with any body + CreateInstanceWithBody(ctx context.Context, params *CreateInstanceParams, contentType string, body io.Reader) (*http.Response, error) + + CreateInstance(ctx context.Context, params *CreateInstanceParams, body CreateInstanceJSONRequestBody) (*http.Response, error) + + // ListInstancePools request + ListInstancePools(ctx context.Context) (*http.Response, error) + + // CreateInstancePool request with any body + CreateInstancePoolWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) + + CreateInstancePool(ctx context.Context, body CreateInstancePoolJSONRequestBody) (*http.Response, error) + + // DeleteInstancePool request + DeleteInstancePool(ctx context.Context, id string) (*http.Response, error) + + // GetInstancePool request + GetInstancePool(ctx context.Context, id string) (*http.Response, error) + + // UpdateInstancePool request with any body + UpdateInstancePoolWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + UpdateInstancePool(ctx context.Context, id string, body UpdateInstancePoolJSONRequestBody) (*http.Response, error) + + // DeleteInstancePoolField request + DeleteInstancePoolField(ctx context.Context, id string, field string) (*http.Response, error) + + // EvictInstancePoolMembers request with any body + EvictInstancePoolMembersWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + EvictInstancePoolMembers(ctx context.Context, id string, body EvictInstancePoolMembersJSONRequestBody) (*http.Response, error) + + // ScaleInstancePool request with any body + ScaleInstancePoolWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + ScaleInstancePool(ctx context.Context, id string, body ScaleInstancePoolJSONRequestBody) (*http.Response, error) + + // ListInstanceTypes request + ListInstanceTypes(ctx context.Context) (*http.Response, error) + + // GetInstanceType request + GetInstanceType(ctx context.Context, id string) (*http.Response, error) + + // CreateSnapshot request + CreateSnapshot(ctx context.Context, id string) (*http.Response, error) + + // RevertInstanceToSnapshot request with any body + RevertInstanceToSnapshotWithBody(ctx context.Context, instanceId string, contentType string, body io.Reader) (*http.Response, error) + + RevertInstanceToSnapshot(ctx context.Context, instanceId string, body RevertInstanceToSnapshotJSONRequestBody) (*http.Response, error) + + // ListLoadBalancers request + ListLoadBalancers(ctx context.Context) (*http.Response, error) + + // CreateLoadBalancer request with any body + CreateLoadBalancerWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) + + CreateLoadBalancer(ctx context.Context, body CreateLoadBalancerJSONRequestBody) (*http.Response, error) + + // DeleteLoadBalancer request + DeleteLoadBalancer(ctx context.Context, id string) (*http.Response, error) + + // GetLoadBalancer request + GetLoadBalancer(ctx context.Context, id string) (*http.Response, error) + + // UpdateLoadBalancer request with any body + UpdateLoadBalancerWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + UpdateLoadBalancer(ctx context.Context, id string, body UpdateLoadBalancerJSONRequestBody) (*http.Response, error) + + // AddServiceToLoadBalancer request with any body + AddServiceToLoadBalancerWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + AddServiceToLoadBalancer(ctx context.Context, id string, body AddServiceToLoadBalancerJSONRequestBody) (*http.Response, error) + + // DeleteLoadBalancerService request + DeleteLoadBalancerService(ctx context.Context, id string, serviceId string) (*http.Response, error) + + // GetLoadBalancerService request + GetLoadBalancerService(ctx context.Context, id string, serviceId string) (*http.Response, error) + + // UpdateLoadBalancerService request with any body + UpdateLoadBalancerServiceWithBody(ctx context.Context, id string, serviceId string, contentType string, body io.Reader) (*http.Response, error) + + UpdateLoadBalancerService(ctx context.Context, id string, serviceId string, body UpdateLoadBalancerServiceJSONRequestBody) (*http.Response, error) + + // GetOperation request + GetOperation(ctx context.Context, id string) (*http.Response, error) + + // ListPrivateNetworks request + ListPrivateNetworks(ctx context.Context) (*http.Response, error) + + // CreatePrivateNetwork request with any body + CreatePrivateNetworkWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) + + CreatePrivateNetwork(ctx context.Context, body CreatePrivateNetworkJSONRequestBody) (*http.Response, error) + + // DeletePrivateNetwork request + DeletePrivateNetwork(ctx context.Context, id string) (*http.Response, error) + + // GetPrivateNetwork request + GetPrivateNetwork(ctx context.Context, id string) (*http.Response, error) + + // UpdatePrivateNetwork request with any body + UpdatePrivateNetworkWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + UpdatePrivateNetwork(ctx context.Context, id string, body UpdatePrivateNetworkJSONRequestBody) (*http.Response, error) + + // DeletePrivateNetworkField request + DeletePrivateNetworkField(ctx context.Context, id string, field string) (*http.Response, error) + + // ListSecurityGroups request + ListSecurityGroups(ctx context.Context) (*http.Response, error) + + // CreateSecurityGroup request with any body + CreateSecurityGroupWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) + + CreateSecurityGroup(ctx context.Context, body CreateSecurityGroupJSONRequestBody) (*http.Response, error) + + // DeleteSecurityGroup request + DeleteSecurityGroup(ctx context.Context, id string) (*http.Response, error) + + // GetSecurityGroup request + GetSecurityGroup(ctx context.Context, id string) (*http.Response, error) + + // AddRuleToSecurityGroup request with any body + AddRuleToSecurityGroupWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + AddRuleToSecurityGroup(ctx context.Context, id string, body AddRuleToSecurityGroupJSONRequestBody) (*http.Response, error) + + // DeleteRuleFromSecurityGroup request + DeleteRuleFromSecurityGroup(ctx context.Context, id string, ruleId string) (*http.Response, error) + + // ListSksClusters request + ListSksClusters(ctx context.Context) (*http.Response, error) + + // CreateSksCluster request with any body + CreateSksClusterWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) + + CreateSksCluster(ctx context.Context, body CreateSksClusterJSONRequestBody) (*http.Response, error) + + // GenerateSksClusterKubeconfig request with any body + GenerateSksClusterKubeconfigWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + GenerateSksClusterKubeconfig(ctx context.Context, id string, body GenerateSksClusterKubeconfigJSONRequestBody) (*http.Response, error) + + // ListSksClusterVersions request + ListSksClusterVersions(ctx context.Context) (*http.Response, error) + + // DeleteSksCluster request + DeleteSksCluster(ctx context.Context, id string) (*http.Response, error) + + // GetSksCluster request + GetSksCluster(ctx context.Context, id string) (*http.Response, error) + + // UpdateSksCluster request with any body + UpdateSksClusterWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + UpdateSksCluster(ctx context.Context, id string, body UpdateSksClusterJSONRequestBody) (*http.Response, error) + + // CreateSksNodepool request with any body + CreateSksNodepoolWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + CreateSksNodepool(ctx context.Context, id string, body CreateSksNodepoolJSONRequestBody) (*http.Response, error) + + // DeleteSksNodepool request + DeleteSksNodepool(ctx context.Context, id string, sksNodepoolId string) (*http.Response, error) + + // GetSksNodepool request + GetSksNodepool(ctx context.Context, id string, sksNodepoolId string) (*http.Response, error) + + // UpdateSksNodepool request with any body + UpdateSksNodepoolWithBody(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Response, error) + + UpdateSksNodepool(ctx context.Context, id string, sksNodepoolId string, body UpdateSksNodepoolJSONRequestBody) (*http.Response, error) + + // DeleteSksNodepoolField request + DeleteSksNodepoolField(ctx context.Context, id string, sksNodepoolId string, field string) (*http.Response, error) + + // EvictSksNodepoolMembers request with any body + EvictSksNodepoolMembersWithBody(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Response, error) + + EvictSksNodepoolMembers(ctx context.Context, id string, sksNodepoolId string, body EvictSksNodepoolMembersJSONRequestBody) (*http.Response, error) + + // ScaleSksNodepool request with any body + ScaleSksNodepoolWithBody(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Response, error) + + ScaleSksNodepool(ctx context.Context, id string, sksNodepoolId string, body ScaleSksNodepoolJSONRequestBody) (*http.Response, error) + + // UpgradeSksCluster request with any body + UpgradeSksClusterWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + UpgradeSksCluster(ctx context.Context, id string, body UpgradeSksClusterJSONRequestBody) (*http.Response, error) + + // DeleteSksClusterField request + DeleteSksClusterField(ctx context.Context, id string, field string) (*http.Response, error) + + // ListSnapshots request + ListSnapshots(ctx context.Context) (*http.Response, error) + + // DeleteSnapshot request + DeleteSnapshot(ctx context.Context, id string) (*http.Response, error) + + // GetSnapshot request + GetSnapshot(ctx context.Context, id string) (*http.Response, error) + + // ExportSnapshot request + ExportSnapshot(ctx context.Context, id string) (*http.Response, error) + + // GetSosPresignedUrl request + GetSosPresignedUrl(ctx context.Context, bucket string, params *GetSosPresignedUrlParams) (*http.Response, error) + + // GetSshKey request + GetSshKey(ctx context.Context, name string) (*http.Response, error) + + // ListTemplates request + ListTemplates(ctx context.Context, params *ListTemplatesParams) (*http.Response, error) + + // RegisterTemplate request with any body + RegisterTemplateWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) + + RegisterTemplate(ctx context.Context, body RegisterTemplateJSONRequestBody) (*http.Response, error) + + // DeleteTemplate request + DeleteTemplate(ctx context.Context, id string) (*http.Response, error) + + // GetTemplate request + GetTemplate(ctx context.Context, id string) (*http.Response, error) + + // CopyTemplate request with any body + CopyTemplateWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) + + CopyTemplate(ctx context.Context, id string, body CopyTemplateJSONRequestBody) (*http.Response, error) + + // ListZones request + ListZones(ctx context.Context) (*http.Response, error) +} + +func (c *Client) ListAntiAffinityGroups(ctx context.Context) (*http.Response, error) { + req, err := NewListAntiAffinityGroupsRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateAntiAffinityGroupWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreateAntiAffinityGroupRequestWithBody(c.Server, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateAntiAffinityGroup(ctx context.Context, body CreateAntiAffinityGroupJSONRequestBody) (*http.Response, error) { + req, err := NewCreateAntiAffinityGroupRequest(c.Server, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteAntiAffinityGroup(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeleteAntiAffinityGroupRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetAntiAffinityGroup(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetAntiAffinityGroupRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetElasticIp(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetElasticIpRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListEvents(ctx context.Context, params *ListEventsParams) (*http.Response, error) { + req, err := NewListEventsRequest(c.Server, params) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateInstanceWithBody(ctx context.Context, params *CreateInstanceParams, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreateInstanceRequestWithBody(c.Server, params, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateInstance(ctx context.Context, params *CreateInstanceParams, body CreateInstanceJSONRequestBody) (*http.Response, error) { + req, err := NewCreateInstanceRequest(c.Server, params, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListInstancePools(ctx context.Context) (*http.Response, error) { + req, err := NewListInstancePoolsRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateInstancePoolWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreateInstancePoolRequestWithBody(c.Server, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateInstancePool(ctx context.Context, body CreateInstancePoolJSONRequestBody) (*http.Response, error) { + req, err := NewCreateInstancePoolRequest(c.Server, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteInstancePool(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeleteInstancePoolRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetInstancePool(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetInstancePoolRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateInstancePoolWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewUpdateInstancePoolRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateInstancePool(ctx context.Context, id string, body UpdateInstancePoolJSONRequestBody) (*http.Response, error) { + req, err := NewUpdateInstancePoolRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteInstancePoolField(ctx context.Context, id string, field string) (*http.Response, error) { + req, err := NewDeleteInstancePoolFieldRequest(c.Server, id, field) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) EvictInstancePoolMembersWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewEvictInstancePoolMembersRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) EvictInstancePoolMembers(ctx context.Context, id string, body EvictInstancePoolMembersJSONRequestBody) (*http.Response, error) { + req, err := NewEvictInstancePoolMembersRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ScaleInstancePoolWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewScaleInstancePoolRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ScaleInstancePool(ctx context.Context, id string, body ScaleInstancePoolJSONRequestBody) (*http.Response, error) { + req, err := NewScaleInstancePoolRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListInstanceTypes(ctx context.Context) (*http.Response, error) { + req, err := NewListInstanceTypesRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetInstanceType(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetInstanceTypeRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateSnapshot(ctx context.Context, id string) (*http.Response, error) { + req, err := NewCreateSnapshotRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) RevertInstanceToSnapshotWithBody(ctx context.Context, instanceId string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewRevertInstanceToSnapshotRequestWithBody(c.Server, instanceId, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) RevertInstanceToSnapshot(ctx context.Context, instanceId string, body RevertInstanceToSnapshotJSONRequestBody) (*http.Response, error) { + req, err := NewRevertInstanceToSnapshotRequest(c.Server, instanceId, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListLoadBalancers(ctx context.Context) (*http.Response, error) { + req, err := NewListLoadBalancersRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateLoadBalancerWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreateLoadBalancerRequestWithBody(c.Server, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateLoadBalancer(ctx context.Context, body CreateLoadBalancerJSONRequestBody) (*http.Response, error) { + req, err := NewCreateLoadBalancerRequest(c.Server, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteLoadBalancer(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeleteLoadBalancerRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetLoadBalancer(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetLoadBalancerRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateLoadBalancerWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewUpdateLoadBalancerRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateLoadBalancer(ctx context.Context, id string, body UpdateLoadBalancerJSONRequestBody) (*http.Response, error) { + req, err := NewUpdateLoadBalancerRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) AddServiceToLoadBalancerWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewAddServiceToLoadBalancerRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) AddServiceToLoadBalancer(ctx context.Context, id string, body AddServiceToLoadBalancerJSONRequestBody) (*http.Response, error) { + req, err := NewAddServiceToLoadBalancerRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteLoadBalancerService(ctx context.Context, id string, serviceId string) (*http.Response, error) { + req, err := NewDeleteLoadBalancerServiceRequest(c.Server, id, serviceId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetLoadBalancerService(ctx context.Context, id string, serviceId string) (*http.Response, error) { + req, err := NewGetLoadBalancerServiceRequest(c.Server, id, serviceId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateLoadBalancerServiceWithBody(ctx context.Context, id string, serviceId string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewUpdateLoadBalancerServiceRequestWithBody(c.Server, id, serviceId, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateLoadBalancerService(ctx context.Context, id string, serviceId string, body UpdateLoadBalancerServiceJSONRequestBody) (*http.Response, error) { + req, err := NewUpdateLoadBalancerServiceRequest(c.Server, id, serviceId, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetOperation(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetOperationRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListPrivateNetworks(ctx context.Context) (*http.Response, error) { + req, err := NewListPrivateNetworksRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreatePrivateNetworkWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreatePrivateNetworkRequestWithBody(c.Server, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreatePrivateNetwork(ctx context.Context, body CreatePrivateNetworkJSONRequestBody) (*http.Response, error) { + req, err := NewCreatePrivateNetworkRequest(c.Server, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeletePrivateNetwork(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeletePrivateNetworkRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetPrivateNetwork(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetPrivateNetworkRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdatePrivateNetworkWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewUpdatePrivateNetworkRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdatePrivateNetwork(ctx context.Context, id string, body UpdatePrivateNetworkJSONRequestBody) (*http.Response, error) { + req, err := NewUpdatePrivateNetworkRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeletePrivateNetworkField(ctx context.Context, id string, field string) (*http.Response, error) { + req, err := NewDeletePrivateNetworkFieldRequest(c.Server, id, field) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListSecurityGroups(ctx context.Context) (*http.Response, error) { + req, err := NewListSecurityGroupsRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateSecurityGroupWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreateSecurityGroupRequestWithBody(c.Server, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateSecurityGroup(ctx context.Context, body CreateSecurityGroupJSONRequestBody) (*http.Response, error) { + req, err := NewCreateSecurityGroupRequest(c.Server, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteSecurityGroup(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeleteSecurityGroupRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetSecurityGroup(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetSecurityGroupRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) AddRuleToSecurityGroupWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewAddRuleToSecurityGroupRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) AddRuleToSecurityGroup(ctx context.Context, id string, body AddRuleToSecurityGroupJSONRequestBody) (*http.Response, error) { + req, err := NewAddRuleToSecurityGroupRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteRuleFromSecurityGroup(ctx context.Context, id string, ruleId string) (*http.Response, error) { + req, err := NewDeleteRuleFromSecurityGroupRequest(c.Server, id, ruleId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListSksClusters(ctx context.Context) (*http.Response, error) { + req, err := NewListSksClustersRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateSksClusterWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreateSksClusterRequestWithBody(c.Server, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateSksCluster(ctx context.Context, body CreateSksClusterJSONRequestBody) (*http.Response, error) { + req, err := NewCreateSksClusterRequest(c.Server, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GenerateSksClusterKubeconfigWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewGenerateSksClusterKubeconfigRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GenerateSksClusterKubeconfig(ctx context.Context, id string, body GenerateSksClusterKubeconfigJSONRequestBody) (*http.Response, error) { + req, err := NewGenerateSksClusterKubeconfigRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListSksClusterVersions(ctx context.Context) (*http.Response, error) { + req, err := NewListSksClusterVersionsRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteSksCluster(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeleteSksClusterRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetSksCluster(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetSksClusterRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateSksClusterWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewUpdateSksClusterRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateSksCluster(ctx context.Context, id string, body UpdateSksClusterJSONRequestBody) (*http.Response, error) { + req, err := NewUpdateSksClusterRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateSksNodepoolWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCreateSksNodepoolRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CreateSksNodepool(ctx context.Context, id string, body CreateSksNodepoolJSONRequestBody) (*http.Response, error) { + req, err := NewCreateSksNodepoolRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteSksNodepool(ctx context.Context, id string, sksNodepoolId string) (*http.Response, error) { + req, err := NewDeleteSksNodepoolRequest(c.Server, id, sksNodepoolId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetSksNodepool(ctx context.Context, id string, sksNodepoolId string) (*http.Response, error) { + req, err := NewGetSksNodepoolRequest(c.Server, id, sksNodepoolId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateSksNodepoolWithBody(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewUpdateSksNodepoolRequestWithBody(c.Server, id, sksNodepoolId, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpdateSksNodepool(ctx context.Context, id string, sksNodepoolId string, body UpdateSksNodepoolJSONRequestBody) (*http.Response, error) { + req, err := NewUpdateSksNodepoolRequest(c.Server, id, sksNodepoolId, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteSksNodepoolField(ctx context.Context, id string, sksNodepoolId string, field string) (*http.Response, error) { + req, err := NewDeleteSksNodepoolFieldRequest(c.Server, id, sksNodepoolId, field) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) EvictSksNodepoolMembersWithBody(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewEvictSksNodepoolMembersRequestWithBody(c.Server, id, sksNodepoolId, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) EvictSksNodepoolMembers(ctx context.Context, id string, sksNodepoolId string, body EvictSksNodepoolMembersJSONRequestBody) (*http.Response, error) { + req, err := NewEvictSksNodepoolMembersRequest(c.Server, id, sksNodepoolId, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ScaleSksNodepoolWithBody(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewScaleSksNodepoolRequestWithBody(c.Server, id, sksNodepoolId, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ScaleSksNodepool(ctx context.Context, id string, sksNodepoolId string, body ScaleSksNodepoolJSONRequestBody) (*http.Response, error) { + req, err := NewScaleSksNodepoolRequest(c.Server, id, sksNodepoolId, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpgradeSksClusterWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewUpgradeSksClusterRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) UpgradeSksCluster(ctx context.Context, id string, body UpgradeSksClusterJSONRequestBody) (*http.Response, error) { + req, err := NewUpgradeSksClusterRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteSksClusterField(ctx context.Context, id string, field string) (*http.Response, error) { + req, err := NewDeleteSksClusterFieldRequest(c.Server, id, field) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListSnapshots(ctx context.Context) (*http.Response, error) { + req, err := NewListSnapshotsRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteSnapshot(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeleteSnapshotRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetSnapshot(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetSnapshotRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ExportSnapshot(ctx context.Context, id string) (*http.Response, error) { + req, err := NewExportSnapshotRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetSosPresignedUrl(ctx context.Context, bucket string, params *GetSosPresignedUrlParams) (*http.Response, error) { + req, err := NewGetSosPresignedUrlRequest(c.Server, bucket, params) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetSshKey(ctx context.Context, name string) (*http.Response, error) { + req, err := NewGetSshKeyRequest(c.Server, name) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListTemplates(ctx context.Context, params *ListTemplatesParams) (*http.Response, error) { + req, err := NewListTemplatesRequest(c.Server, params) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) RegisterTemplateWithBody(ctx context.Context, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewRegisterTemplateRequestWithBody(c.Server, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) RegisterTemplate(ctx context.Context, body RegisterTemplateJSONRequestBody) (*http.Response, error) { + req, err := NewRegisterTemplateRequest(c.Server, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) DeleteTemplate(ctx context.Context, id string) (*http.Response, error) { + req, err := NewDeleteTemplateRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) GetTemplate(ctx context.Context, id string) (*http.Response, error) { + req, err := NewGetTemplateRequest(c.Server, id) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CopyTemplateWithBody(ctx context.Context, id string, contentType string, body io.Reader) (*http.Response, error) { + req, err := NewCopyTemplateRequestWithBody(c.Server, id, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) CopyTemplate(ctx context.Context, id string, body CopyTemplateJSONRequestBody) (*http.Response, error) { + req, err := NewCopyTemplateRequest(c.Server, id, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +func (c *Client) ListZones(ctx context.Context) (*http.Response, error) { + req, err := NewListZonesRequest(c.Server) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if c.RequestEditor != nil { + err = c.RequestEditor(ctx, req) + if err != nil { + return nil, err + } + } + return c.Client.Do(req) +} + +// NewListAntiAffinityGroupsRequest generates requests for ListAntiAffinityGroups +func NewListAntiAffinityGroupsRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/anti-affinity-group") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreateAntiAffinityGroupRequest calls the generic CreateAntiAffinityGroup builder with application/json body +func NewCreateAntiAffinityGroupRequest(server string, body CreateAntiAffinityGroupJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateAntiAffinityGroupRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreateAntiAffinityGroupRequestWithBody generates requests for CreateAntiAffinityGroup with any type of body +func NewCreateAntiAffinityGroupRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/anti-affinity-group") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteAntiAffinityGroupRequest generates requests for DeleteAntiAffinityGroup +func NewDeleteAntiAffinityGroupRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/anti-affinity-group/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetAntiAffinityGroupRequest generates requests for GetAntiAffinityGroup +func NewGetAntiAffinityGroupRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/anti-affinity-group/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetElasticIpRequest generates requests for GetElasticIp +func NewGetElasticIpRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/elastic-ip/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewListEventsRequest generates requests for ListEvents +func NewListEventsRequest(server string, params *ListEventsParams) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/event") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + queryValues := queryUrl.Query() + + if params.From != nil { + + if queryFrag, err := runtime.StyleParam("form", true, "from", *params.From); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + if params.To != nil { + + if queryFrag, err := runtime.StyleParam("form", true, "to", *params.To); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryUrl.RawQuery = queryValues.Encode() + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreateInstanceRequest calls the generic CreateInstance builder with application/json body +func NewCreateInstanceRequest(server string, params *CreateInstanceParams, body CreateInstanceJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateInstanceRequestWithBody(server, params, "application/json", bodyReader) +} + +// NewCreateInstanceRequestWithBody generates requests for CreateInstance with any type of body +func NewCreateInstanceRequestWithBody(server string, params *CreateInstanceParams, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + queryValues := queryUrl.Query() + + if params.Start != nil { + + if queryFrag, err := runtime.StyleParam("form", true, "start", *params.Start); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryUrl.RawQuery = queryValues.Encode() + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewListInstancePoolsRequest generates requests for ListInstancePools +func NewListInstancePoolsRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreateInstancePoolRequest calls the generic CreateInstancePool builder with application/json body +func NewCreateInstancePoolRequest(server string, body CreateInstancePoolJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateInstancePoolRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreateInstancePoolRequestWithBody generates requests for CreateInstancePool with any type of body +func NewCreateInstancePoolRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteInstancePoolRequest generates requests for DeleteInstancePool +func NewDeleteInstancePoolRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetInstancePoolRequest generates requests for GetInstancePool +func NewGetInstancePoolRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewUpdateInstancePoolRequest calls the generic UpdateInstancePool builder with application/json body +func NewUpdateInstancePoolRequest(server string, id string, body UpdateInstancePoolJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewUpdateInstancePoolRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewUpdateInstancePoolRequestWithBody generates requests for UpdateInstancePool with any type of body +func NewUpdateInstancePoolRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteInstancePoolFieldRequest generates requests for DeleteInstancePoolField +func NewDeleteInstancePoolFieldRequest(server string, id string, field string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "field", field) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool/%s/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewEvictInstancePoolMembersRequest calls the generic EvictInstancePoolMembers builder with application/json body +func NewEvictInstancePoolMembersRequest(server string, id string, body EvictInstancePoolMembersJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewEvictInstancePoolMembersRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewEvictInstancePoolMembersRequestWithBody generates requests for EvictInstancePoolMembers with any type of body +func NewEvictInstancePoolMembersRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool/%s:evict", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewScaleInstancePoolRequest calls the generic ScaleInstancePool builder with application/json body +func NewScaleInstancePoolRequest(server string, id string, body ScaleInstancePoolJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewScaleInstancePoolRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewScaleInstancePoolRequestWithBody generates requests for ScaleInstancePool with any type of body +func NewScaleInstancePoolRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-pool/%s:scale", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewListInstanceTypesRequest generates requests for ListInstanceTypes +func NewListInstanceTypesRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-type") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetInstanceTypeRequest generates requests for GetInstanceType +func NewGetInstanceTypeRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance-type/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreateSnapshotRequest generates requests for CreateSnapshot +func NewCreateSnapshotRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance/%s:create-snapshot", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewRevertInstanceToSnapshotRequest calls the generic RevertInstanceToSnapshot builder with application/json body +func NewRevertInstanceToSnapshotRequest(server string, instanceId string, body RevertInstanceToSnapshotJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewRevertInstanceToSnapshotRequestWithBody(server, instanceId, "application/json", bodyReader) +} + +// NewRevertInstanceToSnapshotRequestWithBody generates requests for RevertInstanceToSnapshot with any type of body +func NewRevertInstanceToSnapshotRequestWithBody(server string, instanceId string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "instance-id", instanceId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/instance/%s:revert-snapshot", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewListLoadBalancersRequest generates requests for ListLoadBalancers +func NewListLoadBalancersRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreateLoadBalancerRequest calls the generic CreateLoadBalancer builder with application/json body +func NewCreateLoadBalancerRequest(server string, body CreateLoadBalancerJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateLoadBalancerRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreateLoadBalancerRequestWithBody generates requests for CreateLoadBalancer with any type of body +func NewCreateLoadBalancerRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteLoadBalancerRequest generates requests for DeleteLoadBalancer +func NewDeleteLoadBalancerRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetLoadBalancerRequest generates requests for GetLoadBalancer +func NewGetLoadBalancerRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewUpdateLoadBalancerRequest calls the generic UpdateLoadBalancer builder with application/json body +func NewUpdateLoadBalancerRequest(server string, id string, body UpdateLoadBalancerJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewUpdateLoadBalancerRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewUpdateLoadBalancerRequestWithBody generates requests for UpdateLoadBalancer with any type of body +func NewUpdateLoadBalancerRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewAddServiceToLoadBalancerRequest calls the generic AddServiceToLoadBalancer builder with application/json body +func NewAddServiceToLoadBalancerRequest(server string, id string, body AddServiceToLoadBalancerJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewAddServiceToLoadBalancerRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewAddServiceToLoadBalancerRequestWithBody generates requests for AddServiceToLoadBalancer with any type of body +func NewAddServiceToLoadBalancerRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer/%s/service", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteLoadBalancerServiceRequest generates requests for DeleteLoadBalancerService +func NewDeleteLoadBalancerServiceRequest(server string, id string, serviceId string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "service-id", serviceId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer/%s/service/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetLoadBalancerServiceRequest generates requests for GetLoadBalancerService +func NewGetLoadBalancerServiceRequest(server string, id string, serviceId string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "service-id", serviceId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer/%s/service/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewUpdateLoadBalancerServiceRequest calls the generic UpdateLoadBalancerService builder with application/json body +func NewUpdateLoadBalancerServiceRequest(server string, id string, serviceId string, body UpdateLoadBalancerServiceJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewUpdateLoadBalancerServiceRequestWithBody(server, id, serviceId, "application/json", bodyReader) +} + +// NewUpdateLoadBalancerServiceRequestWithBody generates requests for UpdateLoadBalancerService with any type of body +func NewUpdateLoadBalancerServiceRequestWithBody(server string, id string, serviceId string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "service-id", serviceId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/load-balancer/%s/service/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewGetOperationRequest generates requests for GetOperation +func NewGetOperationRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/operation/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewListPrivateNetworksRequest generates requests for ListPrivateNetworks +func NewListPrivateNetworksRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/private-network") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreatePrivateNetworkRequest calls the generic CreatePrivateNetwork builder with application/json body +func NewCreatePrivateNetworkRequest(server string, body CreatePrivateNetworkJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreatePrivateNetworkRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreatePrivateNetworkRequestWithBody generates requests for CreatePrivateNetwork with any type of body +func NewCreatePrivateNetworkRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/private-network") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeletePrivateNetworkRequest generates requests for DeletePrivateNetwork +func NewDeletePrivateNetworkRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/private-network/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetPrivateNetworkRequest generates requests for GetPrivateNetwork +func NewGetPrivateNetworkRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/private-network/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewUpdatePrivateNetworkRequest calls the generic UpdatePrivateNetwork builder with application/json body +func NewUpdatePrivateNetworkRequest(server string, id string, body UpdatePrivateNetworkJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewUpdatePrivateNetworkRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewUpdatePrivateNetworkRequestWithBody generates requests for UpdatePrivateNetwork with any type of body +func NewUpdatePrivateNetworkRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/private-network/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeletePrivateNetworkFieldRequest generates requests for DeletePrivateNetworkField +func NewDeletePrivateNetworkFieldRequest(server string, id string, field string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "field", field) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/private-network/%s/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewListSecurityGroupsRequest generates requests for ListSecurityGroups +func NewListSecurityGroupsRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/security-group") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreateSecurityGroupRequest calls the generic CreateSecurityGroup builder with application/json body +func NewCreateSecurityGroupRequest(server string, body CreateSecurityGroupJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateSecurityGroupRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreateSecurityGroupRequestWithBody generates requests for CreateSecurityGroup with any type of body +func NewCreateSecurityGroupRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/security-group") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteSecurityGroupRequest generates requests for DeleteSecurityGroup +func NewDeleteSecurityGroupRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/security-group/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetSecurityGroupRequest generates requests for GetSecurityGroup +func NewGetSecurityGroupRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/security-group/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewAddRuleToSecurityGroupRequest calls the generic AddRuleToSecurityGroup builder with application/json body +func NewAddRuleToSecurityGroupRequest(server string, id string, body AddRuleToSecurityGroupJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewAddRuleToSecurityGroupRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewAddRuleToSecurityGroupRequestWithBody generates requests for AddRuleToSecurityGroup with any type of body +func NewAddRuleToSecurityGroupRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/security-group/%s/rules", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteRuleFromSecurityGroupRequest generates requests for DeleteRuleFromSecurityGroup +func NewDeleteRuleFromSecurityGroupRequest(server string, id string, ruleId string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "rule-id", ruleId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/security-group/%s/rules/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewListSksClustersRequest generates requests for ListSksClusters +func NewListSksClustersRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCreateSksClusterRequest calls the generic CreateSksCluster builder with application/json body +func NewCreateSksClusterRequest(server string, body CreateSksClusterJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateSksClusterRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreateSksClusterRequestWithBody generates requests for CreateSksCluster with any type of body +func NewCreateSksClusterRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewGenerateSksClusterKubeconfigRequest calls the generic GenerateSksClusterKubeconfig builder with application/json body +func NewGenerateSksClusterKubeconfigRequest(server string, id string, body GenerateSksClusterKubeconfigJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewGenerateSksClusterKubeconfigRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewGenerateSksClusterKubeconfigRequestWithBody generates requests for GenerateSksClusterKubeconfig with any type of body +func NewGenerateSksClusterKubeconfigRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster-kubeconfig/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewListSksClusterVersionsRequest generates requests for ListSksClusterVersions +func NewListSksClusterVersionsRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster-version") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewDeleteSksClusterRequest generates requests for DeleteSksCluster +func NewDeleteSksClusterRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetSksClusterRequest generates requests for GetSksCluster +func NewGetSksClusterRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewUpdateSksClusterRequest calls the generic UpdateSksCluster builder with application/json body +func NewUpdateSksClusterRequest(server string, id string, body UpdateSksClusterJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewUpdateSksClusterRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewUpdateSksClusterRequestWithBody generates requests for UpdateSksCluster with any type of body +func NewUpdateSksClusterRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewCreateSksNodepoolRequest calls the generic CreateSksNodepool builder with application/json body +func NewCreateSksNodepoolRequest(server string, id string, body CreateSksNodepoolJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateSksNodepoolRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewCreateSksNodepoolRequestWithBody generates requests for CreateSksNodepool with any type of body +func NewCreateSksNodepoolRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/nodepool", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteSksNodepoolRequest generates requests for DeleteSksNodepool +func NewDeleteSksNodepoolRequest(server string, id string, sksNodepoolId string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "sks-nodepool-id", sksNodepoolId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/nodepool/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetSksNodepoolRequest generates requests for GetSksNodepool +func NewGetSksNodepoolRequest(server string, id string, sksNodepoolId string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "sks-nodepool-id", sksNodepoolId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/nodepool/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewUpdateSksNodepoolRequest calls the generic UpdateSksNodepool builder with application/json body +func NewUpdateSksNodepoolRequest(server string, id string, sksNodepoolId string, body UpdateSksNodepoolJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewUpdateSksNodepoolRequestWithBody(server, id, sksNodepoolId, "application/json", bodyReader) +} + +// NewUpdateSksNodepoolRequestWithBody generates requests for UpdateSksNodepool with any type of body +func NewUpdateSksNodepoolRequestWithBody(server string, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "sks-nodepool-id", sksNodepoolId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/nodepool/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteSksNodepoolFieldRequest generates requests for DeleteSksNodepoolField +func NewDeleteSksNodepoolFieldRequest(server string, id string, sksNodepoolId string, field string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "sks-nodepool-id", sksNodepoolId) + if err != nil { + return nil, err + } + + var pathParam2 string + + pathParam2, err = runtime.StyleParam("simple", false, "field", field) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/nodepool/%s/%s", pathParam0, pathParam1, pathParam2) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewEvictSksNodepoolMembersRequest calls the generic EvictSksNodepoolMembers builder with application/json body +func NewEvictSksNodepoolMembersRequest(server string, id string, sksNodepoolId string, body EvictSksNodepoolMembersJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewEvictSksNodepoolMembersRequestWithBody(server, id, sksNodepoolId, "application/json", bodyReader) +} + +// NewEvictSksNodepoolMembersRequestWithBody generates requests for EvictSksNodepoolMembers with any type of body +func NewEvictSksNodepoolMembersRequestWithBody(server string, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "sks-nodepool-id", sksNodepoolId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/nodepool/%s:evict", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewScaleSksNodepoolRequest calls the generic ScaleSksNodepool builder with application/json body +func NewScaleSksNodepoolRequest(server string, id string, sksNodepoolId string, body ScaleSksNodepoolJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewScaleSksNodepoolRequestWithBody(server, id, sksNodepoolId, "application/json", bodyReader) +} + +// NewScaleSksNodepoolRequestWithBody generates requests for ScaleSksNodepool with any type of body +func NewScaleSksNodepoolRequestWithBody(server string, id string, sksNodepoolId string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "sks-nodepool-id", sksNodepoolId) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/nodepool/%s:scale", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewUpgradeSksClusterRequest calls the generic UpgradeSksCluster builder with application/json body +func NewUpgradeSksClusterRequest(server string, id string, body UpgradeSksClusterJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewUpgradeSksClusterRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewUpgradeSksClusterRequestWithBody generates requests for UpgradeSksCluster with any type of body +func NewUpgradeSksClusterRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/upgrade", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("PUT", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteSksClusterFieldRequest generates requests for DeleteSksClusterField +func NewDeleteSksClusterFieldRequest(server string, id string, field string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParam("simple", false, "field", field) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sks-cluster/%s/%s", pathParam0, pathParam1) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewListSnapshotsRequest generates requests for ListSnapshots +func NewListSnapshotsRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/snapshot") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewDeleteSnapshotRequest generates requests for DeleteSnapshot +func NewDeleteSnapshotRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/snapshot/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetSnapshotRequest generates requests for GetSnapshot +func NewGetSnapshotRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/snapshot/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewExportSnapshotRequest generates requests for ExportSnapshot +func NewExportSnapshotRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/snapshot/%s:export", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetSosPresignedUrlRequest generates requests for GetSosPresignedUrl +func NewGetSosPresignedUrlRequest(server string, bucket string, params *GetSosPresignedUrlParams) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "bucket", bucket) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/sos/%s/presigned-url", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + queryValues := queryUrl.Query() + + if params.Key != nil { + + if queryFrag, err := runtime.StyleParam("form", true, "key", *params.Key); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryUrl.RawQuery = queryValues.Encode() + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetSshKeyRequest generates requests for GetSshKey +func NewGetSshKeyRequest(server string, name string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "name", name) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/ssh-key/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewListTemplatesRequest generates requests for ListTemplates +func NewListTemplatesRequest(server string, params *ListTemplatesParams) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/template") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + queryValues := queryUrl.Query() + + if params.Visibility != nil { + + if queryFrag, err := runtime.StyleParam("form", true, "visibility", *params.Visibility); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + if params.Family != nil { + + if queryFrag, err := runtime.StyleParam("form", true, "family", *params.Family); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryUrl.RawQuery = queryValues.Encode() + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewRegisterTemplateRequest calls the generic RegisterTemplate builder with application/json body +func NewRegisterTemplateRequest(server string, body RegisterTemplateJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewRegisterTemplateRequestWithBody(server, "application/json", bodyReader) +} + +// NewRegisterTemplateRequestWithBody generates requests for RegisterTemplate with any type of body +func NewRegisterTemplateRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/template") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewDeleteTemplateRequest generates requests for DeleteTemplate +func NewDeleteTemplateRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/template/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewGetTemplateRequest generates requests for GetTemplate +func NewGetTemplateRequest(server string, id string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/template/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// NewCopyTemplateRequest calls the generic CopyTemplate builder with application/json body +func NewCopyTemplateRequest(server string, id string, body CopyTemplateJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCopyTemplateRequestWithBody(server, id, "application/json", bodyReader) +} + +// NewCopyTemplateRequestWithBody generates requests for CopyTemplate with any type of body +func NewCopyTemplateRequestWithBody(server string, id string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParam("simple", false, "id", id) + if err != nil { + return nil, err + } + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/template/%s", pathParam0) + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryUrl.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + return req, nil +} + +// NewListZonesRequest generates requests for ListZones +func NewListZonesRequest(server string) (*http.Request, error) { + var err error + + queryUrl, err := url.Parse(server) + if err != nil { + return nil, err + } + + basePath := fmt.Sprintf("/zone") + if basePath[0] == '/' { + basePath = basePath[1:] + } + + queryUrl, err = queryUrl.Parse(basePath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryUrl.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + +// ClientWithResponses builds on ClientInterface to offer response payloads +type ClientWithResponses struct { + ClientInterface +} + +// NewClientWithResponses creates a new ClientWithResponses, which wraps +// Client with return type handling +func NewClientWithResponses(server string, opts ...ClientOption) (*ClientWithResponses, error) { + client, err := NewClient(server, opts...) + if err != nil { + return nil, err + } + return &ClientWithResponses{client}, nil +} + +// WithBaseURL overrides the baseURL. +func WithBaseURL(baseURL string) ClientOption { + return func(c *Client) error { + newBaseURL, err := url.Parse(baseURL) + if err != nil { + return err + } + c.Server = newBaseURL.String() + return nil + } +} + +// ClientWithResponsesInterface is the interface specification for the client with responses above. +type ClientWithResponsesInterface interface { + // ListAntiAffinityGroups request + ListAntiAffinityGroupsWithResponse(ctx context.Context) (*ListAntiAffinityGroupsResponse, error) + + // CreateAntiAffinityGroup request with any body + CreateAntiAffinityGroupWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateAntiAffinityGroupResponse, error) + + CreateAntiAffinityGroupWithResponse(ctx context.Context, body CreateAntiAffinityGroupJSONRequestBody) (*CreateAntiAffinityGroupResponse, error) + + // DeleteAntiAffinityGroup request + DeleteAntiAffinityGroupWithResponse(ctx context.Context, id string) (*DeleteAntiAffinityGroupResponse, error) + + // GetAntiAffinityGroup request + GetAntiAffinityGroupWithResponse(ctx context.Context, id string) (*GetAntiAffinityGroupResponse, error) + + // GetElasticIp request + GetElasticIpWithResponse(ctx context.Context, id string) (*GetElasticIpResponse, error) + + // ListEvents request + ListEventsWithResponse(ctx context.Context, params *ListEventsParams) (*ListEventsResponse, error) + + // CreateInstance request with any body + CreateInstanceWithBodyWithResponse(ctx context.Context, params *CreateInstanceParams, contentType string, body io.Reader) (*CreateInstanceResponse, error) + + CreateInstanceWithResponse(ctx context.Context, params *CreateInstanceParams, body CreateInstanceJSONRequestBody) (*CreateInstanceResponse, error) + + // ListInstancePools request + ListInstancePoolsWithResponse(ctx context.Context) (*ListInstancePoolsResponse, error) + + // CreateInstancePool request with any body + CreateInstancePoolWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateInstancePoolResponse, error) + + CreateInstancePoolWithResponse(ctx context.Context, body CreateInstancePoolJSONRequestBody) (*CreateInstancePoolResponse, error) + + // DeleteInstancePool request + DeleteInstancePoolWithResponse(ctx context.Context, id string) (*DeleteInstancePoolResponse, error) + + // GetInstancePool request + GetInstancePoolWithResponse(ctx context.Context, id string) (*GetInstancePoolResponse, error) + + // UpdateInstancePool request with any body + UpdateInstancePoolWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdateInstancePoolResponse, error) + + UpdateInstancePoolWithResponse(ctx context.Context, id string, body UpdateInstancePoolJSONRequestBody) (*UpdateInstancePoolResponse, error) + + // DeleteInstancePoolField request + DeleteInstancePoolFieldWithResponse(ctx context.Context, id string, field string) (*DeleteInstancePoolFieldResponse, error) + + // EvictInstancePoolMembers request with any body + EvictInstancePoolMembersWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*EvictInstancePoolMembersResponse, error) + + EvictInstancePoolMembersWithResponse(ctx context.Context, id string, body EvictInstancePoolMembersJSONRequestBody) (*EvictInstancePoolMembersResponse, error) + + // ScaleInstancePool request with any body + ScaleInstancePoolWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*ScaleInstancePoolResponse, error) + + ScaleInstancePoolWithResponse(ctx context.Context, id string, body ScaleInstancePoolJSONRequestBody) (*ScaleInstancePoolResponse, error) + + // ListInstanceTypes request + ListInstanceTypesWithResponse(ctx context.Context) (*ListInstanceTypesResponse, error) + + // GetInstanceType request + GetInstanceTypeWithResponse(ctx context.Context, id string) (*GetInstanceTypeResponse, error) + + // CreateSnapshot request + CreateSnapshotWithResponse(ctx context.Context, id string) (*CreateSnapshotResponse, error) + + // RevertInstanceToSnapshot request with any body + RevertInstanceToSnapshotWithBodyWithResponse(ctx context.Context, instanceId string, contentType string, body io.Reader) (*RevertInstanceToSnapshotResponse, error) + + RevertInstanceToSnapshotWithResponse(ctx context.Context, instanceId string, body RevertInstanceToSnapshotJSONRequestBody) (*RevertInstanceToSnapshotResponse, error) + + // ListLoadBalancers request + ListLoadBalancersWithResponse(ctx context.Context) (*ListLoadBalancersResponse, error) + + // CreateLoadBalancer request with any body + CreateLoadBalancerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateLoadBalancerResponse, error) + + CreateLoadBalancerWithResponse(ctx context.Context, body CreateLoadBalancerJSONRequestBody) (*CreateLoadBalancerResponse, error) + + // DeleteLoadBalancer request + DeleteLoadBalancerWithResponse(ctx context.Context, id string) (*DeleteLoadBalancerResponse, error) + + // GetLoadBalancer request + GetLoadBalancerWithResponse(ctx context.Context, id string) (*GetLoadBalancerResponse, error) + + // UpdateLoadBalancer request with any body + UpdateLoadBalancerWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdateLoadBalancerResponse, error) + + UpdateLoadBalancerWithResponse(ctx context.Context, id string, body UpdateLoadBalancerJSONRequestBody) (*UpdateLoadBalancerResponse, error) + + // AddServiceToLoadBalancer request with any body + AddServiceToLoadBalancerWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*AddServiceToLoadBalancerResponse, error) + + AddServiceToLoadBalancerWithResponse(ctx context.Context, id string, body AddServiceToLoadBalancerJSONRequestBody) (*AddServiceToLoadBalancerResponse, error) + + // DeleteLoadBalancerService request + DeleteLoadBalancerServiceWithResponse(ctx context.Context, id string, serviceId string) (*DeleteLoadBalancerServiceResponse, error) + + // GetLoadBalancerService request + GetLoadBalancerServiceWithResponse(ctx context.Context, id string, serviceId string) (*GetLoadBalancerServiceResponse, error) + + // UpdateLoadBalancerService request with any body + UpdateLoadBalancerServiceWithBodyWithResponse(ctx context.Context, id string, serviceId string, contentType string, body io.Reader) (*UpdateLoadBalancerServiceResponse, error) + + UpdateLoadBalancerServiceWithResponse(ctx context.Context, id string, serviceId string, body UpdateLoadBalancerServiceJSONRequestBody) (*UpdateLoadBalancerServiceResponse, error) + + // GetOperation request + GetOperationWithResponse(ctx context.Context, id string) (*GetOperationResponse, error) + + // ListPrivateNetworks request + ListPrivateNetworksWithResponse(ctx context.Context) (*ListPrivateNetworksResponse, error) + + // CreatePrivateNetwork request with any body + CreatePrivateNetworkWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreatePrivateNetworkResponse, error) + + CreatePrivateNetworkWithResponse(ctx context.Context, body CreatePrivateNetworkJSONRequestBody) (*CreatePrivateNetworkResponse, error) + + // DeletePrivateNetwork request + DeletePrivateNetworkWithResponse(ctx context.Context, id string) (*DeletePrivateNetworkResponse, error) + + // GetPrivateNetwork request + GetPrivateNetworkWithResponse(ctx context.Context, id string) (*GetPrivateNetworkResponse, error) + + // UpdatePrivateNetwork request with any body + UpdatePrivateNetworkWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdatePrivateNetworkResponse, error) + + UpdatePrivateNetworkWithResponse(ctx context.Context, id string, body UpdatePrivateNetworkJSONRequestBody) (*UpdatePrivateNetworkResponse, error) + + // DeletePrivateNetworkField request + DeletePrivateNetworkFieldWithResponse(ctx context.Context, id string, field string) (*DeletePrivateNetworkFieldResponse, error) + + // ListSecurityGroups request + ListSecurityGroupsWithResponse(ctx context.Context) (*ListSecurityGroupsResponse, error) + + // CreateSecurityGroup request with any body + CreateSecurityGroupWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateSecurityGroupResponse, error) + + CreateSecurityGroupWithResponse(ctx context.Context, body CreateSecurityGroupJSONRequestBody) (*CreateSecurityGroupResponse, error) + + // DeleteSecurityGroup request + DeleteSecurityGroupWithResponse(ctx context.Context, id string) (*DeleteSecurityGroupResponse, error) + + // GetSecurityGroup request + GetSecurityGroupWithResponse(ctx context.Context, id string) (*GetSecurityGroupResponse, error) + + // AddRuleToSecurityGroup request with any body + AddRuleToSecurityGroupWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*AddRuleToSecurityGroupResponse, error) + + AddRuleToSecurityGroupWithResponse(ctx context.Context, id string, body AddRuleToSecurityGroupJSONRequestBody) (*AddRuleToSecurityGroupResponse, error) + + // DeleteRuleFromSecurityGroup request + DeleteRuleFromSecurityGroupWithResponse(ctx context.Context, id string, ruleId string) (*DeleteRuleFromSecurityGroupResponse, error) + + // ListSksClusters request + ListSksClustersWithResponse(ctx context.Context) (*ListSksClustersResponse, error) + + // CreateSksCluster request with any body + CreateSksClusterWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateSksClusterResponse, error) + + CreateSksClusterWithResponse(ctx context.Context, body CreateSksClusterJSONRequestBody) (*CreateSksClusterResponse, error) + + // GenerateSksClusterKubeconfig request with any body + GenerateSksClusterKubeconfigWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*GenerateSksClusterKubeconfigResponse, error) + + GenerateSksClusterKubeconfigWithResponse(ctx context.Context, id string, body GenerateSksClusterKubeconfigJSONRequestBody) (*GenerateSksClusterKubeconfigResponse, error) + + // ListSksClusterVersions request + ListSksClusterVersionsWithResponse(ctx context.Context) (*ListSksClusterVersionsResponse, error) + + // DeleteSksCluster request + DeleteSksClusterWithResponse(ctx context.Context, id string) (*DeleteSksClusterResponse, error) + + // GetSksCluster request + GetSksClusterWithResponse(ctx context.Context, id string) (*GetSksClusterResponse, error) + + // UpdateSksCluster request with any body + UpdateSksClusterWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdateSksClusterResponse, error) + + UpdateSksClusterWithResponse(ctx context.Context, id string, body UpdateSksClusterJSONRequestBody) (*UpdateSksClusterResponse, error) + + // CreateSksNodepool request with any body + CreateSksNodepoolWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*CreateSksNodepoolResponse, error) + + CreateSksNodepoolWithResponse(ctx context.Context, id string, body CreateSksNodepoolJSONRequestBody) (*CreateSksNodepoolResponse, error) + + // DeleteSksNodepool request + DeleteSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string) (*DeleteSksNodepoolResponse, error) + + // GetSksNodepool request + GetSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string) (*GetSksNodepoolResponse, error) + + // UpdateSksNodepool request with any body + UpdateSksNodepoolWithBodyWithResponse(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*UpdateSksNodepoolResponse, error) + + UpdateSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string, body UpdateSksNodepoolJSONRequestBody) (*UpdateSksNodepoolResponse, error) + + // DeleteSksNodepoolField request + DeleteSksNodepoolFieldWithResponse(ctx context.Context, id string, sksNodepoolId string, field string) (*DeleteSksNodepoolFieldResponse, error) + + // EvictSksNodepoolMembers request with any body + EvictSksNodepoolMembersWithBodyWithResponse(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*EvictSksNodepoolMembersResponse, error) + + EvictSksNodepoolMembersWithResponse(ctx context.Context, id string, sksNodepoolId string, body EvictSksNodepoolMembersJSONRequestBody) (*EvictSksNodepoolMembersResponse, error) + + // ScaleSksNodepool request with any body + ScaleSksNodepoolWithBodyWithResponse(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*ScaleSksNodepoolResponse, error) + + ScaleSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string, body ScaleSksNodepoolJSONRequestBody) (*ScaleSksNodepoolResponse, error) + + // UpgradeSksCluster request with any body + UpgradeSksClusterWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpgradeSksClusterResponse, error) + + UpgradeSksClusterWithResponse(ctx context.Context, id string, body UpgradeSksClusterJSONRequestBody) (*UpgradeSksClusterResponse, error) + + // DeleteSksClusterField request + DeleteSksClusterFieldWithResponse(ctx context.Context, id string, field string) (*DeleteSksClusterFieldResponse, error) + + // ListSnapshots request + ListSnapshotsWithResponse(ctx context.Context) (*ListSnapshotsResponse, error) + + // DeleteSnapshot request + DeleteSnapshotWithResponse(ctx context.Context, id string) (*DeleteSnapshotResponse, error) + + // GetSnapshot request + GetSnapshotWithResponse(ctx context.Context, id string) (*GetSnapshotResponse, error) + + // ExportSnapshot request + ExportSnapshotWithResponse(ctx context.Context, id string) (*ExportSnapshotResponse, error) + + // GetSosPresignedUrl request + GetSosPresignedUrlWithResponse(ctx context.Context, bucket string, params *GetSosPresignedUrlParams) (*GetSosPresignedUrlResponse, error) + + // GetSshKey request + GetSshKeyWithResponse(ctx context.Context, name string) (*GetSshKeyResponse, error) + + // ListTemplates request + ListTemplatesWithResponse(ctx context.Context, params *ListTemplatesParams) (*ListTemplatesResponse, error) + + // RegisterTemplate request with any body + RegisterTemplateWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*RegisterTemplateResponse, error) + + RegisterTemplateWithResponse(ctx context.Context, body RegisterTemplateJSONRequestBody) (*RegisterTemplateResponse, error) + + // DeleteTemplate request + DeleteTemplateWithResponse(ctx context.Context, id string) (*DeleteTemplateResponse, error) + + // GetTemplate request + GetTemplateWithResponse(ctx context.Context, id string) (*GetTemplateResponse, error) + + // CopyTemplate request with any body + CopyTemplateWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*CopyTemplateResponse, error) + + CopyTemplateWithResponse(ctx context.Context, id string, body CopyTemplateJSONRequestBody) (*CopyTemplateResponse, error) + + // ListZones request + ListZonesWithResponse(ctx context.Context) (*ListZonesResponse, error) +} + +type ListAntiAffinityGroupsResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListAntiAffinityGroupsResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListAntiAffinityGroupsResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateAntiAffinityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateAntiAffinityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateAntiAffinityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteAntiAffinityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteAntiAffinityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteAntiAffinityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetAntiAffinityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *AntiAffinityGroup +} + +// Status returns HTTPResponse.Status +func (r GetAntiAffinityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetAntiAffinityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetElasticIpResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *ElasticIp +} + +// Status returns HTTPResponse.Status +func (r GetElasticIpResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetElasticIpResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListEventsResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *[]Event +} + +// Status returns HTTPResponse.Status +func (r ListEventsResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListEventsResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateInstanceResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateInstanceResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateInstanceResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListInstancePoolsResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + InstancePools *[]InstancePool `json:"instance-pools,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListInstancePoolsResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListInstancePoolsResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateInstancePoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateInstancePoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateInstancePoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteInstancePoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteInstancePoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteInstancePoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetInstancePoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *InstancePool +} + +// Status returns HTTPResponse.Status +func (r GetInstancePoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetInstancePoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type UpdateInstancePoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r UpdateInstancePoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r UpdateInstancePoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteInstancePoolFieldResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteInstancePoolFieldResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteInstancePoolFieldResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type EvictInstancePoolMembersResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r EvictInstancePoolMembersResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r EvictInstancePoolMembersResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ScaleInstancePoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r ScaleInstancePoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ScaleInstancePoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListInstanceTypesResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + InstanceTypes *[]InstanceType `json:"instance-types,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListInstanceTypesResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListInstanceTypesResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetInstanceTypeResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *InstanceType +} + +// Status returns HTTPResponse.Status +func (r GetInstanceTypeResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetInstanceTypeResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateSnapshotResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateSnapshotResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateSnapshotResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type RevertInstanceToSnapshotResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r RevertInstanceToSnapshotResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r RevertInstanceToSnapshotResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListLoadBalancersResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + LoadBalancers *[]LoadBalancer `json:"load-balancers,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListLoadBalancersResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListLoadBalancersResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateLoadBalancerResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateLoadBalancerResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateLoadBalancerResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteLoadBalancerResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteLoadBalancerResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteLoadBalancerResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetLoadBalancerResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *LoadBalancer +} + +// Status returns HTTPResponse.Status +func (r GetLoadBalancerResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetLoadBalancerResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type UpdateLoadBalancerResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r UpdateLoadBalancerResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r UpdateLoadBalancerResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type AddServiceToLoadBalancerResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r AddServiceToLoadBalancerResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r AddServiceToLoadBalancerResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteLoadBalancerServiceResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteLoadBalancerServiceResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteLoadBalancerServiceResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetLoadBalancerServiceResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *LoadBalancerService +} + +// Status returns HTTPResponse.Status +func (r GetLoadBalancerServiceResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetLoadBalancerServiceResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type UpdateLoadBalancerServiceResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r UpdateLoadBalancerServiceResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r UpdateLoadBalancerServiceResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetOperationResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r GetOperationResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetOperationResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListPrivateNetworksResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + PrivateNetworks *[]PrivateNetwork `json:"private-networks,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListPrivateNetworksResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListPrivateNetworksResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreatePrivateNetworkResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreatePrivateNetworkResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreatePrivateNetworkResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeletePrivateNetworkResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeletePrivateNetworkResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeletePrivateNetworkResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetPrivateNetworkResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *PrivateNetwork +} + +// Status returns HTTPResponse.Status +func (r GetPrivateNetworkResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetPrivateNetworkResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type UpdatePrivateNetworkResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r UpdatePrivateNetworkResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r UpdatePrivateNetworkResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeletePrivateNetworkFieldResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeletePrivateNetworkFieldResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeletePrivateNetworkFieldResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListSecurityGroupsResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListSecurityGroupsResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListSecurityGroupsResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateSecurityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateSecurityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateSecurityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteSecurityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteSecurityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteSecurityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSecurityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *SecurityGroup +} + +// Status returns HTTPResponse.Status +func (r GetSecurityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSecurityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type AddRuleToSecurityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r AddRuleToSecurityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r AddRuleToSecurityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteRuleFromSecurityGroupResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteRuleFromSecurityGroupResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteRuleFromSecurityGroupResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListSksClustersResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + SksClusters *[]SksCluster `json:"sks-clusters,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListSksClustersResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListSksClustersResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateSksClusterResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateSksClusterResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateSksClusterResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GenerateSksClusterKubeconfigResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + Kubeconfig *string `json:"kubeconfig,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r GenerateSksClusterKubeconfigResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GenerateSksClusterKubeconfigResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListSksClusterVersionsResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + SksClusterVersions *[]string `json:"sks-cluster-versions,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListSksClusterVersionsResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListSksClusterVersionsResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteSksClusterResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteSksClusterResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteSksClusterResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSksClusterResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *SksCluster +} + +// Status returns HTTPResponse.Status +func (r GetSksClusterResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSksClusterResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type UpdateSksClusterResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r UpdateSksClusterResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r UpdateSksClusterResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CreateSksNodepoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CreateSksNodepoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateSksNodepoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteSksNodepoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteSksNodepoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteSksNodepoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSksNodepoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *SksNodepool +} + +// Status returns HTTPResponse.Status +func (r GetSksNodepoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSksNodepoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type UpdateSksNodepoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r UpdateSksNodepoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r UpdateSksNodepoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteSksNodepoolFieldResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteSksNodepoolFieldResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteSksNodepoolFieldResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type EvictSksNodepoolMembersResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r EvictSksNodepoolMembersResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r EvictSksNodepoolMembersResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ScaleSksNodepoolResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r ScaleSksNodepoolResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ScaleSksNodepoolResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type UpgradeSksClusterResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r UpgradeSksClusterResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r UpgradeSksClusterResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteSksClusterFieldResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteSksClusterFieldResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteSksClusterFieldResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListSnapshotsResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + Snapshots *[]Snapshot `json:"snapshots,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListSnapshotsResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListSnapshotsResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteSnapshotResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteSnapshotResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteSnapshotResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSnapshotResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Snapshot +} + +// Status returns HTTPResponse.Status +func (r GetSnapshotResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSnapshotResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ExportSnapshotResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r ExportSnapshotResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ExportSnapshotResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSosPresignedUrlResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + Url *string `json:"url,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r GetSosPresignedUrlResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSosPresignedUrlResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetSshKeyResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *SshKey +} + +// Status returns HTTPResponse.Status +func (r GetSshKeyResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetSshKeyResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListTemplatesResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + Templates *[]Template `json:"templates,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListTemplatesResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListTemplatesResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type RegisterTemplateResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r RegisterTemplateResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r RegisterTemplateResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteTemplateResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r DeleteTemplateResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteTemplateResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type GetTemplateResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Template +} + +// Status returns HTTPResponse.Status +func (r GetTemplateResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetTemplateResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type CopyTemplateResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Operation +} + +// Status returns HTTPResponse.Status +func (r CopyTemplateResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CopyTemplateResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type ListZonesResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + Zones *[]Zone `json:"zones,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r ListZonesResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r ListZonesResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +// ListAntiAffinityGroupsWithResponse request returning *ListAntiAffinityGroupsResponse +func (c *ClientWithResponses) ListAntiAffinityGroupsWithResponse(ctx context.Context) (*ListAntiAffinityGroupsResponse, error) { + rsp, err := c.ListAntiAffinityGroups(ctx) + if err != nil { + return nil, err + } + return ParseListAntiAffinityGroupsResponse(rsp) +} + +// CreateAntiAffinityGroupWithBodyWithResponse request with arbitrary body returning *CreateAntiAffinityGroupResponse +func (c *ClientWithResponses) CreateAntiAffinityGroupWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateAntiAffinityGroupResponse, error) { + rsp, err := c.CreateAntiAffinityGroupWithBody(ctx, contentType, body) + if err != nil { + return nil, err + } + return ParseCreateAntiAffinityGroupResponse(rsp) +} + +func (c *ClientWithResponses) CreateAntiAffinityGroupWithResponse(ctx context.Context, body CreateAntiAffinityGroupJSONRequestBody) (*CreateAntiAffinityGroupResponse, error) { + rsp, err := c.CreateAntiAffinityGroup(ctx, body) + if err != nil { + return nil, err + } + return ParseCreateAntiAffinityGroupResponse(rsp) +} + +// DeleteAntiAffinityGroupWithResponse request returning *DeleteAntiAffinityGroupResponse +func (c *ClientWithResponses) DeleteAntiAffinityGroupWithResponse(ctx context.Context, id string) (*DeleteAntiAffinityGroupResponse, error) { + rsp, err := c.DeleteAntiAffinityGroup(ctx, id) + if err != nil { + return nil, err + } + return ParseDeleteAntiAffinityGroupResponse(rsp) +} + +// GetAntiAffinityGroupWithResponse request returning *GetAntiAffinityGroupResponse +func (c *ClientWithResponses) GetAntiAffinityGroupWithResponse(ctx context.Context, id string) (*GetAntiAffinityGroupResponse, error) { + rsp, err := c.GetAntiAffinityGroup(ctx, id) + if err != nil { + return nil, err + } + return ParseGetAntiAffinityGroupResponse(rsp) +} + +// GetElasticIpWithResponse request returning *GetElasticIpResponse +func (c *ClientWithResponses) GetElasticIpWithResponse(ctx context.Context, id string) (*GetElasticIpResponse, error) { + rsp, err := c.GetElasticIp(ctx, id) + if err != nil { + return nil, err + } + return ParseGetElasticIpResponse(rsp) +} + +// ListEventsWithResponse request returning *ListEventsResponse +func (c *ClientWithResponses) ListEventsWithResponse(ctx context.Context, params *ListEventsParams) (*ListEventsResponse, error) { + rsp, err := c.ListEvents(ctx, params) + if err != nil { + return nil, err + } + return ParseListEventsResponse(rsp) +} + +// CreateInstanceWithBodyWithResponse request with arbitrary body returning *CreateInstanceResponse +func (c *ClientWithResponses) CreateInstanceWithBodyWithResponse(ctx context.Context, params *CreateInstanceParams, contentType string, body io.Reader) (*CreateInstanceResponse, error) { + rsp, err := c.CreateInstanceWithBody(ctx, params, contentType, body) + if err != nil { + return nil, err + } + return ParseCreateInstanceResponse(rsp) +} + +func (c *ClientWithResponses) CreateInstanceWithResponse(ctx context.Context, params *CreateInstanceParams, body CreateInstanceJSONRequestBody) (*CreateInstanceResponse, error) { + rsp, err := c.CreateInstance(ctx, params, body) + if err != nil { + return nil, err + } + return ParseCreateInstanceResponse(rsp) +} + +// ListInstancePoolsWithResponse request returning *ListInstancePoolsResponse +func (c *ClientWithResponses) ListInstancePoolsWithResponse(ctx context.Context) (*ListInstancePoolsResponse, error) { + rsp, err := c.ListInstancePools(ctx) + if err != nil { + return nil, err + } + return ParseListInstancePoolsResponse(rsp) +} + +// CreateInstancePoolWithBodyWithResponse request with arbitrary body returning *CreateInstancePoolResponse +func (c *ClientWithResponses) CreateInstancePoolWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateInstancePoolResponse, error) { + rsp, err := c.CreateInstancePoolWithBody(ctx, contentType, body) + if err != nil { + return nil, err + } + return ParseCreateInstancePoolResponse(rsp) +} + +func (c *ClientWithResponses) CreateInstancePoolWithResponse(ctx context.Context, body CreateInstancePoolJSONRequestBody) (*CreateInstancePoolResponse, error) { + rsp, err := c.CreateInstancePool(ctx, body) + if err != nil { + return nil, err + } + return ParseCreateInstancePoolResponse(rsp) +} + +// DeleteInstancePoolWithResponse request returning *DeleteInstancePoolResponse +func (c *ClientWithResponses) DeleteInstancePoolWithResponse(ctx context.Context, id string) (*DeleteInstancePoolResponse, error) { + rsp, err := c.DeleteInstancePool(ctx, id) + if err != nil { + return nil, err + } + return ParseDeleteInstancePoolResponse(rsp) +} + +// GetInstancePoolWithResponse request returning *GetInstancePoolResponse +func (c *ClientWithResponses) GetInstancePoolWithResponse(ctx context.Context, id string) (*GetInstancePoolResponse, error) { + rsp, err := c.GetInstancePool(ctx, id) + if err != nil { + return nil, err + } + return ParseGetInstancePoolResponse(rsp) +} + +// UpdateInstancePoolWithBodyWithResponse request with arbitrary body returning *UpdateInstancePoolResponse +func (c *ClientWithResponses) UpdateInstancePoolWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdateInstancePoolResponse, error) { + rsp, err := c.UpdateInstancePoolWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseUpdateInstancePoolResponse(rsp) +} + +func (c *ClientWithResponses) UpdateInstancePoolWithResponse(ctx context.Context, id string, body UpdateInstancePoolJSONRequestBody) (*UpdateInstancePoolResponse, error) { + rsp, err := c.UpdateInstancePool(ctx, id, body) + if err != nil { + return nil, err + } + return ParseUpdateInstancePoolResponse(rsp) +} + +// DeleteInstancePoolFieldWithResponse request returning *DeleteInstancePoolFieldResponse +func (c *ClientWithResponses) DeleteInstancePoolFieldWithResponse(ctx context.Context, id string, field string) (*DeleteInstancePoolFieldResponse, error) { + rsp, err := c.DeleteInstancePoolField(ctx, id, field) + if err != nil { + return nil, err + } + return ParseDeleteInstancePoolFieldResponse(rsp) +} + +// EvictInstancePoolMembersWithBodyWithResponse request with arbitrary body returning *EvictInstancePoolMembersResponse +func (c *ClientWithResponses) EvictInstancePoolMembersWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*EvictInstancePoolMembersResponse, error) { + rsp, err := c.EvictInstancePoolMembersWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseEvictInstancePoolMembersResponse(rsp) +} + +func (c *ClientWithResponses) EvictInstancePoolMembersWithResponse(ctx context.Context, id string, body EvictInstancePoolMembersJSONRequestBody) (*EvictInstancePoolMembersResponse, error) { + rsp, err := c.EvictInstancePoolMembers(ctx, id, body) + if err != nil { + return nil, err + } + return ParseEvictInstancePoolMembersResponse(rsp) +} + +// ScaleInstancePoolWithBodyWithResponse request with arbitrary body returning *ScaleInstancePoolResponse +func (c *ClientWithResponses) ScaleInstancePoolWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*ScaleInstancePoolResponse, error) { + rsp, err := c.ScaleInstancePoolWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseScaleInstancePoolResponse(rsp) +} + +func (c *ClientWithResponses) ScaleInstancePoolWithResponse(ctx context.Context, id string, body ScaleInstancePoolJSONRequestBody) (*ScaleInstancePoolResponse, error) { + rsp, err := c.ScaleInstancePool(ctx, id, body) + if err != nil { + return nil, err + } + return ParseScaleInstancePoolResponse(rsp) +} + +// ListInstanceTypesWithResponse request returning *ListInstanceTypesResponse +func (c *ClientWithResponses) ListInstanceTypesWithResponse(ctx context.Context) (*ListInstanceTypesResponse, error) { + rsp, err := c.ListInstanceTypes(ctx) + if err != nil { + return nil, err + } + return ParseListInstanceTypesResponse(rsp) +} + +// GetInstanceTypeWithResponse request returning *GetInstanceTypeResponse +func (c *ClientWithResponses) GetInstanceTypeWithResponse(ctx context.Context, id string) (*GetInstanceTypeResponse, error) { + rsp, err := c.GetInstanceType(ctx, id) + if err != nil { + return nil, err + } + return ParseGetInstanceTypeResponse(rsp) +} + +// CreateSnapshotWithResponse request returning *CreateSnapshotResponse +func (c *ClientWithResponses) CreateSnapshotWithResponse(ctx context.Context, id string) (*CreateSnapshotResponse, error) { + rsp, err := c.CreateSnapshot(ctx, id) + if err != nil { + return nil, err + } + return ParseCreateSnapshotResponse(rsp) +} + +// RevertInstanceToSnapshotWithBodyWithResponse request with arbitrary body returning *RevertInstanceToSnapshotResponse +func (c *ClientWithResponses) RevertInstanceToSnapshotWithBodyWithResponse(ctx context.Context, instanceId string, contentType string, body io.Reader) (*RevertInstanceToSnapshotResponse, error) { + rsp, err := c.RevertInstanceToSnapshotWithBody(ctx, instanceId, contentType, body) + if err != nil { + return nil, err + } + return ParseRevertInstanceToSnapshotResponse(rsp) +} + +func (c *ClientWithResponses) RevertInstanceToSnapshotWithResponse(ctx context.Context, instanceId string, body RevertInstanceToSnapshotJSONRequestBody) (*RevertInstanceToSnapshotResponse, error) { + rsp, err := c.RevertInstanceToSnapshot(ctx, instanceId, body) + if err != nil { + return nil, err + } + return ParseRevertInstanceToSnapshotResponse(rsp) +} + +// ListLoadBalancersWithResponse request returning *ListLoadBalancersResponse +func (c *ClientWithResponses) ListLoadBalancersWithResponse(ctx context.Context) (*ListLoadBalancersResponse, error) { + rsp, err := c.ListLoadBalancers(ctx) + if err != nil { + return nil, err + } + return ParseListLoadBalancersResponse(rsp) +} + +// CreateLoadBalancerWithBodyWithResponse request with arbitrary body returning *CreateLoadBalancerResponse +func (c *ClientWithResponses) CreateLoadBalancerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateLoadBalancerResponse, error) { + rsp, err := c.CreateLoadBalancerWithBody(ctx, contentType, body) + if err != nil { + return nil, err + } + return ParseCreateLoadBalancerResponse(rsp) +} + +func (c *ClientWithResponses) CreateLoadBalancerWithResponse(ctx context.Context, body CreateLoadBalancerJSONRequestBody) (*CreateLoadBalancerResponse, error) { + rsp, err := c.CreateLoadBalancer(ctx, body) + if err != nil { + return nil, err + } + return ParseCreateLoadBalancerResponse(rsp) +} + +// DeleteLoadBalancerWithResponse request returning *DeleteLoadBalancerResponse +func (c *ClientWithResponses) DeleteLoadBalancerWithResponse(ctx context.Context, id string) (*DeleteLoadBalancerResponse, error) { + rsp, err := c.DeleteLoadBalancer(ctx, id) + if err != nil { + return nil, err + } + return ParseDeleteLoadBalancerResponse(rsp) +} + +// GetLoadBalancerWithResponse request returning *GetLoadBalancerResponse +func (c *ClientWithResponses) GetLoadBalancerWithResponse(ctx context.Context, id string) (*GetLoadBalancerResponse, error) { + rsp, err := c.GetLoadBalancer(ctx, id) + if err != nil { + return nil, err + } + return ParseGetLoadBalancerResponse(rsp) +} + +// UpdateLoadBalancerWithBodyWithResponse request with arbitrary body returning *UpdateLoadBalancerResponse +func (c *ClientWithResponses) UpdateLoadBalancerWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdateLoadBalancerResponse, error) { + rsp, err := c.UpdateLoadBalancerWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseUpdateLoadBalancerResponse(rsp) +} + +func (c *ClientWithResponses) UpdateLoadBalancerWithResponse(ctx context.Context, id string, body UpdateLoadBalancerJSONRequestBody) (*UpdateLoadBalancerResponse, error) { + rsp, err := c.UpdateLoadBalancer(ctx, id, body) + if err != nil { + return nil, err + } + return ParseUpdateLoadBalancerResponse(rsp) +} + +// AddServiceToLoadBalancerWithBodyWithResponse request with arbitrary body returning *AddServiceToLoadBalancerResponse +func (c *ClientWithResponses) AddServiceToLoadBalancerWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*AddServiceToLoadBalancerResponse, error) { + rsp, err := c.AddServiceToLoadBalancerWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseAddServiceToLoadBalancerResponse(rsp) +} + +func (c *ClientWithResponses) AddServiceToLoadBalancerWithResponse(ctx context.Context, id string, body AddServiceToLoadBalancerJSONRequestBody) (*AddServiceToLoadBalancerResponse, error) { + rsp, err := c.AddServiceToLoadBalancer(ctx, id, body) + if err != nil { + return nil, err + } + return ParseAddServiceToLoadBalancerResponse(rsp) +} + +// DeleteLoadBalancerServiceWithResponse request returning *DeleteLoadBalancerServiceResponse +func (c *ClientWithResponses) DeleteLoadBalancerServiceWithResponse(ctx context.Context, id string, serviceId string) (*DeleteLoadBalancerServiceResponse, error) { + rsp, err := c.DeleteLoadBalancerService(ctx, id, serviceId) + if err != nil { + return nil, err + } + return ParseDeleteLoadBalancerServiceResponse(rsp) +} + +// GetLoadBalancerServiceWithResponse request returning *GetLoadBalancerServiceResponse +func (c *ClientWithResponses) GetLoadBalancerServiceWithResponse(ctx context.Context, id string, serviceId string) (*GetLoadBalancerServiceResponse, error) { + rsp, err := c.GetLoadBalancerService(ctx, id, serviceId) + if err != nil { + return nil, err + } + return ParseGetLoadBalancerServiceResponse(rsp) +} + +// UpdateLoadBalancerServiceWithBodyWithResponse request with arbitrary body returning *UpdateLoadBalancerServiceResponse +func (c *ClientWithResponses) UpdateLoadBalancerServiceWithBodyWithResponse(ctx context.Context, id string, serviceId string, contentType string, body io.Reader) (*UpdateLoadBalancerServiceResponse, error) { + rsp, err := c.UpdateLoadBalancerServiceWithBody(ctx, id, serviceId, contentType, body) + if err != nil { + return nil, err + } + return ParseUpdateLoadBalancerServiceResponse(rsp) +} + +func (c *ClientWithResponses) UpdateLoadBalancerServiceWithResponse(ctx context.Context, id string, serviceId string, body UpdateLoadBalancerServiceJSONRequestBody) (*UpdateLoadBalancerServiceResponse, error) { + rsp, err := c.UpdateLoadBalancerService(ctx, id, serviceId, body) + if err != nil { + return nil, err + } + return ParseUpdateLoadBalancerServiceResponse(rsp) +} + +// GetOperationWithResponse request returning *GetOperationResponse +func (c *ClientWithResponses) GetOperationWithResponse(ctx context.Context, id string) (*GetOperationResponse, error) { + rsp, err := c.GetOperation(ctx, id) + if err != nil { + return nil, err + } + return ParseGetOperationResponse(rsp) +} + +// ListPrivateNetworksWithResponse request returning *ListPrivateNetworksResponse +func (c *ClientWithResponses) ListPrivateNetworksWithResponse(ctx context.Context) (*ListPrivateNetworksResponse, error) { + rsp, err := c.ListPrivateNetworks(ctx) + if err != nil { + return nil, err + } + return ParseListPrivateNetworksResponse(rsp) +} + +// CreatePrivateNetworkWithBodyWithResponse request with arbitrary body returning *CreatePrivateNetworkResponse +func (c *ClientWithResponses) CreatePrivateNetworkWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreatePrivateNetworkResponse, error) { + rsp, err := c.CreatePrivateNetworkWithBody(ctx, contentType, body) + if err != nil { + return nil, err + } + return ParseCreatePrivateNetworkResponse(rsp) +} + +func (c *ClientWithResponses) CreatePrivateNetworkWithResponse(ctx context.Context, body CreatePrivateNetworkJSONRequestBody) (*CreatePrivateNetworkResponse, error) { + rsp, err := c.CreatePrivateNetwork(ctx, body) + if err != nil { + return nil, err + } + return ParseCreatePrivateNetworkResponse(rsp) +} + +// DeletePrivateNetworkWithResponse request returning *DeletePrivateNetworkResponse +func (c *ClientWithResponses) DeletePrivateNetworkWithResponse(ctx context.Context, id string) (*DeletePrivateNetworkResponse, error) { + rsp, err := c.DeletePrivateNetwork(ctx, id) + if err != nil { + return nil, err + } + return ParseDeletePrivateNetworkResponse(rsp) +} + +// GetPrivateNetworkWithResponse request returning *GetPrivateNetworkResponse +func (c *ClientWithResponses) GetPrivateNetworkWithResponse(ctx context.Context, id string) (*GetPrivateNetworkResponse, error) { + rsp, err := c.GetPrivateNetwork(ctx, id) + if err != nil { + return nil, err + } + return ParseGetPrivateNetworkResponse(rsp) +} + +// UpdatePrivateNetworkWithBodyWithResponse request with arbitrary body returning *UpdatePrivateNetworkResponse +func (c *ClientWithResponses) UpdatePrivateNetworkWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdatePrivateNetworkResponse, error) { + rsp, err := c.UpdatePrivateNetworkWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseUpdatePrivateNetworkResponse(rsp) +} + +func (c *ClientWithResponses) UpdatePrivateNetworkWithResponse(ctx context.Context, id string, body UpdatePrivateNetworkJSONRequestBody) (*UpdatePrivateNetworkResponse, error) { + rsp, err := c.UpdatePrivateNetwork(ctx, id, body) + if err != nil { + return nil, err + } + return ParseUpdatePrivateNetworkResponse(rsp) +} + +// DeletePrivateNetworkFieldWithResponse request returning *DeletePrivateNetworkFieldResponse +func (c *ClientWithResponses) DeletePrivateNetworkFieldWithResponse(ctx context.Context, id string, field string) (*DeletePrivateNetworkFieldResponse, error) { + rsp, err := c.DeletePrivateNetworkField(ctx, id, field) + if err != nil { + return nil, err + } + return ParseDeletePrivateNetworkFieldResponse(rsp) +} + +// ListSecurityGroupsWithResponse request returning *ListSecurityGroupsResponse +func (c *ClientWithResponses) ListSecurityGroupsWithResponse(ctx context.Context) (*ListSecurityGroupsResponse, error) { + rsp, err := c.ListSecurityGroups(ctx) + if err != nil { + return nil, err + } + return ParseListSecurityGroupsResponse(rsp) +} + +// CreateSecurityGroupWithBodyWithResponse request with arbitrary body returning *CreateSecurityGroupResponse +func (c *ClientWithResponses) CreateSecurityGroupWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateSecurityGroupResponse, error) { + rsp, err := c.CreateSecurityGroupWithBody(ctx, contentType, body) + if err != nil { + return nil, err + } + return ParseCreateSecurityGroupResponse(rsp) +} + +func (c *ClientWithResponses) CreateSecurityGroupWithResponse(ctx context.Context, body CreateSecurityGroupJSONRequestBody) (*CreateSecurityGroupResponse, error) { + rsp, err := c.CreateSecurityGroup(ctx, body) + if err != nil { + return nil, err + } + return ParseCreateSecurityGroupResponse(rsp) +} + +// DeleteSecurityGroupWithResponse request returning *DeleteSecurityGroupResponse +func (c *ClientWithResponses) DeleteSecurityGroupWithResponse(ctx context.Context, id string) (*DeleteSecurityGroupResponse, error) { + rsp, err := c.DeleteSecurityGroup(ctx, id) + if err != nil { + return nil, err + } + return ParseDeleteSecurityGroupResponse(rsp) +} + +// GetSecurityGroupWithResponse request returning *GetSecurityGroupResponse +func (c *ClientWithResponses) GetSecurityGroupWithResponse(ctx context.Context, id string) (*GetSecurityGroupResponse, error) { + rsp, err := c.GetSecurityGroup(ctx, id) + if err != nil { + return nil, err + } + return ParseGetSecurityGroupResponse(rsp) +} + +// AddRuleToSecurityGroupWithBodyWithResponse request with arbitrary body returning *AddRuleToSecurityGroupResponse +func (c *ClientWithResponses) AddRuleToSecurityGroupWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*AddRuleToSecurityGroupResponse, error) { + rsp, err := c.AddRuleToSecurityGroupWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseAddRuleToSecurityGroupResponse(rsp) +} + +func (c *ClientWithResponses) AddRuleToSecurityGroupWithResponse(ctx context.Context, id string, body AddRuleToSecurityGroupJSONRequestBody) (*AddRuleToSecurityGroupResponse, error) { + rsp, err := c.AddRuleToSecurityGroup(ctx, id, body) + if err != nil { + return nil, err + } + return ParseAddRuleToSecurityGroupResponse(rsp) +} + +// DeleteRuleFromSecurityGroupWithResponse request returning *DeleteRuleFromSecurityGroupResponse +func (c *ClientWithResponses) DeleteRuleFromSecurityGroupWithResponse(ctx context.Context, id string, ruleId string) (*DeleteRuleFromSecurityGroupResponse, error) { + rsp, err := c.DeleteRuleFromSecurityGroup(ctx, id, ruleId) + if err != nil { + return nil, err + } + return ParseDeleteRuleFromSecurityGroupResponse(rsp) +} + +// ListSksClustersWithResponse request returning *ListSksClustersResponse +func (c *ClientWithResponses) ListSksClustersWithResponse(ctx context.Context) (*ListSksClustersResponse, error) { + rsp, err := c.ListSksClusters(ctx) + if err != nil { + return nil, err + } + return ParseListSksClustersResponse(rsp) +} + +// CreateSksClusterWithBodyWithResponse request with arbitrary body returning *CreateSksClusterResponse +func (c *ClientWithResponses) CreateSksClusterWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*CreateSksClusterResponse, error) { + rsp, err := c.CreateSksClusterWithBody(ctx, contentType, body) + if err != nil { + return nil, err + } + return ParseCreateSksClusterResponse(rsp) +} + +func (c *ClientWithResponses) CreateSksClusterWithResponse(ctx context.Context, body CreateSksClusterJSONRequestBody) (*CreateSksClusterResponse, error) { + rsp, err := c.CreateSksCluster(ctx, body) + if err != nil { + return nil, err + } + return ParseCreateSksClusterResponse(rsp) +} + +// GenerateSksClusterKubeconfigWithBodyWithResponse request with arbitrary body returning *GenerateSksClusterKubeconfigResponse +func (c *ClientWithResponses) GenerateSksClusterKubeconfigWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*GenerateSksClusterKubeconfigResponse, error) { + rsp, err := c.GenerateSksClusterKubeconfigWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseGenerateSksClusterKubeconfigResponse(rsp) +} + +func (c *ClientWithResponses) GenerateSksClusterKubeconfigWithResponse(ctx context.Context, id string, body GenerateSksClusterKubeconfigJSONRequestBody) (*GenerateSksClusterKubeconfigResponse, error) { + rsp, err := c.GenerateSksClusterKubeconfig(ctx, id, body) + if err != nil { + return nil, err + } + return ParseGenerateSksClusterKubeconfigResponse(rsp) +} + +// ListSksClusterVersionsWithResponse request returning *ListSksClusterVersionsResponse +func (c *ClientWithResponses) ListSksClusterVersionsWithResponse(ctx context.Context) (*ListSksClusterVersionsResponse, error) { + rsp, err := c.ListSksClusterVersions(ctx) + if err != nil { + return nil, err + } + return ParseListSksClusterVersionsResponse(rsp) +} + +// DeleteSksClusterWithResponse request returning *DeleteSksClusterResponse +func (c *ClientWithResponses) DeleteSksClusterWithResponse(ctx context.Context, id string) (*DeleteSksClusterResponse, error) { + rsp, err := c.DeleteSksCluster(ctx, id) + if err != nil { + return nil, err + } + return ParseDeleteSksClusterResponse(rsp) +} + +// GetSksClusterWithResponse request returning *GetSksClusterResponse +func (c *ClientWithResponses) GetSksClusterWithResponse(ctx context.Context, id string) (*GetSksClusterResponse, error) { + rsp, err := c.GetSksCluster(ctx, id) + if err != nil { + return nil, err + } + return ParseGetSksClusterResponse(rsp) +} + +// UpdateSksClusterWithBodyWithResponse request with arbitrary body returning *UpdateSksClusterResponse +func (c *ClientWithResponses) UpdateSksClusterWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpdateSksClusterResponse, error) { + rsp, err := c.UpdateSksClusterWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseUpdateSksClusterResponse(rsp) +} + +func (c *ClientWithResponses) UpdateSksClusterWithResponse(ctx context.Context, id string, body UpdateSksClusterJSONRequestBody) (*UpdateSksClusterResponse, error) { + rsp, err := c.UpdateSksCluster(ctx, id, body) + if err != nil { + return nil, err + } + return ParseUpdateSksClusterResponse(rsp) +} + +// CreateSksNodepoolWithBodyWithResponse request with arbitrary body returning *CreateSksNodepoolResponse +func (c *ClientWithResponses) CreateSksNodepoolWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*CreateSksNodepoolResponse, error) { + rsp, err := c.CreateSksNodepoolWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseCreateSksNodepoolResponse(rsp) +} + +func (c *ClientWithResponses) CreateSksNodepoolWithResponse(ctx context.Context, id string, body CreateSksNodepoolJSONRequestBody) (*CreateSksNodepoolResponse, error) { + rsp, err := c.CreateSksNodepool(ctx, id, body) + if err != nil { + return nil, err + } + return ParseCreateSksNodepoolResponse(rsp) +} + +// DeleteSksNodepoolWithResponse request returning *DeleteSksNodepoolResponse +func (c *ClientWithResponses) DeleteSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string) (*DeleteSksNodepoolResponse, error) { + rsp, err := c.DeleteSksNodepool(ctx, id, sksNodepoolId) + if err != nil { + return nil, err + } + return ParseDeleteSksNodepoolResponse(rsp) +} + +// GetSksNodepoolWithResponse request returning *GetSksNodepoolResponse +func (c *ClientWithResponses) GetSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string) (*GetSksNodepoolResponse, error) { + rsp, err := c.GetSksNodepool(ctx, id, sksNodepoolId) + if err != nil { + return nil, err + } + return ParseGetSksNodepoolResponse(rsp) +} + +// UpdateSksNodepoolWithBodyWithResponse request with arbitrary body returning *UpdateSksNodepoolResponse +func (c *ClientWithResponses) UpdateSksNodepoolWithBodyWithResponse(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*UpdateSksNodepoolResponse, error) { + rsp, err := c.UpdateSksNodepoolWithBody(ctx, id, sksNodepoolId, contentType, body) + if err != nil { + return nil, err + } + return ParseUpdateSksNodepoolResponse(rsp) +} + +func (c *ClientWithResponses) UpdateSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string, body UpdateSksNodepoolJSONRequestBody) (*UpdateSksNodepoolResponse, error) { + rsp, err := c.UpdateSksNodepool(ctx, id, sksNodepoolId, body) + if err != nil { + return nil, err + } + return ParseUpdateSksNodepoolResponse(rsp) +} + +// DeleteSksNodepoolFieldWithResponse request returning *DeleteSksNodepoolFieldResponse +func (c *ClientWithResponses) DeleteSksNodepoolFieldWithResponse(ctx context.Context, id string, sksNodepoolId string, field string) (*DeleteSksNodepoolFieldResponse, error) { + rsp, err := c.DeleteSksNodepoolField(ctx, id, sksNodepoolId, field) + if err != nil { + return nil, err + } + return ParseDeleteSksNodepoolFieldResponse(rsp) +} + +// EvictSksNodepoolMembersWithBodyWithResponse request with arbitrary body returning *EvictSksNodepoolMembersResponse +func (c *ClientWithResponses) EvictSksNodepoolMembersWithBodyWithResponse(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*EvictSksNodepoolMembersResponse, error) { + rsp, err := c.EvictSksNodepoolMembersWithBody(ctx, id, sksNodepoolId, contentType, body) + if err != nil { + return nil, err + } + return ParseEvictSksNodepoolMembersResponse(rsp) +} + +func (c *ClientWithResponses) EvictSksNodepoolMembersWithResponse(ctx context.Context, id string, sksNodepoolId string, body EvictSksNodepoolMembersJSONRequestBody) (*EvictSksNodepoolMembersResponse, error) { + rsp, err := c.EvictSksNodepoolMembers(ctx, id, sksNodepoolId, body) + if err != nil { + return nil, err + } + return ParseEvictSksNodepoolMembersResponse(rsp) +} + +// ScaleSksNodepoolWithBodyWithResponse request with arbitrary body returning *ScaleSksNodepoolResponse +func (c *ClientWithResponses) ScaleSksNodepoolWithBodyWithResponse(ctx context.Context, id string, sksNodepoolId string, contentType string, body io.Reader) (*ScaleSksNodepoolResponse, error) { + rsp, err := c.ScaleSksNodepoolWithBody(ctx, id, sksNodepoolId, contentType, body) + if err != nil { + return nil, err + } + return ParseScaleSksNodepoolResponse(rsp) +} + +func (c *ClientWithResponses) ScaleSksNodepoolWithResponse(ctx context.Context, id string, sksNodepoolId string, body ScaleSksNodepoolJSONRequestBody) (*ScaleSksNodepoolResponse, error) { + rsp, err := c.ScaleSksNodepool(ctx, id, sksNodepoolId, body) + if err != nil { + return nil, err + } + return ParseScaleSksNodepoolResponse(rsp) +} + +// UpgradeSksClusterWithBodyWithResponse request with arbitrary body returning *UpgradeSksClusterResponse +func (c *ClientWithResponses) UpgradeSksClusterWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*UpgradeSksClusterResponse, error) { + rsp, err := c.UpgradeSksClusterWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseUpgradeSksClusterResponse(rsp) +} + +func (c *ClientWithResponses) UpgradeSksClusterWithResponse(ctx context.Context, id string, body UpgradeSksClusterJSONRequestBody) (*UpgradeSksClusterResponse, error) { + rsp, err := c.UpgradeSksCluster(ctx, id, body) + if err != nil { + return nil, err + } + return ParseUpgradeSksClusterResponse(rsp) +} + +// DeleteSksClusterFieldWithResponse request returning *DeleteSksClusterFieldResponse +func (c *ClientWithResponses) DeleteSksClusterFieldWithResponse(ctx context.Context, id string, field string) (*DeleteSksClusterFieldResponse, error) { + rsp, err := c.DeleteSksClusterField(ctx, id, field) + if err != nil { + return nil, err + } + return ParseDeleteSksClusterFieldResponse(rsp) +} + +// ListSnapshotsWithResponse request returning *ListSnapshotsResponse +func (c *ClientWithResponses) ListSnapshotsWithResponse(ctx context.Context) (*ListSnapshotsResponse, error) { + rsp, err := c.ListSnapshots(ctx) + if err != nil { + return nil, err + } + return ParseListSnapshotsResponse(rsp) +} + +// DeleteSnapshotWithResponse request returning *DeleteSnapshotResponse +func (c *ClientWithResponses) DeleteSnapshotWithResponse(ctx context.Context, id string) (*DeleteSnapshotResponse, error) { + rsp, err := c.DeleteSnapshot(ctx, id) + if err != nil { + return nil, err + } + return ParseDeleteSnapshotResponse(rsp) +} + +// GetSnapshotWithResponse request returning *GetSnapshotResponse +func (c *ClientWithResponses) GetSnapshotWithResponse(ctx context.Context, id string) (*GetSnapshotResponse, error) { + rsp, err := c.GetSnapshot(ctx, id) + if err != nil { + return nil, err + } + return ParseGetSnapshotResponse(rsp) +} + +// ExportSnapshotWithResponse request returning *ExportSnapshotResponse +func (c *ClientWithResponses) ExportSnapshotWithResponse(ctx context.Context, id string) (*ExportSnapshotResponse, error) { + rsp, err := c.ExportSnapshot(ctx, id) + if err != nil { + return nil, err + } + return ParseExportSnapshotResponse(rsp) +} + +// GetSosPresignedUrlWithResponse request returning *GetSosPresignedUrlResponse +func (c *ClientWithResponses) GetSosPresignedUrlWithResponse(ctx context.Context, bucket string, params *GetSosPresignedUrlParams) (*GetSosPresignedUrlResponse, error) { + rsp, err := c.GetSosPresignedUrl(ctx, bucket, params) + if err != nil { + return nil, err + } + return ParseGetSosPresignedUrlResponse(rsp) +} + +// GetSshKeyWithResponse request returning *GetSshKeyResponse +func (c *ClientWithResponses) GetSshKeyWithResponse(ctx context.Context, name string) (*GetSshKeyResponse, error) { + rsp, err := c.GetSshKey(ctx, name) + if err != nil { + return nil, err + } + return ParseGetSshKeyResponse(rsp) +} + +// ListTemplatesWithResponse request returning *ListTemplatesResponse +func (c *ClientWithResponses) ListTemplatesWithResponse(ctx context.Context, params *ListTemplatesParams) (*ListTemplatesResponse, error) { + rsp, err := c.ListTemplates(ctx, params) + if err != nil { + return nil, err + } + return ParseListTemplatesResponse(rsp) +} + +// RegisterTemplateWithBodyWithResponse request with arbitrary body returning *RegisterTemplateResponse +func (c *ClientWithResponses) RegisterTemplateWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader) (*RegisterTemplateResponse, error) { + rsp, err := c.RegisterTemplateWithBody(ctx, contentType, body) + if err != nil { + return nil, err + } + return ParseRegisterTemplateResponse(rsp) +} + +func (c *ClientWithResponses) RegisterTemplateWithResponse(ctx context.Context, body RegisterTemplateJSONRequestBody) (*RegisterTemplateResponse, error) { + rsp, err := c.RegisterTemplate(ctx, body) + if err != nil { + return nil, err + } + return ParseRegisterTemplateResponse(rsp) +} + +// DeleteTemplateWithResponse request returning *DeleteTemplateResponse +func (c *ClientWithResponses) DeleteTemplateWithResponse(ctx context.Context, id string) (*DeleteTemplateResponse, error) { + rsp, err := c.DeleteTemplate(ctx, id) + if err != nil { + return nil, err + } + return ParseDeleteTemplateResponse(rsp) +} + +// GetTemplateWithResponse request returning *GetTemplateResponse +func (c *ClientWithResponses) GetTemplateWithResponse(ctx context.Context, id string) (*GetTemplateResponse, error) { + rsp, err := c.GetTemplate(ctx, id) + if err != nil { + return nil, err + } + return ParseGetTemplateResponse(rsp) +} + +// CopyTemplateWithBodyWithResponse request with arbitrary body returning *CopyTemplateResponse +func (c *ClientWithResponses) CopyTemplateWithBodyWithResponse(ctx context.Context, id string, contentType string, body io.Reader) (*CopyTemplateResponse, error) { + rsp, err := c.CopyTemplateWithBody(ctx, id, contentType, body) + if err != nil { + return nil, err + } + return ParseCopyTemplateResponse(rsp) +} + +func (c *ClientWithResponses) CopyTemplateWithResponse(ctx context.Context, id string, body CopyTemplateJSONRequestBody) (*CopyTemplateResponse, error) { + rsp, err := c.CopyTemplate(ctx, id, body) + if err != nil { + return nil, err + } + return ParseCopyTemplateResponse(rsp) +} + +// ListZonesWithResponse request returning *ListZonesResponse +func (c *ClientWithResponses) ListZonesWithResponse(ctx context.Context) (*ListZonesResponse, error) { + rsp, err := c.ListZones(ctx) + if err != nil { + return nil, err + } + return ParseListZonesResponse(rsp) +} + +// ParseListAntiAffinityGroupsResponse parses an HTTP response from a ListAntiAffinityGroupsWithResponse call +func ParseListAntiAffinityGroupsResponse(rsp *http.Response) (*ListAntiAffinityGroupsResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListAntiAffinityGroupsResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateAntiAffinityGroupResponse parses an HTTP response from a CreateAntiAffinityGroupWithResponse call +func ParseCreateAntiAffinityGroupResponse(rsp *http.Response) (*CreateAntiAffinityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateAntiAffinityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteAntiAffinityGroupResponse parses an HTTP response from a DeleteAntiAffinityGroupWithResponse call +func ParseDeleteAntiAffinityGroupResponse(rsp *http.Response) (*DeleteAntiAffinityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteAntiAffinityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetAntiAffinityGroupResponse parses an HTTP response from a GetAntiAffinityGroupWithResponse call +func ParseGetAntiAffinityGroupResponse(rsp *http.Response) (*GetAntiAffinityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetAntiAffinityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest AntiAffinityGroup + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetElasticIpResponse parses an HTTP response from a GetElasticIpWithResponse call +func ParseGetElasticIpResponse(rsp *http.Response) (*GetElasticIpResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetElasticIpResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest ElasticIp + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListEventsResponse parses an HTTP response from a ListEventsWithResponse call +func ParseListEventsResponse(rsp *http.Response) (*ListEventsResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListEventsResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest []Event + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateInstanceResponse parses an HTTP response from a CreateInstanceWithResponse call +func ParseCreateInstanceResponse(rsp *http.Response) (*CreateInstanceResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateInstanceResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListInstancePoolsResponse parses an HTTP response from a ListInstancePoolsWithResponse call +func ParseListInstancePoolsResponse(rsp *http.Response) (*ListInstancePoolsResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListInstancePoolsResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + InstancePools *[]InstancePool `json:"instance-pools,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateInstancePoolResponse parses an HTTP response from a CreateInstancePoolWithResponse call +func ParseCreateInstancePoolResponse(rsp *http.Response) (*CreateInstancePoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateInstancePoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteInstancePoolResponse parses an HTTP response from a DeleteInstancePoolWithResponse call +func ParseDeleteInstancePoolResponse(rsp *http.Response) (*DeleteInstancePoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteInstancePoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetInstancePoolResponse parses an HTTP response from a GetInstancePoolWithResponse call +func ParseGetInstancePoolResponse(rsp *http.Response) (*GetInstancePoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetInstancePoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest InstancePool + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseUpdateInstancePoolResponse parses an HTTP response from a UpdateInstancePoolWithResponse call +func ParseUpdateInstancePoolResponse(rsp *http.Response) (*UpdateInstancePoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &UpdateInstancePoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteInstancePoolFieldResponse parses an HTTP response from a DeleteInstancePoolFieldWithResponse call +func ParseDeleteInstancePoolFieldResponse(rsp *http.Response) (*DeleteInstancePoolFieldResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteInstancePoolFieldResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseEvictInstancePoolMembersResponse parses an HTTP response from a EvictInstancePoolMembersWithResponse call +func ParseEvictInstancePoolMembersResponse(rsp *http.Response) (*EvictInstancePoolMembersResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &EvictInstancePoolMembersResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseScaleInstancePoolResponse parses an HTTP response from a ScaleInstancePoolWithResponse call +func ParseScaleInstancePoolResponse(rsp *http.Response) (*ScaleInstancePoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ScaleInstancePoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListInstanceTypesResponse parses an HTTP response from a ListInstanceTypesWithResponse call +func ParseListInstanceTypesResponse(rsp *http.Response) (*ListInstanceTypesResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListInstanceTypesResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + InstanceTypes *[]InstanceType `json:"instance-types,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetInstanceTypeResponse parses an HTTP response from a GetInstanceTypeWithResponse call +func ParseGetInstanceTypeResponse(rsp *http.Response) (*GetInstanceTypeResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetInstanceTypeResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest InstanceType + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateSnapshotResponse parses an HTTP response from a CreateSnapshotWithResponse call +func ParseCreateSnapshotResponse(rsp *http.Response) (*CreateSnapshotResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateSnapshotResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseRevertInstanceToSnapshotResponse parses an HTTP response from a RevertInstanceToSnapshotWithResponse call +func ParseRevertInstanceToSnapshotResponse(rsp *http.Response) (*RevertInstanceToSnapshotResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &RevertInstanceToSnapshotResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListLoadBalancersResponse parses an HTTP response from a ListLoadBalancersWithResponse call +func ParseListLoadBalancersResponse(rsp *http.Response) (*ListLoadBalancersResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListLoadBalancersResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + LoadBalancers *[]LoadBalancer `json:"load-balancers,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateLoadBalancerResponse parses an HTTP response from a CreateLoadBalancerWithResponse call +func ParseCreateLoadBalancerResponse(rsp *http.Response) (*CreateLoadBalancerResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateLoadBalancerResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteLoadBalancerResponse parses an HTTP response from a DeleteLoadBalancerWithResponse call +func ParseDeleteLoadBalancerResponse(rsp *http.Response) (*DeleteLoadBalancerResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteLoadBalancerResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetLoadBalancerResponse parses an HTTP response from a GetLoadBalancerWithResponse call +func ParseGetLoadBalancerResponse(rsp *http.Response) (*GetLoadBalancerResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetLoadBalancerResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest LoadBalancer + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseUpdateLoadBalancerResponse parses an HTTP response from a UpdateLoadBalancerWithResponse call +func ParseUpdateLoadBalancerResponse(rsp *http.Response) (*UpdateLoadBalancerResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &UpdateLoadBalancerResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseAddServiceToLoadBalancerResponse parses an HTTP response from a AddServiceToLoadBalancerWithResponse call +func ParseAddServiceToLoadBalancerResponse(rsp *http.Response) (*AddServiceToLoadBalancerResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &AddServiceToLoadBalancerResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteLoadBalancerServiceResponse parses an HTTP response from a DeleteLoadBalancerServiceWithResponse call +func ParseDeleteLoadBalancerServiceResponse(rsp *http.Response) (*DeleteLoadBalancerServiceResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteLoadBalancerServiceResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetLoadBalancerServiceResponse parses an HTTP response from a GetLoadBalancerServiceWithResponse call +func ParseGetLoadBalancerServiceResponse(rsp *http.Response) (*GetLoadBalancerServiceResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetLoadBalancerServiceResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest LoadBalancerService + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseUpdateLoadBalancerServiceResponse parses an HTTP response from a UpdateLoadBalancerServiceWithResponse call +func ParseUpdateLoadBalancerServiceResponse(rsp *http.Response) (*UpdateLoadBalancerServiceResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &UpdateLoadBalancerServiceResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetOperationResponse parses an HTTP response from a GetOperationWithResponse call +func ParseGetOperationResponse(rsp *http.Response) (*GetOperationResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetOperationResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListPrivateNetworksResponse parses an HTTP response from a ListPrivateNetworksWithResponse call +func ParseListPrivateNetworksResponse(rsp *http.Response) (*ListPrivateNetworksResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListPrivateNetworksResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + PrivateNetworks *[]PrivateNetwork `json:"private-networks,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreatePrivateNetworkResponse parses an HTTP response from a CreatePrivateNetworkWithResponse call +func ParseCreatePrivateNetworkResponse(rsp *http.Response) (*CreatePrivateNetworkResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreatePrivateNetworkResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeletePrivateNetworkResponse parses an HTTP response from a DeletePrivateNetworkWithResponse call +func ParseDeletePrivateNetworkResponse(rsp *http.Response) (*DeletePrivateNetworkResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeletePrivateNetworkResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetPrivateNetworkResponse parses an HTTP response from a GetPrivateNetworkWithResponse call +func ParseGetPrivateNetworkResponse(rsp *http.Response) (*GetPrivateNetworkResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetPrivateNetworkResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest PrivateNetwork + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseUpdatePrivateNetworkResponse parses an HTTP response from a UpdatePrivateNetworkWithResponse call +func ParseUpdatePrivateNetworkResponse(rsp *http.Response) (*UpdatePrivateNetworkResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &UpdatePrivateNetworkResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeletePrivateNetworkFieldResponse parses an HTTP response from a DeletePrivateNetworkFieldWithResponse call +func ParseDeletePrivateNetworkFieldResponse(rsp *http.Response) (*DeletePrivateNetworkFieldResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeletePrivateNetworkFieldResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListSecurityGroupsResponse parses an HTTP response from a ListSecurityGroupsWithResponse call +func ParseListSecurityGroupsResponse(rsp *http.Response) (*ListSecurityGroupsResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListSecurityGroupsResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateSecurityGroupResponse parses an HTTP response from a CreateSecurityGroupWithResponse call +func ParseCreateSecurityGroupResponse(rsp *http.Response) (*CreateSecurityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateSecurityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteSecurityGroupResponse parses an HTTP response from a DeleteSecurityGroupWithResponse call +func ParseDeleteSecurityGroupResponse(rsp *http.Response) (*DeleteSecurityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteSecurityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetSecurityGroupResponse parses an HTTP response from a GetSecurityGroupWithResponse call +func ParseGetSecurityGroupResponse(rsp *http.Response) (*GetSecurityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetSecurityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest SecurityGroup + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseAddRuleToSecurityGroupResponse parses an HTTP response from a AddRuleToSecurityGroupWithResponse call +func ParseAddRuleToSecurityGroupResponse(rsp *http.Response) (*AddRuleToSecurityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &AddRuleToSecurityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteRuleFromSecurityGroupResponse parses an HTTP response from a DeleteRuleFromSecurityGroupWithResponse call +func ParseDeleteRuleFromSecurityGroupResponse(rsp *http.Response) (*DeleteRuleFromSecurityGroupResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteRuleFromSecurityGroupResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListSksClustersResponse parses an HTTP response from a ListSksClustersWithResponse call +func ParseListSksClustersResponse(rsp *http.Response) (*ListSksClustersResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListSksClustersResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + SksClusters *[]SksCluster `json:"sks-clusters,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateSksClusterResponse parses an HTTP response from a CreateSksClusterWithResponse call +func ParseCreateSksClusterResponse(rsp *http.Response) (*CreateSksClusterResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateSksClusterResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGenerateSksClusterKubeconfigResponse parses an HTTP response from a GenerateSksClusterKubeconfigWithResponse call +func ParseGenerateSksClusterKubeconfigResponse(rsp *http.Response) (*GenerateSksClusterKubeconfigResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GenerateSksClusterKubeconfigResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + Kubeconfig *string `json:"kubeconfig,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListSksClusterVersionsResponse parses an HTTP response from a ListSksClusterVersionsWithResponse call +func ParseListSksClusterVersionsResponse(rsp *http.Response) (*ListSksClusterVersionsResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListSksClusterVersionsResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + SksClusterVersions *[]string `json:"sks-cluster-versions,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteSksClusterResponse parses an HTTP response from a DeleteSksClusterWithResponse call +func ParseDeleteSksClusterResponse(rsp *http.Response) (*DeleteSksClusterResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteSksClusterResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetSksClusterResponse parses an HTTP response from a GetSksClusterWithResponse call +func ParseGetSksClusterResponse(rsp *http.Response) (*GetSksClusterResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetSksClusterResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest SksCluster + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseUpdateSksClusterResponse parses an HTTP response from a UpdateSksClusterWithResponse call +func ParseUpdateSksClusterResponse(rsp *http.Response) (*UpdateSksClusterResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &UpdateSksClusterResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCreateSksNodepoolResponse parses an HTTP response from a CreateSksNodepoolWithResponse call +func ParseCreateSksNodepoolResponse(rsp *http.Response) (*CreateSksNodepoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CreateSksNodepoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteSksNodepoolResponse parses an HTTP response from a DeleteSksNodepoolWithResponse call +func ParseDeleteSksNodepoolResponse(rsp *http.Response) (*DeleteSksNodepoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteSksNodepoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetSksNodepoolResponse parses an HTTP response from a GetSksNodepoolWithResponse call +func ParseGetSksNodepoolResponse(rsp *http.Response) (*GetSksNodepoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetSksNodepoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest SksNodepool + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseUpdateSksNodepoolResponse parses an HTTP response from a UpdateSksNodepoolWithResponse call +func ParseUpdateSksNodepoolResponse(rsp *http.Response) (*UpdateSksNodepoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &UpdateSksNodepoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteSksNodepoolFieldResponse parses an HTTP response from a DeleteSksNodepoolFieldWithResponse call +func ParseDeleteSksNodepoolFieldResponse(rsp *http.Response) (*DeleteSksNodepoolFieldResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteSksNodepoolFieldResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseEvictSksNodepoolMembersResponse parses an HTTP response from a EvictSksNodepoolMembersWithResponse call +func ParseEvictSksNodepoolMembersResponse(rsp *http.Response) (*EvictSksNodepoolMembersResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &EvictSksNodepoolMembersResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseScaleSksNodepoolResponse parses an HTTP response from a ScaleSksNodepoolWithResponse call +func ParseScaleSksNodepoolResponse(rsp *http.Response) (*ScaleSksNodepoolResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ScaleSksNodepoolResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseUpgradeSksClusterResponse parses an HTTP response from a UpgradeSksClusterWithResponse call +func ParseUpgradeSksClusterResponse(rsp *http.Response) (*UpgradeSksClusterResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &UpgradeSksClusterResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteSksClusterFieldResponse parses an HTTP response from a DeleteSksClusterFieldWithResponse call +func ParseDeleteSksClusterFieldResponse(rsp *http.Response) (*DeleteSksClusterFieldResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteSksClusterFieldResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListSnapshotsResponse parses an HTTP response from a ListSnapshotsWithResponse call +func ParseListSnapshotsResponse(rsp *http.Response) (*ListSnapshotsResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListSnapshotsResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + Snapshots *[]Snapshot `json:"snapshots,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteSnapshotResponse parses an HTTP response from a DeleteSnapshotWithResponse call +func ParseDeleteSnapshotResponse(rsp *http.Response) (*DeleteSnapshotResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteSnapshotResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetSnapshotResponse parses an HTTP response from a GetSnapshotWithResponse call +func ParseGetSnapshotResponse(rsp *http.Response) (*GetSnapshotResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetSnapshotResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Snapshot + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseExportSnapshotResponse parses an HTTP response from a ExportSnapshotWithResponse call +func ParseExportSnapshotResponse(rsp *http.Response) (*ExportSnapshotResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ExportSnapshotResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetSosPresignedUrlResponse parses an HTTP response from a GetSosPresignedUrlWithResponse call +func ParseGetSosPresignedUrlResponse(rsp *http.Response) (*GetSosPresignedUrlResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetSosPresignedUrlResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + Url *string `json:"url,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetSshKeyResponse parses an HTTP response from a GetSshKeyWithResponse call +func ParseGetSshKeyResponse(rsp *http.Response) (*GetSshKeyResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetSshKeyResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest SshKey + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListTemplatesResponse parses an HTTP response from a ListTemplatesWithResponse call +func ParseListTemplatesResponse(rsp *http.Response) (*ListTemplatesResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListTemplatesResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + Templates *[]Template `json:"templates,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseRegisterTemplateResponse parses an HTTP response from a RegisterTemplateWithResponse call +func ParseRegisterTemplateResponse(rsp *http.Response) (*RegisterTemplateResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &RegisterTemplateResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseDeleteTemplateResponse parses an HTTP response from a DeleteTemplateWithResponse call +func ParseDeleteTemplateResponse(rsp *http.Response) (*DeleteTemplateResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &DeleteTemplateResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseGetTemplateResponse parses an HTTP response from a GetTemplateWithResponse call +func ParseGetTemplateResponse(rsp *http.Response) (*GetTemplateResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &GetTemplateResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Template + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseCopyTemplateResponse parses an HTTP response from a CopyTemplateWithResponse call +func ParseCopyTemplateResponse(rsp *http.Response) (*CopyTemplateResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &CopyTemplateResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Operation + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + +// ParseListZonesResponse parses an HTTP response from a ListZonesWithResponse call +func ParseListZonesResponse(rsp *http.Response) (*ListZonesResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer rsp.Body.Close() + if err != nil { + return nil, err + } + + response := &ListZonesResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + Zones *[]Zone `json:"zones,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.go new file mode 100644 index 000000000..af308381f --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/public-api.go @@ -0,0 +1,24 @@ +// Package publicapi is an internal package containing code generated from the +// Exoscale API OpenAPI specs, as well as helpers and transition types exposed +// in the public-facing package. +package publicapi + +//go:generate oapi-codegen -generate types,client -package publicapi -o public-api.gen.go ../../../public-api.json + +// OptionalString returns the dereferenced string value of v if not nil, otherwise an empty string. +func OptionalString(v *string) string { + if v != nil { + return *v + } + + return "" +} + +// OptionalInt64 returns the dereferenced int64 value of v if not nil, otherwise 0. +func OptionalInt64(v *int64) int64 { + if v != nil { + return *v + } + + return 0 +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/request.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/request.go new file mode 100644 index 000000000..a1b2cfcec --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/request.go @@ -0,0 +1,20 @@ +package publicapi + +import ( + "context" + "net/http" +) + +// MultiRequestsEditor is an oapi-codegen compatible RequestEditorFn function that executes multiple +// RequestEditorFn functions sequentially. +func MultiRequestsEditor(fns ...RequestEditorFn) RequestEditorFn { + return func(ctx context.Context, req *http.Request) error { + for _, fn := range fns { + if err := fn(ctx, req); err != nil { + return err + } + } + + return nil + } +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_cluster.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_cluster.go new file mode 100644 index 000000000..203dfa835 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_cluster.go @@ -0,0 +1,86 @@ +package publicapi + +import ( + "encoding/json" + "time" +) + +// UnmarshalJSON unmarshals a SksCluster structure into a temporary structure whose "CreatedAt" field of type +// string to be able to parse the original timestamp (ISO 8601) into a time.Time object, since json.Unmarshal() +// only supports RFC 3339 format. +func (c *SksCluster) UnmarshalJSON(data []byte) error { + raw := struct { + Addons *[]string `json:"addons,omitempty"` + Cni *string `json:"cni,omitempty"` + CreatedAt *string `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + Endpoint *string `json:"endpoint,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + Level *string `json:"level,omitempty"` + Name *string `json:"name,omitempty"` + Nodepools *[]SksNodepool `json:"nodepools,omitempty"` + State *string `json:"state,omitempty"` + Version *string `json:"version,omitempty"` + }{} + + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + + if raw.CreatedAt != nil { + createdAt, err := time.Parse(iso8601Format, *raw.CreatedAt) + if err != nil { + return err + } + c.CreatedAt = &createdAt + } + + c.Addons = raw.Addons + c.Cni = raw.Cni + c.Description = raw.Description + c.Endpoint = raw.Endpoint + c.Id = raw.Id + c.Level = raw.Level + c.Name = raw.Name + c.Nodepools = raw.Nodepools + c.State = raw.State + c.Version = raw.Version + + return nil +} + +// MarshalJSON returns the JSON encoding of a SksCluster structure after having formatted the CreatedAt field +// in the original timestamp (ISO 8601), since time.MarshalJSON() only supports RFC 3339 format. +func (c *SksCluster) MarshalJSON() ([]byte, error) { + raw := struct { + Addons *[]string `json:"addons,omitempty"` + Cni *string `json:"cni,omitempty"` + CreatedAt *string `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + Endpoint *string `json:"endpoint,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + Level *string `json:"level,omitempty"` + Name *string `json:"name,omitempty"` + Nodepools *[]SksNodepool `json:"nodepools,omitempty"` + State *string `json:"state,omitempty"` + Version *string `json:"version,omitempty"` + }{} + + if c.CreatedAt != nil { + createdAt := c.CreatedAt.Format(iso8601Format) + raw.CreatedAt = &createdAt + } + + raw.Addons = c.Addons + raw.Cni = c.Cni + raw.Description = c.Description + raw.Endpoint = c.Endpoint + raw.Id = c.Id + raw.Level = c.Level + raw.Name = c.Name + raw.Nodepools = c.Nodepools + raw.State = c.State + raw.Version = c.Version + + return json.Marshal(raw) +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_nodepool.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_nodepool.go new file mode 100644 index 000000000..ec0d5dd14 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/sks_nodepool.go @@ -0,0 +1,94 @@ +package publicapi + +import ( + "encoding/json" + "time" +) + +// UnmarshalJSON unmarshals a SksNodepool structure into a temporary structure whose "CreatedAt" field of type +// string to be able to parse the original timestamp (ISO 8601) into a time.Time object, since json.Unmarshal() +// only supports RFC 3339 format. +func (n *SksNodepool) UnmarshalJSON(data []byte) error { + raw := struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + CreatedAt *string `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize *int64 `json:"disk-size,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + InstancePool *InstancePool `json:"instance-pool,omitempty"` + InstanceType *InstanceType `json:"instance-type,omitempty"` + Name *string `json:"name,omitempty"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + Size *int64 `json:"size,omitempty"` + State *string `json:"state,omitempty"` + Template *Template `json:"template,omitempty"` + Version *string `json:"version,omitempty"` + }{} + + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + + if raw.CreatedAt != nil { + createdAt, err := time.Parse(iso8601Format, *raw.CreatedAt) + if err != nil { + return err + } + n.CreatedAt = &createdAt + } + + n.AntiAffinityGroups = raw.AntiAffinityGroups + n.Description = raw.Description + n.DiskSize = raw.DiskSize + n.Id = raw.Id + n.InstancePool = raw.InstancePool + n.InstanceType = raw.InstanceType + n.Name = raw.Name + n.SecurityGroups = raw.SecurityGroups + n.Size = raw.Size + n.State = raw.State + n.Template = raw.Template + n.Version = raw.Version + + return nil +} + +// MarshalJSON returns the JSON encoding of a SksNodepool structure after having formatted the CreatedAt field +// in the original timestamp (ISO 8601), since time.MarshalJSON() only supports RFC 3339 format. +func (n *SksNodepool) MarshalJSON() ([]byte, error) { + raw := struct { + AntiAffinityGroups *[]AntiAffinityGroup `json:"anti-affinity-groups,omitempty"` + CreatedAt *string `json:"created-at,omitempty"` + Description *string `json:"description,omitempty"` + DiskSize *int64 `json:"disk-size,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + InstancePool *InstancePool `json:"instance-pool,omitempty"` + InstanceType *InstanceType `json:"instance-type,omitempty"` + Name *string `json:"name,omitempty"` + SecurityGroups *[]SecurityGroup `json:"security-groups,omitempty"` + Size *int64 `json:"size,omitempty"` + State *string `json:"state,omitempty"` + Template *Template `json:"template,omitempty"` + Version *string `json:"version,omitempty"` + }{} + + if n.CreatedAt != nil { + createdAt := n.CreatedAt.Format(iso8601Format) + raw.CreatedAt = &createdAt + } + + raw.AntiAffinityGroups = n.AntiAffinityGroups + raw.Description = n.Description + raw.DiskSize = n.DiskSize + raw.Id = n.Id + raw.InstancePool = n.InstancePool + raw.InstanceType = n.InstanceType + raw.Name = n.Name + raw.SecurityGroups = n.SecurityGroups + raw.Size = n.Size + raw.State = n.State + raw.Template = n.Template + raw.Version = n.Version + + return json.Marshal(raw) +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/template.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/template.go new file mode 100644 index 000000000..c887e5644 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/template.go @@ -0,0 +1,102 @@ +package publicapi + +import ( + "encoding/json" + "time" +) + +// UnmarshalJSON unmarshals a Template structure into a temporary structure whose "CreatedAt" field of type +// string to be able to parse the original timestamp (ISO 8601) into a time.Time object, since json.Unmarshal() +// only supports RFC 3339 format. +func (t *Template) UnmarshalJSON(data []byte) error { + raw := struct { + CreatedAt *string `json:"created-at,omitempty"` + BootMode *string `json:"boot-mode,omitempty"` + Build *string `json:"build,omitempty"` + Checksum *string `json:"checksum,omitempty"` + DefaultUser *string `json:"default-user,omitempty"` + Description *string `json:"description,omitempty"` + Family *string `json:"family,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + Name *string `json:"name,omitempty"` + PasswordEnabled *bool `json:"password-enabled,omitempty"` + Size *int64 `json:"size,omitempty"` + SshKeyEnabled *bool `json:"ssh-key-enabled,omitempty"` // nolint:golint + Url *string `json:"url,omitempty"` // nolint:golint + Version *string `json:"version,omitempty"` + Visibility *string `json:"visibility,omitempty"` + }{} + + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + + if raw.CreatedAt != nil { + createdAt, err := time.Parse(iso8601Format, *raw.CreatedAt) + if err != nil { + return err + } + t.CreatedAt = &createdAt + } + + t.BootMode = raw.BootMode + t.Build = raw.Build + t.Checksum = raw.Checksum + t.DefaultUser = raw.DefaultUser + t.Description = raw.Description + t.Family = raw.Family + t.Id = raw.Id + t.Name = raw.Name + t.PasswordEnabled = raw.PasswordEnabled + t.Size = raw.Size + t.SshKeyEnabled = raw.SshKeyEnabled + t.Url = raw.Url + t.Version = raw.Version + t.Visibility = raw.Visibility + + return nil +} + +// MarshalJSON returns the JSON encoding of a Template structure after having formatted the CreatedAt field +// in the original timestamp (ISO 8601), since time.MarshalJSON() only supports RFC 3339 format. +func (t *Template) MarshalJSON() ([]byte, error) { + raw := struct { + CreatedAt *string `json:"created-at,omitempty"` + BootMode *string `json:"boot-mode,omitempty"` + Build *string `json:"build,omitempty"` + Checksum *string `json:"checksum,omitempty"` + DefaultUser *string `json:"default-user,omitempty"` + Description *string `json:"description,omitempty"` + Family *string `json:"family,omitempty"` + Id *string `json:"id,omitempty"` // nolint:golint + Name *string `json:"name,omitempty"` + PasswordEnabled *bool `json:"password-enabled,omitempty"` + Size *int64 `json:"size,omitempty"` + SshKeyEnabled *bool `json:"ssh-key-enabled,omitempty"` // nolint:golint + Url *string `json:"url,omitempty"` // nolint:golint + Version *string `json:"version,omitempty"` + Visibility *string `json:"visibility,omitempty"` + }{} + + if t.CreatedAt != nil { + createdAt := t.CreatedAt.Format(iso8601Format) + raw.CreatedAt = &createdAt + } + + raw.BootMode = t.BootMode + raw.Build = t.Build + raw.Checksum = t.Checksum + raw.DefaultUser = t.DefaultUser + raw.Description = t.Description + raw.Family = t.Family + raw.Id = t.Id + raw.Name = t.Name + raw.PasswordEnabled = t.PasswordEnabled + raw.Size = t.Size + raw.SshKeyEnabled = t.SshKeyEnabled + raw.Url = t.Url + raw.Version = t.Version + raw.Visibility = t.Visibility + + return json.Marshal(raw) +} diff --git a/vendor/github.com/exoscale/egoscale/v2/internal/public-api/time.go b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/time.go new file mode 100644 index 000000000..d8440566d --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/internal/public-api/time.go @@ -0,0 +1,3 @@ +package publicapi + +const iso8601Format = "2006-01-02T15:04:05Z" diff --git a/vendor/github.com/exoscale/egoscale/v2/loadbalancer.go b/vendor/github.com/exoscale/egoscale/v2/loadbalancer.go new file mode 100644 index 000000000..9ef29e79f --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/loadbalancer.go @@ -0,0 +1,382 @@ +package v2 + +import ( + "context" + "errors" + "net" + "strings" + "time" + + apiv2 "github.com/exoscale/egoscale/v2/api" + papi "github.com/exoscale/egoscale/v2/internal/public-api" +) + +// NetworkLoadBalancerServerStatus represents a Network Load Balancer service target server status. +type NetworkLoadBalancerServerStatus struct { + InstanceIP net.IP + Status string +} + +func nlbServerStatusFromAPI(st *papi.LoadBalancerServerStatus) *NetworkLoadBalancerServerStatus { + return &NetworkLoadBalancerServerStatus{ + InstanceIP: net.ParseIP(papi.OptionalString(st.PublicIp)), + Status: papi.OptionalString(st.Status), + } +} + +// NetworkLoadBalancerServiceHealthcheck represents a Network Load Balancer service healthcheck. +type NetworkLoadBalancerServiceHealthcheck struct { + Mode string + Port uint16 + Interval time.Duration + Timeout time.Duration + Retries int64 + URI string + TLSSNI string +} + +// NetworkLoadBalancerService represents a Network Load Balancer service. +type NetworkLoadBalancerService struct { + ID string + Name string + Description string + InstancePoolID string + Protocol string + Port uint16 + TargetPort uint16 + Strategy string + Healthcheck NetworkLoadBalancerServiceHealthcheck + State string + HealthcheckStatus []*NetworkLoadBalancerServerStatus +} + +func nlbServiceFromAPI(svc *papi.LoadBalancerService) *NetworkLoadBalancerService { + return &NetworkLoadBalancerService{ + ID: papi.OptionalString(svc.Id), + Name: papi.OptionalString(svc.Name), + Description: papi.OptionalString(svc.Description), + InstancePoolID: papi.OptionalString(svc.InstancePool.Id), + Protocol: papi.OptionalString(svc.Protocol), + Port: uint16(papi.OptionalInt64(svc.Port)), + TargetPort: uint16(papi.OptionalInt64(svc.TargetPort)), + Strategy: papi.OptionalString(svc.Strategy), + Healthcheck: NetworkLoadBalancerServiceHealthcheck{ + Mode: svc.Healthcheck.Mode, + Port: uint16(svc.Healthcheck.Port), + Interval: time.Duration(papi.OptionalInt64(svc.Healthcheck.Interval)) * time.Second, + Timeout: time.Duration(papi.OptionalInt64(svc.Healthcheck.Timeout)) * time.Second, + Retries: papi.OptionalInt64(svc.Healthcheck.Retries), + URI: papi.OptionalString(svc.Healthcheck.Uri), + TLSSNI: papi.OptionalString(svc.Healthcheck.TlsSni), + }, + HealthcheckStatus: func() []*NetworkLoadBalancerServerStatus { + statuses := make([]*NetworkLoadBalancerServerStatus, 0) + + if svc.HealthcheckStatus != nil { + for _, st := range *svc.HealthcheckStatus { + st := st + statuses = append(statuses, nlbServerStatusFromAPI(&st)) + } + } + + return statuses + }(), + State: papi.OptionalString(svc.State), + } +} + +// NetworkLoadBalancer represents a Network Load Balancer instance. +type NetworkLoadBalancer struct { + ID string + Name string + Description string + CreatedAt time.Time + IPAddress net.IP + Services []*NetworkLoadBalancerService + State string + + c *Client + zone string +} + +func nlbFromAPI(nlb *papi.LoadBalancer) *NetworkLoadBalancer { + return &NetworkLoadBalancer{ + ID: papi.OptionalString(nlb.Id), + Name: papi.OptionalString(nlb.Name), + Description: papi.OptionalString(nlb.Description), + CreatedAt: *nlb.CreatedAt, + IPAddress: net.ParseIP(papi.OptionalString(nlb.Ip)), + State: papi.OptionalString(nlb.State), + Services: func() []*NetworkLoadBalancerService { + services := make([]*NetworkLoadBalancerService, 0) + + if nlb.Services != nil { + for _, svc := range *nlb.Services { + svc := svc + services = append(services, nlbServiceFromAPI(&svc)) + } + } + + return services + }(), + } +} + +// AddService adds a service to the Network Load Balancer instance. +func (nlb *NetworkLoadBalancer) AddService(ctx context.Context, + svc *NetworkLoadBalancerService) (*NetworkLoadBalancerService, error) { + var ( + port = int64(svc.Port) + targetPort = int64(svc.TargetPort) + healthcheckPort = int64(svc.Healthcheck.Port) + healthcheckInterval = int64(svc.Healthcheck.Interval.Seconds()) + healthcheckTimeout = int64(svc.Healthcheck.Timeout.Seconds()) + ) + + // The API doesn't return the NLB service created directly, so in order to return a + // *NetworkLoadBalancerService corresponding to the new service we have to manually + // compare the list of services on the NLB instance before and after the service + // creation, and identify the service that wasn't there before. + // Note: in case of multiple services creation in parallel this technique is subject + // to race condition as we could return an unrelated service. To prevent this, we + // also compare the name of the new service to the name specified in the svc + // parameter. + services := make(map[string]struct{}) + for _, svc := range nlb.Services { + services[svc.ID] = struct{}{} + } + + resp, err := nlb.c.AddServiceToLoadBalancerWithResponse( + apiv2.WithZone(ctx, nlb.zone), + nlb.ID, + papi.AddServiceToLoadBalancerJSONRequestBody{ + Name: svc.Name, + Description: &svc.Description, + Healthcheck: papi.Healthcheck{ + Mode: svc.Healthcheck.Mode, + Port: healthcheckPort, + Interval: &healthcheckInterval, + Timeout: &healthcheckTimeout, + Retries: &svc.Healthcheck.Retries, + Uri: func() *string { + if strings.HasPrefix(svc.Healthcheck.Mode, "http") { + return &svc.Healthcheck.URI + } + return nil + }(), + TlsSni: func() *string { + if svc.Healthcheck.Mode == "https" && svc.Healthcheck.TLSSNI != "" { + return &svc.Healthcheck.TLSSNI + } + return nil + }(), + }, + InstancePool: papi.InstancePool{Id: &svc.InstancePoolID}, + Port: port, + TargetPort: targetPort, + Protocol: svc.Protocol, + Strategy: svc.Strategy, + }) + if err != nil { + return nil, err + } + + res, err := papi.NewPoller(). + WithTimeout(nlb.c.timeout). + Poll(ctx, nlb.c.OperationPoller(nlb.zone, *resp.JSON200.Id)) + if err != nil { + return nil, err + } + + nlbUpdated, err := nlb.c.GetNetworkLoadBalancer(ctx, nlb.zone, *res.(*papi.Reference).Id) + if err != nil { + return nil, err + } + + // Look for an unknown service: if we find one we hope it's the one we've just created. + for _, s := range nlbUpdated.Services { + if _, ok := services[svc.ID]; !ok && s.Name == svc.Name { + return s, nil + } + } + + return nil, errors.New("unable to identify the service created") +} + +// UpdateService updates the specified Network Load Balancer service. +func (nlb *NetworkLoadBalancer) UpdateService(ctx context.Context, svc *NetworkLoadBalancerService) error { + var ( + port = int64(svc.Port) + targetPort = int64(svc.TargetPort) + healthcheckPort = int64(svc.Healthcheck.Port) + healthcheckInterval = int64(svc.Healthcheck.Interval.Seconds()) + healthcheckTimeout = int64(svc.Healthcheck.Timeout.Seconds()) + ) + + resp, err := nlb.c.UpdateLoadBalancerServiceWithResponse( + apiv2.WithZone(ctx, nlb.zone), + nlb.ID, + svc.ID, + papi.UpdateLoadBalancerServiceJSONRequestBody{ + Name: &svc.Name, + Description: &svc.Description, + Port: &port, + TargetPort: &targetPort, + Protocol: &svc.Protocol, + Strategy: &svc.Strategy, + Healthcheck: &papi.Healthcheck{ + Mode: svc.Healthcheck.Mode, + Port: healthcheckPort, + Interval: &healthcheckInterval, + Timeout: &healthcheckTimeout, + Retries: &svc.Healthcheck.Retries, + Uri: func() *string { + if strings.HasPrefix(svc.Healthcheck.Mode, "http") { + return &svc.Healthcheck.URI + } + return nil + }(), + TlsSni: func() *string { + if svc.Healthcheck.Mode == "https" && svc.Healthcheck.TLSSNI != "" { + return &svc.Healthcheck.TLSSNI + } + return nil + }(), + }, + }) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(nlb.c.timeout). + Poll(ctx, nlb.c.OperationPoller(nlb.zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// DeleteService deletes the specified service from the Network Load Balancer instance. +func (nlb *NetworkLoadBalancer) DeleteService(ctx context.Context, svc *NetworkLoadBalancerService) error { + resp, err := nlb.c.DeleteLoadBalancerServiceWithResponse( + apiv2.WithZone(ctx, nlb.zone), + nlb.ID, + svc.ID, + ) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(nlb.c.timeout). + Poll(ctx, nlb.c.OperationPoller(nlb.zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// CreateNetworkLoadBalancer creates a Network Load Balancer instance in the specified zone. +func (c *Client) CreateNetworkLoadBalancer(ctx context.Context, zone string, + nlb *NetworkLoadBalancer) (*NetworkLoadBalancer, error) { + resp, err := c.CreateLoadBalancerWithResponse( + apiv2.WithZone(ctx, zone), + papi.CreateLoadBalancerJSONRequestBody{ + Name: nlb.Name, + Description: &nlb.Description, + }) + if err != nil { + return nil, err + } + + res, err := papi.NewPoller(). + WithTimeout(c.timeout). + Poll(ctx, c.OperationPoller(zone, *resp.JSON200.Id)) + if err != nil { + return nil, err + } + + return c.GetNetworkLoadBalancer(ctx, zone, *res.(*papi.Reference).Id) +} + +// ListNetworkLoadBalancers returns the list of existing Network Load Balancers in the +// specified zone. +func (c *Client) ListNetworkLoadBalancers(ctx context.Context, zone string) ([]*NetworkLoadBalancer, error) { + list := make([]*NetworkLoadBalancer, 0) + + resp, err := c.ListLoadBalancersWithResponse(apiv2.WithZone(ctx, zone)) + if err != nil { + return nil, err + } + + if resp.JSON200.LoadBalancers != nil { + for i := range *resp.JSON200.LoadBalancers { + nlb := nlbFromAPI(&(*resp.JSON200.LoadBalancers)[i]) + nlb.c = c + nlb.zone = zone + + list = append(list, nlb) + } + } + + return list, nil +} + +// GetNetworkLoadBalancer returns the Network Load Balancer instance corresponding to the +// specified ID in the specified zone. +func (c *Client) GetNetworkLoadBalancer(ctx context.Context, zone, id string) (*NetworkLoadBalancer, error) { + resp, err := c.GetLoadBalancerWithResponse(apiv2.WithZone(ctx, zone), id) + if err != nil { + return nil, err + } + + nlb := nlbFromAPI(resp.JSON200) + nlb.c = c + nlb.zone = zone + + return nlb, nil +} + +// UpdateNetworkLoadBalancer updates the specified Network Load Balancer instance in the specified zone. +func (c *Client) UpdateNetworkLoadBalancer(ctx context.Context, zone string, // nolint:dupl + nlb *NetworkLoadBalancer) (*NetworkLoadBalancer, error) { + resp, err := c.UpdateLoadBalancerWithResponse( + apiv2.WithZone(ctx, zone), + nlb.ID, + papi.UpdateLoadBalancerJSONRequestBody{ + Name: &nlb.Name, + Description: &nlb.Description, + }) + if err != nil { + return nil, err + } + + res, err := papi.NewPoller(). + WithTimeout(c.timeout). + Poll(ctx, c.OperationPoller(zone, *resp.JSON200.Id)) + if err != nil { + return nil, err + } + + return c.GetNetworkLoadBalancer(ctx, zone, *res.(*papi.Reference).Id) +} + +// DeleteNetworkLoadBalancer deletes the specified Network Load Balancer instance in the specified zone. +func (c *Client) DeleteNetworkLoadBalancer(ctx context.Context, zone, id string) error { + resp, err := c.DeleteLoadBalancerWithResponse(apiv2.WithZone(ctx, zone), id) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.timeout). + Poll(ctx, c.OperationPoller(zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/exoscale/egoscale/v2/sks.go b/vendor/github.com/exoscale/egoscale/v2/sks.go new file mode 100644 index 000000000..fcfc55fe4 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/sks.go @@ -0,0 +1,442 @@ +package v2 + +import ( + "context" + "errors" + "fmt" + "time" + + apiv2 "github.com/exoscale/egoscale/v2/api" + papi "github.com/exoscale/egoscale/v2/internal/public-api" +) + +// SKSNodepool represents a SKS Nodepool. +type SKSNodepool struct { + ID string + Name string + Description string + CreatedAt time.Time + InstancePoolID string + InstanceTypeID string + TemplateID string + DiskSize int64 + AntiAffinityGroupIDs []string + SecurityGroupIDs []string + Version string + Size int64 + State string +} + +func sksNodepoolFromAPI(n *papi.SksNodepool) *SKSNodepool { + return &SKSNodepool{ + ID: papi.OptionalString(n.Id), + Name: papi.OptionalString(n.Name), + Description: papi.OptionalString(n.Description), + CreatedAt: *n.CreatedAt, + InstancePoolID: papi.OptionalString(n.InstancePool.Id), + InstanceTypeID: papi.OptionalString(n.InstanceType.Id), + TemplateID: papi.OptionalString(n.Template.Id), + DiskSize: papi.OptionalInt64(n.DiskSize), + AntiAffinityGroupIDs: func() []string { + aags := make([]string, 0) + + if n.AntiAffinityGroups != nil { + for _, aag := range *n.AntiAffinityGroups { + aag := aag + aags = append(aags, *aag.Id) + } + } + + return aags + }(), + SecurityGroupIDs: func() []string { + sgs := make([]string, 0) + + if n.SecurityGroups != nil { + for _, sg := range *n.SecurityGroups { + sg := sg + sgs = append(sgs, *sg.Id) + } + } + + return sgs + }(), + Version: papi.OptionalString(n.Version), + Size: papi.OptionalInt64(n.Size), + State: papi.OptionalString(n.State), + } +} + +// SKSCluster represents a SKS cluster. +type SKSCluster struct { + ID string + Name string + Description string + CreatedAt time.Time + Endpoint string + Nodepools []*SKSNodepool + Version string + ServiceLevel string + CNI string + AddOns []string + State string + + c *Client + zone string +} + +func sksClusterFromAPI(c *papi.SksCluster) *SKSCluster { + return &SKSCluster{ + ID: papi.OptionalString(c.Id), + Name: papi.OptionalString(c.Name), + Description: papi.OptionalString(c.Description), + CreatedAt: *c.CreatedAt, + Endpoint: papi.OptionalString(c.Endpoint), + Nodepools: func() []*SKSNodepool { + nodepools := make([]*SKSNodepool, 0) + + if c.Nodepools != nil { + for _, n := range *c.Nodepools { + n := n + nodepools = append(nodepools, sksNodepoolFromAPI(&n)) + } + } + + return nodepools + }(), + Version: papi.OptionalString(c.Version), + ServiceLevel: papi.OptionalString(c.Level), + CNI: papi.OptionalString(c.Cni), + AddOns: func() []string { + addOns := make([]string, 0) + if c.Addons != nil { + addOns = append(addOns, *c.Addons...) + } + return addOns + }(), + State: papi.OptionalString(c.State), + } +} + +// RequestKubeconfig returns a base64-encoded kubeconfig content for the specified user name, +// optionally associated to specified groups for a duration d (default API-set TTL applies if not specified). +// Fore more information: https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/ +func (c *SKSCluster) RequestKubeconfig(ctx context.Context, user string, groups []string, + d time.Duration) (string, error) { + if user == "" { + return "", errors.New("user not specified") + } + + resp, err := c.c.GenerateSksClusterKubeconfigWithResponse( + apiv2.WithZone(ctx, c.zone), + c.ID, + papi.GenerateSksClusterKubeconfigJSONRequestBody{ + User: &user, + Groups: &groups, + Ttl: func() *int64 { + ttl := int64(d.Seconds()) + if ttl > 0 { + return &ttl + } + return nil + }(), + }) + if err != nil { + return "", err + } + + return papi.OptionalString(resp.JSON200.Kubeconfig), nil +} + +// AddNodepool adds a Nodepool to the SKS cluster. +func (c *SKSCluster) AddNodepool(ctx context.Context, np *SKSNodepool) (*SKSNodepool, error) { + resp, err := c.c.CreateSksNodepoolWithResponse( + apiv2.WithZone(ctx, c.zone), + c.ID, + papi.CreateSksNodepoolJSONRequestBody{ + Description: &np.Description, + DiskSize: np.DiskSize, + InstanceType: papi.InstanceType{Id: &np.InstanceTypeID}, + Name: np.Name, + AntiAffinityGroups: func() *[]papi.AntiAffinityGroup { + aags := make([]papi.AntiAffinityGroup, len(np.AntiAffinityGroupIDs)) + for i, aagID := range np.AntiAffinityGroupIDs { + aagID := aagID + aags[i] = papi.AntiAffinityGroup{Id: &aagID} + } + return &aags + }(), + SecurityGroups: func() *[]papi.SecurityGroup { + sgs := make([]papi.SecurityGroup, len(np.SecurityGroupIDs)) + for i, sgID := range np.SecurityGroupIDs { + sgID := sgID + sgs[i] = papi.SecurityGroup{Id: &sgID} + } + return &sgs + }(), + Size: np.Size, + }) + if err != nil { + return nil, err + } + + res, err := papi.NewPoller(). + WithTimeout(c.c.timeout). + Poll(ctx, c.c.OperationPoller(c.zone, *resp.JSON200.Id)) + if err != nil { + return nil, err + } + + nodepoolRes, err := c.c.GetSksNodepoolWithResponse(ctx, c.ID, *res.(*papi.Reference).Id) + if err != nil { + return nil, fmt.Errorf("unable to retrieve Nodepool: %s", err) + } + + return sksNodepoolFromAPI(nodepoolRes.JSON200), nil +} + +// UpdateNodepool updates the specified SKS cluster Nodepool. +func (c *SKSCluster) UpdateNodepool(ctx context.Context, np *SKSNodepool) error { + resp, err := c.c.UpdateSksNodepoolWithResponse( + apiv2.WithZone(ctx, c.zone), + c.ID, + np.ID, + papi.UpdateSksNodepoolJSONRequestBody{ + Name: &np.Name, + Description: &np.Description, + InstanceType: &papi.InstanceType{Id: &np.InstanceTypeID}, + DiskSize: &np.DiskSize, + }) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.c.timeout). + Poll(ctx, c.c.OperationPoller(c.zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// ScaleNodepool scales the SKS cluster Nodepool to the specified number of Kubernetes Nodes. +func (c *SKSCluster) ScaleNodepool(ctx context.Context, np *SKSNodepool, nodes int64) error { + resp, err := c.c.ScaleSksNodepoolWithResponse( + apiv2.WithZone(ctx, c.zone), + c.ID, + np.ID, + papi.ScaleSksNodepoolJSONRequestBody{Size: nodes}, + ) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.c.timeout). + Poll(ctx, c.c.OperationPoller(c.zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// EvictNodepoolMembers evicts the specified members (identified by their Compute instance ID) from the +// SKS cluster Nodepool. +func (c *SKSCluster) EvictNodepoolMembers(ctx context.Context, np *SKSNodepool, members []string) error { + resp, err := c.c.EvictSksNodepoolMembersWithResponse( + apiv2.WithZone(ctx, c.zone), + c.ID, + np.ID, + papi.EvictSksNodepoolMembersJSONRequestBody{Instances: &members}, + ) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.c.timeout). + Poll(ctx, c.c.OperationPoller(c.zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// DeleteNodepool deletes the specified Nodepool from the SKS cluster. +func (c *SKSCluster) DeleteNodepool(ctx context.Context, np *SKSNodepool) error { + resp, err := c.c.DeleteSksNodepoolWithResponse( + apiv2.WithZone(ctx, c.zone), + c.ID, + np.ID, + ) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.c.timeout). + Poll(ctx, c.c.OperationPoller(c.zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// CreateSKSCluster creates a SKS cluster in the specified zone. +func (c *Client) CreateSKSCluster(ctx context.Context, zone string, cluster *SKSCluster) (*SKSCluster, error) { + resp, err := c.CreateSksClusterWithResponse( + apiv2.WithZone(ctx, zone), + papi.CreateSksClusterJSONRequestBody{ + Name: cluster.Name, + Description: &cluster.Description, + Version: cluster.Version, + Level: cluster.ServiceLevel, + Cni: func() *string { + var cni *string + if cluster.CNI != "" { + cni = &cluster.CNI + } + return cni + }(), + Addons: func() *[]string { + var addOns *[]string + if len(cluster.AddOns) > 0 { + addOns = &cluster.AddOns + } + return addOns + }(), + }) + if err != nil { + return nil, err + } + + res, err := papi.NewPoller(). + WithTimeout(c.timeout). + Poll(ctx, c.OperationPoller(zone, *resp.JSON200.Id)) + if err != nil { + return nil, err + } + + return c.GetSKSCluster(ctx, zone, *res.(*papi.Reference).Id) +} + +// ListSKSClusters returns the list of existing SKS clusters in the specified zone. +func (c *Client) ListSKSClusters(ctx context.Context, zone string) ([]*SKSCluster, error) { + list := make([]*SKSCluster, 0) + + resp, err := c.ListSksClustersWithResponse(apiv2.WithZone(ctx, zone)) + if err != nil { + return nil, err + } + + if resp.JSON200.SksClusters != nil { + for i := range *resp.JSON200.SksClusters { + cluster := sksClusterFromAPI(&(*resp.JSON200.SksClusters)[i]) + cluster.c = c + cluster.zone = zone + + list = append(list, cluster) + } + } + + return list, nil +} + +// ListSKSClusterVersions returns the list of Kubernetes versions supported during SKS cluster creation. +func (c *Client) ListSKSClusterVersions(ctx context.Context) ([]string, error) { + list := make([]string, 0) + + resp, err := c.ListSksClusterVersionsWithResponse(ctx) + if err != nil { + return nil, err + } + + if resp.JSON200.SksClusterVersions != nil { + for i := range *resp.JSON200.SksClusterVersions { + version := &(*resp.JSON200.SksClusterVersions)[i] + list = append(list, *version) + } + } + + return list, nil +} + +// GetSKSCluster returns the SKS cluster corresponding to the specified ID in the specified zone. +func (c *Client) GetSKSCluster(ctx context.Context, zone, id string) (*SKSCluster, error) { + resp, err := c.GetSksClusterWithResponse(apiv2.WithZone(ctx, zone), id) + if err != nil { + return nil, err + } + + cluster := sksClusterFromAPI(resp.JSON200) + cluster.c = c + cluster.zone = zone + + return cluster, nil +} + +// UpdateSKSCluster updates the specified SKS cluster in the specified zone. +func (c *Client) UpdateSKSCluster(ctx context.Context, zone string, cluster *SKSCluster) error { + resp, err := c.UpdateSksClusterWithResponse( + apiv2.WithZone(ctx, zone), + cluster.ID, + papi.UpdateSksClusterJSONRequestBody{ + Name: &cluster.Name, + Description: &cluster.Description, + }) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.timeout). + Poll(ctx, c.OperationPoller(zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// UpgradeSKSCluster upgrades the SKS cluster corresponding to the specified ID in the specified zone to the +// requested Kubernetes version. +func (c *Client) UpgradeSKSCluster(ctx context.Context, zone, id, version string) error { + resp, err := c.UpgradeSksClusterWithResponse( + apiv2.WithZone(ctx, zone), + id, + papi.UpgradeSksClusterJSONRequestBody{Version: version}) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.timeout). + Poll(ctx, c.OperationPoller(zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} + +// DeleteSKSCluster deletes the specified SKS cluster in the specified zone. +func (c *Client) DeleteSKSCluster(ctx context.Context, zone, id string) error { + resp, err := c.DeleteSksClusterWithResponse(apiv2.WithZone(ctx, zone), id) + if err != nil { + return err + } + + _, err = papi.NewPoller(). + WithTimeout(c.timeout). + Poll(ctx, c.OperationPoller(zone, *resp.JSON200.Id)) + if err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/exoscale/egoscale/v2/test.go b/vendor/github.com/exoscale/egoscale/v2/test.go new file mode 100644 index 000000000..543f0ec3e --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/test.go @@ -0,0 +1,3 @@ +package v2 + +var testZone = "ch-gva-2" diff --git a/vendor/github.com/exoscale/egoscale/v2/v2.go b/vendor/github.com/exoscale/egoscale/v2/v2.go new file mode 100644 index 000000000..0472584bf --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/v2.go @@ -0,0 +1,3 @@ +// Package v2 is the new Exoscale client API binding. +// Reference: https://openapi-v2.exoscale.com/ +package v2 diff --git a/vendor/github.com/exoscale/egoscale/v2/zone.go b/vendor/github.com/exoscale/egoscale/v2/zone.go new file mode 100644 index 000000000..2c5ed70f6 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/v2/zone.go @@ -0,0 +1,24 @@ +package v2 + +import ( + "context" +) + +// ListZones returns the list of Exoscale zones. +func (c *Client) ListZones(ctx context.Context) ([]string, error) { + list := make([]string, 0) + + resp, err := c.ListZonesWithResponse(ctx) + if err != nil { + return nil, err + } + + if resp.JSON200.Zones != nil { + for i := range *resp.JSON200.Zones { + zone := &(*resp.JSON200.Zones)[i] + list = append(list, *zone.Name) + } + } + + return list, nil +} diff --git a/vendor/github.com/exoscale/egoscale/version.go b/vendor/github.com/exoscale/egoscale/version.go new file mode 100644 index 000000000..4bb4e923e --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/version.go @@ -0,0 +1,4 @@ +package egoscale + +// Version of the library +const Version = "0.43.1" diff --git a/vendor/github.com/exoscale/egoscale/virtual_machines.go b/vendor/github.com/exoscale/egoscale/virtual_machines.go new file mode 100644 index 000000000..baf95adde --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/virtual_machines.go @@ -0,0 +1,632 @@ +package egoscale + +import ( + "bytes" + "compress/gzip" + "context" + "encoding/base64" + "fmt" + "io/ioutil" + "net" + "net/url" +) + +// VirtualMachineState holds the state of the instance +// +// https://github.com/apache/cloudstack/blob/master/api/src/main/java/com/cloud/vm/VirtualMachine.java +type VirtualMachineState string + +const ( + // VirtualMachineStarting VM is being started. At this state, you should find host id filled which means it's being started on that host + VirtualMachineStarting VirtualMachineState = "Starting" + // VirtualMachineRunning VM is running. host id has the host that it is running on + VirtualMachineRunning VirtualMachineState = "Running" + // VirtualMachineStopping VM is being stopped. host id has the host that it is being stopped on + VirtualMachineStopping VirtualMachineState = "Stopping" + // VirtualMachineStopped VM is stopped. host id should be null + VirtualMachineStopped VirtualMachineState = "Stopped" + // VirtualMachineDestroyed VM is marked for destroy + VirtualMachineDestroyed VirtualMachineState = "Destroyed" + // VirtualMachineExpunging "VM is being expunged + VirtualMachineExpunging VirtualMachineState = "Expunging" + // VirtualMachineMigrating VM is being live migrated. host id holds destination host, last host id holds source host + VirtualMachineMigrating VirtualMachineState = "Migrating" + // VirtualMachineMoving VM is being migrated offline (volume is being moved). + VirtualMachineMoving VirtualMachineState = "Moving" + // VirtualMachineError VM is in error + VirtualMachineError VirtualMachineState = "Error" + // VirtualMachineUnknown VM state is unknown + VirtualMachineUnknown VirtualMachineState = "Unknown" + // VirtualMachineShutdowned VM is shutdowned from inside + VirtualMachineShutdowned VirtualMachineState = "Shutdowned" +) + +// VirtualMachine represents a virtual machine +// +// See: http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/stable/virtual_machines.html +type VirtualMachine struct { + Account string `json:"account,omitempty" doc:"the account associated with the virtual machine"` + AccountID *UUID `json:"accountid,omitempty" doc:"the account ID associated with the virtual machine"` + AffinityGroup []AffinityGroup `json:"affinitygroup,omitempty" doc:"list of affinity groups associated with the virtual machine"` + ClusterID *UUID `json:"clusterid,omitempty" doc:"the ID of the vm's cluster"` + ClusterName string `json:"clustername,omitempty" doc:"the name of the vm's cluster"` + CPUNumber int `json:"cpunumber,omitempty" doc:"the number of cpu this virtual machine is running with"` + CPUSpeed int `json:"cpuspeed,omitempty" doc:"the speed of each cpu"` + CPUUsed string `json:"cpuused,omitempty" doc:"the amount of the vm's CPU currently used"` + Created string `json:"created,omitempty" doc:"the date when this virtual machine was created"` + Details map[string]string `json:"details,omitempty" doc:"Vm details in key/value pairs."` + DiskIoRead int64 `json:"diskioread,omitempty" doc:"the read (io) of disk on the vm"` + DiskIoWrite int64 `json:"diskiowrite,omitempty" doc:"the write (io) of disk on the vm"` + DiskKbsRead int64 `json:"diskkbsread,omitempty" doc:"the read (bytes) of disk on the vm"` + DiskKbsWrite int64 `json:"diskkbswrite,omitempty" doc:"the write (bytes) of disk on the vm"` + DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"the ID of the disk offering of the virtual machine"` + DiskOfferingName string `json:"diskofferingname,omitempty" doc:"the name of the disk offering of the virtual machine"` + DisplayName string `json:"displayname,omitempty" doc:"user generated name. The name of the virtual machine is returned if no displayname exists."` + ForVirtualNetwork bool `json:"forvirtualnetwork,omitempty" doc:"the virtual network for the service offering"` + Group string `json:"group,omitempty" doc:"the group name of the virtual machine"` + GroupID *UUID `json:"groupid,omitempty" doc:"the group ID of the virtual machine"` + HAEnable bool `json:"haenable,omitempty" doc:"true if high-availability is enabled, false otherwise"` + HostName string `json:"hostname,omitempty" doc:"the name of the host for the virtual machine"` + ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` + InstanceName string `json:"instancename,omitempty" doc:"instance name of the user vm; this parameter is returned to the ROOT admin only"` + IsoDisplayText string `json:"isodisplaytext,omitempty" doc:"an alternate display text of the ISO attached to the virtual machine"` + IsoID *UUID `json:"isoid,omitempty" doc:"the ID of the ISO attached to the virtual machine"` + IsoName string `json:"isoname,omitempty" doc:"the name of the ISO attached to the virtual machine"` + KeyPair string `json:"keypair,omitempty" doc:"ssh key-pair"` + Manager string `json:"manager,omitempty" doc:"type of virtual machine manager"` + ManagerID *UUID `json:"managerid,omitempty" doc:"ID of the virtual machine manager"` + Memory int `json:"memory,omitempty" doc:"the memory allocated for the virtual machine"` + Name string `json:"name,omitempty" doc:"the name of the virtual machine"` + NetworkKbsRead int64 `json:"networkkbsread,omitempty" doc:"the incoming network traffic on the vm"` + NetworkKbsWrite int64 `json:"networkkbswrite,omitempty" doc:"the outgoing network traffic on the host"` + Nic []Nic `json:"nic,omitempty" doc:"the list of nics associated with vm"` + OSCategoryID *UUID `json:"oscategoryid,omitempty" doc:"Os category ID of the virtual machine"` + OSCategoryName string `json:"oscategoryname,omitempty" doc:"Os category name of the virtual machine"` + OSTypeID *UUID `json:"ostypeid,omitempty" doc:"OS type id of the vm"` + Password string `json:"password,omitempty" doc:"the password (if exists) of the virtual machine"` + PasswordEnabled bool `json:"passwordenabled,omitempty" doc:"true if the password rest feature is enabled, false otherwise"` + PCIDevices []PCIDevice `json:"pcidevices,omitempty" doc:"list of PCI devices"` + PodID *UUID `json:"podid,omitempty" doc:"the ID of the vm's pod"` + PodName string `json:"podname,omitempty" doc:"the name of the vm's pod"` + PublicIP string `json:"publicip,omitempty" doc:"public IP address id associated with vm via Static nat rule"` + PublicIPID *UUID `json:"publicipid,omitempty" doc:"public IP address id associated with vm via Static nat rule"` + RootDeviceID int64 `json:"rootdeviceid,omitempty" doc:"device ID of the root volume"` + RootDeviceType string `json:"rootdevicetype,omitempty" doc:"device type of the root volume"` + SecurityGroup []SecurityGroup `json:"securitygroup,omitempty" doc:"list of security groups associated with the virtual machine"` + ServiceOfferingID *UUID `json:"serviceofferingid,omitempty" doc:"the ID of the service offering of the virtual machine"` + ServiceOfferingName string `json:"serviceofferingname,omitempty" doc:"the name of the service offering of the virtual machine"` + ServiceState string `json:"servicestate,omitempty" doc:"State of the Service from LB rule"` + State string `json:"state,omitempty" doc:"the state of the virtual machine"` + Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with vm"` + TemplateDisplayText string `json:"templatedisplaytext,omitempty" doc:"an alternate display text of the template for the virtual machine"` + TemplateID *UUID `json:"templateid,omitempty" doc:"the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file."` + TemplateName string `json:"templatename,omitempty" doc:"the name of the template for the virtual machine"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the availablility zone for the virtual machine"` + ZoneName string `json:"zonename,omitempty" doc:"the name of the availability zone for the virtual machine"` +} + +// ResourceType returns the type of the resource +func (VirtualMachine) ResourceType() string { + return "UserVM" +} + +// Delete destroys the VM +func (vm VirtualMachine) Delete(ctx context.Context, client *Client) error { + _, err := client.RequestWithContext(ctx, &DestroyVirtualMachine{ + ID: vm.ID, + }) + + return err +} + +// ListRequest builds the ListVirtualMachines request +func (vm VirtualMachine) ListRequest() (ListCommand, error) { + // XXX: AffinityGroupID, SecurityGroupID + + req := &ListVirtualMachines{ + GroupID: vm.GroupID, + ID: vm.ID, + ManagerID: vm.ManagerID, + Name: vm.Name, + State: vm.State, + TemplateID: vm.TemplateID, + ZoneID: vm.ZoneID, + } + + nic := vm.DefaultNic() + if nic != nil { + req.IPAddress = nic.IPAddress + } + + for i := range vm.Tags { + req.Tags = append(req.Tags, vm.Tags[i]) + } + + return req, nil +} + +// DefaultNic returns the default nic +func (vm VirtualMachine) DefaultNic() *Nic { + for i, nic := range vm.Nic { + if nic.IsDefault { + return &vm.Nic[i] + } + } + + return nil +} + +// IP returns the default nic IP address +func (vm VirtualMachine) IP() *net.IP { + nic := vm.DefaultNic() + if nic != nil { + ip := nic.IPAddress + return &ip + } + + return nil +} + +// NicsByType returns the corresponding interfaces base on the given type +func (vm VirtualMachine) NicsByType(nicType string) []Nic { + nics := make([]Nic, 0) + for _, nic := range vm.Nic { + if nic.Type == nicType { + // XXX The API forgets to specify it + n := nic + n.VirtualMachineID = vm.ID + nics = append(nics, n) + } + } + return nics +} + +// NicByNetworkID returns the corresponding interface based on the given NetworkID +// +// A VM cannot be connected twice to a same network. +func (vm VirtualMachine) NicByNetworkID(networkID UUID) *Nic { + for _, nic := range vm.Nic { + if nic.NetworkID.Equal(networkID) { + n := nic + n.VirtualMachineID = vm.ID + return &n + } + } + return nil +} + +// NicByID returns the corresponding interface base on its ID +func (vm VirtualMachine) NicByID(nicID UUID) *Nic { + for _, nic := range vm.Nic { + if nic.ID.Equal(nicID) { + n := nic + n.VirtualMachineID = vm.ID + return &n + } + } + + return nil +} + +// IPToNetwork represents a mapping between ip and networks +type IPToNetwork struct { + IP net.IP `json:"ip,omitempty"` + Ipv6 net.IP `json:"ipv6,omitempty"` + NetworkID *UUID `json:"networkid,omitempty"` +} + +// PCIDevice represents a PCI card present in the host +type PCIDevice struct { + PCIVendorName string `json:"pcivendorname,omitempty" doc:"Device vendor name of pci card"` + DeviceID string `json:"deviceid,omitempty" doc:"Device model ID of pci card"` + RemainingCapacity int `json:"remainingcapacity,omitempty" doc:"Remaining capacity in terms of no. of more VMs that can be deployped with this vGPU type"` + MaxCapacity int `json:"maxcapacity,omitempty" doc:"Maximum vgpu can be created with this vgpu type on the given pci group"` + PCIVendorID string `json:"pcivendorid,omitempty" doc:"Device vendor ID of pci card"` + PCIDeviceName string `json:"pcidevicename,omitempty" doc:"Device model name of pci card"` +} + +// Password represents an encrypted password +type Password struct { + EncryptedPassword string `json:"encryptedpassword"` +} + +// VirtualMachineUserData represents the base64 encoded user-data +type VirtualMachineUserData struct { + UserData string `json:"userdata" doc:"Base 64 encoded VM user data"` + VirtualMachineID *UUID `json:"virtualmachineid" doc:"the ID of the virtual machine"` +} + +// Decode decodes as a readable string the content of the user-data (base64 · gzip) +func (userdata VirtualMachineUserData) Decode() (string, error) { + data, err := base64.StdEncoding.DecodeString(userdata.UserData) + if err != nil { + return "", err + } + // 0x1f8b is the magic number for gzip + if len(data) < 2 || data[0] != 0x1f || data[1] != 0x8b { + return string(data), nil + } + gr, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return "", err + } + defer gr.Close() // nolint: errcheck + + str, err := ioutil.ReadAll(gr) + if err != nil { + return "", err + } + return string(str), nil +} + +// DeployVirtualMachine (Async) represents the machine creation +// +// Regarding the UserData field, the client is responsible to base64 (and probably gzip) it. Doing it within this library would make the integration with other tools, e.g. Terraform harder. +type DeployVirtualMachine struct { + AffinityGroupIDs []UUID `json:"affinitygroupids,omitempty" doc:"comma separated list of affinity groups id that are going to be applied to the virtual machine. Mutually exclusive with affinitygroupnames parameter"` + AffinityGroupNames []string `json:"affinitygroupnames,omitempty" doc:"comma separated list of affinity groups names that are going to be applied to the virtual machine.Mutually exclusive with affinitygroupids parameter"` + Details map[string]string `json:"details,omitempty" doc:"used to specify the custom parameters."` + DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskofferingid is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateid parameter passed is from a Template object, the diskofferingid refers to a DATA Disk Volume created. If the templateid parameter passed is from an ISO object, the diskofferingid refers to a ROOT Disk Volume created."` + DisplayName string `json:"displayname,omitempty" doc:"an optional user generated name for the virtual machine"` + Group string `json:"group,omitempty" doc:"an optional group for the virtual machine"` + IP4 *bool `json:"ip4,omitempty" doc:"True to set an IPv4 to the default interface"` + IP6 *bool `json:"ip6,omitempty" doc:"True to set an IPv6 to the default interface"` + IP6Address net.IP `json:"ip6address,omitempty" doc:"the ipv6 address for default vm's network"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"the ip address for default vm's network"` + Keyboard string `json:"keyboard,omitempty" doc:"an optional keyboard device type for the virtual machine. valid value can be one of de,de-ch,es,fi,fr,fr-be,fr-ch,is,it,jp,nl-be,no,pt,uk,us"` + KeyPair string `json:"keypair,omitempty" doc:"name of the ssh key pair used to login to the virtual machine"` + Name string `json:"name,omitempty" doc:"host name for the virtual machine"` + NetworkIDs []UUID `json:"networkids,omitempty" doc:"list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter"` + RootDiskSize int64 `json:"rootdisksize,omitempty" doc:"Optional field to resize root disk on deploy. Value is in GB. Only applies to template-based deployments. Analogous to details[0].rootdisksize, which takes precedence over this parameter if both are provided"` + SecurityGroupIDs []UUID `json:"securitygroupids,omitempty" doc:"comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter"` + SecurityGroupNames []string `json:"securitygroupnames,omitempty" doc:"comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter"` + ServiceOfferingID *UUID `json:"serviceofferingid" doc:"the ID of the service offering for the virtual machine"` + Size int64 `json:"size,omitempty" doc:"the arbitrary size for the DATADISK volume. Mutually exclusive with diskofferingid"` + StartVM *bool `json:"startvm,omitempty" doc:"true if start vm after creating. Default value is true"` + TemplateID *UUID `json:"templateid" doc:"the ID of the template for the virtual machine"` + UserData string `json:"userdata,omitempty" doc:"an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding. Using HTTP POST(via POST body), you can send up to 32K of data after base64 encoding."` + ZoneID *UUID `json:"zoneid" doc:"availability zone for the virtual machine"` + _ bool `name:"deployVirtualMachine" description:"Creates and automatically starts a virtual machine based on a service offering, disk offering, and template."` +} + +func (req DeployVirtualMachine) onBeforeSend(_ url.Values) error { + // Either AffinityGroupIDs or AffinityGroupNames must be set + if len(req.AffinityGroupIDs) > 0 && len(req.AffinityGroupNames) > 0 { + return fmt.Errorf("either AffinityGroupIDs or AffinityGroupNames must be set") + } + + // Either SecurityGroupIDs or SecurityGroupNames must be set + if len(req.SecurityGroupIDs) > 0 && len(req.SecurityGroupNames) > 0 { + return fmt.Errorf("either SecurityGroupIDs or SecurityGroupNames must be set") + } + + return nil +} + +// Response returns the struct to unmarshal +func (DeployVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DeployVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// StartVirtualMachine (Async) represents the creation of the virtual machine +type StartVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + RescueProfile string `json:"rescueprofile,omitempty" doc:"An optional rescue profile to use when booting"` + _ bool `name:"startVirtualMachine" description:"Starts a virtual machine."` +} + +// Response returns the struct to unmarshal +func (StartVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (StartVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// StopVirtualMachine (Async) represents the stopping of the virtual machine +type StopVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + Forced *bool `json:"forced,omitempty" doc:"Force stop the VM (vm is marked as Stopped even when command fails to be send to the backend). The caller knows the VM is stopped."` + _ bool `name:"stopVirtualMachine" description:"Stops a virtual machine."` +} + +// Response returns the struct to unmarshal +func (StopVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (StopVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// RebootVirtualMachine (Async) represents the rebooting of the virtual machine +type RebootVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + _ bool `name:"rebootVirtualMachine" description:"Reboots a virtual machine."` +} + +// Response returns the struct to unmarshal +func (RebootVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RebootVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// RestoreVirtualMachine (Async) represents the restoration of the virtual machine +type RestoreVirtualMachine struct { + VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` + TemplateID *UUID `json:"templateid,omitempty" doc:"an optional template Id to restore vm from the new template. This can be an ISO id in case of restore vm deployed using ISO"` + RootDiskSize int64 `json:"rootdisksize,omitempty" doc:"Optional field to resize root disk on restore. Value is in GB. Only applies to template-based deployments."` + _ bool `name:"restoreVirtualMachine" description:"Restore a VM to original template/ISO or new template/ISO"` +} + +// Response returns the struct to unmarshal +func (RestoreVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RestoreVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// RecoverVirtualMachine represents the restoration of the virtual machine +type RecoverVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + _ bool `name:"recoverVirtualMachine" description:"Recovers a virtual machine."` +} + +// Response returns the struct to unmarshal +func (RecoverVirtualMachine) Response() interface{} { + return new(VirtualMachine) +} + +// DestroyVirtualMachine (Async) represents the destruction of the virtual machine +type DestroyVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + _ bool `name:"destroyVirtualMachine" description:"Destroys a virtual machine."` +} + +// Response returns the struct to unmarshal +func (DestroyVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (DestroyVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// UpdateVirtualMachine represents the update of the virtual machine +type UpdateVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + Details map[string]string `json:"details,omitempty" doc:"Details in key/value pairs."` + DisplayName string `json:"displayname,omitempty" doc:"user generated name"` + Group string `json:"group,omitempty" doc:"group of the virtual machine"` + Name string `json:"name,omitempty" doc:"new host name of the vm. The VM has to be stopped/started for this update to take affect"` + SecurityGroupIDs []UUID `json:"securitygroupids,omitempty" doc:"list of security group ids to be applied on the virtual machine."` + UserData string `json:"userdata,omitempty" doc:"an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding. Using HTTP POST(via POST body), you can send up to 32K of data after base64 encoding."` + _ bool `name:"updateVirtualMachine" description:"Updates properties of a virtual machine. The VM has to be stopped and restarted for the new properties to take effect. UpdateVirtualMachine does not first check whether the VM is stopped. Therefore, stop the VM manually before issuing this call."` +} + +// Response returns the struct to unmarshal +func (UpdateVirtualMachine) Response() interface{} { + return new(VirtualMachine) +} + +// UpdateVirtualMachineSecurityGroups represents the update of the virtual machine security group membership +type UpdateVirtualMachineSecurityGroups struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + SecurityGroupIDs []UUID `json:"securitygroupids,omitempty" doc:"list of security group ids to be applied on the virtual machine."` + _ bool `name:"updateVirtualMachineSecurityGroups" description:"Updates a virtual machine Security Group membership'."` +} + +// Response returns the struct to unmarshal +func (UpdateVirtualMachineSecurityGroups) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (UpdateVirtualMachineSecurityGroups) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// ExpungeVirtualMachine represents the annihilation of a VM +type ExpungeVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + _ bool `name:"expungeVirtualMachine" description:"Expunge a virtual machine. Once expunged, it cannot be recoverd."` +} + +// Response returns the struct to unmarshal +func (ExpungeVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (ExpungeVirtualMachine) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// ScaleVirtualMachine (Async) scales the virtual machine to a new service offering. +// +// ChangeServiceForVirtualMachine does the same thing but returns the +// new Virtual Machine which is more consistent with the rest of the API. +type ScaleVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + ServiceOfferingID *UUID `json:"serviceofferingid" doc:"the ID of the service offering for the virtual machine"` + Details map[string]string `json:"details,omitempty" doc:"name value pairs of custom parameters for cpu,memory and cpunumber. example details[i].name=value"` + _ bool `name:"scaleVirtualMachine" description:"Scales the virtual machine to a new service offering."` +} + +// Response returns the struct to unmarshal +func (ScaleVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (ScaleVirtualMachine) AsyncResponse() interface{} { + return new(BooleanResponse) +} + +// ChangeServiceForVirtualMachine changes the service offering for a virtual machine. The virtual machine must be in a "Stopped" state for this command to take effect. +type ChangeServiceForVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + ServiceOfferingID *UUID `json:"serviceofferingid" doc:"the service offering ID to apply to the virtual machine"` + Details map[string]string `json:"details,omitempty" doc:"name value pairs of custom parameters for cpu, memory and cpunumber. example details[i].name=value"` + _ bool `name:"changeServiceForVirtualMachine" description:"Changes the service offering for a virtual machine. The virtual machine must be in a \"Stopped\" state for this command to take effect."` +} + +// Response returns the struct to unmarshal +func (ChangeServiceForVirtualMachine) Response() interface{} { + return new(VirtualMachine) +} + +// ResetPasswordForVirtualMachine resets the password for virtual machine. The virtual machine must be in a "Stopped" state... +type ResetPasswordForVirtualMachine struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + _ bool `name:"resetPasswordForVirtualMachine" description:"Resets the password for virtual machine. The virtual machine must be in a \"Stopped\" state and the template must already support this feature for this command to take effect."` +} + +// Response returns the struct to unmarshal +func (ResetPasswordForVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (ResetPasswordForVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// GetVMPassword asks for an encrypted password +type GetVMPassword struct { + ID *UUID `json:"id" doc:"The ID of the virtual machine"` + _ bool `name:"getVMPassword" description:"Returns an encrypted password for the VM"` +} + +// Response returns the struct to unmarshal +func (GetVMPassword) Response() interface{} { + return new(Password) +} + +//go:generate go run generate/main.go -interface=Listable ListVirtualMachines + +// ListVirtualMachines represents a search for a VM +type ListVirtualMachines struct { + AffinityGroupID *UUID `json:"affinitygroupid,omitempty" doc:"list vms by affinity group"` + Details []string `json:"details,omitempty" doc:"comma separated list of host details requested, value can be a list of [all, group, nics, stats, secgrp, tmpl, servoff, diskoff, iso, volume, min, affgrp]. If no parameter is passed in, the details will be defaulted to all"` + ForVirtualNetwork *bool `json:"forvirtualnetwork,omitempty" doc:"list by network type; true if need to list vms using Virtual Network, false otherwise"` + GroupID *UUID `json:"groupid,omitempty" doc:"the group ID"` + ID *UUID `json:"id,omitempty" doc:"the ID of the virtual machine"` + IDs []UUID `json:"ids,omitempty" doc:"the IDs of the virtual machines, mutually exclusive with id"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"an IP address to filter the result"` + IsoID *UUID `json:"isoid,omitempty" doc:"list vms by iso"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + ManagerID *UUID `json:"managerid,omitempty" doc:"list by manager id"` + Name string `json:"name,omitempty" doc:"name of the virtual machine"` + NetworkID *UUID `json:"networkid,omitempty" doc:"list by network id"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + ServiceOfferindID *UUID `json:"serviceofferingid,omitempty" doc:"list by the service offering"` + State string `json:"state,omitempty" doc:"state of the virtual machine"` + Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs). Note: multiple tags are OR'ed, not AND'ed."` + TemplateID *UUID `json:"templateid,omitempty" doc:"list vms by template"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"the availability zone ID"` + _ bool `name:"listVirtualMachines" description:"List the virtual machines owned by the account."` +} + +// ListVirtualMachinesResponse represents a list of virtual machines +type ListVirtualMachinesResponse struct { + Count int `json:"count"` + VirtualMachine []VirtualMachine `json:"virtualmachine"` +} + +// AddNicToVirtualMachine (Async) adds a NIC to a VM +type AddNicToVirtualMachine struct { + NetworkID *UUID `json:"networkid" doc:"Network ID"` + VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"Static IP address lease for the corresponding NIC and network which should be in the range defined in the network"` + _ bool `name:"addNicToVirtualMachine" description:"Adds VM to specified network by creating a NIC"` +} + +// Response returns the struct to unmarshal +func (AddNicToVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (AddNicToVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// RemoveNicFromVirtualMachine (Async) removes a NIC from a VM +type RemoveNicFromVirtualMachine struct { + NicID *UUID `json:"nicid" doc:"NIC ID"` + VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` + _ bool `name:"removeNicFromVirtualMachine" description:"Removes VM from specified network by deleting a NIC"` +} + +// Response returns the struct to unmarshal +func (RemoveNicFromVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (RemoveNicFromVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// UpdateDefaultNicForVirtualMachine (Async) adds a NIC to a VM +type UpdateDefaultNicForVirtualMachine struct { + NicID *UUID `json:"nicid" doc:"NIC ID"` + VirtualMachineID *UUID `json:"virtualmachineid" doc:"Virtual Machine ID"` + _ bool `name:"updateDefaultNicForVirtualMachine" description:"Changes the default NIC on a VM"` +} + +// Response returns the struct to unmarshal +func (UpdateDefaultNicForVirtualMachine) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (UpdateDefaultNicForVirtualMachine) AsyncResponse() interface{} { + return new(VirtualMachine) +} + +// GetVirtualMachineUserData returns the user-data of the given VM +type GetVirtualMachineUserData struct { + VirtualMachineID *UUID `json:"virtualmachineid" doc:"The ID of the virtual machine"` + _ bool `name:"getVirtualMachineUserData" description:"Returns user data associated with the VM"` +} + +// Response returns the struct to unmarshal +func (GetVirtualMachineUserData) Response() interface{} { + return new(VirtualMachineUserData) +} + +// UpdateVMNicIP updates the default IP address of a VM Nic +type UpdateVMNicIP struct { + _ bool `name:"updateVmNicIp" description:"Update the default Ip of a VM Nic"` + IPAddress net.IP `json:"ipaddress,omitempty" doc:"Static IP address lease for the corresponding NIC and network which should be in the range defined in the network. If absent, the call removes the lease associated with the nic."` + NicID *UUID `json:"nicid" doc:"the ID of the nic."` +} + +// Response returns the struct to unmarshal +func (UpdateVMNicIP) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (UpdateVMNicIP) AsyncResponse() interface{} { + return new(VirtualMachine) +} diff --git a/vendor/github.com/exoscale/egoscale/virtualmachines_response.go b/vendor/github.com/exoscale/egoscale/virtualmachines_response.go new file mode 100644 index 000000000..9aafb01a3 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/virtualmachines_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListVirtualMachines) Response() interface{} { + return new(ListVirtualMachinesResponse) +} + +// ListRequest returns itself +func (ls *ListVirtualMachines) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListVirtualMachines) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListVirtualMachines) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListVirtualMachines) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListVirtualMachinesResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListVirtualMachinesResponse was expected, got %T", resp)) + return + } + + for i := range items.VirtualMachine { + if !callback(&items.VirtualMachine[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/volumes.go b/vendor/github.com/exoscale/egoscale/volumes.go new file mode 100644 index 000000000..877127f01 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/volumes.go @@ -0,0 +1,114 @@ +package egoscale + +// Volume represents a volume linked to a VM +type Volume struct { + Account string `json:"account,omitempty" doc:"the account associated with the disk volume"` + Attached string `json:"attached,omitempty" doc:"the date the volume was attached to a VM instance"` + ChainInfo string `json:"chaininfo,omitempty" doc:"the chain info of the volume"` + ClusterID *UUID `json:"clusterid,omitempty" doc:"ID of the cluster"` + ClusterName string `json:"clustername,omitempty" doc:"name of the cluster"` + Created string `json:"created,omitempty" doc:"the date the disk volume was created"` + Destroyed bool `json:"destroyed,omitempty" doc:"the boolean state of whether the volume is destroyed or not"` + DeviceID int64 `json:"deviceid,omitempty" doc:"the ID of the device on user vm the volume is attahed to. This tag is not returned when the volume is detached."` + DiskBytesReadRate int64 `json:"diskBytesReadRate,omitempty" doc:"bytes read rate of the disk volume"` + DiskBytesWriteRate int64 `json:"diskBytesWriteRate,omitempty" doc:"bytes write rate of the disk volume"` + DiskIopsReadRate int64 `json:"diskIopsReadRate,omitempty" doc:"io requests read rate of the disk volume"` + DiskIopsWriteRate int64 `json:"diskIopsWriteRate,omitempty" doc:"io requests write rate of the disk volume"` + DiskOfferingDisplayText string `json:"diskofferingdisplaytext,omitempty" doc:"the display text of the disk offering"` + DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"ID of the disk offering"` + DiskOfferingName string `json:"diskofferingname,omitempty" doc:"name of the disk offering"` + DisplayVolume bool `json:"displayvolume,omitempty" doc:"an optional field whether to the display the volume to the end user or not."` + Hypervisor string `json:"hypervisor,omitempty" doc:"Hypervisor the volume belongs to"` + ID *UUID `json:"id,omitempty" doc:"ID of the disk volume"` + IsExtractable *bool `json:"isextractable,omitempty" doc:"true if the volume is extractable, false otherwise"` + IsoDisplayText string `json:"isodisplaytext,omitempty" doc:"an alternate display text of the ISO attached to the virtual machine"` + IsoID *UUID `json:"isoid,omitempty" doc:"the ID of the ISO attached to the virtual machine"` + IsoName string `json:"isoname,omitempty" doc:"the name of the ISO attached to the virtual machine"` + MaxIops int64 `json:"maxiops,omitempty" doc:"max iops of the disk volume"` + MinIops int64 `json:"miniops,omitempty" doc:"min iops of the disk volume"` + Name string `json:"name,omitempty" doc:"name of the disk volume"` + Path string `json:"path,omitempty" doc:"the path of the volume"` + PodID *UUID `json:"podid,omitempty" doc:"ID of the pod"` + PodName string `json:"podname,omitempty" doc:"name of the pod"` + QuiesceVM bool `json:"quiescevm,omitempty" doc:"need quiesce vm or not when taking snapshot"` + ServiceOfferingDisplayText string `json:"serviceofferingdisplaytext,omitempty" doc:"the display text of the service offering for root disk"` + ServiceOfferingID *UUID `json:"serviceofferingid,omitempty" doc:"ID of the service offering for root disk"` + ServiceOfferingName string `json:"serviceofferingname,omitempty" doc:"name of the service offering for root disk"` + Size uint64 `json:"size,omitempty" doc:"size of the disk volume"` + SnapshotID *UUID `json:"snapshotid,omitempty" doc:"ID of the snapshot from which this volume was created"` + State string `json:"state,omitempty" doc:"the state of the disk volume"` + Status string `json:"status,omitempty" doc:"the status of the volume"` + Storage string `json:"storage,omitempty" doc:"name of the primary storage hosting the disk volume"` + StorageID *UUID `json:"storageid,omitempty" doc:"id of the primary storage hosting the disk volume; returned to admin user only"` + StorageType string `json:"storagetype,omitempty" doc:"shared or local storage"` + Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with volume"` + TemplateDisplayText string `json:"templatedisplaytext,omitempty" doc:"an alternate display text of the template for the virtual machine"` + TemplateID *UUID `json:"templateid,omitempty" doc:"the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file."` // no *UUID because of the -1 thingy... + TemplateName string `json:"templatename,omitempty" doc:"the name of the template for the virtual machine"` + Type string `json:"type,omitempty" doc:"type of the disk volume (ROOT or DATADISK)"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"id of the virtual machine"` + VMDisplayName string `json:"vmdisplayname,omitempty" doc:"display name of the virtual machine"` + VMName string `json:"vmname,omitempty" doc:"name of the virtual machine"` + VMState string `json:"vmstate,omitempty" doc:"state of the virtual machine"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"ID of the availability zone"` + ZoneName string `json:"zonename,omitempty" doc:"name of the availability zone"` +} + +// ResourceType returns the type of the resource +func (Volume) ResourceType() string { + return "Volume" +} + +// ListRequest builds the ListVolumes request +func (vol Volume) ListRequest() (ListCommand, error) { + req := &ListVolumes{ + ID: vol.ID, + Name: vol.Name, + Type: vol.Type, + VirtualMachineID: vol.VirtualMachineID, + ZoneID: vol.ZoneID, + } + + return req, nil +} + +// ResizeVolume (Async) resizes a volume +type ResizeVolume struct { + ID *UUID `json:"id" doc:"the ID of the disk volume"` + DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"new disk offering id"` + Size int64 `json:"size,omitempty" doc:"New volume size in G (must be larger than current size since shrinking the disk is not supported)"` + _ bool `name:"resizeVolume" description:"Resizes a volume"` +} + +// Response returns the struct to unmarshal +func (ResizeVolume) Response() interface{} { + return new(AsyncJobResult) +} + +// AsyncResponse returns the struct to unmarshal the async job +func (ResizeVolume) AsyncResponse() interface{} { + return new(Volume) +} + +//go:generate go run generate/main.go -interface=Listable ListVolumes + +// ListVolumes represents a query listing volumes +type ListVolumes struct { + DiskOfferingID *UUID `json:"diskofferingid,omitempty" doc:"List volumes by disk offering"` + ID *UUID `json:"id,omitempty" doc:"The ID of the disk volume"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"The name of the disk volume"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs). Note: multiple tags are OR'ed, not AND'ed."` + Type string `json:"type,omitempty" doc:"The type of disk volume"` + VirtualMachineID *UUID `json:"virtualmachineid,omitempty" doc:"The ID of the virtual machine"` + ZoneID *UUID `json:"zoneid,omitempty" doc:"The ID of the availability zone"` + _ bool `name:"listVolumes" description:"Lists all volumes."` +} + +// ListVolumesResponse represents a list of volumes +type ListVolumesResponse struct { + Count int `json:"count"` + Volume []Volume `json:"volume"` +} diff --git a/vendor/github.com/exoscale/egoscale/volumes_response.go b/vendor/github.com/exoscale/egoscale/volumes_response.go new file mode 100644 index 000000000..c7486bc1e --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/volumes_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListVolumes) Response() interface{} { + return new(ListVolumesResponse) +} + +// ListRequest returns itself +func (ls *ListVolumes) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListVolumes) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListVolumes) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListVolumes) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListVolumesResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListVolumesResponse was expected, got %T", resp)) + return + } + + for i := range items.Volume { + if !callback(&items.Volume[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/egoscale/zones.go b/vendor/github.com/exoscale/egoscale/zones.go new file mode 100644 index 000000000..d021e44a4 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/zones.go @@ -0,0 +1,60 @@ +package egoscale + +import ( + "net" +) + +// Zone represents a data center +type Zone struct { + AllocationState string `json:"allocationstate,omitempty" doc:"the allocation state of the cluster"` + Description string `json:"description,omitempty" doc:"Zone description"` + DhcpProvider string `json:"dhcpprovider,omitempty" doc:"the dhcp Provider for the Zone"` + DisplayText string `json:"displaytext,omitempty" doc:"the display text of the zone"` + DNS1 net.IP `json:"dns1,omitempty" doc:"the first DNS for the Zone"` + DNS2 net.IP `json:"dns2,omitempty" doc:"the second DNS for the Zone"` + GuestCIDRAddress *CIDR `json:"guestcidraddress,omitempty" doc:"the guest CIDR address for the Zone"` + ID *UUID `json:"id,omitempty" doc:"Zone id"` + InternalDNS1 net.IP `json:"internaldns1,omitempty" doc:"the first internal DNS for the Zone"` + InternalDNS2 net.IP `json:"internaldns2,omitempty" doc:"the second internal DNS for the Zone"` + IP6DNS1 net.IP `json:"ip6dns1,omitempty" doc:"the first IPv6 DNS for the Zone"` + IP6DNS2 net.IP `json:"ip6dns2,omitempty" doc:"the second IPv6 DNS for the Zone"` + LocalStorageEnabled *bool `json:"localstorageenabled,omitempty" doc:"true if local storage offering enabled, false otherwise"` + Name string `json:"name,omitempty" doc:"Zone name"` + NetworkType string `json:"networktype,omitempty" doc:"the network type of the zone; can be Basic or Advanced"` + ResourceDetails map[string]string `json:"resourcedetails,omitempty" doc:"Meta data associated with the zone (key/value pairs)"` + SecurityGroupsEnabled *bool `json:"securitygroupsenabled,omitempty" doc:"true if security groups support is enabled, false otherwise"` + Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with zone."` + Vlan string `json:"vlan,omitempty" doc:"the vlan range of the zone"` + ZoneToken string `json:"zonetoken,omitempty" doc:"Zone Token"` +} + +// ListRequest builds the ListZones request +func (zone Zone) ListRequest() (ListCommand, error) { + req := &ListZones{ + ID: zone.ID, + Name: zone.Name, + } + + return req, nil +} + +//go:generate go run generate/main.go -interface=Listable ListZones + +// ListZones represents a query for zones +type ListZones struct { + Available *bool `json:"available,omitempty" doc:"true if you want to retrieve all available Zones. False if you only want to return the Zones from which you have at least one VM. Default is false."` + ID *UUID `json:"id,omitempty" doc:"the ID of the zone"` + Keyword string `json:"keyword,omitempty" doc:"List by keyword"` + Name string `json:"name,omitempty" doc:"the name of the zone"` + Page int `json:"page,omitempty"` + PageSize int `json:"pagesize,omitempty"` + ShowCapacities *bool `json:"showcapacities,omitempty" doc:"flag to display the capacity of the zones"` + Tags []ResourceTag `json:"tags,omitempty" doc:"List zones by resource tags (key/value pairs)"` + _ bool `name:"listZones" description:"Lists zones"` +} + +// ListZonesResponse represents a list of zones +type ListZonesResponse struct { + Count int `json:"count"` + Zone []Zone `json:"zone"` +} diff --git a/vendor/github.com/exoscale/egoscale/zones_response.go b/vendor/github.com/exoscale/egoscale/zones_response.go new file mode 100644 index 000000000..0fe7d06d7 --- /dev/null +++ b/vendor/github.com/exoscale/egoscale/zones_response.go @@ -0,0 +1,43 @@ +// code generated; DO NOT EDIT. + +package egoscale + +import "fmt" + +// Response returns the struct to unmarshal +func (ListZones) Response() interface{} { + return new(ListZonesResponse) +} + +// ListRequest returns itself +func (ls *ListZones) ListRequest() (ListCommand, error) { + if ls == nil { + return nil, fmt.Errorf("%T cannot be nil", ls) + } + return ls, nil +} + +// SetPage sets the current apge +func (ls *ListZones) SetPage(page int) { + ls.Page = page +} + +// SetPageSize sets the page size +func (ls *ListZones) SetPageSize(pageSize int) { + ls.PageSize = pageSize +} + +// Each triggers the callback for each, valid answer or any non 404 issue +func (ListZones) Each(resp interface{}, callback IterateItemFunc) { + items, ok := resp.(*ListZonesResponse) + if !ok { + callback(nil, fmt.Errorf("wrong type, ListZonesResponse was expected, got %T", resp)) + return + } + + for i := range items.Zone { + if !callback(&items.Zone[i], nil) { + break + } + } +} diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/LICENSE b/vendor/github.com/exoscale/packer-plugin-exoscale/LICENSE new file mode 100644 index 000000000..a612ad981 --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/artifact.go b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/artifact.go new file mode 100644 index 000000000..3878fc660 --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/artifact.go @@ -0,0 +1,47 @@ +package exoscaleimport + +import ( + "context" + "fmt" + + "github.com/exoscale/egoscale" +) + +const BuilderId = "packer.post-processor.exoscale-import" + +type Artifact struct { + template egoscale.Template + exo *egoscale.Client +} + +func (a *Artifact) BuilderId() string { + return BuilderId +} + +func (a *Artifact) Id() string { + return a.template.ID.String() +} + +func (a *Artifact) Files() []string { + return nil +} + +func (a *Artifact) String() string { + return fmt.Sprintf("%s @ %s (%s)", + a.template.Name, + a.template.ZoneName, + a.template.ID.String()) +} + +func (a *Artifact) State(name string) interface{} { + return nil +} + +func (a *Artifact) Destroy() error { + _, err := a.exo.RequestWithContext(context.Background(), &egoscale.DeleteTemplate{ID: a.template.ID}) + if err != nil { + return fmt.Errorf("unable to delete template: %s", err) + } + + return nil +} diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.go b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.go new file mode 100644 index 000000000..cc655080f --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.go @@ -0,0 +1,93 @@ +//go:generate mapstructure-to-hcl2 -type Config + +package exoscaleimport + +import ( + "fmt" + + "github.com/hashicorp/hcl/v2/hcldec" + "github.com/hashicorp/packer-plugin-sdk/common" + "github.com/hashicorp/packer-plugin-sdk/packer" + pkrconfig "github.com/hashicorp/packer-plugin-sdk/template/config" + "github.com/hashicorp/packer-plugin-sdk/template/interpolate" +) + +const ( + defaultAPIEndpoint = "https://api.exoscale.com/v1" + defaultTemplateBootMode = "legacy" +) + +type Config struct { + SOSEndpoint string `mapstructure:"sos_endpoint"` + APIEndpoint string `mapstructure:"api_endpoint"` + APIKey string `mapstructure:"api_key"` + APISecret string `mapstructure:"api_secret"` + ImageBucket string `mapstructure:"image_bucket"` + TemplateZone string `mapstructure:"template_zone"` + TemplateName string `mapstructure:"template_name"` + TemplateDescription string `mapstructure:"template_description"` + TemplateUsername string `mapstructure:"template_username"` + TemplateBootMode string `mapstructure:"template_boot_mode"` + TemplateDisablePassword bool `mapstructure:"template_disable_password"` + TemplateDisableSSHKey bool `mapstructure:"template_disable_sshkey"` + SkipClean bool `mapstructure:"skip_clean"` + + ctx interpolate.Context + + common.PackerConfig `mapstructure:",squash"` +} + +func NewConfig(raws ...interface{}) (*Config, error) { + var config Config + + err := pkrconfig.Decode(&config, &pkrconfig.DecodeOpts{ + PluginType: BuilderId, + Interpolate: true, + InterpolateContext: &config.ctx, + InterpolateFilter: &interpolate.RenderFilter{ + Exclude: []string{}, + }, + }, raws...) + if err != nil { + return nil, err + } + + requiredArgs := map[string]*string{ + "api_key": &config.APIKey, + "api_secret": &config.APISecret, + "image_bucket": &config.ImageBucket, + "template_zone": &config.TemplateZone, + "template_name": &config.TemplateName, + } + + errs := new(packer.MultiError) + for k, v := range requiredArgs { + if *v == "" { + errs = packer.MultiErrorAppend( + errs, fmt.Errorf("%s must be set", k)) + } + } + + if len(errs.Errors) > 0 { + return nil, errs + } + + if config.APIEndpoint == "" { + config.APIEndpoint = defaultAPIEndpoint + } + + if config.TemplateBootMode == "" { + config.TemplateBootMode = defaultTemplateBootMode + } + + if config.SOSEndpoint == "" { + config.SOSEndpoint = "https://sos-" + config.TemplateZone + ".exo.io" + } + + return &config, nil +} + +// ConfigSpec returns HCL object spec +func (p *PostProcessor) ConfigSpec() hcldec.ObjectSpec { + return p.config.FlatMapstructure().HCL2Spec() +} diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.hcl2spec.go b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.hcl2spec.go new file mode 100644 index 000000000..f2d872833 --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/config.hcl2spec.go @@ -0,0 +1,70 @@ +// Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT. +package exoscaleimport + +import ( + "github.com/hashicorp/hcl/v2/hcldec" + "github.com/zclconf/go-cty/cty" +) + +// FlatConfig is an auto-generated flat version of Config. +// Where the contents of a field with a `mapstructure:,squash` tag are bubbled up. +type FlatConfig struct { + PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name"` + PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type"` + PackerCoreVersion *string `mapstructure:"packer_core_version" cty:"packer_core_version"` + PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug"` + PackerForce *bool `mapstructure:"packer_force" cty:"packer_force"` + PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error"` + PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables"` + PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables"` + SkipClean *bool `mapstructure:"skip_clean" cty:"skip_clean"` + SOSEndpoint *string `mapstructure:"sos_endpoint" cty:"sos_endpoint"` + APIEndpoint *string `mapstructure:"api_endpoint" cty:"api_endpoint"` + APIKey *string `mapstructure:"api_key" cty:"api_key"` + APISecret *string `mapstructure:"api_secret" cty:"api_secret"` + ImageBucket *string `mapstructure:"image_bucket" cty:"image_bucket"` + TemplateZone *string `mapstructure:"template_zone" cty:"template_zone"` + TemplateName *string `mapstructure:"template_name" cty:"template_name"` + TemplateDescription *string `mapstructure:"template_description" cty:"template_description"` + TemplateUsername *string `mapstructure:"template_username" cty:"template_username"` + TemplateBootMode *string `mapstructure:"template_boot_mode" cty:"template_boot_mode"` + TemplateDisablePassword *bool `mapstructure:"template_disable_password" cty:"template_disable_password"` + TemplateDisableSSHKey *bool `mapstructure:"template_disable_sshkey" cty:"template_disable_sshkey"` +} + +// FlatMapstructure returns a new FlatConfig. +// FlatConfig is an auto-generated flat version of Config. +// Where the contents a fields with a `mapstructure:,squash` tag are bubbled up. +func (*Config) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec } { + return new(FlatConfig) +} + +// HCL2Spec returns the hcl spec of a Config. +// This spec is used by HCL to read the fields of Config. +// The decoded values from this spec will then be applied to a FlatConfig. +func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec { + s := map[string]hcldec.Spec{ + "packer_build_name": &hcldec.AttrSpec{Name: "packer_build_name", Type: cty.String, Required: false}, + "packer_builder_type": &hcldec.AttrSpec{Name: "packer_builder_type", Type: cty.String, Required: false}, + "packer_core_version": &hcldec.AttrSpec{Name: "packer_core_version", Type: cty.String, Required: false}, + "packer_debug": &hcldec.AttrSpec{Name: "packer_debug", Type: cty.Bool, Required: false}, + "packer_force": &hcldec.AttrSpec{Name: "packer_force", Type: cty.Bool, Required: false}, + "packer_on_error": &hcldec.AttrSpec{Name: "packer_on_error", Type: cty.String, Required: false}, + "packer_user_variables": &hcldec.AttrSpec{Name: "packer_user_variables", Type: cty.Map(cty.String), Required: false}, + "packer_sensitive_variables": &hcldec.AttrSpec{Name: "packer_sensitive_variables", Type: cty.List(cty.String), Required: false}, + "skip_clean": &hcldec.AttrSpec{Name: "skip_clean", Type: cty.Bool, Required: false}, + "sos_endpoint": &hcldec.AttrSpec{Name: "sos_endpoint", Type: cty.String, Required: false}, + "api_endpoint": &hcldec.AttrSpec{Name: "api_endpoint", Type: cty.String, Required: false}, + "api_key": &hcldec.AttrSpec{Name: "api_key", Type: cty.String, Required: false}, + "api_secret": &hcldec.AttrSpec{Name: "api_secret", Type: cty.String, Required: false}, + "image_bucket": &hcldec.AttrSpec{Name: "image_bucket", Type: cty.String, Required: false}, + "template_zone": &hcldec.AttrSpec{Name: "template_zone", Type: cty.String, Required: false}, + "template_name": &hcldec.AttrSpec{Name: "template_name", Type: cty.String, Required: false}, + "template_description": &hcldec.AttrSpec{Name: "template_description", Type: cty.String, Required: false}, + "template_username": &hcldec.AttrSpec{Name: "template_username", Type: cty.String, Required: false}, + "template_boot_mode": &hcldec.AttrSpec{Name: "template_boot_mode", Type: cty.String, Required: false}, + "template_disable_password": &hcldec.AttrSpec{Name: "template_disable_password", Type: cty.Bool, Required: false}, + "template_disable_sshkey": &hcldec.AttrSpec{Name: "template_disable_sshkey", Type: cty.Bool, Required: false}, + } + return s +} diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/post-processor.go b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/post-processor.go new file mode 100644 index 000000000..5c3678559 --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/post-processor.go @@ -0,0 +1,92 @@ +package exoscaleimport + +import ( + "context" + "errors" + "fmt" + + "github.com/exoscale/egoscale" + "github.com/hashicorp/packer-plugin-sdk/multistep" + "github.com/hashicorp/packer-plugin-sdk/multistep/commonsteps" + "github.com/hashicorp/packer-plugin-sdk/packer" + "github.com/hashicorp/packer-plugin-sdk/version" +) + +const ( + qemuBuilderID = "transcend.qemu" + fileBuilderID = "packer.file" + artificeBuilderID = "packer.post-processor.artifice" +) + +func init() { + egoscale.UserAgent = fmt.Sprintf("Exoscale-Packer-Post-Processor/%s %s", + version.SDKVersion.FormattedVersion(), egoscale.UserAgent) +} + +type PostProcessor struct { + config *Config + runner multistep.Runner + exo *egoscale.Client +} + +func (p *PostProcessor) Configure(raws ...interface{}) error { + config, err := NewConfig(raws...) + if err != nil { + return err + } + p.config = config + + packer.LogSecretFilter.Set(p.config.APIKey, p.config.APISecret) + + return nil +} + +func (p *PostProcessor) PostProcess(ctx context.Context, ui packer.Ui, a packer.Artifact) (packer.Artifact, bool, bool, error) { + switch a.BuilderId() { + case qemuBuilderID, fileBuilderID, artificeBuilderID: + break + default: + err := fmt.Errorf("unsupported artifact type %q: this post-processor only imports "+ + "artifacts from QEMU/file builders and Artifice post-processor", a.BuilderId()) + return nil, false, false, err + } + + p.exo = egoscale.NewClient(p.config.APIEndpoint, p.config.APIKey, p.config.APISecret) + + state := new(multistep.BasicStateBag) + state.Put("config", p.config) + state.Put("exo", p.exo) + state.Put("ui", ui) + state.Put("artifact", a) + + steps := []multistep.Step{ + new(stepUploadImage), + new(stepRegisterTemplate), + new(stepDeleteImage), + } + + p.runner = commonsteps.NewRunnerWithPauseFn(steps, p.config.PackerConfig, ui, state) + p.runner.Run(ctx, state) + + if rawErr, ok := state.GetOk("error"); ok { + return nil, false, false, rawErr.(error) + } + + if _, ok := state.GetOk(multistep.StateCancelled); ok { + return nil, false, false, errors.New("post-processing cancelled") + } + + if _, ok := state.GetOk(multistep.StateHalted); ok { + return nil, false, false, errors.New("post-processing halted") + } + + v, ok := state.GetOk("template") + if !ok { + return nil, false, false, errors.New("unable to find template in state") + } + + return &Artifact{ + template: v.(egoscale.Template), + exo: p.exo, + }, false, false, nil +} diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_delete_image.go b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_delete_image.go new file mode 100644 index 000000000..e75f6fad9 --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_delete_image.go @@ -0,0 +1,55 @@ +package exoscaleimport + +import ( + "context" + "fmt" + "path/filepath" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/hashicorp/packer-plugin-sdk/multistep" + "github.com/hashicorp/packer-plugin-sdk/packer" +) + +type stepDeleteImage struct{} + +func (s *stepDeleteImage) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { + var ( + ui = state.Get("ui").(packer.Ui) + config = state.Get("config").(*Config) + artifact = state.Get("artifact").(packer.Artifact) + + imageFile = artifact.Files()[0] + bucketFile = filepath.Base(imageFile) + ) + + if config.SkipClean { + return multistep.ActionContinue + } + + ui.Say("Deleting uploaded template image") + + sess, err := session.NewSessionWithOptions(session.Options{Config: aws.Config{ + Region: aws.String(config.TemplateZone), + Endpoint: aws.String(config.SOSEndpoint), + Credentials: credentials.NewStaticCredentials(config.APIKey, config.APISecret, "")}}) + if err != nil { + ui.Error(fmt.Sprintf("unable to initialize session: %v", err)) + return multistep.ActionHalt + } + + svc := s3.New(sess) + if _, err := svc.DeleteObject(&s3.DeleteObjectInput{ + Bucket: aws.String(config.ImageBucket), + Key: aws.String(bucketFile), + }); err != nil { + ui.Error(fmt.Sprintf("unable to delete template image: %v", err)) + return multistep.ActionHalt + } + + return multistep.ActionContinue +} + +func (s *stepDeleteImage) Cleanup(state multistep.StateBag) {} diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_register_template.go b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_register_template.go new file mode 100644 index 000000000..c73b65405 --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_register_template.go @@ -0,0 +1,62 @@ +package exoscaleimport + +import ( + "context" + "fmt" + + "github.com/exoscale/egoscale" + "github.com/hashicorp/packer-plugin-sdk/multistep" + "github.com/hashicorp/packer-plugin-sdk/packer" +) + +type stepRegisterTemplate struct{} + +func (s *stepRegisterTemplate) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { + var ( + exo = state.Get("exo").(*egoscale.Client) + ui = state.Get("ui").(packer.Ui) + config = state.Get("config").(*Config) + imageURL = state.Get("image_url").(string) + imageChecksum = state.Get("image_checksum").(string) + + passwordEnabled = !config.TemplateDisablePassword + sshkeyEnabled = !config.TemplateDisableSSHKey + ) + + ui.Say("Registering Compute instance template") + + resp, err := exo.GetWithContext(ctx, &egoscale.ListZones{Name: config.TemplateZone}) + if err != nil { + ui.Error(fmt.Sprintf("unable to list zones: %s", err)) + return multistep.ActionHalt + } + zone := resp.(*egoscale.Zone) + + resp, err = exo.RequestWithContext(ctx, &egoscale.RegisterCustomTemplate{ + Name: config.TemplateName, + Displaytext: config.TemplateDescription, + BootMode: config.TemplateBootMode, + URL: imageURL, + Checksum: imageChecksum, + PasswordEnabled: &passwordEnabled, + SSHKeyEnabled: &sshkeyEnabled, + Details: func() map[string]string { + if config.TemplateUsername != "" { + return map[string]string{"username": config.TemplateUsername} + } + return nil + }(), + ZoneID: zone.ID, + }) + if err != nil { + ui.Error(fmt.Sprintf("unable to export Compute instance snapshot: %s", err)) + return multistep.ActionHalt + } + templates := resp.(*[]egoscale.Template) + + state.Put("template", (*templates)[0]) + + return multistep.ActionContinue +} + +func (s *stepRegisterTemplate) Cleanup(state multistep.StateBag) {} diff --git a/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_upload_image.go b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_upload_image.go new file mode 100644 index 000000000..e88de4bf0 --- /dev/null +++ b/vendor/github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import/step_upload_image.go @@ -0,0 +1,89 @@ +package exoscaleimport + +import ( + "context" + "crypto/md5" + "encoding/base64" + "fmt" + "io" + "os" + "path/filepath" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + "github.com/hashicorp/packer-plugin-sdk/multistep" + "github.com/hashicorp/packer-plugin-sdk/packer" +) + +type stepUploadImage struct{} + +func (s *stepUploadImage) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { + var ( + ui = state.Get("ui").(packer.Ui) + config = state.Get("config").(*Config) + artifact = state.Get("artifact").(packer.Artifact) + + imageFile = artifact.Files()[0] + bucketFile = filepath.Base(imageFile) + ) + + ui.Say("Uploading template image") + + f, err := os.Open(imageFile) + if err != nil { + ui.Error(fmt.Sprint(err)) + return multistep.ActionHalt + } + defer f.Close() + + fileInfo, err := f.Stat() + if err != nil { + ui.Error(fmt.Sprint(err)) + return multistep.ActionHalt + } + + // For tracking image file upload progress + pf := ui.TrackProgress(imageFile, 0, fileInfo.Size(), f) + defer pf.Close() + + hash := md5.New() + if _, err := io.Copy(hash, f); err != nil { + ui.Error(fmt.Sprintf("unable to compute template file checksum: %v", err)) + return multistep.ActionHalt + } + if _, err := f.Seek(0, 0); err != nil { + ui.Error(fmt.Sprintf("unable to compute template file checksum: %v", err)) + return multistep.ActionHalt + } + + sess, err := session.NewSessionWithOptions(session.Options{Config: aws.Config{ + Region: aws.String(config.TemplateZone), + Endpoint: aws.String(config.SOSEndpoint), + Credentials: credentials.NewStaticCredentials(config.APIKey, config.APISecret, "")}}) + if err != nil { + ui.Error(fmt.Sprintf("unable to initialize session: %v", err)) + return multistep.ActionHalt + } + + uploader := s3manager.NewUploader(sess) + output, err := uploader.UploadWithContext(ctx, &s3manager.UploadInput{ + Body: pf, + Bucket: aws.String(config.ImageBucket), + Key: aws.String(bucketFile), + ContentMD5: aws.String(base64.StdEncoding.EncodeToString(hash.Sum(nil))), + ACL: aws.String("public-read"), + }) + if err != nil { + ui.Error(fmt.Sprintf("unable to upload template image: %v", err)) + return multistep.ActionHalt + } + + state.Put("image_url", output.Location) + state.Put("image_checksum", fmt.Sprintf("%x", hash.Sum(nil))) + + return multistep.ActionContinue +} + +func (s *stepUploadImage) Cleanup(state multistep.StateBag) {} diff --git a/vendor/github.com/gofrs/uuid/.travis.yml b/vendor/github.com/gofrs/uuid/.travis.yml index ee1e4fa00..0783aaa9c 100644 --- a/vendor/github.com/gofrs/uuid/.travis.yml +++ b/vendor/github.com/gofrs/uuid/.travis.yml @@ -6,13 +6,12 @@ go: - 1.9.x - 1.10.x - 1.11.x + - 1.12.x - tip matrix: allow_failures: - go: tip fast_finish: true -env: - - GO111MODULE=on before_install: - go get golang.org/x/tools/cmd/cover script: diff --git a/vendor/github.com/gofrs/uuid/README.md b/vendor/github.com/gofrs/uuid/README.md index efc3204fc..2685a832e 100644 --- a/vendor/github.com/gofrs/uuid/README.md +++ b/vendor/github.com/gofrs/uuid/README.md @@ -12,7 +12,6 @@ and parsing of UUIDs in different formats. This package supports the following UUID versions: * Version 1, based on timestamp and MAC address (RFC-4122) -* Version 2, based on timestamp, MAC address and POSIX UID/GID (DCE 1.1) * Version 3, based on MD5 hashing of a named value (RFC-4122) * Version 4, based on random numbers (RFC-4122) * Version 5, based on SHA-1 hashing of a named value (RFC-4122) diff --git a/vendor/github.com/gofrs/uuid/codec.go b/vendor/github.com/gofrs/uuid/codec.go index e3d8cfb4d..e3014c68c 100644 --- a/vendor/github.com/gofrs/uuid/codec.go +++ b/vendor/github.com/gofrs/uuid/codec.go @@ -114,7 +114,7 @@ func (u *UUID) UnmarshalText(text []byte) error { case 41, 45: return u.decodeURN(text) default: - return fmt.Errorf("uuid: incorrect UUID length: %s", text) + return fmt.Errorf("uuid: incorrect UUID length %d in string %q", len(text), text) } } @@ -122,7 +122,7 @@ func (u *UUID) UnmarshalText(text []byte) error { // "6ba7b810-9dad-11d1-80b4-00c04fd430c8". func (u *UUID) decodeCanonical(t []byte) error { if t[8] != '-' || t[13] != '-' || t[18] != '-' || t[23] != '-' { - return fmt.Errorf("uuid: incorrect UUID format %s", t) + return fmt.Errorf("uuid: incorrect UUID format in string %q", t) } src := t @@ -160,7 +160,7 @@ func (u *UUID) decodeBraced(t []byte) error { l := len(t) if t[0] != '{' || t[l-1] != '}' { - return fmt.Errorf("uuid: incorrect UUID format %s", t) + return fmt.Errorf("uuid: incorrect UUID format in string %q", t) } return u.decodePlain(t[1 : l-1]) @@ -175,7 +175,7 @@ func (u *UUID) decodeURN(t []byte) error { urnUUIDPrefix := t[:9] if !bytes.Equal(urnUUIDPrefix, urnPrefix) { - return fmt.Errorf("uuid: incorrect UUID format: %s", t) + return fmt.Errorf("uuid: incorrect UUID format in string %q", t) } return u.decodePlain(t[9:total]) @@ -191,7 +191,7 @@ func (u *UUID) decodePlain(t []byte) error { case 36: return u.decodeCanonical(t) default: - return fmt.Errorf("uuid: incorrect UUID length: %s", t) + return fmt.Errorf("uuid: incorrect UUID length %d in string %q", len(t), t) } } diff --git a/vendor/github.com/gofrs/uuid/generator.go b/vendor/github.com/gofrs/uuid/generator.go index 4257761f1..2783d9e77 100644 --- a/vendor/github.com/gofrs/uuid/generator.go +++ b/vendor/github.com/gofrs/uuid/generator.go @@ -30,7 +30,6 @@ import ( "hash" "io" "net" - "os" "sync" "time" ) @@ -47,21 +46,11 @@ type HWAddrFunc func() (net.HardwareAddr, error) // DefaultGenerator is the default UUID Generator used by this package. var DefaultGenerator Generator = NewGen() -var ( - posixUID = uint32(os.Getuid()) - posixGID = uint32(os.Getgid()) -) - // NewV1 returns a UUID based on the current timestamp and MAC address. func NewV1() (UUID, error) { return DefaultGenerator.NewV1() } -// NewV2 returns a DCE Security UUID based on the POSIX UID/GID. -func NewV2(domain byte) (UUID, error) { - return DefaultGenerator.NewV2(domain) -} - // NewV3 returns a UUID based on the MD5 hash of the namespace UUID and name. func NewV3(ns UUID, name string) UUID { return DefaultGenerator.NewV3(ns, name) @@ -80,7 +69,6 @@ func NewV5(ns UUID, name string) UUID { // Generator provides an interface for generating UUIDs. type Generator interface { NewV1() (UUID, error) - NewV2(domain byte) (UUID, error) NewV3(ns UUID, name string) UUID NewV4() (UUID, error) NewV5(ns UUID, name string) UUID @@ -164,28 +152,6 @@ func (g *Gen) NewV1() (UUID, error) { return u, nil } -// NewV2 returns a DCE Security UUID based on the POSIX UID/GID. -func (g *Gen) NewV2(domain byte) (UUID, error) { - u, err := g.NewV1() - if err != nil { - return Nil, err - } - - switch domain { - case DomainPerson: - binary.BigEndian.PutUint32(u[:], posixUID) - case DomainGroup: - binary.BigEndian.PutUint32(u[:], posixGID) - } - - u[9] = domain - - u.SetVersion(V2) - u.SetVariant(VariantRFC4122) - - return u, nil -} - // NewV3 returns a UUID based on the MD5 hash of the namespace UUID and name. func (g *Gen) NewV3(ns UUID, name string) UUID { u := newFromHash(md5.New(), ns, name) @@ -216,7 +182,7 @@ func (g *Gen) NewV5(ns UUID, name string) UUID { return u } -// Returns the epoch and clock sequence. +// getClockSequence returns the epoch and clock sequence. func (g *Gen) getClockSequence() (uint64, uint16, error) { var err error g.clockSequenceOnce.Do(func() { diff --git a/vendor/github.com/gofrs/uuid/uuid.go b/vendor/github.com/gofrs/uuid/uuid.go index 29ef44059..78aed6e25 100644 --- a/vendor/github.com/gofrs/uuid/uuid.go +++ b/vendor/github.com/gofrs/uuid/uuid.go @@ -19,11 +19,19 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// Package uuid provides implementations of the Universally Unique Identifier (UUID), as specified in RFC-4122 and DCE 1.1. +// Package uuid provides implementations of the Universally Unique Identifier +// (UUID), as specified in RFC-4122, // // RFC-4122[1] provides the specification for versions 1, 3, 4, and 5. // -// DCE 1.1[2] provides the specification for version 2. +// DCE 1.1[2] provides the specification for version 2, but version 2 support +// was removed from this package in v4 due to some concerns with the +// specification itself. Reading the spec, it seems that it would result in +// generating UUIDs that aren't very unique. In having read the spec it seemed +// that our implementation did not meet the spec. It also seems to be at-odds +// with RFC 4122, meaning we would need quite a bit of special code to support +// it. Lastly, there were no Version 2 implementations that we could find to +// ensure we were understanding the specification correctly. // // [1] https://tools.ietf.org/html/rfc4122 // [2] http://pubs.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01 @@ -33,6 +41,8 @@ import ( "encoding/binary" "encoding/hex" "fmt" + "io" + "strings" "time" ) @@ -46,7 +56,7 @@ type UUID [Size]byte const ( _ byte = iota V1 // Version 1 (date-time and MAC address) - V2 // Version 2 (date-time and MAC address, DCE security version) + _ // Version 2 (date-time and MAC address, DCE security version) [removed] V3 // Version 3 (namespace name-based) V4 // Version 4 (random) V5 // Version 5 (namespace name-based) @@ -68,8 +78,8 @@ const ( ) // Timestamp is the count of 100-nanosecond intervals since 00:00:00.00, -// 15 October 1582 within a V1 UUID. This type has no meaning for V2-V5 -// UUIDs since they don't have an embedded timestamp. +// 15 October 1582 within a V1 UUID. This type has no meaning for other +// UUID versions since they don't have an embedded timestamp. type Timestamp uint64 const _100nsPerSecond = 10000000 @@ -156,6 +166,65 @@ func (u UUID) String() string { return string(buf) } +// Format implements fmt.Formatter for UUID values. +// +// The behavior is as follows: +// The 'x' and 'X' verbs output only the hex digits of the UUID, using a-f for 'x' and A-F for 'X'. +// The 'v', '+v', 's' and 'q' verbs return the canonical RFC-4122 string representation. +// The 'S' verb returns the RFC-4122 format, but with capital hex digits. +// The '#v' verb returns the "Go syntax" representation, which is a 16 byte array initializer. +// All other verbs not handled directly by the fmt package (like '%p') are unsupported and will return +// "%!verb(uuid.UUID=value)" as recommended by the fmt package. +func (u UUID) Format(f fmt.State, c rune) { + switch c { + case 'x', 'X': + s := hex.EncodeToString(u.Bytes()) + if c == 'X' { + s = strings.Map(toCapitalHexDigits, s) + } + _, _ = io.WriteString(f, s) + case 'v': + var s string + if f.Flag('#') { + s = fmt.Sprintf("%#v", [Size]byte(u)) + } else { + s = u.String() + } + _, _ = io.WriteString(f, s) + case 's', 'S': + s := u.String() + if c == 'S' { + s = strings.Map(toCapitalHexDigits, s) + } + _, _ = io.WriteString(f, s) + case 'q': + _, _ = io.WriteString(f, `"`+u.String()+`"`) + default: + // invalid/unsupported format verb + fmt.Fprintf(f, "%%!%c(uuid.UUID=%s)", c, u.String()) + } +} + +func toCapitalHexDigits(ch rune) rune { + // convert a-f hex digits to A-F + switch ch { + case 'a': + return 'A' + case 'b': + return 'B' + case 'c': + return 'C' + case 'd': + return 'D' + case 'e': + return 'E' + case 'f': + return 'F' + default: + return ch + } +} + // SetVersion sets the version bits. func (u *UUID) SetVersion(v byte) { u[6] = (u[6] & 0x0f) | (v << 4) diff --git a/vendor/github.com/jarcoal/httpmock/.gitignore b/vendor/github.com/jarcoal/httpmock/.gitignore new file mode 100644 index 000000000..00268614f --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/.gitignore @@ -0,0 +1,22 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe diff --git a/vendor/github.com/jarcoal/httpmock/LICENSE b/vendor/github.com/jarcoal/httpmock/LICENSE new file mode 100644 index 000000000..438fbf545 --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Jared Morse + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights 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 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. diff --git a/vendor/github.com/jarcoal/httpmock/README.md b/vendor/github.com/jarcoal/httpmock/README.md new file mode 100644 index 000000000..e5fe0b6a1 --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/README.md @@ -0,0 +1,252 @@ +# httpmock [![Build Status](https://github.com/jarcoal/httpmock/workflows/Build/badge.svg?branch=v1)](https://github.com/jarcoal/httpmock/actions?query=workflow%3ABuild) [![Coverage Status](https://coveralls.io/repos/github/jarcoal/httpmock/badge.svg?branch=v1)](https://coveralls.io/github/jarcoal/httpmock?branch=v1) [![GoDoc](https://godoc.org/github.com/jarcoal/httpmock?status.svg)](https://godoc.org/github.com/jarcoal/httpmock) [![Version](https://img.shields.io/github/tag/jarcoal/httpmock.svg)](https://github.com/jarcoal/httpmock/releases) [![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go/#testing) + +Easy mocking of http responses from external resources. + +## Install + +Currently supports Go 1.7 - 1.15. + +`v1` branch has to be used instead of `master`. + + +### Using go modules (aka. `go mod`) + +In your go files, simply use: +```go +import "github.com/jarcoal/httpmock" +``` + +Then next `go mod tidy` or `go test` invocation will automatically +populate your `go.mod` with the last httpmock release, now +[![Version](https://img.shields.io/github/tag/jarcoal/httpmock.svg)](https://github.com/jarcoal/httpmock/releases). + +Note you can use `go mod vendor` to vendor your dependencies. + + +### Using `$GOPATH` + +`v1` branch is configured as the default branch in github, so: +``` +go get github.com/jarcoal/httpmock +``` + +automatically downloads the `v1` branch in `$GOPATH/src`. Then in your +go files use: +```go +import "github.com/jarcoal/httpmock" +``` + + +### Vendoring, using [`govendor`](https://github.com/kardianos/govendor) for example + +When vendoring is used, `v1` branch has to be specified. Two choices here: + +- preferred way: + ``` + govendor fetch github.com/jarcoal/httpmock@v1 + ``` + then in go files: + ```go + import "github.com/jarcoal/httpmock" + ``` +- old way (before `v1` was set as default branch), use gopkg to read from + `v1` branch: + ``` + govendor fetch gopkg.in/jarcoal/httpmock.v1 + ``` + then in go files: + ```go + import "gopkg.in/jarcoal/httpmock.v1" + ``` + + +## Usage + +### Simple Example: +```go +func TestFetchArticles(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + // Exact URL match + httpmock.RegisterResponder("GET", "https://api.mybiz.com/articles", + httpmock.NewStringResponder(200, `[{"id": 1, "name": "My Great Article"}]`)) + + // Regexp match (could use httpmock.RegisterRegexpResponder instead) + httpmock.RegisterResponder("GET", `=~^https://api\.mybiz\.com/articles/id/\d+\z`, + httpmock.NewStringResponder(200, `{"id": 1, "name": "My Great Article"}`)) + + // do stuff that makes a request to articles + ... + + // get count info + httpmock.GetTotalCallCount() + + // get the amount of calls for the registered responder + info := httpmock.GetCallCountInfo() + info["GET https://api.mybiz.com/articles"] // number of GET calls made to https://api.mybiz.com/articles + info["GET https://api.mybiz.com/articles/id/12"] // number of GET calls made to https://api.mybiz.com/articles/id/12 + info[`GET =~^https://api\.mybiz\.com/articles/id/\d+\z`] // number of GET calls made to https://api.mybiz.com/articles/id/ +} +``` + +### Advanced Example: +```go +func TestFetchArticles(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + // our database of articles + articles := make([]map[string]interface{}, 0) + + // mock to list out the articles + httpmock.RegisterResponder("GET", "https://api.mybiz.com/articles", + func(req *http.Request) (*http.Response, error) { + resp, err := httpmock.NewJsonResponse(200, articles) + if err != nil { + return httpmock.NewStringResponse(500, ""), nil + } + return resp, nil + }, + ) + + // return an article related to the request with the help of regexp submatch (\d+) + httpmock.RegisterResponder("GET", `=~^https://api\.mybiz\.com/articles/id/(\d+)\z`, + func(req *http.Request) (*http.Response, error) { + // Get ID from request + id := httpmock.MustGetSubmatchAsUint(req, 1) // 1=first regexp submatch + return httpmock.NewJsonResponse(200, map[string]interface{}{ + "id": id, + "name": "My Great Article", + }) + }, + ) + + // mock to add a new article + httpmock.RegisterResponder("POST", "https://api.mybiz.com/articles", + func(req *http.Request) (*http.Response, error) { + article := make(map[string]interface{}) + if err := json.NewDecoder(req.Body).Decode(&article); err != nil { + return httpmock.NewStringResponse(400, ""), nil + } + + articles = append(articles, article) + + resp, err := httpmock.NewJsonResponse(200, article) + if err != nil { + return httpmock.NewStringResponse(500, ""), nil + } + return resp, nil + }, + ) + + // do stuff that adds and checks articles +} +``` + +### Algorithm + +When `GET http://example.tld/some/path?b=12&a=foo&a=bar` request is +caught, all standard responders are checked against the following URL +or paths, the first match stops the search: + +1. `http://example.tld/some/path?b=12&a=foo&a=bar` (original URL) +1. `http://example.tld/some/path?a=bar&a=foo&b=12` (sorted query params) +1. `http://example.tld/some/path` (without query params) +1. `/some/path?b=12&a=foo&a=bar` (original URL without scheme and host) +1. `/some/path?a=bar&a=foo&b=12` (same, but sorted query params) +1. `/some/path` (path only) + +If no standard responder matched, the regexp responders are checked, +in the same order, the first match stops the search. + + +### [Ginkgo](https://onsi.github.io/ginkgo/) Example: +```go +// article_suite_test.go + +import ( + // ... + "github.com/jarcoal/httpmock" +) +// ... +var _ = BeforeSuite(func() { + // block all HTTP requests + httpmock.Activate() +}) + +var _ = BeforeEach(func() { + // remove any mocks + httpmock.Reset() +}) + +var _ = AfterSuite(func() { + httpmock.DeactivateAndReset() +}) + + +// article_test.go + +import ( + // ... + "github.com/jarcoal/httpmock" +) + +var _ = Describe("Articles", func() { + It("returns a list of articles", func() { + httpmock.RegisterResponder("GET", "https://api.mybiz.com/articles.json", + httpmock.NewStringResponder(200, `[{"id": 1, "name": "My Great Article"}]`)) + + // do stuff that makes a request to articles.json + }) +}) +``` + +### [Ginkgo](https://onsi.github.io/ginkgo/) + [Resty](https://github.com/go-resty/resty) Example: +```go +// article_suite_test.go + +import ( + // ... + "github.com/jarcoal/httpmock" + "github.com/go-resty/resty" +) +// ... +var _ = BeforeSuite(func() { + // block all HTTP requests + httpmock.ActivateNonDefault(resty.DefaultClient.GetClient()) +}) + +var _ = BeforeEach(func() { + // remove any mocks + httpmock.Reset() +}) + +var _ = AfterSuite(func() { + httpmock.DeactivateAndReset() +}) + + +// article_test.go + +import ( + // ... + "github.com/jarcoal/httpmock" + "github.com/go-resty/resty" +) + +var _ = Describe("Articles", func() { + It("returns a list of articles", func() { + fixture := `{"status":{"message": "Your message", "code": 200}}` + responder := httpmock.NewStringResponder(200, fixture) + fakeUrl := "https://api.mybiz.com/articles.json" + httpmock.RegisterResponder("GET", fakeUrl, responder) + + // fetch the article into struct + articleObject := &models.Article{} + _, err := resty.R().SetResult(articleObject).Get(fakeUrl) + + // do stuff with the article object ... + }) +}) +``` diff --git a/vendor/github.com/jarcoal/httpmock/doc.go b/vendor/github.com/jarcoal/httpmock/doc.go new file mode 100644 index 000000000..b743af020 --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/doc.go @@ -0,0 +1,81 @@ +/* +Package httpmock provides tools for mocking HTTP responses. + +Simple Example: + func TestFetchArticles(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + // Exact URL match + httpmock.RegisterResponder("GET", "https://api.mybiz.com/articles", + httpmock.NewStringResponder(200, `[{"id": 1, "name": "My Great Article"}]`)) + + // Regexp match (could use httpmock.RegisterRegexpResponder instead) + httpmock.RegisterResponder("GET", `=~^https://api\.mybiz\.com/articles/id/\d+\z`, + httpmock.NewStringResponder(200, `{"id": 1, "name": "My Great Article"}`)) + + // do stuff that makes a request to articles + + // get count info + httpmock.GetTotalCallCount() + + // get the amount of calls for the registered responder + info := httpmock.GetCallCountInfo() + info["GET https://api.mybiz.com/articles"] // number of GET calls made to https://api.mybiz.com/articles + info["GET https://api.mybiz.com/articles/id/12"] // number of GET calls made to https://api.mybiz.com/articles/id/12 + info[`GET =~^https://api\.mybiz\.com/articles/id/\d+\z`] // number of GET calls made to https://api.mybiz.com/articles/id/ + } + +Advanced Example: + func TestFetchArticles(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + // our database of articles + articles := make([]map[string]interface{}, 0) + + // mock to list out the articles + httpmock.RegisterResponder("GET", "https://api.mybiz.com/articles", + func(req *http.Request) (*http.Response, error) { + resp, err := httpmock.NewJsonResponse(200, articles) + if err != nil { + return httpmock.NewStringResponse(500, ""), nil + } + return resp, nil + }, + ) + + // return an article related to the request with the help of regexp submatch (\d+) + httpmock.RegisterResponder("GET", `=~^https://api\.mybiz\.com/articles/id/(\d+)\z`, + func(req *http.Request) (*http.Response, error) { + // Get ID from request + id := httpmock.MustGetSubmatchAsUint(req, 1) // 1=first regexp submatch + return httpmock.NewJsonResponse(200, map[string]interface{}{ + "id": id, + "name": "My Great Article", + }) + }, + ) + + // mock to add a new article + httpmock.RegisterResponder("POST", "https://api.mybiz.com/articles", + func(req *http.Request) (*http.Response, error) { + article := make(map[string]interface{}) + if err := json.NewDecoder(req.Body).Decode(&article); err != nil { + return httpmock.NewStringResponse(400, ""), nil + } + + articles = append(articles, article) + + resp, err := httpmock.NewJsonResponse(200, article) + if err != nil { + return httpmock.NewStringResponse(500, ""), nil + } + return resp, nil + }, + ) + + // do stuff that adds and checks articles + } +*/ +package httpmock diff --git a/vendor/github.com/jarcoal/httpmock/env.go b/vendor/github.com/jarcoal/httpmock/env.go new file mode 100644 index 000000000..41224683c --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/env.go @@ -0,0 +1,13 @@ +package httpmock + +import ( + "os" +) + +var envVarName = "GONOMOCKS" + +// Disabled allows to test whether httpmock is enabled or not. It +// depends on GONOMOCKS environment variable. +func Disabled() bool { + return os.Getenv(envVarName) != "" +} diff --git a/vendor/github.com/jarcoal/httpmock/file.go b/vendor/github.com/jarcoal/httpmock/file.go new file mode 100644 index 000000000..a363ed65f --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/file.go @@ -0,0 +1,57 @@ +package httpmock + +import ( + "fmt" + "io/ioutil" +) + +// File is a file name. The contents of this file is loaded on demand +// by the following methods. +// +// Note that: +// file := httpmock.File("file.txt") +// fmt.Printf("file: %s\n", file) +// +// prints the content of file "file.txt" as String() method is used. +// +// To print the file name, and not its content, simply do: +// file := httpmock.File("file.txt") +// fmt.Printf("file: %s\n", string(file)) +type File string + +// MarshalJSON implements json.Marshaler. +// +// Useful to be used in conjunction with NewJsonResponse() or +// NewJsonResponder() as in: +// httpmock.NewJsonResponder(200, httpmock.File("body.json")) +func (f File) MarshalJSON() ([]byte, error) { + return f.bytes() +} + +func (f File) bytes() ([]byte, error) { + return ioutil.ReadFile(string(f)) +} + +// Bytes returns the content of file as a []byte. If an error occurs +// during the opening or reading of the file, it panics. +// +// Useful to be used in conjunction with NewBytesResponse() or +// NewBytesResponder() as in: +// httpmock.NewBytesResponder(200, httpmock.File("body.raw").Bytes()) +func (f File) Bytes() []byte { + b, err := f.bytes() + if err != nil { + panic(fmt.Sprintf("Cannot read %s: %s", string(f), err)) + } + return b +} + +// String returns the content of file as a string. If an error occurs +// during the opening or reading of the file, it panics. +// +// Useful to be used in conjunction with NewStringResponse() or +// NewStringResponder() as in: +// httpmock.NewStringResponder(200, httpmock.File("body.txt").String()) +func (f File) String() string { + return string(f.Bytes()) +} diff --git a/vendor/github.com/jarcoal/httpmock/go.mod b/vendor/github.com/jarcoal/httpmock/go.mod new file mode 100644 index 000000000..de84fc993 --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/go.mod @@ -0,0 +1,3 @@ +module github.com/jarcoal/httpmock + +go 1.7 diff --git a/vendor/github.com/jarcoal/httpmock/internal/route_key.go b/vendor/github.com/jarcoal/httpmock/internal/route_key.go new file mode 100644 index 000000000..dbbad5047 --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/internal/route_key.go @@ -0,0 +1,15 @@ +package internal + +type RouteKey struct { + Method string + URL string +} + +var NoResponder RouteKey + +func (r RouteKey) String() string { + if r == NoResponder { + return "NO_RESPONDER" + } + return r.Method + " " + r.URL +} diff --git a/vendor/github.com/jarcoal/httpmock/internal/stack_tracer.go b/vendor/github.com/jarcoal/httpmock/internal/stack_tracer.go new file mode 100644 index 000000000..c77198340 --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/internal/stack_tracer.go @@ -0,0 +1,85 @@ +package internal + +import ( + "bytes" + "fmt" + "net/http" + "runtime" + "strings" +) + +type StackTracer struct { + CustomFn func(...interface{}) + Err error +} + +func (n StackTracer) Error() string { + if n.Err == nil { + return "" + } + return n.Err.Error() +} + +// CheckStackTracer checks for specific error returned by +// NewNotFoundResponder function or Trace Responder method. +func CheckStackTracer(req *http.Request, err error) error { + if nf, ok := err.(StackTracer); ok { + if nf.CustomFn != nil { + pc := make([]uintptr, 128) + npc := runtime.Callers(2, pc) + pc = pc[:npc] + + var mesg bytes.Buffer + var netHTTPBegin, netHTTPEnd bool + + // Start recording at first net/http call if any... + for { + frames := runtime.CallersFrames(pc) + + var lastFn string + for { + frame, more := frames.Next() + + if !netHTTPEnd { + if netHTTPBegin { + netHTTPEnd = !strings.HasPrefix(frame.Function, "net/http.") + } else { + netHTTPBegin = strings.HasPrefix(frame.Function, "net/http.") + } + } + + if netHTTPEnd { + if lastFn != "" { + if mesg.Len() == 0 { + if nf.Err != nil { + mesg.WriteString(nf.Err.Error()) + } else { + fmt.Fprintf(&mesg, "%s %s", req.Method, req.URL) + } + mesg.WriteString("\nCalled from ") + } else { + mesg.WriteString("\n ") + } + fmt.Fprintf(&mesg, "%s()\n at %s:%d", lastFn, frame.File, frame.Line) + } + } + lastFn = frame.Function + + if !more { + break + } + } + + // At least one net/http frame found + if mesg.Len() > 0 { + break + } + netHTTPEnd = true // retry without looking at net/http frames + } + + nf.CustomFn(mesg.String()) + } + err = nf.Err + } + return err +} diff --git a/vendor/github.com/jarcoal/httpmock/internal/submatches.go b/vendor/github.com/jarcoal/httpmock/internal/submatches.go new file mode 100644 index 000000000..8d071e07a --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/internal/submatches.go @@ -0,0 +1,22 @@ +package internal + +import ( + "context" + "net/http" +) + +type submatchesKeyType struct{} + +var submatchesKey submatchesKeyType + +func SetSubmatches(req *http.Request, submatches []string) *http.Request { + if len(submatches) > 0 { + return req.WithContext(context.WithValue(req.Context(), submatchesKey, submatches)) + } + return req +} + +func GetSubmatches(req *http.Request) []string { + sm, _ := req.Context().Value(submatchesKey).([]string) + return sm +} diff --git a/vendor/github.com/jarcoal/httpmock/response.go b/vendor/github.com/jarcoal/httpmock/response.go new file mode 100644 index 000000000..5d3bc9f7a --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/response.go @@ -0,0 +1,451 @@ +package httpmock + +import ( + "bytes" + "encoding/json" + "encoding/xml" + "fmt" + "io" + "net/http" + "strconv" + "strings" + "sync" + + "github.com/jarcoal/httpmock/internal" +) + +// Responder is a callback that receives an http request and returns +// a mocked response. +type Responder func(*http.Request) (*http.Response, error) + +func (r Responder) times(name string, n int, fn ...func(...interface{})) Responder { + count := 0 + return func(req *http.Request) (*http.Response, error) { + count++ + if count > n { + err := internal.StackTracer{ + Err: fmt.Errorf("Responder not found for %s %s (coz %s and already called %d times)", req.Method, req.URL, name, count), + } + if len(fn) > 0 { + err.CustomFn = fn[0] + } + return nil, err + } + return r(req) + } +} + +// Times returns a Responder callable n times before returning an +// error. If the Responder is called more than n times and fn is +// passed and non-nil, it acts as the fn parameter of +// NewNotFoundResponder, allowing to dump the stack trace to localize +// the origin of the call. +// import ( +// "testing" +// "github.com/jarcoal/httpmock" +// ) +// ... +// func TestMyApp(t *testing.T) { +// ... +// // This responder is callable 3 times, then an error is returned and +// // the stacktrace of the call logged using t.Log() +// httpmock.RegisterResponder("GET", "/foo/bar", +// httpmock.NewStringResponder(200, "{}").Times(3, t.Log), +// ) +func (r Responder) Times(n int, fn ...func(...interface{})) Responder { + return r.times("Times", n, fn...) +} + +// Once returns a new Responder callable once before returning an +// error. If the Responder is called 2 or more times and fn is passed +// and non-nil, it acts as the fn parameter of NewNotFoundResponder, +// allowing to dump the stack trace to localize the origin of the +// call. +// import ( +// "testing" +// "github.com/jarcoal/httpmock" +// ) +// ... +// func TestMyApp(t *testing.T) { +// ... +// // This responder is callable only once, then an error is returned and +// // the stacktrace of the call logged using t.Log() +// httpmock.RegisterResponder("GET", "/foo/bar", +// httpmock.NewStringResponder(200, "{}").Once(t.Log), +// ) +func (r Responder) Once(fn ...func(...interface{})) Responder { + return r.times("Once", 1, fn...) +} + +// Trace returns a new Responder that allows to easily trace the calls +// of the original Responder using fn. It can be used in conjunction +// with the testing package as in the example below with the help of +// (*testing.T).Log method: +// import ( +// "testing" +// "github.com/jarcoal/httpmock" +// ) +// ... +// func TestMyApp(t *testing.T) { +// ... +// httpmock.RegisterResponder("GET", "/foo/bar", +// httpmock.NewStringResponder(200, "{}").Trace(t.Log), +// ) +func (r Responder) Trace(fn func(...interface{})) Responder { + return func(req *http.Request) (*http.Response, error) { + resp, err := r(req) + return resp, internal.StackTracer{ + CustomFn: fn, + Err: err, + } + } +} + +// ResponderFromResponse wraps an *http.Response in a Responder. +// +// Be careful, except for responses generated by httpmock +// (NewStringResponse and NewBytesResponse functions) for which there +// is no problems, it is the caller responsibility to ensure the +// response body can be read several times and concurrently if needed, +// as it is shared among all Responder returned responses. +// +// For home-made responses, NewRespBodyFromString and +// NewRespBodyFromBytes functions can be used to produce response +// bodies that can be read several times and concurrently. +func ResponderFromResponse(resp *http.Response) Responder { + return func(req *http.Request) (*http.Response, error) { + res := *resp + + // Our stuff: generate a new io.ReadCloser instance sharing the same buffer + if body, ok := resp.Body.(*dummyReadCloser); ok { + res.Body = body.copy() + } + + res.Request = req + return &res, nil + } +} + +// ResponderFromMultipleResponses wraps an *http.Response list in a Responder. +// +// Each response will be returned in the order of the provided list. +// If the responder is called more than the size of the provided list, an error +// will be thrown. +// +// Be careful, except for responses generated by httpmock +// (NewStringResponse and NewBytesResponse functions) for which there +// is no problems, it is the caller responsibility to ensure the +// response body can be read several times and concurrently if needed, +// as it is shared among all Responder returned responses. +// +// For home-made responses, NewRespBodyFromString and +// NewRespBodyFromBytes functions can be used to produce response +// bodies that can be read several times and concurrently. +// +// If all responses have been returned and fn is passed +// and non-nil, it acts as the fn parameter of NewNotFoundResponder, +// allowing to dump the stack trace to localize the origin of the +// call. +// import ( +// "github.com/jarcoal/httpmock" +// "testing" +// ) +// ... +// func TestMyApp(t *testing.T) { +// ... +// // This responder is callable only once, then an error is returned and +// // the stacktrace of the call logged using t.Log() +// httpmock.RegisterResponder("GET", "/foo/bar", +// httpmock.ResponderFromMultipleResponses( +// []*http.Response{ +// httpmock.NewStringResponse(200, `{"name":"bar"}`), +// httpmock.NewStringResponse(404, `{"mesg":"Not found"}`), +// }, +// t.Log), +// ) +// } +func ResponderFromMultipleResponses(responses []*http.Response, fn ...func(...interface{})) Responder { + responseIndex := 0 + mutex := sync.Mutex{} + return func(req *http.Request) (*http.Response, error) { + mutex.Lock() + defer mutex.Unlock() + defer func() { responseIndex++ }() + if responseIndex >= len(responses) { + err := internal.StackTracer{ + Err: fmt.Errorf("not enough responses provided: responder called %d time(s) but %d response(s) provided", responseIndex+1, len(responses)), + } + if len(fn) > 0 { + err.CustomFn = fn[0] + } + return nil, err + } + res := *responses[responseIndex] + // Our stuff: generate a new io.ReadCloser instance sharing the same buffer + if body, ok := responses[responseIndex].Body.(*dummyReadCloser); ok { + res.Body = body.copy() + } + + res.Request = req + return &res, nil + } +} + +// NewErrorResponder creates a Responder that returns an empty request and the +// given error. This can be used to e.g. imitate more deep http errors for the +// client. +func NewErrorResponder(err error) Responder { + return func(req *http.Request) (*http.Response, error) { + return nil, err + } +} + +// NewNotFoundResponder creates a Responder typically used in +// conjunction with RegisterNoResponder() function and testing +// package, to be proactive when a Responder is not found. fn is +// called with a unique string parameter containing the name of the +// missing route and the stack trace to localize the origin of the +// call. If fn returns (= if it does not panic), the responder returns +// an error of the form: "Responder not found for GET http://foo.bar/path". +// Note that fn can be nil. +// +// It is useful when writing tests to ensure that all routes have been +// mocked. +// +// Example of use: +// import ( +// "testing" +// "github.com/jarcoal/httpmock" +// ) +// ... +// func TestMyApp(t *testing.T) { +// ... +// // Calls testing.Fatal with the name of Responder-less route and +// // the stack trace of the call. +// httpmock.RegisterNoResponder(httpmock.NewNotFoundResponder(t.Fatal)) +// +// Will abort the current test and print something like: +// transport_test.go:735: Called from net/http.Get() +// at /go/src/github.com/jarcoal/httpmock/transport_test.go:714 +// github.com/jarcoal/httpmock.TestCheckStackTracer() +// at /go/src/testing/testing.go:865 +// testing.tRunner() +// at /go/src/runtime/asm_amd64.s:1337 +func NewNotFoundResponder(fn func(...interface{})) Responder { + return func(req *http.Request) (*http.Response, error) { + return nil, internal.StackTracer{ + CustomFn: fn, + Err: fmt.Errorf("Responder not found for %s %s", req.Method, req.URL), + } + } +} + +// NewStringResponse creates an *http.Response with a body based on +// the given string. Also accepts an http status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewStringResponse(200, httpmock.File("body.txt").String()) +func NewStringResponse(status int, body string) *http.Response { + return &http.Response{ + Status: strconv.Itoa(status), + StatusCode: status, + Body: NewRespBodyFromString(body), + Header: http.Header{}, + ContentLength: -1, + } +} + +// NewStringResponder creates a Responder from a given body (as a string) and status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewStringResponder(200, httpmock.File("body.txt").String()) +func NewStringResponder(status int, body string) Responder { + return ResponderFromResponse(NewStringResponse(status, body)) +} + +// NewBytesResponse creates an *http.Response with a body based on the +// given bytes. Also accepts an http status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewBytesResponse(200, httpmock.File("body.raw").Bytes()) +func NewBytesResponse(status int, body []byte) *http.Response { + return &http.Response{ + Status: strconv.Itoa(status), + StatusCode: status, + Body: NewRespBodyFromBytes(body), + Header: http.Header{}, + ContentLength: -1, + } +} + +// NewBytesResponder creates a Responder from a given body (as a byte +// slice) and status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewBytesResponder(200, httpmock.File("body.raw").Bytes()) +func NewBytesResponder(status int, body []byte) Responder { + return ResponderFromResponse(NewBytesResponse(status, body)) +} + +// NewJsonResponse creates an *http.Response with a body that is a +// json encoded representation of the given interface{}. Also accepts +// an http status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewJsonResponse(200, httpmock.File("body.json")) +func NewJsonResponse(status int, body interface{}) (*http.Response, error) { // nolint: golint + encoded, err := json.Marshal(body) + if err != nil { + return nil, err + } + response := NewBytesResponse(status, encoded) + response.Header.Set("Content-Type", "application/json") + return response, nil +} + +// NewJsonResponder creates a Responder from a given body (as an +// interface{} that is encoded to json) and status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewJsonResponder(200, httpmock.File("body.json")) +func NewJsonResponder(status int, body interface{}) (Responder, error) { // nolint: golint + resp, err := NewJsonResponse(status, body) + if err != nil { + return nil, err + } + return ResponderFromResponse(resp), nil +} + +// NewJsonResponderOrPanic is like NewJsonResponder but panics in case of error. +// +// It simplifies the call of RegisterResponder, avoiding the use of a +// temporary variable and an error check, and so can be used as +// NewStringResponder or NewBytesResponder in such context: +// httpmock.RegisterResponder( +// "GET", +// "/test/path", +// httpmock.NewJSONResponderOrPanic(200, &MyBody), +// ) +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewJsonResponderOrPanic(200, httpmock.File("body.json")) +func NewJsonResponderOrPanic(status int, body interface{}) Responder { // nolint: golint + responder, err := NewJsonResponder(status, body) + if err != nil { + panic(err) + } + return responder +} + +// NewXmlResponse creates an *http.Response with a body that is an xml +// encoded representation of the given interface{}. Also accepts an +// http status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewXmlResponse(200, httpmock.File("body.xml")) +func NewXmlResponse(status int, body interface{}) (*http.Response, error) { // nolint: golint + var ( + encoded []byte + err error + ) + if f, ok := body.(File); ok { + encoded, err = f.bytes() + } else { + encoded, err = xml.Marshal(body) + } + if err != nil { + return nil, err + } + response := NewBytesResponse(status, encoded) + response.Header.Set("Content-Type", "application/xml") + return response, nil +} + +// NewXmlResponder creates a Responder from a given body (as an +// interface{} that is encoded to xml) and status code. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewXmlResponder(200, httpmock.File("body.xml")) +func NewXmlResponder(status int, body interface{}) (Responder, error) { // nolint: golint + resp, err := NewXmlResponse(status, body) + if err != nil { + return nil, err + } + return ResponderFromResponse(resp), nil +} + +// NewXmlResponderOrPanic is like NewXmlResponder but panics in case of error. +// +// It simplifies the call of RegisterResponder, avoiding the use of a +// temporary variable and an error check, and so can be used as +// NewStringResponder or NewBytesResponder in such context: +// httpmock.RegisterResponder( +// "GET", +// "/test/path", +// httpmock.NewXmlResponderOrPanic(200, &MyBody), +// ) +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewXmlResponderOrPanic(200, httpmock.File("body.xml")) +func NewXmlResponderOrPanic(status int, body interface{}) Responder { // nolint: golint + responder, err := NewXmlResponder(status, body) + if err != nil { + panic(err) + } + return responder +} + +// NewRespBodyFromString creates an io.ReadCloser from a string that +// is suitable for use as an http response body. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewRespBodyFromString(httpmock.File("body.txt").String()) +func NewRespBodyFromString(body string) io.ReadCloser { + return &dummyReadCloser{orig: body} +} + +// NewRespBodyFromBytes creates an io.ReadCloser from a byte slice +// that is suitable for use as an http response body. +// +// To pass the content of an existing file as body use httpmock.File as in: +// httpmock.NewRespBodyFromBytes(httpmock.File("body.txt").Bytes()) +func NewRespBodyFromBytes(body []byte) io.ReadCloser { + return &dummyReadCloser{orig: body} +} + +type dummyReadCloser struct { + orig interface{} // string or []byte + body io.ReadSeeker // instanciated on demand from orig +} + +// copy returns a new instance resetting d.body to nil. +func (d *dummyReadCloser) copy() *dummyReadCloser { + return &dummyReadCloser{orig: d.orig} +} + +// setup ensures d.body is correctly initialized. +func (d *dummyReadCloser) setup() { + if d.body == nil { + switch body := d.orig.(type) { + case string: + d.body = strings.NewReader(body) + case []byte: + d.body = bytes.NewReader(body) + } + } +} + +func (d *dummyReadCloser) Read(p []byte) (n int, err error) { + d.setup() + n, err = d.body.Read(p) + if err == io.EOF { + d.body.Seek(0, 0) // nolint: errcheck + } + return n, err +} + +func (d *dummyReadCloser) Close() error { + d.setup() + d.body.Seek(0, 0) // nolint: errcheck + return nil +} diff --git a/vendor/github.com/jarcoal/httpmock/transport.go b/vendor/github.com/jarcoal/httpmock/transport.go new file mode 100644 index 000000000..0394f7c64 --- /dev/null +++ b/vendor/github.com/jarcoal/httpmock/transport.go @@ -0,0 +1,1040 @@ +package httpmock + +import ( + "bytes" + "errors" + "fmt" + "net/http" + "net/url" + "regexp" + "sort" + "strconv" + "strings" + "sync" + + "github.com/jarcoal/httpmock/internal" +) + +const regexpPrefix = "=~" + +// NoResponderFound is returned when no responders are found for a +// given HTTP method and URL. +var NoResponderFound = errors.New("no responder found") // nolint: golint + +// ConnectionFailure is a responder that returns a connection failure. +// This is the default responder, and is called when no other matching +// responder is found. +func ConnectionFailure(*http.Request) (*http.Response, error) { + return nil, NoResponderFound +} + +// NewMockTransport creates a new *MockTransport with no responders. +func NewMockTransport() *MockTransport { + return &MockTransport{ + responders: make(map[internal.RouteKey]Responder), + callCountInfo: make(map[internal.RouteKey]int), + } +} + +type regexpResponder struct { + origRx string + method string + rx *regexp.Regexp + responder Responder +} + +// MockTransport implements http.RoundTripper, which fulfills single +// http requests issued by an http.Client. This implementation +// doesn't actually make the call, instead deferring to the registered +// list of responders. +type MockTransport struct { + mu sync.RWMutex + responders map[internal.RouteKey]Responder + regexpResponders []regexpResponder + noResponder Responder + callCountInfo map[internal.RouteKey]int + totalCallCount int +} + +// RoundTrip receives HTTP requests and routes them to the appropriate +// responder. It is required to implement the http.RoundTripper +// interface. You will not interact with this directly, instead the +// *http.Client you are using will call it for you. +func (m *MockTransport) RoundTrip(req *http.Request) (*http.Response, error) { + url := req.URL.String() + + method := req.Method + if method == "" { + // http.Request.Method is documented to default to GET: + method = http.MethodGet + } + + var ( + responder Responder + respKey internal.RouteKey + submatches []string + ) + key := internal.RouteKey{ + Method: method, + } + for _, getResponder := range []func(internal.RouteKey) (Responder, internal.RouteKey, []string){ + m.responderForKey, // Exact match + m.regexpResponderForKey, // Regexp match + } { + // try and get a responder that matches the method and URL with + // query params untouched: http://z.tld/path?q... + key.URL = url + responder, respKey, submatches = getResponder(key) + if responder != nil { + break + } + + // if we weren't able to find a responder, try with the URL *and* + // sorted query params + query := sortedQuery(req.URL.Query()) + if query != "" { + // Replace unsorted query params by sorted ones: + // http://z.tld/path?sorted_q... + key.URL = strings.Replace(url, req.URL.RawQuery, query, 1) + responder, respKey, submatches = getResponder(key) + if responder != nil { + break + } + } + + // if we weren't able to find a responder, try without any query params + strippedURL := *req.URL + strippedURL.RawQuery = "" + strippedURL.Fragment = "" + + // go1.6 does not handle URL.ForceQuery, so in case it is set in go>1.6, + // remove the "?" manually if present. + surl := strings.TrimSuffix(strippedURL.String(), "?") + + hasQueryString := url != surl + + // if the URL contains a querystring then we strip off the + // querystring and try again: http://z.tld/path + if hasQueryString { + key.URL = surl + responder, respKey, submatches = getResponder(key) + if responder != nil { + break + } + } + + // if we weren't able to find a responder for the full URL, try with + // the path part only + pathAlone := req.URL.Path + + // First with unsorted querystring: /path?q... + if hasQueryString { + key.URL = pathAlone + strings.TrimPrefix(url, surl) // concat after-path part + responder, respKey, submatches = getResponder(key) + if responder != nil { + break + } + + // Then with sorted querystring: /path?sorted_q... + key.URL = pathAlone + "?" + sortedQuery(req.URL.Query()) + if req.URL.Fragment != "" { + key.URL += "#" + req.URL.Fragment + } + responder, respKey, submatches = getResponder(key) + if responder != nil { + break + } + } + + // Then using path alone: /path + key.URL = pathAlone + responder, respKey, submatches = getResponder(key) + if responder != nil { + break + } + } + + m.mu.Lock() + // if we found a responder, call it + if responder != nil { + m.callCountInfo[key]++ + if key != respKey { + m.callCountInfo[respKey]++ + } + m.totalCallCount++ + } else if m.noResponder != nil { + // we didn't find a responder, so fire the 'no responder' responder + m.callCountInfo[internal.NoResponder]++ + m.totalCallCount++ + responder = m.noResponder + } + m.mu.Unlock() + + if responder == nil { + return ConnectionFailure(req) + } + return runCancelable(responder, internal.SetSubmatches(req, submatches)) +} + +// NumResponders returns the number of responders currently in use. +func (m *MockTransport) NumResponders() int { + m.mu.RLock() + defer m.mu.RUnlock() + return len(m.responders) + len(m.regexpResponders) +} + +func runCancelable(responder Responder, req *http.Request) (*http.Response, error) { + ctx := req.Context() + if req.Cancel == nil && ctx.Done() == nil { // nolint: staticcheck + resp, err := responder(req) + return resp, internal.CheckStackTracer(req, err) + } + + // Set up a goroutine that translates a close(req.Cancel) into a + // "request canceled" error, and another one that runs the + // responder. Then race them: first to the result channel wins. + + type result struct { + response *http.Response + err error + } + resultch := make(chan result, 1) + done := make(chan struct{}, 1) + + go func() { + select { + case <-req.Cancel: // nolint: staticcheck + resultch <- result{ + response: nil, + err: errors.New("request canceled"), + } + case <-ctx.Done(): + resultch <- result{ + response: nil, + err: ctx.Err(), + } + case <-done: + } + }() + + go func() { + defer func() { + if err := recover(); err != nil { + resultch <- result{ + response: nil, + err: fmt.Errorf("panic in responder: got %q", err), + } + } + }() + + response, err := responder(req) + resultch <- result{ + response: response, + err: err, + } + }() + + r := <-resultch + + // if a cancel() issued from context.WithCancel() or a + // close(req.Cancel) are never coming, we'll need to unblock the + // first goroutine. + done <- struct{}{} + + return r.response, internal.CheckStackTracer(req, r.err) +} + +// responderForKey returns a responder for a given key. +func (m *MockTransport) responderForKey(key internal.RouteKey) (Responder, internal.RouteKey, []string) { + m.mu.RLock() + defer m.mu.RUnlock() + return m.responders[key], key, nil +} + +// responderForKeyUsingRegexp returns the first responder matching a +// given key using regexps. +func (m *MockTransport) regexpResponderForKey(key internal.RouteKey) (Responder, internal.RouteKey, []string) { + m.mu.RLock() + defer m.mu.RUnlock() + for _, regInfo := range m.regexpResponders { + if regInfo.method == key.Method { + if sm := regInfo.rx.FindStringSubmatch(key.URL); sm != nil { + if len(sm) == 1 { + sm = nil + } else { + sm = sm[1:] + } + return regInfo.responder, internal.RouteKey{ + Method: key.Method, + URL: regInfo.origRx, + }, sm + } + } + } + return nil, key, nil +} + +func isRegexpURL(url string) bool { + return strings.HasPrefix(url, regexpPrefix) +} + +// RegisterResponder adds a new responder, associated with a given +// HTTP method and URL (or path). +// +// When a request comes in that matches, the responder is called and +// the response returned to the client. +// +// If url contains query parameters, their order matters as well as +// their content. All following URLs are here considered as different: +// http://z.tld?a=1&b=1 +// http://z.tld?b=1&a=1 +// http://z.tld?a&b +// http://z.tld?a=&b= +// +// If url begins with "=~", the following chars are considered as a +// regular expression. If this regexp can not be compiled, it panics. +// Note that the "=~" prefix remains in statistics returned by +// GetCallCountInfo(). As 2 regexps can match the same URL, the regexp +// responders are tested in the order they are registered. Registering +// an already existing regexp responder (same method & same regexp +// string) replaces its responder but does not change its position. +// +// See RegisterRegexpResponder() to directly pass a *regexp.Regexp. +// +// Example: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// defer httpmock.DeactivateAndReset() +// +// httpmock.RegisterResponder("GET", "http://example.com/", +// httpmock.NewStringResponder(200, "hello world")) +// +// httpmock.RegisterResponder("GET", "/path/only", +// httpmock.NewStringResponder("any host hello world", 200)) +// +// httpmock.RegisterResponder("GET", `=~^/item/id/\d+\z`, +// httpmock.NewStringResponder("any item get", 200)) +// +// // requests to http://example.com/ now return "hello world" and +// // requests to any host with path /path/only return "any host hello world" +// // requests to any host with path matching ^/item/id/\d+\z regular expression return "any item get" +// } +func (m *MockTransport) RegisterResponder(method, url string, responder Responder) { + if isRegexpURL(url) { + m.registerRegexpResponder(regexpResponder{ + origRx: url, + method: method, + rx: regexp.MustCompile(url[2:]), + responder: responder, + }) + return + } + + key := internal.RouteKey{ + Method: method, + URL: url, + } + + m.mu.Lock() + m.responders[key] = responder + m.callCountInfo[key] = 0 + m.mu.Unlock() +} + +func (m *MockTransport) registerRegexpResponder(regexpResponder regexpResponder) { + m.mu.Lock() + defer m.mu.Unlock() + +found: + for { + for i, rr := range m.regexpResponders { + if rr.method == regexpResponder.method && rr.origRx == regexpResponder.origRx { + m.regexpResponders[i] = regexpResponder + break found + } + } + m.regexpResponders = append(m.regexpResponders, regexpResponder) + break // nolint: staticcheck + } + + m.callCountInfo[internal.RouteKey{ + Method: regexpResponder.method, + URL: regexpResponder.origRx, + }] = 0 +} + +// RegisterRegexpResponder adds a new responder, associated with a given +// HTTP method and URL (or path) regular expression. +// +// When a request comes in that matches, the responder is called and +// the response returned to the client. +// +// As 2 regexps can match the same URL, the regexp responders are +// tested in the order they are registered. Registering an already +// existing regexp responder (same method & same regexp string) +// replaces its responder but does not change its position. +// +// A "=~" prefix is added to the stringified regexp in the statistics +// returned by GetCallCountInfo(). +// +// See RegisterResponder function and the "=~" prefix in its url +// parameter to avoid compiling the regexp by yourself. +func (m *MockTransport) RegisterRegexpResponder(method string, urlRegexp *regexp.Regexp, responder Responder) { + m.registerRegexpResponder(regexpResponder{ + origRx: regexpPrefix + urlRegexp.String(), + method: method, + rx: urlRegexp, + responder: responder, + }) +} + +// RegisterResponderWithQuery is same as RegisterResponder, but it +// doesn't depend on query items order. +// +// If query is non-nil, its type can be: +// url.Values +// map[string]string +// string, a query string like "a=12&a=13&b=z&c" (see net/url.ParseQuery function) +// +// If the query type is not recognized or the string cannot be parsed +// using net/url.ParseQuery, a panic() occurs. +// +// Unlike RegisterResponder, path cannot be prefixed by "=~" to say it +// is a regexp. If it is, a panic occurs. +func (m *MockTransport) RegisterResponderWithQuery(method, path string, query interface{}, responder Responder) { + if isRegexpURL(path) { + panic(`path begins with "=~", RegisterResponder should be used instead of RegisterResponderWithQuery`) + } + + var mapQuery url.Values + switch q := query.(type) { + case url.Values: + mapQuery = q + + case map[string]string: + mapQuery = make(url.Values, len(q)) + for key, e := range q { + mapQuery[key] = []string{e} + } + + case string: + var err error + mapQuery, err = url.ParseQuery(q) + if err != nil { + panic("RegisterResponderWithQuery bad query string: " + err.Error()) + } + + default: + if query != nil { + panic(fmt.Sprintf("RegisterResponderWithQuery bad query type %T. Only url.Values, map[string]string and string are allowed", query)) + } + } + + if queryString := sortedQuery(mapQuery); queryString != "" { + path += "?" + queryString + } + m.RegisterResponder(method, path, responder) +} + +func sortedQuery(m url.Values) string { + if len(m) == 0 { + return "" + } + + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + + var b bytes.Buffer + var values []string // nolint: prealloc + + for _, k := range keys { + // Do not alter the passed url.Values + values = append(values, m[k]...) + sort.Strings(values) + + k = url.QueryEscape(k) + + for _, v := range values { + if b.Len() > 0 { + b.WriteByte('&') + } + fmt.Fprintf(&b, "%v=%v", k, url.QueryEscape(v)) + } + + values = values[:0] + } + + return b.String() +} + +// RegisterNoResponder is used to register a responder that is called +// if no other responder is found. The default is httpmock.ConnectionFailure. +func (m *MockTransport) RegisterNoResponder(responder Responder) { + m.mu.Lock() + m.noResponder = responder + m.mu.Unlock() +} + +// Reset removes all registered responders (including the no +// responder) from the MockTransport. It zeroes call counters too. +func (m *MockTransport) Reset() { + m.mu.Lock() + m.responders = make(map[internal.RouteKey]Responder) + m.regexpResponders = nil + m.noResponder = nil + m.callCountInfo = make(map[internal.RouteKey]int) + m.totalCallCount = 0 + m.mu.Unlock() +} + +// ZeroCallCounters zeroes call counters without touching registered responders. +func (m *MockTransport) ZeroCallCounters() { + m.mu.Lock() + for k := range m.callCountInfo { + m.callCountInfo[k] = 0 + } + m.totalCallCount = 0 + m.mu.Unlock() +} + +// GetCallCountInfo gets the info on all the calls httpmock has caught +// since it was activated or reset. The info is returned as a map of +// the calling keys with the number of calls made to them as their +// value. The key is the method, a space, and the url all concatenated +// together. +// +// As a special case, regexp responders generate 2 entries for each +// call. One for the call caught and the other for the rule that +// matched. For example: +// RegisterResponder("GET", `=~z\.com\z`, NewStringResponder(200, "body")) +// http.Get("http://z.com") +// +// will generate the following result: +// map[string]int{ +// `GET http://z.com`: 1, +// `GET =~z\.com\z`: 1, +// } +func (m *MockTransport) GetCallCountInfo() map[string]int { + m.mu.RLock() + res := make(map[string]int, len(m.callCountInfo)) + for k, v := range m.callCountInfo { + res[k.String()] = v + } + m.mu.RUnlock() + return res +} + +// GetTotalCallCount returns the totalCallCount. +func (m *MockTransport) GetTotalCallCount() int { + m.mu.RLock() + count := m.totalCallCount + m.mu.RUnlock() + return count +} + +// DefaultTransport is the default mock transport used by Activate, +// Deactivate, Reset, DeactivateAndReset, RegisterResponder, and +// RegisterNoResponder. +var DefaultTransport = NewMockTransport() + +// InitialTransport is a cache of the original transport used so we +// can put it back when Deactivate is called. +var InitialTransport = http.DefaultTransport + +// oldClients is used to handle custom http clients (i.e clients other +// than http.DefaultClient). +var oldClients = map[*http.Client]http.RoundTripper{} + +// Activate starts the mock environment. This should be called before +// your tests run. Under the hood this replaces the Transport on the +// http.DefaultClient with httpmock.DefaultTransport. +// +// To enable mocks for a test, simply activate at the beginning of a test: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// // all http requests using http.DefaultTransport will now be intercepted +// } +// +// If you want all of your tests in a package to be mocked, just call +// Activate from init(): +// func init() { +// httpmock.Activate() +// } +// +// or using a TestMain function: +// func TestMain(m *testing.M) { +// httpmock.Activate() +// os.Exit(m.Run()) +// } +func Activate() { + if Disabled() { + return + } + + // make sure that if Activate is called multiple times it doesn't + // overwrite the InitialTransport with a mock transport. + if http.DefaultTransport != DefaultTransport { + InitialTransport = http.DefaultTransport + } + + http.DefaultTransport = DefaultTransport +} + +// ActivateNonDefault starts the mock environment with a non-default +// http.Client. This emulates the Activate function, but allows for +// custom clients that do not use http.DefaultTransport +// +// To enable mocks for a test using a custom client, activate at the +// beginning of a test: +// client := &http.Client{Transport: &http.Transport{TLSHandshakeTimeout: 60 * time.Second}} +// httpmock.ActivateNonDefault(client) +func ActivateNonDefault(client *http.Client) { + if Disabled() { + return + } + + // save the custom client & it's RoundTripper + if _, ok := oldClients[client]; !ok { + oldClients[client] = client.Transport + } + client.Transport = DefaultTransport +} + +// GetCallCountInfo gets the info on all the calls httpmock has caught +// since it was activated or reset. The info is returned as a map of +// the calling keys with the number of calls made to them as their +// value. The key is the method, a space, and the url all concatenated +// together. +// +// As a special case, regexp responders generate 2 entries for each +// call. One for the call caught and the other for the rule that +// matched. For example: +// RegisterResponder("GET", `=~z\.com\z`, NewStringResponder(200, "body")) +// http.Get("http://z.com") +// +// will generate the following result: +// map[string]int{ +// `GET http://z.com`: 1, +// `GET =~z\.com\z`: 1, +// } +func GetCallCountInfo() map[string]int { + return DefaultTransport.GetCallCountInfo() +} + +// GetTotalCallCount gets the total number of calls httpmock has taken +// since it was activated or reset. +func GetTotalCallCount() int { + return DefaultTransport.GetTotalCallCount() +} + +// Deactivate shuts down the mock environment. Any HTTP calls made +// after this will use a live transport. +// +// Usually you'll call it in a defer right after activating the mock +// environment: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// defer httpmock.Deactivate() +// +// // when this test ends, the mock environment will close +// } +// +// Since go 1.14 you can also use (*testing.T).Cleanup() method as in: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// t.Cleanup(httpmock.Deactivate) +// +// // when this test ends, the mock environment will close +// } +// +// useful in test helpers to save your callers from calling defer themselves. +func Deactivate() { + if Disabled() { + return + } + http.DefaultTransport = InitialTransport + + // reset the custom clients to use their original RoundTripper + for oldClient, oldTransport := range oldClients { + oldClient.Transport = oldTransport + delete(oldClients, oldClient) + } +} + +// Reset removes any registered mocks and returns the mock +// environment to its initial state. It zeroes call counters too. +func Reset() { + DefaultTransport.Reset() +} + +// ZeroCallCounters zeroes call counters without touching registered responders. +func ZeroCallCounters() { + DefaultTransport.ZeroCallCounters() +} + +// DeactivateAndReset is just a convenience method for calling +// Deactivate() and then Reset(). +// +// Happy deferring! +func DeactivateAndReset() { + Deactivate() + Reset() +} + +// RegisterResponder adds a new responder, associated with a given +// HTTP method and URL (or path). +// +// When a request comes in that matches, the responder is called and +// the response returned to the client. +// +// If url contains query parameters, their order matters as well as +// their content. All following URLs are here considered as different: +// http://z.tld?a=1&b=1 +// http://z.tld?b=1&a=1 +// http://z.tld?a&b +// http://z.tld?a=&b= +// +// If url begins with "=~", the following chars are considered as a +// regular expression. If this regexp can not be compiled, it panics. +// Note that the "=~" prefix remains in statistics returned by +// GetCallCountInfo(). As 2 regexps can match the same URL, the regexp +// responders are tested in the order they are registered. Registering +// an already existing regexp responder (same method & same regexp +// string) replaces its responder but does not change its position. +// +// See RegisterRegexpResponder() to directly pass a *regexp.Regexp. +// +// Example: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// defer httpmock.DeactivateAndReset() +// +// httpmock.RegisterResponder("GET", "http://example.com/", +// httpmock.NewStringResponder(200, "hello world")) +// +// httpmock.RegisterResponder("GET", "/path/only", +// httpmock.NewStringResponder("any host hello world", 200)) +// +// httpmock.RegisterResponder("GET", `=~^/item/id/\d+\z`, +// httpmock.NewStringResponder("any item get", 200)) +// +// // requests to http://example.com/ now return "hello world" and +// // requests to any host with path /path/only return "any host hello world" +// // requests to any host with path matching ^/item/id/\d+\z regular expression return "any item get" +// } +func RegisterResponder(method, url string, responder Responder) { + DefaultTransport.RegisterResponder(method, url, responder) +} + +// RegisterRegexpResponder adds a new responder, associated with a given +// HTTP method and URL (or path) regular expression. +// +// When a request comes in that matches, the responder is called and +// the response returned to the client. +// +// As 2 regexps can match the same URL, the regexp responders are +// tested in the order they are registered. Registering an already +// existing regexp responder (same method & same regexp string) +// replaces its responder but does not change its position. +// +// A "=~" prefix is added to the stringified regexp in the statistics +// returned by GetCallCountInfo(). +// +// See RegisterResponder function and the "=~" prefix in its url +// parameter to avoid compiling the regexp by yourself. +func RegisterRegexpResponder(method string, urlRegexp *regexp.Regexp, responder Responder) { + DefaultTransport.RegisterRegexpResponder(method, urlRegexp, responder) +} + +// RegisterResponderWithQuery it is same as RegisterResponder, but +// doesn't depends on query items order. +// +// query type can be: +// url.Values +// map[string]string +// string, a query string like "a=12&a=13&b=z&c" (see net/url.ParseQuery function) +// +// If the query type is not recognized or the string cannot be parsed +// using net/url.ParseQuery, a panic() occurs. +// +// Example using a net/url.Values: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// defer httpmock.DeactivateAndReset() +// +// expectedQuery := net.Values{ +// "a": []string{"3", "1", "8"}, +// "b": []string{"4", "2"}, +// } +// httpmock.RegisterResponderWithQueryValues( +// "GET", "http://example.com/", expectedQuery, +// httpmock.NewStringResponder("hello world", 200)) +// +// // requests to http://example.com?a=1&a=3&a=8&b=2&b=4 +// // and to http://example.com?b=4&a=2&b=2&a=8&a=1 +// // now return 'hello world' +// } +// +// or using a map[string]string: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// defer httpmock.DeactivateAndReset() +// +// expectedQuery := map[string]string{ +// "a": "1", +// "b": "2" +// } +// httpmock.RegisterResponderWithQuery( +// "GET", "http://example.com/", expectedQuery, +// httpmock.NewStringResponder("hello world", 200)) +// +// // requests to http://example.com?a=1&b=2 and http://example.com?b=2&a=1 now return 'hello world' +// } +// +// or using a query string: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// defer httpmock.DeactivateAndReset() +// +// expectedQuery := "a=3&b=4&b=2&a=1&a=8" +// httpmock.RegisterResponderWithQueryValues( +// "GET", "http://example.com/", expectedQuery, +// httpmock.NewStringResponder("hello world", 200)) +// +// // requests to http://example.com?a=1&a=3&a=8&b=2&b=4 +// // and to http://example.com?b=4&a=2&b=2&a=8&a=1 +// // now return 'hello world' +// } +func RegisterResponderWithQuery(method, path string, query interface{}, responder Responder) { + DefaultTransport.RegisterResponderWithQuery(method, path, query, responder) +} + +// RegisterNoResponder adds a mock that is called whenever a request +// for an unregistered URL is received. The default behavior is to +// return a connection error. +// +// In some cases you may not want all URLs to be mocked, in which case +// you can do this: +// func TestFetchArticles(t *testing.T) { +// httpmock.Activate() +// defer httpmock.DeactivateAndReset() +// httpmock.RegisterNoResponder(httpmock.InitialTransport.RoundTrip) +// +// // any requests that don't have a registered URL will be fetched normally +// } +func RegisterNoResponder(responder Responder) { + DefaultTransport.RegisterNoResponder(responder) +} + +// ErrSubmatchNotFound is the error returned by GetSubmatch* functions +// when the given submatch index cannot be found. +var ErrSubmatchNotFound = errors.New("submatch not found") + +// GetSubmatch has to be used in Responders installed by +// RegisterRegexpResponder or RegisterResponder + "=~" URL prefix. It +// allows to retrieve the n-th submatch of the matching regexp, as a +// string. Example: +// RegisterResponder("GET", `=~^/item/name/([^/]+)\z`, +// func(req *http.Request) (*http.Response, error) { +// name, err := GetSubmatch(req, 1) // 1=first regexp submatch +// if err != nil { +// return nil, err +// } +// return NewJsonResponse(200, map[string]interface{}{ +// "id": 123, +// "name": name, +// }) +// }) +// +// It panics if n < 1. See MustGetSubmatch to avoid testing the +// returned error. +func GetSubmatch(req *http.Request, n int) (string, error) { + if n <= 0 { + panic(fmt.Sprintf("getting submatches starts at 1, not %d", n)) + } + n-- + + submatches := internal.GetSubmatches(req) + if n >= len(submatches) { + return "", ErrSubmatchNotFound + } + return submatches[n], nil +} + +// GetSubmatchAsInt has to be used in Responders installed by +// RegisterRegexpResponder or RegisterResponder + "=~" URL prefix. It +// allows to retrieve the n-th submatch of the matching regexp, as an +// int64. Example: +// RegisterResponder("GET", `=~^/item/id/(\d+)\z`, +// func(req *http.Request) (*http.Response, error) { +// id, err := GetSubmatchAsInt(req, 1) // 1=first regexp submatch +// if err != nil { +// return nil, err +// } +// return NewJsonResponse(200, map[string]interface{}{ +// "id": id, +// "name": "The beautiful name", +// }) +// }) +// +// It panics if n < 1. See MustGetSubmatchAsInt to avoid testing the +// returned error. +func GetSubmatchAsInt(req *http.Request, n int) (int64, error) { + sm, err := GetSubmatch(req, n) + if err != nil { + return 0, err + } + return strconv.ParseInt(sm, 10, 64) +} + +// GetSubmatchAsUint has to be used in Responders installed by +// RegisterRegexpResponder or RegisterResponder + "=~" URL prefix. It +// allows to retrieve the n-th submatch of the matching regexp, as a +// uint64. Example: +// RegisterResponder("GET", `=~^/item/id/(\d+)\z`, +// func(req *http.Request) (*http.Response, error) { +// id, err := GetSubmatchAsUint(req, 1) // 1=first regexp submatch +// if err != nil { +// return nil, err +// } +// return NewJsonResponse(200, map[string]interface{}{ +// "id": id, +// "name": "The beautiful name", +// }) +// }) +// +// It panics if n < 1. See MustGetSubmatchAsUint to avoid testing the +// returned error. +func GetSubmatchAsUint(req *http.Request, n int) (uint64, error) { + sm, err := GetSubmatch(req, n) + if err != nil { + return 0, err + } + return strconv.ParseUint(sm, 10, 64) +} + +// GetSubmatchAsFloat has to be used in Responders installed by +// RegisterRegexpResponder or RegisterResponder + "=~" URL prefix. It +// allows to retrieve the n-th submatch of the matching regexp, as a +// float64. Example: +// RegisterResponder("PATCH", `=~^/item/id/\d+\?height=(\d+(?:\.\d*)?)\z`, +// func(req *http.Request) (*http.Response, error) { +// height, err := GetSubmatchAsFloat(req, 1) // 1=first regexp submatch +// if err != nil { +// return nil, err +// } +// return NewJsonResponse(200, map[string]interface{}{ +// "id": id, +// "name": "The beautiful name", +// "height": height, +// }) +// }) +// +// It panics if n < 1. See MustGetSubmatchAsFloat to avoid testing the +// returned error. +func GetSubmatchAsFloat(req *http.Request, n int) (float64, error) { + sm, err := GetSubmatch(req, n) + if err != nil { + return 0, err + } + return strconv.ParseFloat(sm, 64) +} + +// MustGetSubmatch works as GetSubmatch except that it panics in case +// of error (submatch not found). It has to be used in Responders +// installed by RegisterRegexpResponder or RegisterResponder + "=~" +// URL prefix. It allows to retrieve the n-th submatch of the matching +// regexp, as a string. Example: +// RegisterResponder("GET", `=~^/item/name/([^/]+)\z`, +// func(req *http.Request) (*http.Response, error) { +// name := MustGetSubmatch(req, 1) // 1=first regexp submatch +// return NewJsonResponse(200, map[string]interface{}{ +// "id": 123, +// "name": name, +// }) +// }) +// +// It panics if n < 1. +func MustGetSubmatch(req *http.Request, n int) string { + s, err := GetSubmatch(req, n) + if err != nil { + panic("GetSubmatch failed: " + err.Error()) + } + return s +} + +// MustGetSubmatchAsInt works as GetSubmatchAsInt except that it +// panics in case of error (submatch not found or invalid int64 +// format). It has to be used in Responders installed by +// RegisterRegexpResponder or RegisterResponder + "=~" URL prefix. It +// allows to retrieve the n-th submatch of the matching regexp, as an +// int64. Example: +// RegisterResponder("GET", `=~^/item/id/(\d+)\z`, +// func(req *http.Request) (*http.Response, error) { +// id := MustGetSubmatchAsInt(req, 1) // 1=first regexp submatch +// return NewJsonResponse(200, map[string]interface{}{ +// "id": id, +// "name": "The beautiful name", +// }) +// }) +// +// It panics if n < 1. +func MustGetSubmatchAsInt(req *http.Request, n int) int64 { + i, err := GetSubmatchAsInt(req, n) + if err != nil { + panic("GetSubmatchAsInt failed: " + err.Error()) + } + return i +} + +// MustGetSubmatchAsUint works as GetSubmatchAsUint except that it +// panics in case of error (submatch not found or invalid uint64 +// format). It has to be used in Responders installed by +// RegisterRegexpResponder or RegisterResponder + "=~" URL prefix. It +// allows to retrieve the n-th submatch of the matching regexp, as a +// uint64. Example: +// RegisterResponder("GET", `=~^/item/id/(\d+)\z`, +// func(req *http.Request) (*http.Response, error) { +// id, err := MustGetSubmatchAsUint(req, 1) // 1=first regexp submatch +// return NewJsonResponse(200, map[string]interface{}{ +// "id": id, +// "name": "The beautiful name", +// }) +// }) +// +// It panics if n < 1. +func MustGetSubmatchAsUint(req *http.Request, n int) uint64 { + u, err := GetSubmatchAsUint(req, n) + if err != nil { + panic("GetSubmatchAsUint failed: " + err.Error()) + } + return u +} + +// MustGetSubmatchAsFloat works as GetSubmatchAsFloat except that it +// panics in case of error (submatch not found or invalid float64 +// format). It has to be used in Responders installed by +// RegisterRegexpResponder or RegisterResponder + "=~" URL prefix. It +// allows to retrieve the n-th submatch of the matching regexp, as a +// float64. Example: +// RegisterResponder("PATCH", `=~^/item/id/\d+\?height=(\d+(?:\.\d*)?)\z`, +// func(req *http.Request) (*http.Response, error) { +// height := MustGetSubmatchAsFloat(req, 1) // 1=first regexp submatch +// return NewJsonResponse(200, map[string]interface{}{ +// "id": id, +// "name": "The beautiful name", +// "height": height, +// }) +// }) +// +// It panics if n < 1. +func MustGetSubmatchAsFloat(req *http.Request, n int) float64 { + f, err := GetSubmatchAsFloat(req, n) + if err != nil { + panic("GetSubmatchAsFloat failed: " + err.Error()) + } + return f +} diff --git a/vendor/github.com/mattn/go-colorable/colorable_windows.go b/vendor/github.com/mattn/go-colorable/colorable_windows.go index b9e936344..41215d7fc 100644 --- a/vendor/github.com/mattn/go-colorable/colorable_windows.go +++ b/vendor/github.com/mattn/go-colorable/colorable_windows.go @@ -10,6 +10,7 @@ import ( "os" "strconv" "strings" + "sync" "syscall" "unsafe" @@ -27,6 +28,7 @@ const ( backgroundRed = 0x40 backgroundIntensity = 0x80 backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity) + commonLvbUnderscore = 0x8000 cENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 ) @@ -93,6 +95,7 @@ type Writer struct { oldattr word oldpos coord rest bytes.Buffer + mutex sync.Mutex } // NewColorable returns new instance of Writer which handles escape sequence from File. @@ -432,6 +435,8 @@ func atoiWithDefault(s string, def int) (int, error) { // Write writes data on console func (w *Writer) Write(data []byte) (n int, err error) { + w.mutex.Lock() + defer w.mutex.Unlock() var csbi consoleScreenBufferInfo procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) @@ -683,14 +688,19 @@ loop: switch { case n == 0 || n == 100: attr = w.oldattr - case 1 <= n && n <= 5: + case n == 4: + attr |= commonLvbUnderscore + case (1 <= n && n <= 3) || n == 5: attr |= foregroundIntensity - case n == 7: - attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) - case n == 22 || n == 25: - attr |= foregroundIntensity - case n == 27: - attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case n == 7 || n == 27: + attr = + (attr &^ (foregroundMask | backgroundMask)) | + ((attr & foregroundMask) << 4) | + ((attr & backgroundMask) >> 4) + case n == 22: + attr &^= foregroundIntensity + case n == 24: + attr &^= commonLvbUnderscore case 30 <= n && n <= 37: attr &= backgroundMask if (n-30)&1 != 0 { @@ -709,7 +719,7 @@ loop: n256setup() } attr &= backgroundMask - attr |= n256foreAttr[n256] + attr |= n256foreAttr[n256%len(n256foreAttr)] i += 2 } } else if len(token) == 5 && token[i+1] == "2" { @@ -751,7 +761,7 @@ loop: n256setup() } attr &= foregroundMask - attr |= n256backAttr[n256] + attr |= n256backAttr[n256%len(n256backAttr)] i += 2 } } else if len(token) == 5 && token[i+1] == "2" { diff --git a/vendor/github.com/stretchr/objx/.codeclimate.yml b/vendor/github.com/stretchr/objx/.codeclimate.yml new file mode 100644 index 000000000..559fa399c --- /dev/null +++ b/vendor/github.com/stretchr/objx/.codeclimate.yml @@ -0,0 +1,21 @@ +engines: + gofmt: + enabled: true + golint: + enabled: true + govet: + enabled: true + +exclude_patterns: +- ".github/" +- "vendor/" +- "codegen/" +- "*.yml" +- ".*.yml" +- "*.md" +- "Gopkg.*" +- "doc.go" +- "type_specific_codegen_test.go" +- "type_specific_codegen.go" +- ".gitignore" +- "LICENSE" diff --git a/vendor/github.com/stretchr/objx/.gitignore b/vendor/github.com/stretchr/objx/.gitignore new file mode 100644 index 000000000..ea58090bd --- /dev/null +++ b/vendor/github.com/stretchr/objx/.gitignore @@ -0,0 +1,11 @@ +# Binaries for programs and plugins +*.exe +*.dll +*.so +*.dylib + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out diff --git a/vendor/github.com/stretchr/objx/.travis.yml b/vendor/github.com/stretchr/objx/.travis.yml new file mode 100644 index 000000000..cde6eb2af --- /dev/null +++ b/vendor/github.com/stretchr/objx/.travis.yml @@ -0,0 +1,30 @@ +language: go +go: + - "1.10.x" + - "1.11.x" + - "1.12.x" + - master + +matrix: + allow_failures: + - go: master +fast_finish: true + +env: + global: + - CC_TEST_REPORTER_ID=68feaa3410049ce73e145287acbcdacc525087a30627f96f04e579e75bd71c00 + +before_script: + - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter + - chmod +x ./cc-test-reporter + - ./cc-test-reporter before-build + +install: + - curl -sL https://taskfile.dev/install.sh | sh + +script: + - diff -u <(echo -n) <(./bin/task lint) + - ./bin/task test-coverage + +after_script: + - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT diff --git a/vendor/github.com/stretchr/objx/LICENSE b/vendor/github.com/stretchr/objx/LICENSE new file mode 100644 index 000000000..44d4d9d5a --- /dev/null +++ b/vendor/github.com/stretchr/objx/LICENSE @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2014 Stretchr, Inc. +Copyright (c) 2017-2018 objx 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 +in the Software without restriction, including without limitation the rights +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 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. diff --git a/vendor/github.com/stretchr/objx/README.md b/vendor/github.com/stretchr/objx/README.md new file mode 100644 index 000000000..246660b21 --- /dev/null +++ b/vendor/github.com/stretchr/objx/README.md @@ -0,0 +1,80 @@ +# Objx +[![Build Status](https://travis-ci.org/stretchr/objx.svg?branch=master)](https://travis-ci.org/stretchr/objx) +[![Go Report Card](https://goreportcard.com/badge/github.com/stretchr/objx)](https://goreportcard.com/report/github.com/stretchr/objx) +[![Maintainability](https://api.codeclimate.com/v1/badges/1d64bc6c8474c2074f2b/maintainability)](https://codeclimate.com/github/stretchr/objx/maintainability) +[![Test Coverage](https://api.codeclimate.com/v1/badges/1d64bc6c8474c2074f2b/test_coverage)](https://codeclimate.com/github/stretchr/objx/test_coverage) +[![Sourcegraph](https://sourcegraph.com/github.com/stretchr/objx/-/badge.svg)](https://sourcegraph.com/github.com/stretchr/objx) +[![GoDoc](https://godoc.org/github.com/stretchr/objx?status.svg)](https://godoc.org/github.com/stretchr/objx) + +Objx - Go package for dealing with maps, slices, JSON and other data. + +Get started: + +- Install Objx with [one line of code](#installation), or [update it with another](#staying-up-to-date) +- Check out the API Documentation http://godoc.org/github.com/stretchr/objx + +## Overview +Objx provides the `objx.Map` type, which is a `map[string]interface{}` that exposes a powerful `Get` method (among others) that allows you to easily and quickly get access to data within the map, without having to worry too much about type assertions, missing data, default values etc. + +### Pattern +Objx uses a preditable pattern to make access data from within `map[string]interface{}` easy. Call one of the `objx.` functions to create your `objx.Map` to get going: + + m, err := objx.FromJSON(json) + +NOTE: Any methods or functions with the `Must` prefix will panic if something goes wrong, the rest will be optimistic and try to figure things out without panicking. + +Use `Get` to access the value you're interested in. You can use dot and array +notation too: + + m.Get("places[0].latlng") + +Once you have sought the `Value` you're interested in, you can use the `Is*` methods to determine its type. + + if m.Get("code").IsStr() { // Your code... } + +Or you can just assume the type, and use one of the strong type methods to extract the real value: + + m.Get("code").Int() + +If there's no value there (or if it's the wrong type) then a default value will be returned, or you can be explicit about the default value. + + Get("code").Int(-1) + +If you're dealing with a slice of data as a value, Objx provides many useful methods for iterating, manipulating and selecting that data. You can find out more by exploring the index below. + +### Reading data +A simple example of how to use Objx: + + // Use MustFromJSON to make an objx.Map from some JSON + m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`) + + // Get the details + name := m.Get("name").Str() + age := m.Get("age").Int() + + // Get their nickname (or use their name if they don't have one) + nickname := m.Get("nickname").Str(name) + +### Ranging +Since `objx.Map` is a `map[string]interface{}` you can treat it as such. For example, to `range` the data, do what you would expect: + + m := objx.MustFromJSON(json) + for key, value := range m { + // Your code... + } + +## Installation +To install Objx, use go get: + + go get github.com/stretchr/objx + +### Staying up to date +To update Objx to the latest version, run: + + go get -u github.com/stretchr/objx + +### Supported go versions +We support the lastest three major Go versions, which are 1.10, 1.11 and 1.12 at the moment. + +## Contributing +Please feel free to submit issues, fork the repository and send pull requests! diff --git a/vendor/github.com/stretchr/objx/Taskfile.yml b/vendor/github.com/stretchr/objx/Taskfile.yml new file mode 100644 index 000000000..a749ac549 --- /dev/null +++ b/vendor/github.com/stretchr/objx/Taskfile.yml @@ -0,0 +1,30 @@ +version: '2' + +env: + GOFLAGS: -mod=vendor + +tasks: + default: + deps: [test] + + lint: + desc: Checks code style + cmds: + - gofmt -d -s *.go + - go vet ./... + silent: true + + lint-fix: + desc: Fixes code style + cmds: + - gofmt -w -s *.go + + test: + desc: Runs go tests + cmds: + - go test -race ./... + + test-coverage: + desc: Runs go tests and calucates test coverage + cmds: + - go test -race -coverprofile=c.out ./... diff --git a/vendor/github.com/stretchr/objx/accessors.go b/vendor/github.com/stretchr/objx/accessors.go new file mode 100644 index 000000000..80ad16740 --- /dev/null +++ b/vendor/github.com/stretchr/objx/accessors.go @@ -0,0 +1,179 @@ +package objx + +import ( + "reflect" + "regexp" + "strconv" + "strings" +) + +const ( + // PathSeparator is the character used to separate the elements + // of the keypath. + // + // For example, `location.address.city` + PathSeparator string = "." + + // arrayAccesRegexString is the regex used to extract the array number + // from the access path + arrayAccesRegexString = `^(.+)\[([0-9]+)\]$` + + // mapAccessRegexString is the regex used to extract the map key + // from the access path + mapAccessRegexString = `^([^\[]*)\[([^\]]+)\](.*)$` +) + +// arrayAccesRegex is the compiled arrayAccesRegexString +var arrayAccesRegex = regexp.MustCompile(arrayAccesRegexString) + +// mapAccessRegex is the compiled mapAccessRegexString +var mapAccessRegex = regexp.MustCompile(mapAccessRegexString) + +// Get gets the value using the specified selector and +// returns it inside a new Obj object. +// +// If it cannot find the value, Get will return a nil +// value inside an instance of Obj. +// +// Get can only operate directly on map[string]interface{} and []interface. +// +// Example +// +// To access the title of the third chapter of the second book, do: +// +// o.Get("books[1].chapters[2].title") +func (m Map) Get(selector string) *Value { + rawObj := access(m, selector, nil, false) + return &Value{data: rawObj} +} + +// Set sets the value using the specified selector and +// returns the object on which Set was called. +// +// Set can only operate directly on map[string]interface{} and []interface +// +// Example +// +// To set the title of the third chapter of the second book, do: +// +// o.Set("books[1].chapters[2].title","Time to Go") +func (m Map) Set(selector string, value interface{}) Map { + access(m, selector, value, true) + return m +} + +// getIndex returns the index, which is hold in s by two braches. +// It also returns s withour the index part, e.g. name[1] will return (1, name). +// If no index is found, -1 is returned +func getIndex(s string) (int, string) { + arrayMatches := arrayAccesRegex.FindStringSubmatch(s) + if len(arrayMatches) > 0 { + // Get the key into the map + selector := arrayMatches[1] + // Get the index into the array at the key + // We know this cannt fail because arrayMatches[2] is an int for sure + index, _ := strconv.Atoi(arrayMatches[2]) + return index, selector + } + return -1, s +} + +// getKey returns the key which is held in s by two brackets. +// It also returns the next selector. +func getKey(s string) (string, string) { + selSegs := strings.SplitN(s, PathSeparator, 2) + thisSel := selSegs[0] + nextSel := "" + + if len(selSegs) > 1 { + nextSel = selSegs[1] + } + + mapMatches := mapAccessRegex.FindStringSubmatch(s) + if len(mapMatches) > 0 { + if _, err := strconv.Atoi(mapMatches[2]); err != nil { + thisSel = mapMatches[1] + nextSel = "[" + mapMatches[2] + "]" + mapMatches[3] + + if thisSel == "" { + thisSel = mapMatches[2] + nextSel = mapMatches[3] + } + + if nextSel == "" { + selSegs = []string{"", ""} + } else if nextSel[0] == '.' { + nextSel = nextSel[1:] + } + } + } + + return thisSel, nextSel +} + +// access accesses the object using the selector and performs the +// appropriate action. +func access(current interface{}, selector string, value interface{}, isSet bool) interface{} { + thisSel, nextSel := getKey(selector) + + index := -1 + if strings.Contains(thisSel, "[") { + index, thisSel = getIndex(thisSel) + } + + if curMap, ok := current.(Map); ok { + current = map[string]interface{}(curMap) + } + // get the object in question + switch current.(type) { + case map[string]interface{}: + curMSI := current.(map[string]interface{}) + if nextSel == "" && isSet { + curMSI[thisSel] = value + return nil + } + + _, ok := curMSI[thisSel].(map[string]interface{}) + if (curMSI[thisSel] == nil || !ok) && index == -1 && isSet { + curMSI[thisSel] = map[string]interface{}{} + } + + current = curMSI[thisSel] + default: + current = nil + } + + // do we need to access the item of an array? + if index > -1 { + if array, ok := interSlice(current); ok { + if index < len(array) { + current = array[index] + } else { + current = nil + } + } + } + if nextSel != "" { + current = access(current, nextSel, value, isSet) + } + return current +} + +func interSlice(slice interface{}) ([]interface{}, bool) { + if array, ok := slice.([]interface{}); ok { + return array, ok + } + + s := reflect.ValueOf(slice) + if s.Kind() != reflect.Slice { + return nil, false + } + + ret := make([]interface{}, s.Len()) + + for i := 0; i < s.Len(); i++ { + ret[i] = s.Index(i).Interface() + } + + return ret, true +} diff --git a/vendor/github.com/stretchr/objx/conversions.go b/vendor/github.com/stretchr/objx/conversions.go new file mode 100644 index 000000000..080aa46e4 --- /dev/null +++ b/vendor/github.com/stretchr/objx/conversions.go @@ -0,0 +1,280 @@ +package objx + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "net/url" + "strconv" +) + +// SignatureSeparator is the character that is used to +// separate the Base64 string from the security signature. +const SignatureSeparator = "_" + +// URLValuesSliceKeySuffix is the character that is used to +// specify a suffic for slices parsed by URLValues. +// If the suffix is set to "[i]", then the index of the slice +// is used in place of i +// Ex: Suffix "[]" would have the form a[]=b&a[]=c +// OR Suffix "[i]" would have the form a[0]=b&a[1]=c +// OR Suffix "" would have the form a=b&a=c +var urlValuesSliceKeySuffix = "[]" + +const ( + URLValuesSliceKeySuffixEmpty = "" + URLValuesSliceKeySuffixArray = "[]" + URLValuesSliceKeySuffixIndex = "[i]" +) + +// SetURLValuesSliceKeySuffix sets the character that is used to +// specify a suffic for slices parsed by URLValues. +// If the suffix is set to "[i]", then the index of the slice +// is used in place of i +// Ex: Suffix "[]" would have the form a[]=b&a[]=c +// OR Suffix "[i]" would have the form a[0]=b&a[1]=c +// OR Suffix "" would have the form a=b&a=c +func SetURLValuesSliceKeySuffix(s string) error { + if s == URLValuesSliceKeySuffixEmpty || s == URLValuesSliceKeySuffixArray || s == URLValuesSliceKeySuffixIndex { + urlValuesSliceKeySuffix = s + return nil + } + + return errors.New("objx: Invalid URLValuesSliceKeySuffix provided.") +} + +// JSON converts the contained object to a JSON string +// representation +func (m Map) JSON() (string, error) { + for k, v := range m { + m[k] = cleanUp(v) + } + + result, err := json.Marshal(m) + if err != nil { + err = errors.New("objx: JSON encode failed with: " + err.Error()) + } + return string(result), err +} + +func cleanUpInterfaceArray(in []interface{}) []interface{} { + result := make([]interface{}, len(in)) + for i, v := range in { + result[i] = cleanUp(v) + } + return result +} + +func cleanUpInterfaceMap(in map[interface{}]interface{}) Map { + result := Map{} + for k, v := range in { + result[fmt.Sprintf("%v", k)] = cleanUp(v) + } + return result +} + +func cleanUpStringMap(in map[string]interface{}) Map { + result := Map{} + for k, v := range in { + result[k] = cleanUp(v) + } + return result +} + +func cleanUpMSIArray(in []map[string]interface{}) []Map { + result := make([]Map, len(in)) + for i, v := range in { + result[i] = cleanUpStringMap(v) + } + return result +} + +func cleanUpMapArray(in []Map) []Map { + result := make([]Map, len(in)) + for i, v := range in { + result[i] = cleanUpStringMap(v) + } + return result +} + +func cleanUp(v interface{}) interface{} { + switch v := v.(type) { + case []interface{}: + return cleanUpInterfaceArray(v) + case []map[string]interface{}: + return cleanUpMSIArray(v) + case map[interface{}]interface{}: + return cleanUpInterfaceMap(v) + case Map: + return cleanUpStringMap(v) + case []Map: + return cleanUpMapArray(v) + default: + return v + } +} + +// MustJSON converts the contained object to a JSON string +// representation and panics if there is an error +func (m Map) MustJSON() string { + result, err := m.JSON() + if err != nil { + panic(err.Error()) + } + return result +} + +// Base64 converts the contained object to a Base64 string +// representation of the JSON string representation +func (m Map) Base64() (string, error) { + var buf bytes.Buffer + + jsonData, err := m.JSON() + if err != nil { + return "", err + } + + encoder := base64.NewEncoder(base64.StdEncoding, &buf) + _, _ = encoder.Write([]byte(jsonData)) + _ = encoder.Close() + + return buf.String(), nil +} + +// MustBase64 converts the contained object to a Base64 string +// representation of the JSON string representation and panics +// if there is an error +func (m Map) MustBase64() string { + result, err := m.Base64() + if err != nil { + panic(err.Error()) + } + return result +} + +// SignedBase64 converts the contained object to a Base64 string +// representation of the JSON string representation and signs it +// using the provided key. +func (m Map) SignedBase64(key string) (string, error) { + base64, err := m.Base64() + if err != nil { + return "", err + } + + sig := HashWithKey(base64, key) + return base64 + SignatureSeparator + sig, nil +} + +// MustSignedBase64 converts the contained object to a Base64 string +// representation of the JSON string representation and signs it +// using the provided key and panics if there is an error +func (m Map) MustSignedBase64(key string) string { + result, err := m.SignedBase64(key) + if err != nil { + panic(err.Error()) + } + return result +} + +/* + URL Query + ------------------------------------------------ +*/ + +// URLValues creates a url.Values object from an Obj. This +// function requires that the wrapped object be a map[string]interface{} +func (m Map) URLValues() url.Values { + vals := make(url.Values) + + m.parseURLValues(m, vals, "") + + return vals +} + +func (m Map) parseURLValues(queryMap Map, vals url.Values, key string) { + useSliceIndex := false + if urlValuesSliceKeySuffix == "[i]" { + useSliceIndex = true + } + + for k, v := range queryMap { + val := &Value{data: v} + switch { + case val.IsObjxMap(): + if key == "" { + m.parseURLValues(val.ObjxMap(), vals, k) + } else { + m.parseURLValues(val.ObjxMap(), vals, key+"["+k+"]") + } + case val.IsObjxMapSlice(): + sliceKey := k + if key != "" { + sliceKey = key + "[" + k + "]" + } + + if useSliceIndex { + for i, sv := range val.MustObjxMapSlice() { + sk := sliceKey + "[" + strconv.FormatInt(int64(i), 10) + "]" + m.parseURLValues(sv, vals, sk) + } + } else { + sliceKey = sliceKey + urlValuesSliceKeySuffix + for _, sv := range val.MustObjxMapSlice() { + m.parseURLValues(sv, vals, sliceKey) + } + } + case val.IsMSISlice(): + sliceKey := k + if key != "" { + sliceKey = key + "[" + k + "]" + } + + if useSliceIndex { + for i, sv := range val.MustMSISlice() { + sk := sliceKey + "[" + strconv.FormatInt(int64(i), 10) + "]" + m.parseURLValues(New(sv), vals, sk) + } + } else { + sliceKey = sliceKey + urlValuesSliceKeySuffix + for _, sv := range val.MustMSISlice() { + m.parseURLValues(New(sv), vals, sliceKey) + } + } + case val.IsStrSlice(), val.IsBoolSlice(), + val.IsFloat32Slice(), val.IsFloat64Slice(), + val.IsIntSlice(), val.IsInt8Slice(), val.IsInt16Slice(), val.IsInt32Slice(), val.IsInt64Slice(), + val.IsUintSlice(), val.IsUint8Slice(), val.IsUint16Slice(), val.IsUint32Slice(), val.IsUint64Slice(): + + sliceKey := k + if key != "" { + sliceKey = key + "[" + k + "]" + } + + if useSliceIndex { + for i, sv := range val.StringSlice() { + sk := sliceKey + "[" + strconv.FormatInt(int64(i), 10) + "]" + vals.Set(sk, sv) + } + } else { + sliceKey = sliceKey + urlValuesSliceKeySuffix + vals[sliceKey] = val.StringSlice() + } + + default: + if key == "" { + vals.Set(k, val.String()) + } else { + vals.Set(key+"["+k+"]", val.String()) + } + } + } +} + +// URLQuery gets an encoded URL query representing the given +// Obj. This function requires that the wrapped object be a +// map[string]interface{} +func (m Map) URLQuery() (string, error) { + return m.URLValues().Encode(), nil +} diff --git a/vendor/github.com/stretchr/objx/doc.go b/vendor/github.com/stretchr/objx/doc.go new file mode 100644 index 000000000..6d6af1a83 --- /dev/null +++ b/vendor/github.com/stretchr/objx/doc.go @@ -0,0 +1,66 @@ +/* +Objx - Go package for dealing with maps, slices, JSON and other data. + +Overview + +Objx provides the `objx.Map` type, which is a `map[string]interface{}` that exposes +a powerful `Get` method (among others) that allows you to easily and quickly get +access to data within the map, without having to worry too much about type assertions, +missing data, default values etc. + +Pattern + +Objx uses a preditable pattern to make access data from within `map[string]interface{}` easy. +Call one of the `objx.` functions to create your `objx.Map` to get going: + + m, err := objx.FromJSON(json) + +NOTE: Any methods or functions with the `Must` prefix will panic if something goes wrong, +the rest will be optimistic and try to figure things out without panicking. + +Use `Get` to access the value you're interested in. You can use dot and array +notation too: + + m.Get("places[0].latlng") + +Once you have sought the `Value` you're interested in, you can use the `Is*` methods to determine its type. + + if m.Get("code").IsStr() { // Your code... } + +Or you can just assume the type, and use one of the strong type methods to extract the real value: + + m.Get("code").Int() + +If there's no value there (or if it's the wrong type) then a default value will be returned, +or you can be explicit about the default value. + + Get("code").Int(-1) + +If you're dealing with a slice of data as a value, Objx provides many useful methods for iterating, +manipulating and selecting that data. You can find out more by exploring the index below. + +Reading data + +A simple example of how to use Objx: + + // Use MustFromJSON to make an objx.Map from some JSON + m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`) + + // Get the details + name := m.Get("name").Str() + age := m.Get("age").Int() + + // Get their nickname (or use their name if they don't have one) + nickname := m.Get("nickname").Str(name) + +Ranging + +Since `objx.Map` is a `map[string]interface{}` you can treat it as such. +For example, to `range` the data, do what you would expect: + + m := objx.MustFromJSON(json) + for key, value := range m { + // Your code... + } +*/ +package objx diff --git a/vendor/github.com/stretchr/objx/go.mod b/vendor/github.com/stretchr/objx/go.mod new file mode 100644 index 000000000..31ec5a7d9 --- /dev/null +++ b/vendor/github.com/stretchr/objx/go.mod @@ -0,0 +1,8 @@ +module github.com/stretchr/objx + +go 1.12 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/stretchr/testify v1.3.0 +) diff --git a/vendor/github.com/stretchr/objx/go.sum b/vendor/github.com/stretchr/objx/go.sum new file mode 100644 index 000000000..4f8984150 --- /dev/null +++ b/vendor/github.com/stretchr/objx/go.sum @@ -0,0 +1,8 @@ +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 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/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/github.com/stretchr/objx/map.go b/vendor/github.com/stretchr/objx/map.go new file mode 100644 index 000000000..95149c06a --- /dev/null +++ b/vendor/github.com/stretchr/objx/map.go @@ -0,0 +1,228 @@ +package objx + +import ( + "encoding/base64" + "encoding/json" + "errors" + "io/ioutil" + "net/url" + "strings" +) + +// MSIConvertable is an interface that defines methods for converting your +// custom types to a map[string]interface{} representation. +type MSIConvertable interface { + // MSI gets a map[string]interface{} (msi) representing the + // object. + MSI() map[string]interface{} +} + +// Map provides extended functionality for working with +// untyped data, in particular map[string]interface (msi). +type Map map[string]interface{} + +// Value returns the internal value instance +func (m Map) Value() *Value { + return &Value{data: m} +} + +// Nil represents a nil Map. +var Nil = New(nil) + +// New creates a new Map containing the map[string]interface{} in the data argument. +// If the data argument is not a map[string]interface, New attempts to call the +// MSI() method on the MSIConvertable interface to create one. +func New(data interface{}) Map { + if _, ok := data.(map[string]interface{}); !ok { + if converter, ok := data.(MSIConvertable); ok { + data = converter.MSI() + } else { + return nil + } + } + return Map(data.(map[string]interface{})) +} + +// MSI creates a map[string]interface{} and puts it inside a new Map. +// +// The arguments follow a key, value pattern. +// +// +// Returns nil if any key argument is non-string or if there are an odd number of arguments. +// +// Example +// +// To easily create Maps: +// +// m := objx.MSI("name", "Mat", "age", 29, "subobj", objx.MSI("active", true)) +// +// // creates an Map equivalent to +// m := objx.Map{"name": "Mat", "age": 29, "subobj": objx.Map{"active": true}} +func MSI(keyAndValuePairs ...interface{}) Map { + newMap := Map{} + keyAndValuePairsLen := len(keyAndValuePairs) + if keyAndValuePairsLen%2 != 0 { + return nil + } + for i := 0; i < keyAndValuePairsLen; i = i + 2 { + key := keyAndValuePairs[i] + value := keyAndValuePairs[i+1] + + // make sure the key is a string + keyString, keyStringOK := key.(string) + if !keyStringOK { + return nil + } + newMap[keyString] = value + } + return newMap +} + +// ****** Conversion Constructors + +// MustFromJSON creates a new Map containing the data specified in the +// jsonString. +// +// Panics if the JSON is invalid. +func MustFromJSON(jsonString string) Map { + o, err := FromJSON(jsonString) + if err != nil { + panic("objx: MustFromJSON failed with error: " + err.Error()) + } + return o +} + +// FromJSON creates a new Map containing the data specified in the +// jsonString. +// +// Returns an error if the JSON is invalid. +func FromJSON(jsonString string) (Map, error) { + var m Map + err := json.Unmarshal([]byte(jsonString), &m) + if err != nil { + return Nil, err + } + m.tryConvertFloat64() + return m, nil +} + +func (m Map) tryConvertFloat64() { + for k, v := range m { + switch v.(type) { + case float64: + f := v.(float64) + if float64(int(f)) == f { + m[k] = int(f) + } + case map[string]interface{}: + t := New(v) + t.tryConvertFloat64() + m[k] = t + case []interface{}: + m[k] = tryConvertFloat64InSlice(v.([]interface{})) + } + } +} + +func tryConvertFloat64InSlice(s []interface{}) []interface{} { + for k, v := range s { + switch v.(type) { + case float64: + f := v.(float64) + if float64(int(f)) == f { + s[k] = int(f) + } + case map[string]interface{}: + t := New(v) + t.tryConvertFloat64() + s[k] = t + case []interface{}: + s[k] = tryConvertFloat64InSlice(v.([]interface{})) + } + } + return s +} + +// FromBase64 creates a new Obj containing the data specified +// in the Base64 string. +// +// The string is an encoded JSON string returned by Base64 +func FromBase64(base64String string) (Map, error) { + decoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(base64String)) + decoded, err := ioutil.ReadAll(decoder) + if err != nil { + return nil, err + } + return FromJSON(string(decoded)) +} + +// MustFromBase64 creates a new Obj containing the data specified +// in the Base64 string and panics if there is an error. +// +// The string is an encoded JSON string returned by Base64 +func MustFromBase64(base64String string) Map { + result, err := FromBase64(base64String) + if err != nil { + panic("objx: MustFromBase64 failed with error: " + err.Error()) + } + return result +} + +// FromSignedBase64 creates a new Obj containing the data specified +// in the Base64 string. +// +// The string is an encoded JSON string returned by SignedBase64 +func FromSignedBase64(base64String, key string) (Map, error) { + parts := strings.Split(base64String, SignatureSeparator) + if len(parts) != 2 { + return nil, errors.New("objx: Signed base64 string is malformed") + } + + sig := HashWithKey(parts[0], key) + if parts[1] != sig { + return nil, errors.New("objx: Signature for base64 data does not match") + } + return FromBase64(parts[0]) +} + +// MustFromSignedBase64 creates a new Obj containing the data specified +// in the Base64 string and panics if there is an error. +// +// The string is an encoded JSON string returned by Base64 +func MustFromSignedBase64(base64String, key string) Map { + result, err := FromSignedBase64(base64String, key) + if err != nil { + panic("objx: MustFromSignedBase64 failed with error: " + err.Error()) + } + return result +} + +// FromURLQuery generates a new Obj by parsing the specified +// query. +// +// For queries with multiple values, the first value is selected. +func FromURLQuery(query string) (Map, error) { + vals, err := url.ParseQuery(query) + if err != nil { + return nil, err + } + m := Map{} + for k, vals := range vals { + m[k] = vals[0] + } + return m, nil +} + +// MustFromURLQuery generates a new Obj by parsing the specified +// query. +// +// For queries with multiple values, the first value is selected. +// +// Panics if it encounters an error +func MustFromURLQuery(query string) Map { + o, err := FromURLQuery(query) + if err != nil { + panic("objx: MustFromURLQuery failed with error: " + err.Error()) + } + return o +} diff --git a/vendor/github.com/stretchr/objx/mutations.go b/vendor/github.com/stretchr/objx/mutations.go new file mode 100644 index 000000000..c3400a3f7 --- /dev/null +++ b/vendor/github.com/stretchr/objx/mutations.go @@ -0,0 +1,77 @@ +package objx + +// Exclude returns a new Map with the keys in the specified []string +// excluded. +func (m Map) Exclude(exclude []string) Map { + excluded := make(Map) + for k, v := range m { + if !contains(exclude, k) { + excluded[k] = v + } + } + return excluded +} + +// Copy creates a shallow copy of the Obj. +func (m Map) Copy() Map { + copied := Map{} + for k, v := range m { + copied[k] = v + } + return copied +} + +// Merge blends the specified map with a copy of this map and returns the result. +// +// Keys that appear in both will be selected from the specified map. +// This method requires that the wrapped object be a map[string]interface{} +func (m Map) Merge(merge Map) Map { + return m.Copy().MergeHere(merge) +} + +// MergeHere blends the specified map with this map and returns the current map. +// +// Keys that appear in both will be selected from the specified map. The original map +// will be modified. This method requires that +// the wrapped object be a map[string]interface{} +func (m Map) MergeHere(merge Map) Map { + for k, v := range merge { + m[k] = v + } + return m +} + +// Transform builds a new Obj giving the transformer a chance +// to change the keys and values as it goes. This method requires that +// the wrapped object be a map[string]interface{} +func (m Map) Transform(transformer func(key string, value interface{}) (string, interface{})) Map { + newMap := Map{} + for k, v := range m { + modifiedKey, modifiedVal := transformer(k, v) + newMap[modifiedKey] = modifiedVal + } + return newMap +} + +// TransformKeys builds a new map using the specified key mapping. +// +// Unspecified keys will be unaltered. +// This method requires that the wrapped object be a map[string]interface{} +func (m Map) TransformKeys(mapping map[string]string) Map { + return m.Transform(func(key string, value interface{}) (string, interface{}) { + if newKey, ok := mapping[key]; ok { + return newKey, value + } + return key, value + }) +} + +// Checks if a string slice contains a string +func contains(s []string, e string) bool { + for _, a := range s { + if a == e { + return true + } + } + return false +} diff --git a/vendor/github.com/stretchr/objx/security.go b/vendor/github.com/stretchr/objx/security.go new file mode 100644 index 000000000..692be8e2a --- /dev/null +++ b/vendor/github.com/stretchr/objx/security.go @@ -0,0 +1,12 @@ +package objx + +import ( + "crypto/sha1" + "encoding/hex" +) + +// HashWithKey hashes the specified string using the security key +func HashWithKey(data, key string) string { + d := sha1.Sum([]byte(data + ":" + key)) + return hex.EncodeToString(d[:]) +} diff --git a/vendor/github.com/stretchr/objx/tests.go b/vendor/github.com/stretchr/objx/tests.go new file mode 100644 index 000000000..d9e0b479a --- /dev/null +++ b/vendor/github.com/stretchr/objx/tests.go @@ -0,0 +1,17 @@ +package objx + +// Has gets whether there is something at the specified selector +// or not. +// +// If m is nil, Has will always return false. +func (m Map) Has(selector string) bool { + if m == nil { + return false + } + return !m.Get(selector).IsNil() +} + +// IsNil gets whether the data is nil or not. +func (v *Value) IsNil() bool { + return v == nil || v.data == nil +} diff --git a/vendor/github.com/stretchr/objx/type_specific.go b/vendor/github.com/stretchr/objx/type_specific.go new file mode 100644 index 000000000..80f88d9fa --- /dev/null +++ b/vendor/github.com/stretchr/objx/type_specific.go @@ -0,0 +1,346 @@ +package objx + +/* + MSI (map[string]interface{} and []map[string]interface{}) +*/ + +// MSI gets the value as a map[string]interface{}, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) MSI(optionalDefault ...map[string]interface{}) map[string]interface{} { + if s, ok := v.data.(map[string]interface{}); ok { + return s + } + if s, ok := v.data.(Map); ok { + return map[string]interface{}(s) + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustMSI gets the value as a map[string]interface{}. +// +// Panics if the object is not a map[string]interface{}. +func (v *Value) MustMSI() map[string]interface{} { + if s, ok := v.data.(Map); ok { + return map[string]interface{}(s) + } + return v.data.(map[string]interface{}) +} + +// MSISlice gets the value as a []map[string]interface{}, returns the optionalDefault +// value or nil if the value is not a []map[string]interface{}. +func (v *Value) MSISlice(optionalDefault ...[]map[string]interface{}) []map[string]interface{} { + if s, ok := v.data.([]map[string]interface{}); ok { + return s + } + + s := v.ObjxMapSlice() + if s == nil { + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil + } + + result := make([]map[string]interface{}, len(s)) + for i := range s { + result[i] = s[i].Value().MSI() + } + return result +} + +// MustMSISlice gets the value as a []map[string]interface{}. +// +// Panics if the object is not a []map[string]interface{}. +func (v *Value) MustMSISlice() []map[string]interface{} { + if s := v.MSISlice(); s != nil { + return s + } + + return v.data.([]map[string]interface{}) +} + +// IsMSI gets whether the object contained is a map[string]interface{} or not. +func (v *Value) IsMSI() bool { + _, ok := v.data.(map[string]interface{}) + if !ok { + _, ok = v.data.(Map) + } + return ok +} + +// IsMSISlice gets whether the object contained is a []map[string]interface{} or not. +func (v *Value) IsMSISlice() bool { + _, ok := v.data.([]map[string]interface{}) + if !ok { + _, ok = v.data.([]Map) + if !ok { + s, ok := v.data.([]interface{}) + if ok { + for i := range s { + switch s[i].(type) { + case Map: + case map[string]interface{}: + default: + return false + } + } + return true + } + } + } + return ok +} + +// EachMSI calls the specified callback for each object +// in the []map[string]interface{}. +// +// Panics if the object is the wrong type. +func (v *Value) EachMSI(callback func(int, map[string]interface{}) bool) *Value { + for index, val := range v.MustMSISlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereMSI uses the specified decider function to select items +// from the []map[string]interface{}. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereMSI(decider func(int, map[string]interface{}) bool) *Value { + var selected []map[string]interface{} + v.EachMSI(func(index int, val map[string]interface{}) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupMSI uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]map[string]interface{}. +func (v *Value) GroupMSI(grouper func(int, map[string]interface{}) string) *Value { + groups := make(map[string][]map[string]interface{}) + v.EachMSI(func(index int, val map[string]interface{}) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]map[string]interface{}, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceMSI uses the specified function to replace each map[string]interface{}s +// by iterating each item. The data in the returned result will be a +// []map[string]interface{} containing the replaced items. +func (v *Value) ReplaceMSI(replacer func(int, map[string]interface{}) map[string]interface{}) *Value { + arr := v.MustMSISlice() + replaced := make([]map[string]interface{}, len(arr)) + v.EachMSI(func(index int, val map[string]interface{}) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectMSI uses the specified collector function to collect a value +// for each of the map[string]interface{}s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectMSI(collector func(int, map[string]interface{}) interface{}) *Value { + arr := v.MustMSISlice() + collected := make([]interface{}, len(arr)) + v.EachMSI(func(index int, val map[string]interface{}) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + ObjxMap ((Map) and [](Map)) +*/ + +// ObjxMap gets the value as a (Map), returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) ObjxMap(optionalDefault ...(Map)) Map { + if s, ok := v.data.((Map)); ok { + return s + } + if s, ok := v.data.(map[string]interface{}); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return New(nil) +} + +// MustObjxMap gets the value as a (Map). +// +// Panics if the object is not a (Map). +func (v *Value) MustObjxMap() Map { + if s, ok := v.data.(map[string]interface{}); ok { + return s + } + return v.data.((Map)) +} + +// ObjxMapSlice gets the value as a [](Map), returns the optionalDefault +// value or nil if the value is not a [](Map). +func (v *Value) ObjxMapSlice(optionalDefault ...[](Map)) [](Map) { + if s, ok := v.data.([]Map); ok { + return s + } + + if s, ok := v.data.([]map[string]interface{}); ok { + result := make([]Map, len(s)) + for i := range s { + result[i] = s[i] + } + return result + } + + s, ok := v.data.([]interface{}) + if !ok { + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil + } + + result := make([]Map, len(s)) + for i := range s { + switch s[i].(type) { + case Map: + result[i] = s[i].(Map) + case map[string]interface{}: + result[i] = New(s[i]) + default: + return nil + } + } + return result +} + +// MustObjxMapSlice gets the value as a [](Map). +// +// Panics if the object is not a [](Map). +func (v *Value) MustObjxMapSlice() [](Map) { + if s := v.ObjxMapSlice(); s != nil { + return s + } + return v.data.([](Map)) +} + +// IsObjxMap gets whether the object contained is a (Map) or not. +func (v *Value) IsObjxMap() bool { + _, ok := v.data.((Map)) + if !ok { + _, ok = v.data.(map[string]interface{}) + } + return ok +} + +// IsObjxMapSlice gets whether the object contained is a [](Map) or not. +func (v *Value) IsObjxMapSlice() bool { + _, ok := v.data.([](Map)) + if !ok { + _, ok = v.data.([]map[string]interface{}) + if !ok { + s, ok := v.data.([]interface{}) + if ok { + for i := range s { + switch s[i].(type) { + case Map: + case map[string]interface{}: + default: + return false + } + } + return true + } + } + } + + return ok +} + +// EachObjxMap calls the specified callback for each object +// in the [](Map). +// +// Panics if the object is the wrong type. +func (v *Value) EachObjxMap(callback func(int, Map) bool) *Value { + for index, val := range v.MustObjxMapSlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereObjxMap uses the specified decider function to select items +// from the [](Map). The object contained in the result will contain +// only the selected items. +func (v *Value) WhereObjxMap(decider func(int, Map) bool) *Value { + var selected [](Map) + v.EachObjxMap(func(index int, val Map) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupObjxMap uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][](Map). +func (v *Value) GroupObjxMap(grouper func(int, Map) string) *Value { + groups := make(map[string][](Map)) + v.EachObjxMap(func(index int, val Map) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([](Map), 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceObjxMap uses the specified function to replace each (Map)s +// by iterating each item. The data in the returned result will be a +// [](Map) containing the replaced items. +func (v *Value) ReplaceObjxMap(replacer func(int, Map) Map) *Value { + arr := v.MustObjxMapSlice() + replaced := make([](Map), len(arr)) + v.EachObjxMap(func(index int, val Map) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectObjxMap uses the specified collector function to collect a value +// for each of the (Map)s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectObjxMap(collector func(int, Map) interface{}) *Value { + arr := v.MustObjxMapSlice() + collected := make([]interface{}, len(arr)) + v.EachObjxMap(func(index int, val Map) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} diff --git a/vendor/github.com/stretchr/objx/type_specific_codegen.go b/vendor/github.com/stretchr/objx/type_specific_codegen.go new file mode 100644 index 000000000..9859b407f --- /dev/null +++ b/vendor/github.com/stretchr/objx/type_specific_codegen.go @@ -0,0 +1,2251 @@ +package objx + +/* + Inter (interface{} and []interface{}) +*/ + +// Inter gets the value as a interface{}, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Inter(optionalDefault ...interface{}) interface{} { + if s, ok := v.data.(interface{}); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustInter gets the value as a interface{}. +// +// Panics if the object is not a interface{}. +func (v *Value) MustInter() interface{} { + return v.data.(interface{}) +} + +// InterSlice gets the value as a []interface{}, returns the optionalDefault +// value or nil if the value is not a []interface{}. +func (v *Value) InterSlice(optionalDefault ...[]interface{}) []interface{} { + if s, ok := v.data.([]interface{}); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustInterSlice gets the value as a []interface{}. +// +// Panics if the object is not a []interface{}. +func (v *Value) MustInterSlice() []interface{} { + return v.data.([]interface{}) +} + +// IsInter gets whether the object contained is a interface{} or not. +func (v *Value) IsInter() bool { + _, ok := v.data.(interface{}) + return ok +} + +// IsInterSlice gets whether the object contained is a []interface{} or not. +func (v *Value) IsInterSlice() bool { + _, ok := v.data.([]interface{}) + return ok +} + +// EachInter calls the specified callback for each object +// in the []interface{}. +// +// Panics if the object is the wrong type. +func (v *Value) EachInter(callback func(int, interface{}) bool) *Value { + for index, val := range v.MustInterSlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereInter uses the specified decider function to select items +// from the []interface{}. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereInter(decider func(int, interface{}) bool) *Value { + var selected []interface{} + v.EachInter(func(index int, val interface{}) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupInter uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]interface{}. +func (v *Value) GroupInter(grouper func(int, interface{}) string) *Value { + groups := make(map[string][]interface{}) + v.EachInter(func(index int, val interface{}) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]interface{}, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceInter uses the specified function to replace each interface{}s +// by iterating each item. The data in the returned result will be a +// []interface{} containing the replaced items. +func (v *Value) ReplaceInter(replacer func(int, interface{}) interface{}) *Value { + arr := v.MustInterSlice() + replaced := make([]interface{}, len(arr)) + v.EachInter(func(index int, val interface{}) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectInter uses the specified collector function to collect a value +// for each of the interface{}s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectInter(collector func(int, interface{}) interface{}) *Value { + arr := v.MustInterSlice() + collected := make([]interface{}, len(arr)) + v.EachInter(func(index int, val interface{}) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Bool (bool and []bool) +*/ + +// Bool gets the value as a bool, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Bool(optionalDefault ...bool) bool { + if s, ok := v.data.(bool); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return false +} + +// MustBool gets the value as a bool. +// +// Panics if the object is not a bool. +func (v *Value) MustBool() bool { + return v.data.(bool) +} + +// BoolSlice gets the value as a []bool, returns the optionalDefault +// value or nil if the value is not a []bool. +func (v *Value) BoolSlice(optionalDefault ...[]bool) []bool { + if s, ok := v.data.([]bool); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustBoolSlice gets the value as a []bool. +// +// Panics if the object is not a []bool. +func (v *Value) MustBoolSlice() []bool { + return v.data.([]bool) +} + +// IsBool gets whether the object contained is a bool or not. +func (v *Value) IsBool() bool { + _, ok := v.data.(bool) + return ok +} + +// IsBoolSlice gets whether the object contained is a []bool or not. +func (v *Value) IsBoolSlice() bool { + _, ok := v.data.([]bool) + return ok +} + +// EachBool calls the specified callback for each object +// in the []bool. +// +// Panics if the object is the wrong type. +func (v *Value) EachBool(callback func(int, bool) bool) *Value { + for index, val := range v.MustBoolSlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereBool uses the specified decider function to select items +// from the []bool. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereBool(decider func(int, bool) bool) *Value { + var selected []bool + v.EachBool(func(index int, val bool) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupBool uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]bool. +func (v *Value) GroupBool(grouper func(int, bool) string) *Value { + groups := make(map[string][]bool) + v.EachBool(func(index int, val bool) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]bool, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceBool uses the specified function to replace each bools +// by iterating each item. The data in the returned result will be a +// []bool containing the replaced items. +func (v *Value) ReplaceBool(replacer func(int, bool) bool) *Value { + arr := v.MustBoolSlice() + replaced := make([]bool, len(arr)) + v.EachBool(func(index int, val bool) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectBool uses the specified collector function to collect a value +// for each of the bools in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectBool(collector func(int, bool) interface{}) *Value { + arr := v.MustBoolSlice() + collected := make([]interface{}, len(arr)) + v.EachBool(func(index int, val bool) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Str (string and []string) +*/ + +// Str gets the value as a string, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Str(optionalDefault ...string) string { + if s, ok := v.data.(string); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return "" +} + +// MustStr gets the value as a string. +// +// Panics if the object is not a string. +func (v *Value) MustStr() string { + return v.data.(string) +} + +// StrSlice gets the value as a []string, returns the optionalDefault +// value or nil if the value is not a []string. +func (v *Value) StrSlice(optionalDefault ...[]string) []string { + if s, ok := v.data.([]string); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustStrSlice gets the value as a []string. +// +// Panics if the object is not a []string. +func (v *Value) MustStrSlice() []string { + return v.data.([]string) +} + +// IsStr gets whether the object contained is a string or not. +func (v *Value) IsStr() bool { + _, ok := v.data.(string) + return ok +} + +// IsStrSlice gets whether the object contained is a []string or not. +func (v *Value) IsStrSlice() bool { + _, ok := v.data.([]string) + return ok +} + +// EachStr calls the specified callback for each object +// in the []string. +// +// Panics if the object is the wrong type. +func (v *Value) EachStr(callback func(int, string) bool) *Value { + for index, val := range v.MustStrSlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereStr uses the specified decider function to select items +// from the []string. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereStr(decider func(int, string) bool) *Value { + var selected []string + v.EachStr(func(index int, val string) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupStr uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]string. +func (v *Value) GroupStr(grouper func(int, string) string) *Value { + groups := make(map[string][]string) + v.EachStr(func(index int, val string) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]string, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceStr uses the specified function to replace each strings +// by iterating each item. The data in the returned result will be a +// []string containing the replaced items. +func (v *Value) ReplaceStr(replacer func(int, string) string) *Value { + arr := v.MustStrSlice() + replaced := make([]string, len(arr)) + v.EachStr(func(index int, val string) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectStr uses the specified collector function to collect a value +// for each of the strings in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectStr(collector func(int, string) interface{}) *Value { + arr := v.MustStrSlice() + collected := make([]interface{}, len(arr)) + v.EachStr(func(index int, val string) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Int (int and []int) +*/ + +// Int gets the value as a int, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Int(optionalDefault ...int) int { + if s, ok := v.data.(int); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustInt gets the value as a int. +// +// Panics if the object is not a int. +func (v *Value) MustInt() int { + return v.data.(int) +} + +// IntSlice gets the value as a []int, returns the optionalDefault +// value or nil if the value is not a []int. +func (v *Value) IntSlice(optionalDefault ...[]int) []int { + if s, ok := v.data.([]int); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustIntSlice gets the value as a []int. +// +// Panics if the object is not a []int. +func (v *Value) MustIntSlice() []int { + return v.data.([]int) +} + +// IsInt gets whether the object contained is a int or not. +func (v *Value) IsInt() bool { + _, ok := v.data.(int) + return ok +} + +// IsIntSlice gets whether the object contained is a []int or not. +func (v *Value) IsIntSlice() bool { + _, ok := v.data.([]int) + return ok +} + +// EachInt calls the specified callback for each object +// in the []int. +// +// Panics if the object is the wrong type. +func (v *Value) EachInt(callback func(int, int) bool) *Value { + for index, val := range v.MustIntSlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereInt uses the specified decider function to select items +// from the []int. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereInt(decider func(int, int) bool) *Value { + var selected []int + v.EachInt(func(index int, val int) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupInt uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]int. +func (v *Value) GroupInt(grouper func(int, int) string) *Value { + groups := make(map[string][]int) + v.EachInt(func(index int, val int) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]int, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceInt uses the specified function to replace each ints +// by iterating each item. The data in the returned result will be a +// []int containing the replaced items. +func (v *Value) ReplaceInt(replacer func(int, int) int) *Value { + arr := v.MustIntSlice() + replaced := make([]int, len(arr)) + v.EachInt(func(index int, val int) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectInt uses the specified collector function to collect a value +// for each of the ints in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectInt(collector func(int, int) interface{}) *Value { + arr := v.MustIntSlice() + collected := make([]interface{}, len(arr)) + v.EachInt(func(index int, val int) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Int8 (int8 and []int8) +*/ + +// Int8 gets the value as a int8, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Int8(optionalDefault ...int8) int8 { + if s, ok := v.data.(int8); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustInt8 gets the value as a int8. +// +// Panics if the object is not a int8. +func (v *Value) MustInt8() int8 { + return v.data.(int8) +} + +// Int8Slice gets the value as a []int8, returns the optionalDefault +// value or nil if the value is not a []int8. +func (v *Value) Int8Slice(optionalDefault ...[]int8) []int8 { + if s, ok := v.data.([]int8); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustInt8Slice gets the value as a []int8. +// +// Panics if the object is not a []int8. +func (v *Value) MustInt8Slice() []int8 { + return v.data.([]int8) +} + +// IsInt8 gets whether the object contained is a int8 or not. +func (v *Value) IsInt8() bool { + _, ok := v.data.(int8) + return ok +} + +// IsInt8Slice gets whether the object contained is a []int8 or not. +func (v *Value) IsInt8Slice() bool { + _, ok := v.data.([]int8) + return ok +} + +// EachInt8 calls the specified callback for each object +// in the []int8. +// +// Panics if the object is the wrong type. +func (v *Value) EachInt8(callback func(int, int8) bool) *Value { + for index, val := range v.MustInt8Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereInt8 uses the specified decider function to select items +// from the []int8. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereInt8(decider func(int, int8) bool) *Value { + var selected []int8 + v.EachInt8(func(index int, val int8) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupInt8 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]int8. +func (v *Value) GroupInt8(grouper func(int, int8) string) *Value { + groups := make(map[string][]int8) + v.EachInt8(func(index int, val int8) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]int8, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceInt8 uses the specified function to replace each int8s +// by iterating each item. The data in the returned result will be a +// []int8 containing the replaced items. +func (v *Value) ReplaceInt8(replacer func(int, int8) int8) *Value { + arr := v.MustInt8Slice() + replaced := make([]int8, len(arr)) + v.EachInt8(func(index int, val int8) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectInt8 uses the specified collector function to collect a value +// for each of the int8s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectInt8(collector func(int, int8) interface{}) *Value { + arr := v.MustInt8Slice() + collected := make([]interface{}, len(arr)) + v.EachInt8(func(index int, val int8) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Int16 (int16 and []int16) +*/ + +// Int16 gets the value as a int16, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Int16(optionalDefault ...int16) int16 { + if s, ok := v.data.(int16); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustInt16 gets the value as a int16. +// +// Panics if the object is not a int16. +func (v *Value) MustInt16() int16 { + return v.data.(int16) +} + +// Int16Slice gets the value as a []int16, returns the optionalDefault +// value or nil if the value is not a []int16. +func (v *Value) Int16Slice(optionalDefault ...[]int16) []int16 { + if s, ok := v.data.([]int16); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustInt16Slice gets the value as a []int16. +// +// Panics if the object is not a []int16. +func (v *Value) MustInt16Slice() []int16 { + return v.data.([]int16) +} + +// IsInt16 gets whether the object contained is a int16 or not. +func (v *Value) IsInt16() bool { + _, ok := v.data.(int16) + return ok +} + +// IsInt16Slice gets whether the object contained is a []int16 or not. +func (v *Value) IsInt16Slice() bool { + _, ok := v.data.([]int16) + return ok +} + +// EachInt16 calls the specified callback for each object +// in the []int16. +// +// Panics if the object is the wrong type. +func (v *Value) EachInt16(callback func(int, int16) bool) *Value { + for index, val := range v.MustInt16Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereInt16 uses the specified decider function to select items +// from the []int16. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereInt16(decider func(int, int16) bool) *Value { + var selected []int16 + v.EachInt16(func(index int, val int16) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupInt16 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]int16. +func (v *Value) GroupInt16(grouper func(int, int16) string) *Value { + groups := make(map[string][]int16) + v.EachInt16(func(index int, val int16) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]int16, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceInt16 uses the specified function to replace each int16s +// by iterating each item. The data in the returned result will be a +// []int16 containing the replaced items. +func (v *Value) ReplaceInt16(replacer func(int, int16) int16) *Value { + arr := v.MustInt16Slice() + replaced := make([]int16, len(arr)) + v.EachInt16(func(index int, val int16) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectInt16 uses the specified collector function to collect a value +// for each of the int16s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectInt16(collector func(int, int16) interface{}) *Value { + arr := v.MustInt16Slice() + collected := make([]interface{}, len(arr)) + v.EachInt16(func(index int, val int16) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Int32 (int32 and []int32) +*/ + +// Int32 gets the value as a int32, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Int32(optionalDefault ...int32) int32 { + if s, ok := v.data.(int32); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustInt32 gets the value as a int32. +// +// Panics if the object is not a int32. +func (v *Value) MustInt32() int32 { + return v.data.(int32) +} + +// Int32Slice gets the value as a []int32, returns the optionalDefault +// value or nil if the value is not a []int32. +func (v *Value) Int32Slice(optionalDefault ...[]int32) []int32 { + if s, ok := v.data.([]int32); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustInt32Slice gets the value as a []int32. +// +// Panics if the object is not a []int32. +func (v *Value) MustInt32Slice() []int32 { + return v.data.([]int32) +} + +// IsInt32 gets whether the object contained is a int32 or not. +func (v *Value) IsInt32() bool { + _, ok := v.data.(int32) + return ok +} + +// IsInt32Slice gets whether the object contained is a []int32 or not. +func (v *Value) IsInt32Slice() bool { + _, ok := v.data.([]int32) + return ok +} + +// EachInt32 calls the specified callback for each object +// in the []int32. +// +// Panics if the object is the wrong type. +func (v *Value) EachInt32(callback func(int, int32) bool) *Value { + for index, val := range v.MustInt32Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereInt32 uses the specified decider function to select items +// from the []int32. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereInt32(decider func(int, int32) bool) *Value { + var selected []int32 + v.EachInt32(func(index int, val int32) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupInt32 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]int32. +func (v *Value) GroupInt32(grouper func(int, int32) string) *Value { + groups := make(map[string][]int32) + v.EachInt32(func(index int, val int32) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]int32, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceInt32 uses the specified function to replace each int32s +// by iterating each item. The data in the returned result will be a +// []int32 containing the replaced items. +func (v *Value) ReplaceInt32(replacer func(int, int32) int32) *Value { + arr := v.MustInt32Slice() + replaced := make([]int32, len(arr)) + v.EachInt32(func(index int, val int32) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectInt32 uses the specified collector function to collect a value +// for each of the int32s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectInt32(collector func(int, int32) interface{}) *Value { + arr := v.MustInt32Slice() + collected := make([]interface{}, len(arr)) + v.EachInt32(func(index int, val int32) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Int64 (int64 and []int64) +*/ + +// Int64 gets the value as a int64, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Int64(optionalDefault ...int64) int64 { + if s, ok := v.data.(int64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustInt64 gets the value as a int64. +// +// Panics if the object is not a int64. +func (v *Value) MustInt64() int64 { + return v.data.(int64) +} + +// Int64Slice gets the value as a []int64, returns the optionalDefault +// value or nil if the value is not a []int64. +func (v *Value) Int64Slice(optionalDefault ...[]int64) []int64 { + if s, ok := v.data.([]int64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustInt64Slice gets the value as a []int64. +// +// Panics if the object is not a []int64. +func (v *Value) MustInt64Slice() []int64 { + return v.data.([]int64) +} + +// IsInt64 gets whether the object contained is a int64 or not. +func (v *Value) IsInt64() bool { + _, ok := v.data.(int64) + return ok +} + +// IsInt64Slice gets whether the object contained is a []int64 or not. +func (v *Value) IsInt64Slice() bool { + _, ok := v.data.([]int64) + return ok +} + +// EachInt64 calls the specified callback for each object +// in the []int64. +// +// Panics if the object is the wrong type. +func (v *Value) EachInt64(callback func(int, int64) bool) *Value { + for index, val := range v.MustInt64Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereInt64 uses the specified decider function to select items +// from the []int64. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereInt64(decider func(int, int64) bool) *Value { + var selected []int64 + v.EachInt64(func(index int, val int64) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupInt64 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]int64. +func (v *Value) GroupInt64(grouper func(int, int64) string) *Value { + groups := make(map[string][]int64) + v.EachInt64(func(index int, val int64) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]int64, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceInt64 uses the specified function to replace each int64s +// by iterating each item. The data in the returned result will be a +// []int64 containing the replaced items. +func (v *Value) ReplaceInt64(replacer func(int, int64) int64) *Value { + arr := v.MustInt64Slice() + replaced := make([]int64, len(arr)) + v.EachInt64(func(index int, val int64) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectInt64 uses the specified collector function to collect a value +// for each of the int64s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectInt64(collector func(int, int64) interface{}) *Value { + arr := v.MustInt64Slice() + collected := make([]interface{}, len(arr)) + v.EachInt64(func(index int, val int64) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Uint (uint and []uint) +*/ + +// Uint gets the value as a uint, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Uint(optionalDefault ...uint) uint { + if s, ok := v.data.(uint); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustUint gets the value as a uint. +// +// Panics if the object is not a uint. +func (v *Value) MustUint() uint { + return v.data.(uint) +} + +// UintSlice gets the value as a []uint, returns the optionalDefault +// value or nil if the value is not a []uint. +func (v *Value) UintSlice(optionalDefault ...[]uint) []uint { + if s, ok := v.data.([]uint); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustUintSlice gets the value as a []uint. +// +// Panics if the object is not a []uint. +func (v *Value) MustUintSlice() []uint { + return v.data.([]uint) +} + +// IsUint gets whether the object contained is a uint or not. +func (v *Value) IsUint() bool { + _, ok := v.data.(uint) + return ok +} + +// IsUintSlice gets whether the object contained is a []uint or not. +func (v *Value) IsUintSlice() bool { + _, ok := v.data.([]uint) + return ok +} + +// EachUint calls the specified callback for each object +// in the []uint. +// +// Panics if the object is the wrong type. +func (v *Value) EachUint(callback func(int, uint) bool) *Value { + for index, val := range v.MustUintSlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereUint uses the specified decider function to select items +// from the []uint. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereUint(decider func(int, uint) bool) *Value { + var selected []uint + v.EachUint(func(index int, val uint) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupUint uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]uint. +func (v *Value) GroupUint(grouper func(int, uint) string) *Value { + groups := make(map[string][]uint) + v.EachUint(func(index int, val uint) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]uint, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceUint uses the specified function to replace each uints +// by iterating each item. The data in the returned result will be a +// []uint containing the replaced items. +func (v *Value) ReplaceUint(replacer func(int, uint) uint) *Value { + arr := v.MustUintSlice() + replaced := make([]uint, len(arr)) + v.EachUint(func(index int, val uint) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectUint uses the specified collector function to collect a value +// for each of the uints in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectUint(collector func(int, uint) interface{}) *Value { + arr := v.MustUintSlice() + collected := make([]interface{}, len(arr)) + v.EachUint(func(index int, val uint) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Uint8 (uint8 and []uint8) +*/ + +// Uint8 gets the value as a uint8, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Uint8(optionalDefault ...uint8) uint8 { + if s, ok := v.data.(uint8); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustUint8 gets the value as a uint8. +// +// Panics if the object is not a uint8. +func (v *Value) MustUint8() uint8 { + return v.data.(uint8) +} + +// Uint8Slice gets the value as a []uint8, returns the optionalDefault +// value or nil if the value is not a []uint8. +func (v *Value) Uint8Slice(optionalDefault ...[]uint8) []uint8 { + if s, ok := v.data.([]uint8); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustUint8Slice gets the value as a []uint8. +// +// Panics if the object is not a []uint8. +func (v *Value) MustUint8Slice() []uint8 { + return v.data.([]uint8) +} + +// IsUint8 gets whether the object contained is a uint8 or not. +func (v *Value) IsUint8() bool { + _, ok := v.data.(uint8) + return ok +} + +// IsUint8Slice gets whether the object contained is a []uint8 or not. +func (v *Value) IsUint8Slice() bool { + _, ok := v.data.([]uint8) + return ok +} + +// EachUint8 calls the specified callback for each object +// in the []uint8. +// +// Panics if the object is the wrong type. +func (v *Value) EachUint8(callback func(int, uint8) bool) *Value { + for index, val := range v.MustUint8Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereUint8 uses the specified decider function to select items +// from the []uint8. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereUint8(decider func(int, uint8) bool) *Value { + var selected []uint8 + v.EachUint8(func(index int, val uint8) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupUint8 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]uint8. +func (v *Value) GroupUint8(grouper func(int, uint8) string) *Value { + groups := make(map[string][]uint8) + v.EachUint8(func(index int, val uint8) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]uint8, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceUint8 uses the specified function to replace each uint8s +// by iterating each item. The data in the returned result will be a +// []uint8 containing the replaced items. +func (v *Value) ReplaceUint8(replacer func(int, uint8) uint8) *Value { + arr := v.MustUint8Slice() + replaced := make([]uint8, len(arr)) + v.EachUint8(func(index int, val uint8) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectUint8 uses the specified collector function to collect a value +// for each of the uint8s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectUint8(collector func(int, uint8) interface{}) *Value { + arr := v.MustUint8Slice() + collected := make([]interface{}, len(arr)) + v.EachUint8(func(index int, val uint8) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Uint16 (uint16 and []uint16) +*/ + +// Uint16 gets the value as a uint16, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Uint16(optionalDefault ...uint16) uint16 { + if s, ok := v.data.(uint16); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustUint16 gets the value as a uint16. +// +// Panics if the object is not a uint16. +func (v *Value) MustUint16() uint16 { + return v.data.(uint16) +} + +// Uint16Slice gets the value as a []uint16, returns the optionalDefault +// value or nil if the value is not a []uint16. +func (v *Value) Uint16Slice(optionalDefault ...[]uint16) []uint16 { + if s, ok := v.data.([]uint16); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustUint16Slice gets the value as a []uint16. +// +// Panics if the object is not a []uint16. +func (v *Value) MustUint16Slice() []uint16 { + return v.data.([]uint16) +} + +// IsUint16 gets whether the object contained is a uint16 or not. +func (v *Value) IsUint16() bool { + _, ok := v.data.(uint16) + return ok +} + +// IsUint16Slice gets whether the object contained is a []uint16 or not. +func (v *Value) IsUint16Slice() bool { + _, ok := v.data.([]uint16) + return ok +} + +// EachUint16 calls the specified callback for each object +// in the []uint16. +// +// Panics if the object is the wrong type. +func (v *Value) EachUint16(callback func(int, uint16) bool) *Value { + for index, val := range v.MustUint16Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereUint16 uses the specified decider function to select items +// from the []uint16. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereUint16(decider func(int, uint16) bool) *Value { + var selected []uint16 + v.EachUint16(func(index int, val uint16) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupUint16 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]uint16. +func (v *Value) GroupUint16(grouper func(int, uint16) string) *Value { + groups := make(map[string][]uint16) + v.EachUint16(func(index int, val uint16) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]uint16, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceUint16 uses the specified function to replace each uint16s +// by iterating each item. The data in the returned result will be a +// []uint16 containing the replaced items. +func (v *Value) ReplaceUint16(replacer func(int, uint16) uint16) *Value { + arr := v.MustUint16Slice() + replaced := make([]uint16, len(arr)) + v.EachUint16(func(index int, val uint16) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectUint16 uses the specified collector function to collect a value +// for each of the uint16s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectUint16(collector func(int, uint16) interface{}) *Value { + arr := v.MustUint16Slice() + collected := make([]interface{}, len(arr)) + v.EachUint16(func(index int, val uint16) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Uint32 (uint32 and []uint32) +*/ + +// Uint32 gets the value as a uint32, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Uint32(optionalDefault ...uint32) uint32 { + if s, ok := v.data.(uint32); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustUint32 gets the value as a uint32. +// +// Panics if the object is not a uint32. +func (v *Value) MustUint32() uint32 { + return v.data.(uint32) +} + +// Uint32Slice gets the value as a []uint32, returns the optionalDefault +// value or nil if the value is not a []uint32. +func (v *Value) Uint32Slice(optionalDefault ...[]uint32) []uint32 { + if s, ok := v.data.([]uint32); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustUint32Slice gets the value as a []uint32. +// +// Panics if the object is not a []uint32. +func (v *Value) MustUint32Slice() []uint32 { + return v.data.([]uint32) +} + +// IsUint32 gets whether the object contained is a uint32 or not. +func (v *Value) IsUint32() bool { + _, ok := v.data.(uint32) + return ok +} + +// IsUint32Slice gets whether the object contained is a []uint32 or not. +func (v *Value) IsUint32Slice() bool { + _, ok := v.data.([]uint32) + return ok +} + +// EachUint32 calls the specified callback for each object +// in the []uint32. +// +// Panics if the object is the wrong type. +func (v *Value) EachUint32(callback func(int, uint32) bool) *Value { + for index, val := range v.MustUint32Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereUint32 uses the specified decider function to select items +// from the []uint32. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereUint32(decider func(int, uint32) bool) *Value { + var selected []uint32 + v.EachUint32(func(index int, val uint32) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupUint32 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]uint32. +func (v *Value) GroupUint32(grouper func(int, uint32) string) *Value { + groups := make(map[string][]uint32) + v.EachUint32(func(index int, val uint32) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]uint32, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceUint32 uses the specified function to replace each uint32s +// by iterating each item. The data in the returned result will be a +// []uint32 containing the replaced items. +func (v *Value) ReplaceUint32(replacer func(int, uint32) uint32) *Value { + arr := v.MustUint32Slice() + replaced := make([]uint32, len(arr)) + v.EachUint32(func(index int, val uint32) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectUint32 uses the specified collector function to collect a value +// for each of the uint32s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectUint32(collector func(int, uint32) interface{}) *Value { + arr := v.MustUint32Slice() + collected := make([]interface{}, len(arr)) + v.EachUint32(func(index int, val uint32) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Uint64 (uint64 and []uint64) +*/ + +// Uint64 gets the value as a uint64, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Uint64(optionalDefault ...uint64) uint64 { + if s, ok := v.data.(uint64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustUint64 gets the value as a uint64. +// +// Panics if the object is not a uint64. +func (v *Value) MustUint64() uint64 { + return v.data.(uint64) +} + +// Uint64Slice gets the value as a []uint64, returns the optionalDefault +// value or nil if the value is not a []uint64. +func (v *Value) Uint64Slice(optionalDefault ...[]uint64) []uint64 { + if s, ok := v.data.([]uint64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustUint64Slice gets the value as a []uint64. +// +// Panics if the object is not a []uint64. +func (v *Value) MustUint64Slice() []uint64 { + return v.data.([]uint64) +} + +// IsUint64 gets whether the object contained is a uint64 or not. +func (v *Value) IsUint64() bool { + _, ok := v.data.(uint64) + return ok +} + +// IsUint64Slice gets whether the object contained is a []uint64 or not. +func (v *Value) IsUint64Slice() bool { + _, ok := v.data.([]uint64) + return ok +} + +// EachUint64 calls the specified callback for each object +// in the []uint64. +// +// Panics if the object is the wrong type. +func (v *Value) EachUint64(callback func(int, uint64) bool) *Value { + for index, val := range v.MustUint64Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereUint64 uses the specified decider function to select items +// from the []uint64. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereUint64(decider func(int, uint64) bool) *Value { + var selected []uint64 + v.EachUint64(func(index int, val uint64) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupUint64 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]uint64. +func (v *Value) GroupUint64(grouper func(int, uint64) string) *Value { + groups := make(map[string][]uint64) + v.EachUint64(func(index int, val uint64) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]uint64, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceUint64 uses the specified function to replace each uint64s +// by iterating each item. The data in the returned result will be a +// []uint64 containing the replaced items. +func (v *Value) ReplaceUint64(replacer func(int, uint64) uint64) *Value { + arr := v.MustUint64Slice() + replaced := make([]uint64, len(arr)) + v.EachUint64(func(index int, val uint64) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectUint64 uses the specified collector function to collect a value +// for each of the uint64s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectUint64(collector func(int, uint64) interface{}) *Value { + arr := v.MustUint64Slice() + collected := make([]interface{}, len(arr)) + v.EachUint64(func(index int, val uint64) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Uintptr (uintptr and []uintptr) +*/ + +// Uintptr gets the value as a uintptr, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Uintptr(optionalDefault ...uintptr) uintptr { + if s, ok := v.data.(uintptr); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustUintptr gets the value as a uintptr. +// +// Panics if the object is not a uintptr. +func (v *Value) MustUintptr() uintptr { + return v.data.(uintptr) +} + +// UintptrSlice gets the value as a []uintptr, returns the optionalDefault +// value or nil if the value is not a []uintptr. +func (v *Value) UintptrSlice(optionalDefault ...[]uintptr) []uintptr { + if s, ok := v.data.([]uintptr); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustUintptrSlice gets the value as a []uintptr. +// +// Panics if the object is not a []uintptr. +func (v *Value) MustUintptrSlice() []uintptr { + return v.data.([]uintptr) +} + +// IsUintptr gets whether the object contained is a uintptr or not. +func (v *Value) IsUintptr() bool { + _, ok := v.data.(uintptr) + return ok +} + +// IsUintptrSlice gets whether the object contained is a []uintptr or not. +func (v *Value) IsUintptrSlice() bool { + _, ok := v.data.([]uintptr) + return ok +} + +// EachUintptr calls the specified callback for each object +// in the []uintptr. +// +// Panics if the object is the wrong type. +func (v *Value) EachUintptr(callback func(int, uintptr) bool) *Value { + for index, val := range v.MustUintptrSlice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereUintptr uses the specified decider function to select items +// from the []uintptr. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereUintptr(decider func(int, uintptr) bool) *Value { + var selected []uintptr + v.EachUintptr(func(index int, val uintptr) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupUintptr uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]uintptr. +func (v *Value) GroupUintptr(grouper func(int, uintptr) string) *Value { + groups := make(map[string][]uintptr) + v.EachUintptr(func(index int, val uintptr) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]uintptr, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceUintptr uses the specified function to replace each uintptrs +// by iterating each item. The data in the returned result will be a +// []uintptr containing the replaced items. +func (v *Value) ReplaceUintptr(replacer func(int, uintptr) uintptr) *Value { + arr := v.MustUintptrSlice() + replaced := make([]uintptr, len(arr)) + v.EachUintptr(func(index int, val uintptr) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectUintptr uses the specified collector function to collect a value +// for each of the uintptrs in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectUintptr(collector func(int, uintptr) interface{}) *Value { + arr := v.MustUintptrSlice() + collected := make([]interface{}, len(arr)) + v.EachUintptr(func(index int, val uintptr) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Float32 (float32 and []float32) +*/ + +// Float32 gets the value as a float32, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Float32(optionalDefault ...float32) float32 { + if s, ok := v.data.(float32); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustFloat32 gets the value as a float32. +// +// Panics if the object is not a float32. +func (v *Value) MustFloat32() float32 { + return v.data.(float32) +} + +// Float32Slice gets the value as a []float32, returns the optionalDefault +// value or nil if the value is not a []float32. +func (v *Value) Float32Slice(optionalDefault ...[]float32) []float32 { + if s, ok := v.data.([]float32); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustFloat32Slice gets the value as a []float32. +// +// Panics if the object is not a []float32. +func (v *Value) MustFloat32Slice() []float32 { + return v.data.([]float32) +} + +// IsFloat32 gets whether the object contained is a float32 or not. +func (v *Value) IsFloat32() bool { + _, ok := v.data.(float32) + return ok +} + +// IsFloat32Slice gets whether the object contained is a []float32 or not. +func (v *Value) IsFloat32Slice() bool { + _, ok := v.data.([]float32) + return ok +} + +// EachFloat32 calls the specified callback for each object +// in the []float32. +// +// Panics if the object is the wrong type. +func (v *Value) EachFloat32(callback func(int, float32) bool) *Value { + for index, val := range v.MustFloat32Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereFloat32 uses the specified decider function to select items +// from the []float32. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereFloat32(decider func(int, float32) bool) *Value { + var selected []float32 + v.EachFloat32(func(index int, val float32) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupFloat32 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]float32. +func (v *Value) GroupFloat32(grouper func(int, float32) string) *Value { + groups := make(map[string][]float32) + v.EachFloat32(func(index int, val float32) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]float32, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceFloat32 uses the specified function to replace each float32s +// by iterating each item. The data in the returned result will be a +// []float32 containing the replaced items. +func (v *Value) ReplaceFloat32(replacer func(int, float32) float32) *Value { + arr := v.MustFloat32Slice() + replaced := make([]float32, len(arr)) + v.EachFloat32(func(index int, val float32) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectFloat32 uses the specified collector function to collect a value +// for each of the float32s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectFloat32(collector func(int, float32) interface{}) *Value { + arr := v.MustFloat32Slice() + collected := make([]interface{}, len(arr)) + v.EachFloat32(func(index int, val float32) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Float64 (float64 and []float64) +*/ + +// Float64 gets the value as a float64, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Float64(optionalDefault ...float64) float64 { + if s, ok := v.data.(float64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustFloat64 gets the value as a float64. +// +// Panics if the object is not a float64. +func (v *Value) MustFloat64() float64 { + return v.data.(float64) +} + +// Float64Slice gets the value as a []float64, returns the optionalDefault +// value or nil if the value is not a []float64. +func (v *Value) Float64Slice(optionalDefault ...[]float64) []float64 { + if s, ok := v.data.([]float64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustFloat64Slice gets the value as a []float64. +// +// Panics if the object is not a []float64. +func (v *Value) MustFloat64Slice() []float64 { + return v.data.([]float64) +} + +// IsFloat64 gets whether the object contained is a float64 or not. +func (v *Value) IsFloat64() bool { + _, ok := v.data.(float64) + return ok +} + +// IsFloat64Slice gets whether the object contained is a []float64 or not. +func (v *Value) IsFloat64Slice() bool { + _, ok := v.data.([]float64) + return ok +} + +// EachFloat64 calls the specified callback for each object +// in the []float64. +// +// Panics if the object is the wrong type. +func (v *Value) EachFloat64(callback func(int, float64) bool) *Value { + for index, val := range v.MustFloat64Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereFloat64 uses the specified decider function to select items +// from the []float64. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereFloat64(decider func(int, float64) bool) *Value { + var selected []float64 + v.EachFloat64(func(index int, val float64) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupFloat64 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]float64. +func (v *Value) GroupFloat64(grouper func(int, float64) string) *Value { + groups := make(map[string][]float64) + v.EachFloat64(func(index int, val float64) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]float64, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceFloat64 uses the specified function to replace each float64s +// by iterating each item. The data in the returned result will be a +// []float64 containing the replaced items. +func (v *Value) ReplaceFloat64(replacer func(int, float64) float64) *Value { + arr := v.MustFloat64Slice() + replaced := make([]float64, len(arr)) + v.EachFloat64(func(index int, val float64) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectFloat64 uses the specified collector function to collect a value +// for each of the float64s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectFloat64(collector func(int, float64) interface{}) *Value { + arr := v.MustFloat64Slice() + collected := make([]interface{}, len(arr)) + v.EachFloat64(func(index int, val float64) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Complex64 (complex64 and []complex64) +*/ + +// Complex64 gets the value as a complex64, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Complex64(optionalDefault ...complex64) complex64 { + if s, ok := v.data.(complex64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustComplex64 gets the value as a complex64. +// +// Panics if the object is not a complex64. +func (v *Value) MustComplex64() complex64 { + return v.data.(complex64) +} + +// Complex64Slice gets the value as a []complex64, returns the optionalDefault +// value or nil if the value is not a []complex64. +func (v *Value) Complex64Slice(optionalDefault ...[]complex64) []complex64 { + if s, ok := v.data.([]complex64); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustComplex64Slice gets the value as a []complex64. +// +// Panics if the object is not a []complex64. +func (v *Value) MustComplex64Slice() []complex64 { + return v.data.([]complex64) +} + +// IsComplex64 gets whether the object contained is a complex64 or not. +func (v *Value) IsComplex64() bool { + _, ok := v.data.(complex64) + return ok +} + +// IsComplex64Slice gets whether the object contained is a []complex64 or not. +func (v *Value) IsComplex64Slice() bool { + _, ok := v.data.([]complex64) + return ok +} + +// EachComplex64 calls the specified callback for each object +// in the []complex64. +// +// Panics if the object is the wrong type. +func (v *Value) EachComplex64(callback func(int, complex64) bool) *Value { + for index, val := range v.MustComplex64Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereComplex64 uses the specified decider function to select items +// from the []complex64. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereComplex64(decider func(int, complex64) bool) *Value { + var selected []complex64 + v.EachComplex64(func(index int, val complex64) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupComplex64 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]complex64. +func (v *Value) GroupComplex64(grouper func(int, complex64) string) *Value { + groups := make(map[string][]complex64) + v.EachComplex64(func(index int, val complex64) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]complex64, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceComplex64 uses the specified function to replace each complex64s +// by iterating each item. The data in the returned result will be a +// []complex64 containing the replaced items. +func (v *Value) ReplaceComplex64(replacer func(int, complex64) complex64) *Value { + arr := v.MustComplex64Slice() + replaced := make([]complex64, len(arr)) + v.EachComplex64(func(index int, val complex64) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectComplex64 uses the specified collector function to collect a value +// for each of the complex64s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectComplex64(collector func(int, complex64) interface{}) *Value { + arr := v.MustComplex64Slice() + collected := make([]interface{}, len(arr)) + v.EachComplex64(func(index int, val complex64) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} + +/* + Complex128 (complex128 and []complex128) +*/ + +// Complex128 gets the value as a complex128, returns the optionalDefault +// value or a system default object if the value is the wrong type. +func (v *Value) Complex128(optionalDefault ...complex128) complex128 { + if s, ok := v.data.(complex128); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return 0 +} + +// MustComplex128 gets the value as a complex128. +// +// Panics if the object is not a complex128. +func (v *Value) MustComplex128() complex128 { + return v.data.(complex128) +} + +// Complex128Slice gets the value as a []complex128, returns the optionalDefault +// value or nil if the value is not a []complex128. +func (v *Value) Complex128Slice(optionalDefault ...[]complex128) []complex128 { + if s, ok := v.data.([]complex128); ok { + return s + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + return nil +} + +// MustComplex128Slice gets the value as a []complex128. +// +// Panics if the object is not a []complex128. +func (v *Value) MustComplex128Slice() []complex128 { + return v.data.([]complex128) +} + +// IsComplex128 gets whether the object contained is a complex128 or not. +func (v *Value) IsComplex128() bool { + _, ok := v.data.(complex128) + return ok +} + +// IsComplex128Slice gets whether the object contained is a []complex128 or not. +func (v *Value) IsComplex128Slice() bool { + _, ok := v.data.([]complex128) + return ok +} + +// EachComplex128 calls the specified callback for each object +// in the []complex128. +// +// Panics if the object is the wrong type. +func (v *Value) EachComplex128(callback func(int, complex128) bool) *Value { + for index, val := range v.MustComplex128Slice() { + carryon := callback(index, val) + if !carryon { + break + } + } + return v +} + +// WhereComplex128 uses the specified decider function to select items +// from the []complex128. The object contained in the result will contain +// only the selected items. +func (v *Value) WhereComplex128(decider func(int, complex128) bool) *Value { + var selected []complex128 + v.EachComplex128(func(index int, val complex128) bool { + shouldSelect := decider(index, val) + if !shouldSelect { + selected = append(selected, val) + } + return true + }) + return &Value{data: selected} +} + +// GroupComplex128 uses the specified grouper function to group the items +// keyed by the return of the grouper. The object contained in the +// result will contain a map[string][]complex128. +func (v *Value) GroupComplex128(grouper func(int, complex128) string) *Value { + groups := make(map[string][]complex128) + v.EachComplex128(func(index int, val complex128) bool { + group := grouper(index, val) + if _, ok := groups[group]; !ok { + groups[group] = make([]complex128, 0) + } + groups[group] = append(groups[group], val) + return true + }) + return &Value{data: groups} +} + +// ReplaceComplex128 uses the specified function to replace each complex128s +// by iterating each item. The data in the returned result will be a +// []complex128 containing the replaced items. +func (v *Value) ReplaceComplex128(replacer func(int, complex128) complex128) *Value { + arr := v.MustComplex128Slice() + replaced := make([]complex128, len(arr)) + v.EachComplex128(func(index int, val complex128) bool { + replaced[index] = replacer(index, val) + return true + }) + return &Value{data: replaced} +} + +// CollectComplex128 uses the specified collector function to collect a value +// for each of the complex128s in the slice. The data returned will be a +// []interface{}. +func (v *Value) CollectComplex128(collector func(int, complex128) interface{}) *Value { + arr := v.MustComplex128Slice() + collected := make([]interface{}, len(arr)) + v.EachComplex128(func(index int, val complex128) bool { + collected[index] = collector(index, val) + return true + }) + return &Value{data: collected} +} diff --git a/vendor/github.com/stretchr/objx/value.go b/vendor/github.com/stretchr/objx/value.go new file mode 100644 index 000000000..4e5f9b77e --- /dev/null +++ b/vendor/github.com/stretchr/objx/value.go @@ -0,0 +1,159 @@ +package objx + +import ( + "fmt" + "strconv" +) + +// Value provides methods for extracting interface{} data in various +// types. +type Value struct { + // data contains the raw data being managed by this Value + data interface{} +} + +// Data returns the raw data contained by this Value +func (v *Value) Data() interface{} { + return v.data +} + +// String returns the value always as a string +func (v *Value) String() string { + switch { + case v.IsNil(): + return "" + case v.IsStr(): + return v.Str() + case v.IsBool(): + return strconv.FormatBool(v.Bool()) + case v.IsFloat32(): + return strconv.FormatFloat(float64(v.Float32()), 'f', -1, 32) + case v.IsFloat64(): + return strconv.FormatFloat(v.Float64(), 'f', -1, 64) + case v.IsInt(): + return strconv.FormatInt(int64(v.Int()), 10) + case v.IsInt8(): + return strconv.FormatInt(int64(v.Int8()), 10) + case v.IsInt16(): + return strconv.FormatInt(int64(v.Int16()), 10) + case v.IsInt32(): + return strconv.FormatInt(int64(v.Int32()), 10) + case v.IsInt64(): + return strconv.FormatInt(v.Int64(), 10) + case v.IsUint(): + return strconv.FormatUint(uint64(v.Uint()), 10) + case v.IsUint8(): + return strconv.FormatUint(uint64(v.Uint8()), 10) + case v.IsUint16(): + return strconv.FormatUint(uint64(v.Uint16()), 10) + case v.IsUint32(): + return strconv.FormatUint(uint64(v.Uint32()), 10) + case v.IsUint64(): + return strconv.FormatUint(v.Uint64(), 10) + } + return fmt.Sprintf("%#v", v.Data()) +} + +// StringSlice returns the value always as a []string +func (v *Value) StringSlice(optionalDefault ...[]string) []string { + switch { + case v.IsStrSlice(): + return v.MustStrSlice() + case v.IsBoolSlice(): + slice := v.MustBoolSlice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatBool(iv) + } + return vals + case v.IsFloat32Slice(): + slice := v.MustFloat32Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatFloat(float64(iv), 'f', -1, 32) + } + return vals + case v.IsFloat64Slice(): + slice := v.MustFloat64Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatFloat(iv, 'f', -1, 64) + } + return vals + case v.IsIntSlice(): + slice := v.MustIntSlice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatInt(int64(iv), 10) + } + return vals + case v.IsInt8Slice(): + slice := v.MustInt8Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatInt(int64(iv), 10) + } + return vals + case v.IsInt16Slice(): + slice := v.MustInt16Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatInt(int64(iv), 10) + } + return vals + case v.IsInt32Slice(): + slice := v.MustInt32Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatInt(int64(iv), 10) + } + return vals + case v.IsInt64Slice(): + slice := v.MustInt64Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatInt(iv, 10) + } + return vals + case v.IsUintSlice(): + slice := v.MustUintSlice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatUint(uint64(iv), 10) + } + return vals + case v.IsUint8Slice(): + slice := v.MustUint8Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatUint(uint64(iv), 10) + } + return vals + case v.IsUint16Slice(): + slice := v.MustUint16Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatUint(uint64(iv), 10) + } + return vals + case v.IsUint32Slice(): + slice := v.MustUint32Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatUint(uint64(iv), 10) + } + return vals + case v.IsUint64Slice(): + slice := v.MustUint64Slice() + vals := make([]string, len(slice)) + for i, iv := range slice { + vals[i] = strconv.FormatUint(iv, 10) + } + return vals + } + if len(optionalDefault) == 1 { + return optionalDefault[0] + } + + return []string{} +} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go index dc200395c..41649d267 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_compare.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_compare.go @@ -13,12 +13,42 @@ const ( compareGreater ) +var ( + intType = reflect.TypeOf(int(1)) + int8Type = reflect.TypeOf(int8(1)) + int16Type = reflect.TypeOf(int16(1)) + int32Type = reflect.TypeOf(int32(1)) + int64Type = reflect.TypeOf(int64(1)) + + uintType = reflect.TypeOf(uint(1)) + uint8Type = reflect.TypeOf(uint8(1)) + uint16Type = reflect.TypeOf(uint16(1)) + uint32Type = reflect.TypeOf(uint32(1)) + uint64Type = reflect.TypeOf(uint64(1)) + + float32Type = reflect.TypeOf(float32(1)) + float64Type = reflect.TypeOf(float64(1)) + + stringType = reflect.TypeOf("") +) + func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { + obj1Value := reflect.ValueOf(obj1) + obj2Value := reflect.ValueOf(obj2) + + // throughout this switch we try and avoid calling .Convert() if possible, + // as this has a pretty big performance impact switch kind { case reflect.Int: { - intobj1 := obj1.(int) - intobj2 := obj2.(int) + intobj1, ok := obj1.(int) + if !ok { + intobj1 = obj1Value.Convert(intType).Interface().(int) + } + intobj2, ok := obj2.(int) + if !ok { + intobj2 = obj2Value.Convert(intType).Interface().(int) + } if intobj1 > intobj2 { return compareGreater, true } @@ -31,8 +61,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Int8: { - int8obj1 := obj1.(int8) - int8obj2 := obj2.(int8) + int8obj1, ok := obj1.(int8) + if !ok { + int8obj1 = obj1Value.Convert(int8Type).Interface().(int8) + } + int8obj2, ok := obj2.(int8) + if !ok { + int8obj2 = obj2Value.Convert(int8Type).Interface().(int8) + } if int8obj1 > int8obj2 { return compareGreater, true } @@ -45,8 +81,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Int16: { - int16obj1 := obj1.(int16) - int16obj2 := obj2.(int16) + int16obj1, ok := obj1.(int16) + if !ok { + int16obj1 = obj1Value.Convert(int16Type).Interface().(int16) + } + int16obj2, ok := obj2.(int16) + if !ok { + int16obj2 = obj2Value.Convert(int16Type).Interface().(int16) + } if int16obj1 > int16obj2 { return compareGreater, true } @@ -59,8 +101,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Int32: { - int32obj1 := obj1.(int32) - int32obj2 := obj2.(int32) + int32obj1, ok := obj1.(int32) + if !ok { + int32obj1 = obj1Value.Convert(int32Type).Interface().(int32) + } + int32obj2, ok := obj2.(int32) + if !ok { + int32obj2 = obj2Value.Convert(int32Type).Interface().(int32) + } if int32obj1 > int32obj2 { return compareGreater, true } @@ -73,8 +121,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Int64: { - int64obj1 := obj1.(int64) - int64obj2 := obj2.(int64) + int64obj1, ok := obj1.(int64) + if !ok { + int64obj1 = obj1Value.Convert(int64Type).Interface().(int64) + } + int64obj2, ok := obj2.(int64) + if !ok { + int64obj2 = obj2Value.Convert(int64Type).Interface().(int64) + } if int64obj1 > int64obj2 { return compareGreater, true } @@ -87,8 +141,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Uint: { - uintobj1 := obj1.(uint) - uintobj2 := obj2.(uint) + uintobj1, ok := obj1.(uint) + if !ok { + uintobj1 = obj1Value.Convert(uintType).Interface().(uint) + } + uintobj2, ok := obj2.(uint) + if !ok { + uintobj2 = obj2Value.Convert(uintType).Interface().(uint) + } if uintobj1 > uintobj2 { return compareGreater, true } @@ -101,8 +161,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Uint8: { - uint8obj1 := obj1.(uint8) - uint8obj2 := obj2.(uint8) + uint8obj1, ok := obj1.(uint8) + if !ok { + uint8obj1 = obj1Value.Convert(uint8Type).Interface().(uint8) + } + uint8obj2, ok := obj2.(uint8) + if !ok { + uint8obj2 = obj2Value.Convert(uint8Type).Interface().(uint8) + } if uint8obj1 > uint8obj2 { return compareGreater, true } @@ -115,8 +181,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Uint16: { - uint16obj1 := obj1.(uint16) - uint16obj2 := obj2.(uint16) + uint16obj1, ok := obj1.(uint16) + if !ok { + uint16obj1 = obj1Value.Convert(uint16Type).Interface().(uint16) + } + uint16obj2, ok := obj2.(uint16) + if !ok { + uint16obj2 = obj2Value.Convert(uint16Type).Interface().(uint16) + } if uint16obj1 > uint16obj2 { return compareGreater, true } @@ -129,8 +201,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Uint32: { - uint32obj1 := obj1.(uint32) - uint32obj2 := obj2.(uint32) + uint32obj1, ok := obj1.(uint32) + if !ok { + uint32obj1 = obj1Value.Convert(uint32Type).Interface().(uint32) + } + uint32obj2, ok := obj2.(uint32) + if !ok { + uint32obj2 = obj2Value.Convert(uint32Type).Interface().(uint32) + } if uint32obj1 > uint32obj2 { return compareGreater, true } @@ -143,8 +221,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Uint64: { - uint64obj1 := obj1.(uint64) - uint64obj2 := obj2.(uint64) + uint64obj1, ok := obj1.(uint64) + if !ok { + uint64obj1 = obj1Value.Convert(uint64Type).Interface().(uint64) + } + uint64obj2, ok := obj2.(uint64) + if !ok { + uint64obj2 = obj2Value.Convert(uint64Type).Interface().(uint64) + } if uint64obj1 > uint64obj2 { return compareGreater, true } @@ -157,8 +241,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Float32: { - float32obj1 := obj1.(float32) - float32obj2 := obj2.(float32) + float32obj1, ok := obj1.(float32) + if !ok { + float32obj1 = obj1Value.Convert(float32Type).Interface().(float32) + } + float32obj2, ok := obj2.(float32) + if !ok { + float32obj2 = obj2Value.Convert(float32Type).Interface().(float32) + } if float32obj1 > float32obj2 { return compareGreater, true } @@ -171,8 +261,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.Float64: { - float64obj1 := obj1.(float64) - float64obj2 := obj2.(float64) + float64obj1, ok := obj1.(float64) + if !ok { + float64obj1 = obj1Value.Convert(float64Type).Interface().(float64) + } + float64obj2, ok := obj2.(float64) + if !ok { + float64obj2 = obj2Value.Convert(float64Type).Interface().(float64) + } if float64obj1 > float64obj2 { return compareGreater, true } @@ -185,8 +281,14 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { } case reflect.String: { - stringobj1 := obj1.(string) - stringobj2 := obj2.(string) + stringobj1, ok := obj1.(string) + if !ok { + stringobj1 = obj1Value.Convert(stringType).Interface().(string) + } + stringobj2, ok := obj2.(string) + if !ok { + stringobj2 = obj2Value.Convert(stringType).Interface().(string) + } if stringobj1 > stringobj2 { return compareGreater, true } @@ -240,6 +342,24 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs) } +// Positive asserts that the specified element is positive +// +// assert.Positive(t, 1) +// assert.Positive(t, 1.23) +func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { + zero := reflect.Zero(reflect.TypeOf(e)) + return compareTwoValues(t, e, zero.Interface(), []CompareType{compareGreater}, "\"%v\" is not positive", msgAndArgs) +} + +// Negative asserts that the specified element is negative +// +// assert.Negative(t, -1) +// assert.Negative(t, -1.23) +func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { + zero := reflect.Zero(reflect.TypeOf(e)) + return compareTwoValues(t, e, zero.Interface(), []CompareType{compareLess}, "\"%v\" is not negative", msgAndArgs) +} + func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go index 49370eb16..4dfd1229a 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go @@ -114,6 +114,24 @@ func Errorf(t TestingT, err error, msg string, args ...interface{}) bool { return Error(t, err, append([]interface{}{msg}, args...)...) } +// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return ErrorAs(t, err, target, append([]interface{}{msg}, args...)...) +} + +// ErrorIsf asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return ErrorIs(t, err, target, append([]interface{}{msg}, args...)...) +} + // Eventuallyf asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // @@ -321,6 +339,54 @@ func InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsil return InEpsilonSlice(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...) } +// IsDecreasingf asserts that the collection is decreasing +// +// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return IsDecreasing(t, object, append([]interface{}{msg}, args...)...) +} + +// IsIncreasingf asserts that the collection is increasing +// +// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return IsIncreasing(t, object, append([]interface{}{msg}, args...)...) +} + +// IsNonDecreasingf asserts that the collection is not decreasing +// +// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return IsNonDecreasing(t, object, append([]interface{}{msg}, args...)...) +} + +// IsNonIncreasingf asserts that the collection is not increasing +// +// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return IsNonIncreasing(t, object, append([]interface{}{msg}, args...)...) +} + // IsTypef asserts that the specified objects are of the same type. func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -375,6 +441,17 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args . return LessOrEqual(t, e1, e2, append([]interface{}{msg}, args...)...) } +// Negativef asserts that the specified element is negative +// +// assert.Negativef(t, -1, "error message %s", "formatted") +// assert.Negativef(t, -1.23, "error message %s", "formatted") +func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return Negative(t, e, append([]interface{}{msg}, args...)...) +} + // Neverf asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // @@ -476,6 +553,15 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...) } +// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return NotErrorIs(t, err, target, append([]interface{}{msg}, args...)...) +} + // NotNilf asserts that the specified object is not nil. // // assert.NotNilf(t, err, "error message %s", "formatted") @@ -572,6 +658,17 @@ func PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg str return PanicsWithValue(t, expected, f, append([]interface{}{msg}, args...)...) } +// Positivef asserts that the specified element is positive +// +// assert.Positivef(t, 1, "error message %s", "formatted") +// assert.Positivef(t, 1.23, "error message %s", "formatted") +func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return Positive(t, e, append([]interface{}{msg}, args...)...) +} + // Regexpf asserts that a specified regexp matches a string. // // assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go index 9db889427..25337a6f0 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go @@ -204,6 +204,42 @@ func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool { return Error(a.t, err, msgAndArgs...) } +// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return ErrorAs(a.t, err, target, msgAndArgs...) +} + +// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return ErrorAsf(a.t, err, target, msg, args...) +} + +// ErrorIs asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return ErrorIs(a.t, err, target, msgAndArgs...) +} + +// ErrorIsf asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return ErrorIsf(a.t, err, target, msg, args...) +} + // Errorf asserts that a function returned an error (i.e. not `nil`). // // actualObj, err := SomeFunction() @@ -631,6 +667,102 @@ func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilo return InEpsilonf(a.t, expected, actual, epsilon, msg, args...) } +// IsDecreasing asserts that the collection is decreasing +// +// a.IsDecreasing([]int{2, 1, 0}) +// a.IsDecreasing([]float{2, 1}) +// a.IsDecreasing([]string{"b", "a"}) +func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsDecreasing(a.t, object, msgAndArgs...) +} + +// IsDecreasingf asserts that the collection is decreasing +// +// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") +// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") +func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsDecreasingf(a.t, object, msg, args...) +} + +// IsIncreasing asserts that the collection is increasing +// +// a.IsIncreasing([]int{1, 2, 3}) +// a.IsIncreasing([]float{1, 2}) +// a.IsIncreasing([]string{"a", "b"}) +func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsIncreasing(a.t, object, msgAndArgs...) +} + +// IsIncreasingf asserts that the collection is increasing +// +// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") +// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") +func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsIncreasingf(a.t, object, msg, args...) +} + +// IsNonDecreasing asserts that the collection is not decreasing +// +// a.IsNonDecreasing([]int{1, 1, 2}) +// a.IsNonDecreasing([]float{1, 2}) +// a.IsNonDecreasing([]string{"a", "b"}) +func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNonDecreasing(a.t, object, msgAndArgs...) +} + +// IsNonDecreasingf asserts that the collection is not decreasing +// +// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") +func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNonDecreasingf(a.t, object, msg, args...) +} + +// IsNonIncreasing asserts that the collection is not increasing +// +// a.IsNonIncreasing([]int{2, 1, 1}) +// a.IsNonIncreasing([]float{2, 1}) +// a.IsNonIncreasing([]string{"b", "a"}) +func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNonIncreasing(a.t, object, msgAndArgs...) +} + +// IsNonIncreasingf asserts that the collection is not increasing +// +// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") +func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNonIncreasingf(a.t, object, msg, args...) +} + // IsType asserts that the specified objects are of the same type. func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { @@ -739,6 +871,28 @@ func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...i return Lessf(a.t, e1, e2, msg, args...) } +// Negative asserts that the specified element is negative +// +// a.Negative(-1) +// a.Negative(-1.23) +func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return Negative(a.t, e, msgAndArgs...) +} + +// Negativef asserts that the specified element is negative +// +// a.Negativef(-1, "error message %s", "formatted") +// a.Negativef(-1.23, "error message %s", "formatted") +func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return Negativef(a.t, e, msg, args...) +} + // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // @@ -941,6 +1095,24 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str return NotEqualf(a.t, expected, actual, msg, args...) } +// NotErrorIs asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotErrorIs(a.t, err, target, msgAndArgs...) +} + +// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotErrorIsf(a.t, err, target, msg, args...) +} + // NotNil asserts that the specified object is not nil. // // a.NotNil(err) @@ -1133,6 +1305,28 @@ func (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) b return Panicsf(a.t, f, msg, args...) } +// Positive asserts that the specified element is positive +// +// a.Positive(1) +// a.Positive(1.23) +func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return Positive(a.t, e, msgAndArgs...) +} + +// Positivef asserts that the specified element is positive +// +// a.Positivef(1, "error message %s", "formatted") +// a.Positivef(1.23, "error message %s", "formatted") +func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return Positivef(a.t, e, msg, args...) +} + // Regexp asserts that a specified regexp matches a string. // // a.Regexp(regexp.MustCompile("start"), "it's starting") diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_order.go new file mode 100644 index 000000000..1c3b47182 --- /dev/null +++ b/vendor/github.com/stretchr/testify/assert/assertion_order.go @@ -0,0 +1,81 @@ +package assert + +import ( + "fmt" + "reflect" +) + +// isOrdered checks that collection contains orderable elements. +func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { + objKind := reflect.TypeOf(object).Kind() + if objKind != reflect.Slice && objKind != reflect.Array { + return false + } + + objValue := reflect.ValueOf(object) + objLen := objValue.Len() + + if objLen <= 1 { + return true + } + + value := objValue.Index(0) + valueInterface := value.Interface() + firstValueKind := value.Kind() + + for i := 1; i < objLen; i++ { + prevValue := value + prevValueInterface := valueInterface + + value = objValue.Index(i) + valueInterface = value.Interface() + + compareResult, isComparable := compare(prevValueInterface, valueInterface, firstValueKind) + + if !isComparable { + return Fail(t, fmt.Sprintf("Can not compare type \"%s\" and \"%s\"", reflect.TypeOf(value), reflect.TypeOf(prevValue)), msgAndArgs...) + } + + if !containsValue(allowedComparesResults, compareResult) { + return Fail(t, fmt.Sprintf(failMessage, prevValue, value), msgAndArgs...) + } + } + + return true +} + +// IsIncreasing asserts that the collection is increasing +// +// assert.IsIncreasing(t, []int{1, 2, 3}) +// assert.IsIncreasing(t, []float{1, 2}) +// assert.IsIncreasing(t, []string{"a", "b"}) +func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { + return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs) +} + +// IsNonIncreasing asserts that the collection is not increasing +// +// assert.IsNonIncreasing(t, []int{2, 1, 1}) +// assert.IsNonIncreasing(t, []float{2, 1}) +// assert.IsNonIncreasing(t, []string{"b", "a"}) +func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { + return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs) +} + +// IsDecreasing asserts that the collection is decreasing +// +// assert.IsDecreasing(t, []int{2, 1, 0}) +// assert.IsDecreasing(t, []float{2, 1}) +// assert.IsDecreasing(t, []string{"b", "a"}) +func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { + return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs) +} + +// IsNonDecreasing asserts that the collection is not decreasing +// +// assert.IsNonDecreasing(t, []int{1, 1, 2}) +// assert.IsNonDecreasing(t, []float{1, 2}) +// assert.IsNonDecreasing(t, []string{"a", "b"}) +func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { + return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs) +} diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go index 914a10d83..bcac4401f 100644 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/vendor/github.com/stretchr/testify/assert/assertions.go @@ -172,8 +172,8 @@ func isTest(name, prefix string) bool { if len(name) == len(prefix) { // "Test" is ok return true } - rune, _ := utf8.DecodeRuneInString(name[len(prefix):]) - return !unicode.IsLower(rune) + r, _ := utf8.DecodeRuneInString(name[len(prefix):]) + return !unicode.IsLower(r) } func messageFromMsgAndArgs(msgAndArgs ...interface{}) string { @@ -1622,6 +1622,7 @@ var spewConfig = spew.ConfigState{ DisableCapacities: true, SortKeys: true, DisableMethods: true, + MaxDepth: 10, } type tHelper interface { @@ -1693,3 +1694,81 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D } } } + +// ErrorIs asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if errors.Is(err, target) { + return true + } + + var expectedText string + if target != nil { + expectedText = target.Error() + } + + chain := buildErrorChainString(err) + + return Fail(t, fmt.Sprintf("Target error should be in err chain:\n"+ + "expected: %q\n"+ + "in chain: %s", expectedText, chain, + ), msgAndArgs...) +} + +// NotErrorIs asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if !errors.Is(err, target) { + return true + } + + var expectedText string + if target != nil { + expectedText = target.Error() + } + + chain := buildErrorChainString(err) + + return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+ + "found: %q\n"+ + "in chain: %s", expectedText, chain, + ), msgAndArgs...) +} + +// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if errors.As(err, target) { + return true + } + + chain := buildErrorChainString(err) + + return Fail(t, fmt.Sprintf("Should be in error chain:\n"+ + "expected: %q\n"+ + "in chain: %s", target, chain, + ), msgAndArgs...) +} + +func buildErrorChainString(err error) string { + if err == nil { + return "" + } + + e := errors.Unwrap(err) + chain := fmt.Sprintf("%q", err.Error()) + for e != nil { + chain += fmt.Sprintf("\n\t%q", e.Error()) + e = errors.Unwrap(e) + } + return chain +} diff --git a/vendor/github.com/stretchr/testify/mock/doc.go b/vendor/github.com/stretchr/testify/mock/doc.go new file mode 100644 index 000000000..7324128ef --- /dev/null +++ b/vendor/github.com/stretchr/testify/mock/doc.go @@ -0,0 +1,44 @@ +// Package mock provides a system by which it is possible to mock your objects +// and verify calls are happening as expected. +// +// Example Usage +// +// The mock package provides an object, Mock, that tracks activity on another object. It is usually +// embedded into a test object as shown below: +// +// type MyTestObject struct { +// // add a Mock object instance +// mock.Mock +// +// // other fields go here as normal +// } +// +// When implementing the methods of an interface, you wire your functions up +// to call the Mock.Called(args...) method, and return the appropriate values. +// +// For example, to mock a method that saves the name and age of a person and returns +// the year of their birth or an error, you might write this: +// +// func (o *MyTestObject) SavePersonDetails(firstname, lastname string, age int) (int, error) { +// args := o.Called(firstname, lastname, age) +// return args.Int(0), args.Error(1) +// } +// +// The Int, Error and Bool methods are examples of strongly typed getters that take the argument +// index position. Given this argument list: +// +// (12, true, "Something") +// +// You could read them out strongly typed like this: +// +// args.Int(0) +// args.Bool(1) +// args.String(2) +// +// For objects of your own type, use the generic Arguments.Get(index) method and make a type assertion: +// +// return args.Get(0).(*MyObject), args.Get(1).(*AnotherObjectOfMine) +// +// This may cause a panic if the object you are getting is nil (the type assertion will fail), in those +// cases you should check for nil first. +package mock diff --git a/vendor/github.com/stretchr/testify/mock/mock.go b/vendor/github.com/stretchr/testify/mock/mock.go new file mode 100644 index 000000000..e2e6a2d23 --- /dev/null +++ b/vendor/github.com/stretchr/testify/mock/mock.go @@ -0,0 +1,1008 @@ +package mock + +import ( + "errors" + "fmt" + "reflect" + "regexp" + "runtime" + "strings" + "sync" + "time" + + "github.com/davecgh/go-spew/spew" + "github.com/pmezard/go-difflib/difflib" + "github.com/stretchr/objx" + "github.com/stretchr/testify/assert" +) + +// TestingT is an interface wrapper around *testing.T +type TestingT interface { + Logf(format string, args ...interface{}) + Errorf(format string, args ...interface{}) + FailNow() +} + +/* + Call +*/ + +// Call represents a method call and is used for setting expectations, +// as well as recording activity. +type Call struct { + Parent *Mock + + // The name of the method that was or will be called. + Method string + + // Holds the arguments of the method. + Arguments Arguments + + // Holds the arguments that should be returned when + // this method is called. + ReturnArguments Arguments + + // Holds the caller info for the On() call + callerInfo []string + + // The number of times to return the return arguments when setting + // expectations. 0 means to always return the value. + Repeatability int + + // Amount of times this call has been called + totalCalls int + + // Call to this method can be optional + optional bool + + // Holds a channel that will be used to block the Return until it either + // receives a message or is closed. nil means it returns immediately. + WaitFor <-chan time.Time + + waitTime time.Duration + + // Holds a handler used to manipulate arguments content that are passed by + // reference. It's useful when mocking methods such as unmarshalers or + // decoders. + RunFn func(Arguments) + + // PanicMsg holds msg to be used to mock panic on the function call + // if the PanicMsg is set to a non nil string the function call will panic + // irrespective of other settings + PanicMsg *string +} + +func newCall(parent *Mock, methodName string, callerInfo []string, methodArguments ...interface{}) *Call { + return &Call{ + Parent: parent, + Method: methodName, + Arguments: methodArguments, + ReturnArguments: make([]interface{}, 0), + callerInfo: callerInfo, + Repeatability: 0, + WaitFor: nil, + RunFn: nil, + PanicMsg: nil, + } +} + +func (c *Call) lock() { + c.Parent.mutex.Lock() +} + +func (c *Call) unlock() { + c.Parent.mutex.Unlock() +} + +// Return specifies the return arguments for the expectation. +// +// Mock.On("DoSomething").Return(errors.New("failed")) +func (c *Call) Return(returnArguments ...interface{}) *Call { + c.lock() + defer c.unlock() + + c.ReturnArguments = returnArguments + + return c +} + +// Panic specifies if the functon call should fail and the panic message +// +// Mock.On("DoSomething").Panic("test panic") +func (c *Call) Panic(msg string) *Call { + c.lock() + defer c.unlock() + + c.PanicMsg = &msg + + return c +} + +// Once indicates that that the mock should only return the value once. +// +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Once() +func (c *Call) Once() *Call { + return c.Times(1) +} + +// Twice indicates that that the mock should only return the value twice. +// +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Twice() +func (c *Call) Twice() *Call { + return c.Times(2) +} + +// Times indicates that that the mock should only return the indicated number +// of times. +// +// Mock.On("MyMethod", arg1, arg2).Return(returnArg1, returnArg2).Times(5) +func (c *Call) Times(i int) *Call { + c.lock() + defer c.unlock() + c.Repeatability = i + return c +} + +// WaitUntil sets the channel that will block the mock's return until its closed +// or a message is received. +// +// Mock.On("MyMethod", arg1, arg2).WaitUntil(time.After(time.Second)) +func (c *Call) WaitUntil(w <-chan time.Time) *Call { + c.lock() + defer c.unlock() + c.WaitFor = w + return c +} + +// After sets how long to block until the call returns +// +// Mock.On("MyMethod", arg1, arg2).After(time.Second) +func (c *Call) After(d time.Duration) *Call { + c.lock() + defer c.unlock() + c.waitTime = d + return c +} + +// Run sets a handler to be called before returning. It can be used when +// mocking a method (such as an unmarshaler) that takes a pointer to a struct and +// sets properties in such struct +// +// Mock.On("Unmarshal", AnythingOfType("*map[string]interface{}")).Return().Run(func(args Arguments) { +// arg := args.Get(0).(*map[string]interface{}) +// arg["foo"] = "bar" +// }) +func (c *Call) Run(fn func(args Arguments)) *Call { + c.lock() + defer c.unlock() + c.RunFn = fn + return c +} + +// Maybe allows the method call to be optional. Not calling an optional method +// will not cause an error while asserting expectations +func (c *Call) Maybe() *Call { + c.lock() + defer c.unlock() + c.optional = true + return c +} + +// On chains a new expectation description onto the mocked interface. This +// allows syntax like. +// +// Mock. +// On("MyMethod", 1).Return(nil). +// On("MyOtherMethod", 'a', 'b', 'c').Return(errors.New("Some Error")) +//go:noinline +func (c *Call) On(methodName string, arguments ...interface{}) *Call { + return c.Parent.On(methodName, arguments...) +} + +// Mock is the workhorse used to track activity on another object. +// For an example of its usage, refer to the "Example Usage" section at the top +// of this document. +type Mock struct { + // Represents the calls that are expected of + // an object. + ExpectedCalls []*Call + + // Holds the calls that were made to this mocked object. + Calls []Call + + // test is An optional variable that holds the test struct, to be used when an + // invalid mock call was made. + test TestingT + + // TestData holds any data that might be useful for testing. Testify ignores + // this data completely allowing you to do whatever you like with it. + testData objx.Map + + mutex sync.Mutex +} + +// TestData holds any data that might be useful for testing. Testify ignores +// this data completely allowing you to do whatever you like with it. +func (m *Mock) TestData() objx.Map { + + if m.testData == nil { + m.testData = make(objx.Map) + } + + return m.testData +} + +/* + Setting expectations +*/ + +// Test sets the test struct variable of the mock object +func (m *Mock) Test(t TestingT) { + m.mutex.Lock() + defer m.mutex.Unlock() + m.test = t +} + +// fail fails the current test with the given formatted format and args. +// In case that a test was defined, it uses the test APIs for failing a test, +// otherwise it uses panic. +func (m *Mock) fail(format string, args ...interface{}) { + m.mutex.Lock() + defer m.mutex.Unlock() + + if m.test == nil { + panic(fmt.Sprintf(format, args...)) + } + m.test.Errorf(format, args...) + m.test.FailNow() +} + +// On starts a description of an expectation of the specified method +// being called. +// +// Mock.On("MyMethod", arg1, arg2) +func (m *Mock) On(methodName string, arguments ...interface{}) *Call { + for _, arg := range arguments { + if v := reflect.ValueOf(arg); v.Kind() == reflect.Func { + panic(fmt.Sprintf("cannot use Func in expectations. Use mock.AnythingOfType(\"%T\")", arg)) + } + } + + m.mutex.Lock() + defer m.mutex.Unlock() + c := newCall(m, methodName, assert.CallerInfo(), arguments...) + m.ExpectedCalls = append(m.ExpectedCalls, c) + return c +} + +// /* +// Recording and responding to activity +// */ + +func (m *Mock) findExpectedCall(method string, arguments ...interface{}) (int, *Call) { + var expectedCall *Call + + for i, call := range m.ExpectedCalls { + if call.Method == method { + _, diffCount := call.Arguments.Diff(arguments) + if diffCount == 0 { + expectedCall = call + if call.Repeatability > -1 { + return i, call + } + } + } + } + + return -1, expectedCall +} + +type matchCandidate struct { + call *Call + mismatch string + diffCount int +} + +func (c matchCandidate) isBetterMatchThan(other matchCandidate) bool { + if c.call == nil { + return false + } + if other.call == nil { + return true + } + + if c.diffCount > other.diffCount { + return false + } + if c.diffCount < other.diffCount { + return true + } + + if c.call.Repeatability > 0 && other.call.Repeatability <= 0 { + return true + } + return false +} + +func (m *Mock) findClosestCall(method string, arguments ...interface{}) (*Call, string) { + var bestMatch matchCandidate + + for _, call := range m.expectedCalls() { + if call.Method == method { + + errInfo, tempDiffCount := call.Arguments.Diff(arguments) + tempCandidate := matchCandidate{ + call: call, + mismatch: errInfo, + diffCount: tempDiffCount, + } + if tempCandidate.isBetterMatchThan(bestMatch) { + bestMatch = tempCandidate + } + } + } + + return bestMatch.call, bestMatch.mismatch +} + +func callString(method string, arguments Arguments, includeArgumentValues bool) string { + + var argValsString string + if includeArgumentValues { + var argVals []string + for argIndex, arg := range arguments { + argVals = append(argVals, fmt.Sprintf("%d: %#v", argIndex, arg)) + } + argValsString = fmt.Sprintf("\n\t\t%s", strings.Join(argVals, "\n\t\t")) + } + + return fmt.Sprintf("%s(%s)%s", method, arguments.String(), argValsString) +} + +// Called tells the mock object that a method has been called, and gets an array +// of arguments to return. Panics if the call is unexpected (i.e. not preceded by +// appropriate .On .Return() calls) +// If Call.WaitFor is set, blocks until the channel is closed or receives a message. +func (m *Mock) Called(arguments ...interface{}) Arguments { + // get the calling function's name + pc, _, _, ok := runtime.Caller(1) + if !ok { + panic("Couldn't get the caller information") + } + functionPath := runtime.FuncForPC(pc).Name() + //Next four lines are required to use GCCGO function naming conventions. + //For Ex: github_com_docker_libkv_store_mock.WatchTree.pN39_github_com_docker_libkv_store_mock.Mock + //uses interface information unlike golang github.com/docker/libkv/store/mock.(*Mock).WatchTree + //With GCCGO we need to remove interface information starting from pN
. + re := regexp.MustCompile("\\.pN\\d+_") + if re.MatchString(functionPath) { + functionPath = re.Split(functionPath, -1)[0] + } + parts := strings.Split(functionPath, ".") + functionName := parts[len(parts)-1] + return m.MethodCalled(functionName, arguments...) +} + +// MethodCalled tells the mock object that the given method has been called, and gets +// an array of arguments to return. Panics if the call is unexpected (i.e. not preceded +// by appropriate .On .Return() calls) +// If Call.WaitFor is set, blocks until the channel is closed or receives a message. +func (m *Mock) MethodCalled(methodName string, arguments ...interface{}) Arguments { + m.mutex.Lock() + //TODO: could combine expected and closes in single loop + found, call := m.findExpectedCall(methodName, arguments...) + + if found < 0 { + // expected call found but it has already been called with repeatable times + if call != nil { + m.mutex.Unlock() + m.fail("\nassert: mock: The method has been called over %d times.\n\tEither do one more Mock.On(\"%s\").Return(...), or remove extra call.\n\tThis call was unexpected:\n\t\t%s\n\tat: %s", call.totalCalls, methodName, callString(methodName, arguments, true), assert.CallerInfo()) + } + // we have to fail here - because we don't know what to do + // as the return arguments. This is because: + // + // a) this is a totally unexpected call to this method, + // b) the arguments are not what was expected, or + // c) the developer has forgotten to add an accompanying On...Return pair. + closestCall, mismatch := m.findClosestCall(methodName, arguments...) + m.mutex.Unlock() + + if closestCall != nil { + m.fail("\n\nmock: Unexpected Method Call\n-----------------------------\n\n%s\n\nThe closest call I have is: \n\n%s\n\n%s\nDiff: %s", + callString(methodName, arguments, true), + callString(methodName, closestCall.Arguments, true), + diffArguments(closestCall.Arguments, arguments), + strings.TrimSpace(mismatch), + ) + } else { + m.fail("\nassert: mock: I don't know what to return because the method call was unexpected.\n\tEither do Mock.On(\"%s\").Return(...) first, or remove the %s() call.\n\tThis method was unexpected:\n\t\t%s\n\tat: %s", methodName, methodName, callString(methodName, arguments, true), assert.CallerInfo()) + } + } + + if call.Repeatability == 1 { + call.Repeatability = -1 + } else if call.Repeatability > 1 { + call.Repeatability-- + } + call.totalCalls++ + + // add the call + m.Calls = append(m.Calls, *newCall(m, methodName, assert.CallerInfo(), arguments...)) + m.mutex.Unlock() + + // block if specified + if call.WaitFor != nil { + <-call.WaitFor + } else { + time.Sleep(call.waitTime) + } + + m.mutex.Lock() + panicMsg := call.PanicMsg + m.mutex.Unlock() + if panicMsg != nil { + panic(*panicMsg) + } + + m.mutex.Lock() + runFn := call.RunFn + m.mutex.Unlock() + + if runFn != nil { + runFn(arguments) + } + + m.mutex.Lock() + returnArgs := call.ReturnArguments + m.mutex.Unlock() + + return returnArgs +} + +/* + Assertions +*/ + +type assertExpectationser interface { + AssertExpectations(TestingT) bool +} + +// AssertExpectationsForObjects asserts that everything specified with On and Return +// of the specified objects was in fact called as expected. +// +// Calls may have occurred in any order. +func AssertExpectationsForObjects(t TestingT, testObjects ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + for _, obj := range testObjects { + if m, ok := obj.(Mock); ok { + t.Logf("Deprecated mock.AssertExpectationsForObjects(myMock.Mock) use mock.AssertExpectationsForObjects(myMock)") + obj = &m + } + m := obj.(assertExpectationser) + if !m.AssertExpectations(t) { + t.Logf("Expectations didn't match for Mock: %+v", reflect.TypeOf(m)) + return false + } + } + return true +} + +// AssertExpectations asserts that everything specified with On and Return was +// in fact called as expected. Calls may have occurred in any order. +func (m *Mock) AssertExpectations(t TestingT) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + m.mutex.Lock() + defer m.mutex.Unlock() + var somethingMissing bool + var failedExpectations int + + // iterate through each expectation + expectedCalls := m.expectedCalls() + for _, expectedCall := range expectedCalls { + if !expectedCall.optional && !m.methodWasCalled(expectedCall.Method, expectedCall.Arguments) && expectedCall.totalCalls == 0 { + somethingMissing = true + failedExpectations++ + t.Logf("FAIL:\t%s(%s)\n\t\tat: %s", expectedCall.Method, expectedCall.Arguments.String(), expectedCall.callerInfo) + } else { + if expectedCall.Repeatability > 0 { + somethingMissing = true + failedExpectations++ + t.Logf("FAIL:\t%s(%s)\n\t\tat: %s", expectedCall.Method, expectedCall.Arguments.String(), expectedCall.callerInfo) + } else { + t.Logf("PASS:\t%s(%s)", expectedCall.Method, expectedCall.Arguments.String()) + } + } + } + + if somethingMissing { + t.Errorf("FAIL: %d out of %d expectation(s) were met.\n\tThe code you are testing needs to make %d more call(s).\n\tat: %s", len(expectedCalls)-failedExpectations, len(expectedCalls), failedExpectations, assert.CallerInfo()) + } + + return !somethingMissing +} + +// AssertNumberOfCalls asserts that the method was called expectedCalls times. +func (m *Mock) AssertNumberOfCalls(t TestingT, methodName string, expectedCalls int) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + m.mutex.Lock() + defer m.mutex.Unlock() + var actualCalls int + for _, call := range m.calls() { + if call.Method == methodName { + actualCalls++ + } + } + return assert.Equal(t, expectedCalls, actualCalls, fmt.Sprintf("Expected number of calls (%d) does not match the actual number of calls (%d).", expectedCalls, actualCalls)) +} + +// AssertCalled asserts that the method was called. +// It can produce a false result when an argument is a pointer type and the underlying value changed after calling the mocked method. +func (m *Mock) AssertCalled(t TestingT, methodName string, arguments ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + m.mutex.Lock() + defer m.mutex.Unlock() + if !m.methodWasCalled(methodName, arguments) { + var calledWithArgs []string + for _, call := range m.calls() { + calledWithArgs = append(calledWithArgs, fmt.Sprintf("%v", call.Arguments)) + } + if len(calledWithArgs) == 0 { + return assert.Fail(t, "Should have called with given arguments", + fmt.Sprintf("Expected %q to have been called with:\n%v\nbut no actual calls happened", methodName, arguments)) + } + return assert.Fail(t, "Should have called with given arguments", + fmt.Sprintf("Expected %q to have been called with:\n%v\nbut actual calls were:\n %v", methodName, arguments, strings.Join(calledWithArgs, "\n"))) + } + return true +} + +// AssertNotCalled asserts that the method was not called. +// It can produce a false result when an argument is a pointer type and the underlying value changed after calling the mocked method. +func (m *Mock) AssertNotCalled(t TestingT, methodName string, arguments ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + m.mutex.Lock() + defer m.mutex.Unlock() + if m.methodWasCalled(methodName, arguments) { + return assert.Fail(t, "Should not have called with given arguments", + fmt.Sprintf("Expected %q to not have been called with:\n%v\nbut actually it was.", methodName, arguments)) + } + return true +} + +// IsMethodCallable checking that the method can be called +// If the method was called more than `Repeatability` return false +func (m *Mock) IsMethodCallable(t TestingT, methodName string, arguments ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + m.mutex.Lock() + defer m.mutex.Unlock() + + for _, v := range m.ExpectedCalls { + if v.Method != methodName { + continue + } + if len(arguments) != len(v.Arguments) { + continue + } + if v.Repeatability < v.totalCalls { + continue + } + if isArgsEqual(v.Arguments, arguments) { + return true + } + } + return false +} + +// isArgsEqual compares arguments +func isArgsEqual(expected Arguments, args []interface{}) bool { + if len(expected) != len(args) { + return false + } + for i, v := range args { + if !reflect.DeepEqual(expected[i], v) { + return false + } + } + return true +} + +func (m *Mock) methodWasCalled(methodName string, expected []interface{}) bool { + for _, call := range m.calls() { + if call.Method == methodName { + + _, differences := Arguments(expected).Diff(call.Arguments) + + if differences == 0 { + // found the expected call + return true + } + + } + } + // we didn't find the expected call + return false +} + +func (m *Mock) expectedCalls() []*Call { + return append([]*Call{}, m.ExpectedCalls...) +} + +func (m *Mock) calls() []Call { + return append([]Call{}, m.Calls...) +} + +/* + Arguments +*/ + +// Arguments holds an array of method arguments or return values. +type Arguments []interface{} + +const ( + // Anything is used in Diff and Assert when the argument being tested + // shouldn't be taken into consideration. + Anything = "mock.Anything" +) + +// AnythingOfTypeArgument is a string that contains the type of an argument +// for use when type checking. Used in Diff and Assert. +type AnythingOfTypeArgument string + +// AnythingOfType returns an AnythingOfTypeArgument object containing the +// name of the type to check for. Used in Diff and Assert. +// +// For example: +// Assert(t, AnythingOfType("string"), AnythingOfType("int")) +func AnythingOfType(t string) AnythingOfTypeArgument { + return AnythingOfTypeArgument(t) +} + +// IsTypeArgument is a struct that contains the type of an argument +// for use when type checking. This is an alternative to AnythingOfType. +// Used in Diff and Assert. +type IsTypeArgument struct { + t interface{} +} + +// IsType returns an IsTypeArgument object containing the type to check for. +// You can provide a zero-value of the type to check. This is an +// alternative to AnythingOfType. Used in Diff and Assert. +// +// For example: +// Assert(t, IsType(""), IsType(0)) +func IsType(t interface{}) *IsTypeArgument { + return &IsTypeArgument{t: t} +} + +// argumentMatcher performs custom argument matching, returning whether or +// not the argument is matched by the expectation fixture function. +type argumentMatcher struct { + // fn is a function which accepts one argument, and returns a bool. + fn reflect.Value +} + +func (f argumentMatcher) Matches(argument interface{}) bool { + expectType := f.fn.Type().In(0) + expectTypeNilSupported := false + switch expectType.Kind() { + case reflect.Interface, reflect.Chan, reflect.Func, reflect.Map, reflect.Slice, reflect.Ptr: + expectTypeNilSupported = true + } + + argType := reflect.TypeOf(argument) + var arg reflect.Value + if argType == nil { + arg = reflect.New(expectType).Elem() + } else { + arg = reflect.ValueOf(argument) + } + + if argType == nil && !expectTypeNilSupported { + panic(errors.New("attempting to call matcher with nil for non-nil expected type")) + } + if argType == nil || argType.AssignableTo(expectType) { + result := f.fn.Call([]reflect.Value{arg}) + return result[0].Bool() + } + return false +} + +func (f argumentMatcher) String() string { + return fmt.Sprintf("func(%s) bool", f.fn.Type().In(0).Name()) +} + +// MatchedBy can be used to match a mock call based on only certain properties +// from a complex struct or some calculation. It takes a function that will be +// evaluated with the called argument and will return true when there's a match +// and false otherwise. +// +// Example: +// m.On("Do", MatchedBy(func(req *http.Request) bool { return req.Host == "example.com" })) +// +// |fn|, must be a function accepting a single argument (of the expected type) +// which returns a bool. If |fn| doesn't match the required signature, +// MatchedBy() panics. +func MatchedBy(fn interface{}) argumentMatcher { + fnType := reflect.TypeOf(fn) + + if fnType.Kind() != reflect.Func { + panic(fmt.Sprintf("assert: arguments: %s is not a func", fn)) + } + if fnType.NumIn() != 1 { + panic(fmt.Sprintf("assert: arguments: %s does not take exactly one argument", fn)) + } + if fnType.NumOut() != 1 || fnType.Out(0).Kind() != reflect.Bool { + panic(fmt.Sprintf("assert: arguments: %s does not return a bool", fn)) + } + + return argumentMatcher{fn: reflect.ValueOf(fn)} +} + +// Get Returns the argument at the specified index. +func (args Arguments) Get(index int) interface{} { + if index+1 > len(args) { + panic(fmt.Sprintf("assert: arguments: Cannot call Get(%d) because there are %d argument(s).", index, len(args))) + } + return args[index] +} + +// Is gets whether the objects match the arguments specified. +func (args Arguments) Is(objects ...interface{}) bool { + for i, obj := range args { + if obj != objects[i] { + return false + } + } + return true +} + +// Diff gets a string describing the differences between the arguments +// and the specified objects. +// +// Returns the diff string and number of differences found. +func (args Arguments) Diff(objects []interface{}) (string, int) { + //TODO: could return string as error and nil for No difference + + var output = "\n" + var differences int + + var maxArgCount = len(args) + if len(objects) > maxArgCount { + maxArgCount = len(objects) + } + + for i := 0; i < maxArgCount; i++ { + var actual, expected interface{} + var actualFmt, expectedFmt string + + if len(objects) <= i { + actual = "(Missing)" + actualFmt = "(Missing)" + } else { + actual = objects[i] + actualFmt = fmt.Sprintf("(%[1]T=%[1]v)", actual) + } + + if len(args) <= i { + expected = "(Missing)" + expectedFmt = "(Missing)" + } else { + expected = args[i] + expectedFmt = fmt.Sprintf("(%[1]T=%[1]v)", expected) + } + + if matcher, ok := expected.(argumentMatcher); ok { + if matcher.Matches(actual) { + output = fmt.Sprintf("%s\t%d: PASS: %s matched by %s\n", output, i, actualFmt, matcher) + } else { + differences++ + output = fmt.Sprintf("%s\t%d: FAIL: %s not matched by %s\n", output, i, actualFmt, matcher) + } + } else if reflect.TypeOf(expected) == reflect.TypeOf((*AnythingOfTypeArgument)(nil)).Elem() { + + // type checking + if reflect.TypeOf(actual).Name() != string(expected.(AnythingOfTypeArgument)) && reflect.TypeOf(actual).String() != string(expected.(AnythingOfTypeArgument)) { + // not match + differences++ + output = fmt.Sprintf("%s\t%d: FAIL: type %s != type %s - %s\n", output, i, expected, reflect.TypeOf(actual).Name(), actualFmt) + } + + } else if reflect.TypeOf(expected) == reflect.TypeOf((*IsTypeArgument)(nil)) { + t := expected.(*IsTypeArgument).t + if reflect.TypeOf(t) != reflect.TypeOf(actual) { + differences++ + output = fmt.Sprintf("%s\t%d: FAIL: type %s != type %s - %s\n", output, i, reflect.TypeOf(t).Name(), reflect.TypeOf(actual).Name(), actualFmt) + } + } else { + + // normal checking + + if assert.ObjectsAreEqual(expected, Anything) || assert.ObjectsAreEqual(actual, Anything) || assert.ObjectsAreEqual(actual, expected) { + // match + output = fmt.Sprintf("%s\t%d: PASS: %s == %s\n", output, i, actualFmt, expectedFmt) + } else { + // not match + differences++ + output = fmt.Sprintf("%s\t%d: FAIL: %s != %s\n", output, i, actualFmt, expectedFmt) + } + } + + } + + if differences == 0 { + return "No differences.", differences + } + + return output, differences + +} + +// Assert compares the arguments with the specified objects and fails if +// they do not exactly match. +func (args Arguments) Assert(t TestingT, objects ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + + // get the differences + diff, diffCount := args.Diff(objects) + + if diffCount == 0 { + return true + } + + // there are differences... report them... + t.Logf(diff) + t.Errorf("%sArguments do not match.", assert.CallerInfo()) + + return false + +} + +// String gets the argument at the specified index. Panics if there is no argument, or +// if the argument is of the wrong type. +// +// If no index is provided, String() returns a complete string representation +// of the arguments. +func (args Arguments) String(indexOrNil ...int) string { + + if len(indexOrNil) == 0 { + // normal String() method - return a string representation of the args + var argsStr []string + for _, arg := range args { + argsStr = append(argsStr, fmt.Sprintf("%T", arg)) // handles nil nicely + } + return strings.Join(argsStr, ",") + } else if len(indexOrNil) == 1 { + // Index has been specified - get the argument at that index + var index = indexOrNil[0] + var s string + var ok bool + if s, ok = args.Get(index).(string); !ok { + panic(fmt.Sprintf("assert: arguments: String(%d) failed because object wasn't correct type: %s", index, args.Get(index))) + } + return s + } + + panic(fmt.Sprintf("assert: arguments: Wrong number of arguments passed to String. Must be 0 or 1, not %d", len(indexOrNil))) + +} + +// Int gets the argument at the specified index. Panics if there is no argument, or +// if the argument is of the wrong type. +func (args Arguments) Int(index int) int { + var s int + var ok bool + if s, ok = args.Get(index).(int); !ok { + panic(fmt.Sprintf("assert: arguments: Int(%d) failed because object wasn't correct type: %v", index, args.Get(index))) + } + return s +} + +// Error gets the argument at the specified index. Panics if there is no argument, or +// if the argument is of the wrong type. +func (args Arguments) Error(index int) error { + obj := args.Get(index) + var s error + var ok bool + if obj == nil { + return nil + } + if s, ok = obj.(error); !ok { + panic(fmt.Sprintf("assert: arguments: Error(%d) failed because object wasn't correct type: %v", index, args.Get(index))) + } + return s +} + +// Bool gets the argument at the specified index. Panics if there is no argument, or +// if the argument is of the wrong type. +func (args Arguments) Bool(index int) bool { + var s bool + var ok bool + if s, ok = args.Get(index).(bool); !ok { + panic(fmt.Sprintf("assert: arguments: Bool(%d) failed because object wasn't correct type: %v", index, args.Get(index))) + } + return s +} + +func typeAndKind(v interface{}) (reflect.Type, reflect.Kind) { + t := reflect.TypeOf(v) + k := t.Kind() + + if k == reflect.Ptr { + t = t.Elem() + k = t.Kind() + } + return t, k +} + +func diffArguments(expected Arguments, actual Arguments) string { + if len(expected) != len(actual) { + return fmt.Sprintf("Provided %v arguments, mocked for %v arguments", len(expected), len(actual)) + } + + for x := range expected { + if diffString := diff(expected[x], actual[x]); diffString != "" { + return fmt.Sprintf("Difference found in argument %v:\n\n%s", x, diffString) + } + } + + return "" +} + +// diff returns a diff of both values as long as both are of the same type and +// are a struct, map, slice or array. Otherwise it returns an empty string. +func diff(expected interface{}, actual interface{}) string { + if expected == nil || actual == nil { + return "" + } + + et, ek := typeAndKind(expected) + at, _ := typeAndKind(actual) + + if et != at { + return "" + } + + if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array { + return "" + } + + e := spewConfig.Sdump(expected) + a := spewConfig.Sdump(actual) + + diff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{ + A: difflib.SplitLines(e), + B: difflib.SplitLines(a), + FromFile: "Expected", + FromDate: "", + ToFile: "Actual", + ToDate: "", + Context: 1, + }) + + return diff +} + +var spewConfig = spew.ConfigState{ + Indent: " ", + DisablePointerAddresses: true, + DisableCapacities: true, + SortKeys: true, +} + +type tHelper interface { + Helper() +} diff --git a/vendor/github.com/stretchr/testify/require/require.go b/vendor/github.com/stretchr/testify/require/require.go index ec4624b28..51820df2e 100644 --- a/vendor/github.com/stretchr/testify/require/require.go +++ b/vendor/github.com/stretchr/testify/require/require.go @@ -256,6 +256,54 @@ func Error(t TestingT, err error, msgAndArgs ...interface{}) { t.FailNow() } +// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.ErrorAs(t, err, target, msgAndArgs...) { + return + } + t.FailNow() +} + +// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.ErrorAsf(t, err, target, msg, args...) { + return + } + t.FailNow() +} + +// ErrorIs asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func ErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.ErrorIs(t, err, target, msgAndArgs...) { + return + } + t.FailNow() +} + +// ErrorIsf asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.ErrorIsf(t, err, target, msg, args...) { + return + } + t.FailNow() +} + // Errorf asserts that a function returned an error (i.e. not `nil`). // // actualObj, err := SomeFunction() @@ -806,6 +854,126 @@ func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon fl t.FailNow() } +// IsDecreasing asserts that the collection is decreasing +// +// assert.IsDecreasing(t, []int{2, 1, 0}) +// assert.IsDecreasing(t, []float{2, 1}) +// assert.IsDecreasing(t, []string{"b", "a"}) +func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsDecreasing(t, object, msgAndArgs...) { + return + } + t.FailNow() +} + +// IsDecreasingf asserts that the collection is decreasing +// +// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsDecreasingf(t, object, msg, args...) { + return + } + t.FailNow() +} + +// IsIncreasing asserts that the collection is increasing +// +// assert.IsIncreasing(t, []int{1, 2, 3}) +// assert.IsIncreasing(t, []float{1, 2}) +// assert.IsIncreasing(t, []string{"a", "b"}) +func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsIncreasing(t, object, msgAndArgs...) { + return + } + t.FailNow() +} + +// IsIncreasingf asserts that the collection is increasing +// +// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsIncreasingf(t, object, msg, args...) { + return + } + t.FailNow() +} + +// IsNonDecreasing asserts that the collection is not decreasing +// +// assert.IsNonDecreasing(t, []int{1, 1, 2}) +// assert.IsNonDecreasing(t, []float{1, 2}) +// assert.IsNonDecreasing(t, []string{"a", "b"}) +func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsNonDecreasing(t, object, msgAndArgs...) { + return + } + t.FailNow() +} + +// IsNonDecreasingf asserts that the collection is not decreasing +// +// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") +// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsNonDecreasingf(t, object, msg, args...) { + return + } + t.FailNow() +} + +// IsNonIncreasing asserts that the collection is not increasing +// +// assert.IsNonIncreasing(t, []int{2, 1, 1}) +// assert.IsNonIncreasing(t, []float{2, 1}) +// assert.IsNonIncreasing(t, []string{"b", "a"}) +func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsNonIncreasing(t, object, msgAndArgs...) { + return + } + t.FailNow() +} + +// IsNonIncreasingf asserts that the collection is not increasing +// +// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") +// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsNonIncreasingf(t, object, msg, args...) { + return + } + t.FailNow() +} + // IsType asserts that the specified objects are of the same type. func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -944,6 +1112,34 @@ func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...inter t.FailNow() } +// Negative asserts that the specified element is negative +// +// assert.Negative(t, -1) +// assert.Negative(t, -1.23) +func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.Negative(t, e, msgAndArgs...) { + return + } + t.FailNow() +} + +// Negativef asserts that the specified element is negative +// +// assert.Negativef(t, -1, "error message %s", "formatted") +// assert.Negativef(t, -1.23, "error message %s", "formatted") +func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.Negativef(t, e, msg, args...) { + return + } + t.FailNow() +} + // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // @@ -1200,6 +1396,30 @@ func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, t.FailNow() } +// NotErrorIs asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotErrorIs(t, err, target, msgAndArgs...) { + return + } + t.FailNow() +} + +// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotErrorIsf(t, err, target, msg, args...) { + return + } + t.FailNow() +} + // NotNil asserts that the specified object is not nil. // // assert.NotNil(t, err) @@ -1446,6 +1666,34 @@ func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{} t.FailNow() } +// Positive asserts that the specified element is positive +// +// assert.Positive(t, 1) +// assert.Positive(t, 1.23) +func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.Positive(t, e, msgAndArgs...) { + return + } + t.FailNow() +} + +// Positivef asserts that the specified element is positive +// +// assert.Positivef(t, 1, "error message %s", "formatted") +// assert.Positivef(t, 1.23, "error message %s", "formatted") +func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.Positivef(t, e, msg, args...) { + return + } + t.FailNow() +} + // Regexp asserts that a specified regexp matches a string. // // assert.Regexp(t, regexp.MustCompile("start"), "it's starting") diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go b/vendor/github.com/stretchr/testify/require/require_forward.go index 103d7dcb6..ed54a9d83 100644 --- a/vendor/github.com/stretchr/testify/require/require_forward.go +++ b/vendor/github.com/stretchr/testify/require/require_forward.go @@ -205,6 +205,42 @@ func (a *Assertions) Error(err error, msgAndArgs ...interface{}) { Error(a.t, err, msgAndArgs...) } +// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + ErrorAs(a.t, err, target, msgAndArgs...) +} + +// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value. +// This is a wrapper for errors.As. +func (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + ErrorAsf(a.t, err, target, msg, args...) +} + +// ErrorIs asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + ErrorIs(a.t, err, target, msgAndArgs...) +} + +// ErrorIsf asserts that at least one of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + ErrorIsf(a.t, err, target, msg, args...) +} + // Errorf asserts that a function returned an error (i.e. not `nil`). // // actualObj, err := SomeFunction() @@ -632,6 +668,102 @@ func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilo InEpsilonf(a.t, expected, actual, epsilon, msg, args...) } +// IsDecreasing asserts that the collection is decreasing +// +// a.IsDecreasing([]int{2, 1, 0}) +// a.IsDecreasing([]float{2, 1}) +// a.IsDecreasing([]string{"b", "a"}) +func (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsDecreasing(a.t, object, msgAndArgs...) +} + +// IsDecreasingf asserts that the collection is decreasing +// +// a.IsDecreasingf([]int{2, 1, 0}, "error message %s", "formatted") +// a.IsDecreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsDecreasingf([]string{"b", "a"}, "error message %s", "formatted") +func (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsDecreasingf(a.t, object, msg, args...) +} + +// IsIncreasing asserts that the collection is increasing +// +// a.IsIncreasing([]int{1, 2, 3}) +// a.IsIncreasing([]float{1, 2}) +// a.IsIncreasing([]string{"a", "b"}) +func (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsIncreasing(a.t, object, msgAndArgs...) +} + +// IsIncreasingf asserts that the collection is increasing +// +// a.IsIncreasingf([]int{1, 2, 3}, "error message %s", "formatted") +// a.IsIncreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsIncreasingf([]string{"a", "b"}, "error message %s", "formatted") +func (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsIncreasingf(a.t, object, msg, args...) +} + +// IsNonDecreasing asserts that the collection is not decreasing +// +// a.IsNonDecreasing([]int{1, 1, 2}) +// a.IsNonDecreasing([]float{1, 2}) +// a.IsNonDecreasing([]string{"a", "b"}) +func (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsNonDecreasing(a.t, object, msgAndArgs...) +} + +// IsNonDecreasingf asserts that the collection is not decreasing +// +// a.IsNonDecreasingf([]int{1, 1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]float{1, 2}, "error message %s", "formatted") +// a.IsNonDecreasingf([]string{"a", "b"}, "error message %s", "formatted") +func (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsNonDecreasingf(a.t, object, msg, args...) +} + +// IsNonIncreasing asserts that the collection is not increasing +// +// a.IsNonIncreasing([]int{2, 1, 1}) +// a.IsNonIncreasing([]float{2, 1}) +// a.IsNonIncreasing([]string{"b", "a"}) +func (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsNonIncreasing(a.t, object, msgAndArgs...) +} + +// IsNonIncreasingf asserts that the collection is not increasing +// +// a.IsNonIncreasingf([]int{2, 1, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]float{2, 1}, "error message %s", "formatted") +// a.IsNonIncreasingf([]string{"b", "a"}, "error message %s", "formatted") +func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsNonIncreasingf(a.t, object, msg, args...) +} + // IsType asserts that the specified objects are of the same type. func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { @@ -740,6 +872,28 @@ func (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...i Lessf(a.t, e1, e2, msg, args...) } +// Negative asserts that the specified element is negative +// +// a.Negative(-1) +// a.Negative(-1.23) +func (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + Negative(a.t, e, msgAndArgs...) +} + +// Negativef asserts that the specified element is negative +// +// a.Negativef(-1, "error message %s", "formatted") +// a.Negativef(-1.23, "error message %s", "formatted") +func (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + Negativef(a.t, e, msg, args...) +} + // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // @@ -942,6 +1096,24 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str NotEqualf(a.t, expected, actual, msg, args...) } +// NotErrorIs asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotErrorIs(a.t, err, target, msgAndArgs...) +} + +// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// This is a wrapper for errors.Is. +func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotErrorIsf(a.t, err, target, msg, args...) +} + // NotNil asserts that the specified object is not nil. // // a.NotNil(err) @@ -1134,6 +1306,28 @@ func (a *Assertions) Panicsf(f assert.PanicTestFunc, msg string, args ...interfa Panicsf(a.t, f, msg, args...) } +// Positive asserts that the specified element is positive +// +// a.Positive(1) +// a.Positive(1.23) +func (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + Positive(a.t, e, msgAndArgs...) +} + +// Positivef asserts that the specified element is positive +// +// a.Positivef(1, "error message %s", "formatted") +// a.Positivef(1.23, "error message %s", "formatted") +func (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + Positivef(a.t, e, msg, args...) +} + // Regexp asserts that a specified regexp matches a string. // // a.Regexp(regexp.MustCompile("start"), "it's starting") diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go index 7d42a8c88..b6911e830 100644 --- a/vendor/golang.org/x/crypto/ssh/server.go +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -572,6 +572,10 @@ userAuthLoop: perms = candidate.perms } case "gssapi-with-mic": + if config.GSSAPIWithMICConfig == nil { + authErr = errors.New("ssh: gssapi-with-mic auth not configured") + break + } gssapiConfig := config.GSSAPIWithMICConfig userAuthRequestGSSAPI, err := parseGSSAPIPayload(userAuthReq.Payload) if err != nil { diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go index ec2bde8cb..31a034c5d 100644 --- a/vendor/golang.org/x/net/publicsuffix/table.go +++ b/vendor/golang.org/x/net/publicsuffix/table.go @@ -2,7 +2,7 @@ package publicsuffix -const version = "publicsuffix.org's public_suffix_list.dat, git revision bdbe9dfd268d040fc826766b1d4e27dc4416fe73 (2020-08-10T09:26:55Z)" +const version = "publicsuffix.org's public_suffix_list.dat, git revision f9f612a3386dd9a1e4a1892722e3418549520b49 (2020-11-30T21:55:23Z)" const ( nodesBitsChildren = 10 @@ -23,492 +23,499 @@ const ( ) // numTLD is the number of top level domains. -const numTLD = 1518 +const numTLD = 1513 // Text is the combined text of all labels. const text = "9guacuiababia-goracleaningroks-theatree12hpalermomahachijolstere" + - "trosnubalsfjorddnslivelanddnss3-ap-south-1kappchizip6116-b-datai" + - "ji234lima-cityeatselinogradult3l3p0rtatamotors3-ap-northeast-133" + - "7birkenesoddtangenovaranzaninohekinannestadivttasvuotnakamuratak" + - "ahamalselvendrellimitediyukuhashimojindianapolis-a-bloggerbirthp" + - "lacebjarkoyurihonjournalistjohninomiyakonojorpelandnpanamatta-va" + - "rjjatjeldsundrangedalimoliseminebjerkreimdbamblebesbyglandroverh" + - "alla-speziaustevollaziobihirosakikamijimatsuzakibigawagrocerybni" + - "keisenbahnatuurwetenschappenaumburgdyniabogadobeaemcloud66bjugni" + - "eznord-frontierblackfridayusuharabloombergbauernirasakindianmark" + - "etingjesdalinkyard-cloudyclusterbloxcms3-website-us-west-2blueda" + - "gestangeologyusuisservehumourbmoattachments5yuulmemorialivornoce" + - "anographiquebmsakyotanabellunord-aurdalpha-myqnapcloudaccesscamb" + - "ridgeiseiyoichippubetsubetsugarugbydgoszczecinemagentositechnolo" + - "gyuzawabmweddingjovikariyameinforumzjampagexlombardynaliaskimits" + - "ubatamibugattiffanycateringebuildingladefinimakanegasakirabnrwed" + - "eploybomloabathsbcatholicaxiashorokanaiebondray-dnstracebonnishi" + - "azaindielddanuorrindigenaklodzkodairabookinghostedpictethnologyb" + - "oomlair-traffic-controlleyboschaefflerdalomzaporizhzhegurindustr" + - "iabostikarlsoybostonakijinsekikogentappsselfipanasonichernihivgu" + - "bsalangenishigocelotenkawabotanicalgardenishiharabotanicgardenis" + - "hiizunazukindustriesteamsterdamnserverbaniabotanynysagaeroclubme" + - "decincinnationwidealerbouncemerckmsdnipropetrovskjervoyagets-itj" + - "maxxxboxenapponazure-mobilebounty-fullensakerrypropertiesalondon" + - "etskarmoyboutiquebechernivtsiciliabozen-sudtirolondrinamsskogane" + - "infinitintelligencebozen-suedtirolorenskoglassassinationalherita" + - "gebplacedogawarabikomaezakirunorddalottebrandywinevalleybrasilia" + - "brindisibenikinderoybristoloseyouriparachutingleezebritishcolumb" + - "ialowiezaganishikatakinouebroadcastlebtimnetzlglitchattanooganor" + - "dlandrayddnsfreebox-osascoli-picenordre-landraydnsupdaternopilaw" + - "atchesaltdalottokonamegatakazakinternationalfirearmsaludrivefsni" + - "llfjordrobaknoluoktachikawakuyabukievennodesadoes-itvedestrandru" + - "dupontariobranconakaniikawatanagurabroadwaybroke-itjomeloyalisto" + - "ragebrokerbronnoysundurbanamexhibitionishikatsuragit-reposalvado" + - "rdalibabalena-devicesalzburgliwicebrothermesaverdealstahaugesund" + - "erseaportsinfolldalouvreisenishikawazukamisunagawabrowsersafetym" + - "arketsamegawabrumunddalowiczest-le-patronishimerabrunelastxfinit" + - "ybrusselsamnangerbruxellesampalacebryansklepparaglidinglobalasho" + - "vhachinohedmarkarpaczeladzparisor-fronishinomiyashironocparliame" + - "ntjxjavald-aostarnbergloboavistanbulsan-sudtirolpusercontentkmax" + - "xn--0trq7p7nnishinoomotegoddabrynewhollandurhamburglogowegroweib" + - "olognagareyamakeupowiathletajimabaridagawalbrzycharitydalaskanit" + - "tedallasalleangaviikaascolipicenodumemsettsupportksatxn--11b4c3d" + - "ynathomebuiltwithdarkaruizawabuskerudinewjerseybuzentsujiiebuzzw" + - "eirbwellbeingzonebzhitomirumalatvuopmicrolightingloppenzaolbia-t" + - "empio-olbiatempioolbialystokkepnogatagajobojintuitmparmattelekom" + - "munikationishinoshimatsuurabzzcolumbusheycommunexus-2community-p" + - "rochowicecomoarekecomparemarkerryhotelsaobernardocompute-1comput" + - "erhistoryofscience-fictioncomsecuritytacticsxn--12cfi8ixb8luxury" + - "condoshichinohealth-carereformitakeharaconferenceconstructioncon" + - "suladonnagatorodoyconsultanthropologyconsultingrondarcontactozsd" + - "eltajirittogliattis-a-chefashioncontagematsubaracontemporaryarte" + - "ducationalchikugodontexistmein-iservebeercontractorskenconventur" + - "eshinodearthruherecipescaravantaacookingchannelsdvrdnsdojoburgro" + - "ngausdaluzerncoolvivanovoldacooperativano-frankivskolefrakkestad" + - "yndns1copenhagencyclopedichitosetogakushimotoganewspapercoproduc" + - "tionsaogoncartoonartdecologiacorporationcorsicagliaricoharuovatm" + - "allorcadaquesaotomeldalcorvettemasekashiwazakiyosemitecosenzakop" + - "anelblagrarchaeologyeongbuk0cosidnsfor-better-thanawassamukawata" + - "rikuzentakatajimidorissagamiharacostumedicinaharimalopolskanland" + - "ynnsapporocouchpotatofriesardegnaroycouklugsmilegallocus-3counci" + - "lcouponsardiniacozoracq-acranbrookuwanalyticsarlcrdynservebbsarp" + - "sborgrossetouchihayaakasakawaharacreditcardynulvikasserversaille" + - "sarufutsunomiyawakasaikaitakofuefukihaboromskogroundhandlingrozn" + - "ycreditunioncremonashgabadaddjaguarqcxn--12co0c3b4evalleaostavan" + - "gercrewiencricketrzyncrimeast-kazakhstanangercrotonecrownipartsa" + - "sayamacrsvpartycruisesasebofageometre-experts-comptablesaskatche" + - "wancryptonomichigangwoncuisinellajollamericanexpressexyculturalc" + - "entertainmentrani-andria-barletta-trani-andriacuneocupcakecuriti" + - "backyardsassaris-a-conservativegarsheis-a-cpadualstackhero-netwo" + - "rkinggroupasadenarashinocurvalled-aostaverncymrussiacyonabarumet" + - "lifeinsurancecyouthachiojiyaitakanezawafetsundyroyrvikingrpassag" + - "ensaudafguidegreefhvalerfidoomdnsiskinkyotobetsulikes-piedmontic" + - "ellodingenfieldfigueresinstaginguitarsavonarusawafilateliafilege" + - "ar-audnedalnfilegear-deatnunusualpersonfilegear-gbizfilegear-ief" + - "ilegear-jpmorganfilegear-sgujoinvilleitungsenfilminamiechizenfin" + - "alfinancefineartsaxofinlandfinnoyfirebaseappassenger-association" + - "firenetranoyfirenzefirestonefirmdalegoldpoint2thisamitsukefishin" + - "golffanschoenbrunnfitjarvodkafjordvalledaostargetmyiphostre-tote" + - "ndofinternet-dnschokokekschokoladenfitnessettlementransportefjal" + - "erflesbergulenflickragerogerscholarshipschoolschulezajskasuyanai" + - "zunzenflightschulserverflirfloginlinefloraflorencefloridatsunanj" + - "oetsuwanouchikujogaszkolancashirecreationfloripaderbornfloristan" + - "ohatakaharuslivinghistoryflorokunohealthcareerschwarzgwangjunipe" + - "rflowerschweizfltransurlflynnhosting-clusterfndfor-ourfor-somedi" + - "zinhistorischesciencecentersciencehistoryfor-theaterforexrothach" + - "irogatakaokalmykiaforgotdnscientistordalforli-cesena-forlicesena" + - "forlillehammerfeste-ipatriaforsaleikangerforsandasuologoipavianc" + - "arrdfortalfortmissoulancasterfortworthadanorthwesternmutualfosne" + - "scjohnsonfotaruis-a-democratrapaniizafoxfordebianfozfredrikstadt" + - "vscrapper-sitefreeddnsgeekgalaxyfreedesktopensocialfreemasonryfr" + - "eesitexaskoyabearalvahkikuchikuseikarugalsaceofreetlscrappingunm" + - "anxn--1ctwolominamatarnobrzegyptianfreiburguovdageaidnusrcfastly" + - "lbananarepublicaseihicampobassociatest-iservecounterstrikehimeji" + - "itatebayashijonawatempresashibetsukuiiyamanouchikuhokuryugasakit" + - "auraustinnaval-d-aosta-valleyokosukanumazuryokoteastcoastaldefen" + - "ceatonsbergivingjemnes3-eu-central-1freseniuscountryestateofdela" + - "wareggio-calabriafribourgushikamifuranorth-kazakhstanfriuli-v-gi" + - "uliafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-giuliafriuli-v" + - "eneziagiuliafriuli-vgiuliafriuliv-giuliafriulive-giuliafriuliveg" + - "iuliafriulivenezia-giuliafriuliveneziagiuliafriulivgiuliafrlfrog" + - "anscrysechocolatelemarkarumaifarsundyndns-homednsamsungmodelling" + - "mxn--12c1fe0bradescotlandyndns-iparochernigovernmentoyotaparsand" + - "nessjoenishiokoppegardyndns-mailubindalublindesnesandoyfrognfrol" + - "andfrom-akrehamnfrom-alfrom-arfrom-azfrom-capetownnews-stagingwi" + - "ddleksvikaszubyfrom-coffeedbackplaneapplinzis-a-designerfrom-ctr" + - "avelchannelfrom-dchofunatoriginstitutelevisionthewifiatoyotomiya" + - "zakinuyamashinatsukigatakashimarnardalucaniafrom-dedyn-berlincol" + - "nfrom-flanderserveirchonanbulsan-suedtiroluccarbonia-iglesias-ca" + - "rboniaiglesiascarboniafrom-gaulardalfrom-hichisochildrensgardenf" + - "rom-iafrom-idfrom-ilfrom-in-brbar0emmafann-arboretumbriamallamac" + - "eiobbcg12038from-kserveminecraftravelersinsurancefrom-kyowariasa" + - "hikawawiiheyakumoduminamifuranofrom-lanciafrom-mamurogawafrom-md" + - "from-meeresistancefrom-mifunefrom-mnfrom-modalenfrom-mservemp3fr" + - "om-mtnfrom-nctulangevagrigentomologyeonggiehtavuoatnabudapest-a-" + - "la-masion-riopretobamaceratabuseating-organichoseiroumuenchenish" + - "itosashimizunaminamibosogndalucernefrom-ndfrom-nefrom-nh-servebl" + - "ogsiteleafamilycompanyanagawafflecellclaimservep2pfizerfrom-njaw" + - "orznoticiasnesoddenmarkhangelskjakdnepropetrovskiervaapsteiermar" + - "katowicefrom-nminamiiserniafrom-nvallee-aosteroyfrom-nyfrom-ohku" + - "rafrom-oketogurafrom-orfrom-padovaksdalfrom-pratohmandalfrom-ris" + - "-a-doctorayfrom-schmidtre-gauldalfrom-sdfrom-tnfrom-txn--1lqs03n" + - "from-utsiracusaikisarazurecontainerdpolicefrom-val-daostavalleyf" + - "rom-vtrdfrom-wafrom-wiardwebhostingxn--1lqs71dfrom-wvallee-d-aos" + - "teigenfrom-wyfrosinonefrostalowa-wolawafroyahooguyfstcgroupgfogg" + - "iafujiiderafujikawaguchikonefujiminokamoenairguardiannakadomarin" + - "ebraskauniversitychyattorneyagawakembuchikumagayagawakkanaibetsu" + - "bamericanfamilydsclouderackmazerbaijan-mayen-rootaribeiraogashim" + - "adachicagoboatservepicservequakefujinomiyadattowebcampinashikimi" + - "nohostfoldnavyfujiokayamangonohejis-a-financialadvisor-aurdalfuj" + - "isatoshonairlinedre-eikerfujisawafujishiroishidakabiratoridefens" + - "eljordfujitsurugashimangyshlakasamatsudopaasiafujixeroxn--1qqw23" + - "afujiyoshidavvenjargap-northeast-3fukayabeatservesarcasmatartand" + - "designfukuchiyamadavvesiidappnodebalancertificationfukudomigawaf" + - "ukuis-a-geekatsushikabeeldengeluidfukumitsubishigakishiwadazaifu" + - "daigojomedio-campidano-mediocampidanomediofukuokazakisofukushima" + - "niwakuratextileirfjordfukuroishikarikaturindalfukusakisosakitaga" + - "wafukuyamagatakahatakaishimoichinosekigaharafunabashiriuchinadaf" + - "unagatakamatsukawafunahashikamiamakusatsumasendaisennangooglecod" + - "espotrentin-sud-tirolfundaciofunkfeuerfuoiskujukuriyamannore-og-" + - "uvdalfuosskoczowildlifedorainfracloudfrontdoorfurnitureggio-emil" + - "ia-romagnakasatsunairportland-4-salernoboribetsuckservicesevasto" + - "polefurubirafurudonostiaafurukawairtelebitbridgestonekobayashiks" + - "hacknetcimbar1fusodegaurafussaintlouis-a-anarchistoireggiocalabr" + - "iafutabayamaguchinomihachimanagementrentin-sudtirolfutboldlygoin" + - "gnowhere-for-morenakatombetsumitakagiizefuttsurugimperiafuturecm" + - "sevenassisicilyfuturehostingfuturemailingfvgfyresdalhangoutsyste" + - "mscloudhannanmokuizumodenakayamapartmentsharpharmacienshawaiijim" + - "aritimoldeloittemp-dnshellaspeziahannosegawahanyuzenhapmircloudh" + - "arstadharvestcelebrationhasamarburghasaminami-alpshimokawahashba" + - "nghasudahasura-appharmacyshimokitayamahasvikatsuyamarugame-hosty" + - "hostinghatogayaizuwakamatsubushikusakadogawahatoyamazakitakamiiz" + - "umisanofidelityhatsukaichikaiseiheijis-a-landscaperugiahattfjell" + - "dalhayashimamotobungotakadancehazuminobusells-for-utwentehelsink" + - "itakatakarazukaluganskygearapphdfcbankaufenhembygdsforbundhemnes" + - "himonitayanagithubusercontentrentin-suedtirolhemsedalhepforgeher" + - "okusslattuminamiizukaminoyamaxunjargaheroyhgtvalleeaosteinkjerus" + - "alembroideryhidorahigashiagatsumagoianiahigashichichibunkyonanao" + - "shimageandsoundandvisionrenderhigashihiroshimanehigashiizumozaki" + - "takyushuaiahigashikagawahigashikagurasoedahigashikawakitaaikitam" + - "ihamadahigashikurumeetrentino-a-adigehigashimatsushimarcheapigee" + - "lvinckautokeinotteroyhigashimatsuyamakitaakitadaitoigawahigashim" + - "urayamamotorcycleshimonosekikawahigashinarusells-itrentino-aadig" + - "ehigashinehigashiomitamamurausukitamotosumy-gatewayhigashiosakas" + - "ayamanakakogawahigashishirakawamatakasagopocznorfolkebibleirvika" + - "zoologyhigashisumiyoshikawaminamiaikitanakagusukumodernhigashits" + - "unoshiroomurahigashiurawa-mazowszexnetrentino-alto-adigehigashiy" + - "amatokoriyamanashiibahccavuotnagaraholtaleniwaizumiotsukumiyamaz" + - "onawsmpplanetariuminamimakis-a-lawyerhigashiyodogawahigashiyoshi" + - "nogaris-a-liberalhiraizumisatohnoshoooshikamaishimofusartshimosu" + - "walkis-a-libertarianhirakatashinagawahiranairtrafficplexus-1hira" + - "rahiratsukagawahirayakagehistorichouseshimotsukehitachiomiyagild" + - "eskaliszhitachiotagotembaixadahitraeumtgeradelmenhorstalbanshimo" + - "tsumahjartdalhjelmelandholeckochikushinonsenergyholidayhomegoods" + - "hinichinanhomeiphiladelphiaareadmyblogspotrentino-altoadigehomel" + - "inkitoolsztynsettlershinjournalismailillesandefjordhomelinuxn--2" + - "m4a15ehomeofficehomesecuritymacaparecidahomesecuritypchoshibuyac" + - "htsandvikcoromantovalle-d-aostatic-accessanfranciscofreakunemuro" + - "rangehirnrtoyotsukaidohtawaramotoineppueblockbustermezhomesensee" + - "ringhomeunixn--2scrj9choyodobashichikashukujitawarahondahongotpa" + - "ntheonsitehonjyoitakasakitashiobarahornindalhorsellsyourhomeftph" + - "ilatelyhorteneis-a-linux-useranishiaritabashikaoirminamiminowaho" + - "spitalhoteleshinjukumanowtvalleedaostehotmailhoyangerhoylandetro" + - "itskypehumanitieshinkamigotoyohashimototalhurdalhurumajis-a-llam" + - "arriottrentino-s-tirolhyllestadhyogoris-a-musicianhyugawarahyund" + - "aiwafuneis-very-evillageis-very-goodyearis-very-niceis-very-swee" + - "tpepperis-with-thebandownloadisleofmanaustdaljetztrentino-sudtir" + - "oljevnakershuscultureggioemiliaromagnamsosnowiechristiansburgret" + - "akanabeautysvardoesntexisteingeekasaokamikoaniikappuboliviajessh" + - "eimpertrixcdn77-ssldyndns-office-on-the-weberjewelryjewishartgal" + - "leryjfkfhappoujgorajlljls-sto1jmphotographysiojnjcloudjiffylkesb" + - "iblackbaudcdn77-securebungoonord-odaljoyentrentino-sued-tiroljoy" + - "okaichibajddarchitecturealtorlandjpnjprshirakokamiminershiranuka" + - "mitsuejurkosakaerodromegallupinbarclaycards3-sa-east-1koseis-a-p" + - "ainteractivegaskvollkosherbrookegawakoshimizumakizunokunimimatak" + - "ayamarylandkoshunantankharkivanylvenicekosugekotohiradomainsureg" + - "ruhostingkotourakouhokutamakis-a-patsfankounosupplieshiraois-a-p" + - "ersonaltrainerkouyamashikekouzushimashikis-a-photographerokuapph" + - "ilipsynology-diskstationkozagawakozakis-a-playershifteditchyouri" + - "phoenixn--30rr7ykozowinbarclays3-us-east-2kpnkppspdnshiraokamoga" + - "wakrasnikahokutokashikis-a-republicancerresearchaeologicaliforni" + - "akrasnodarkredstonekristiansandcatshiratakahagitlaborkristiansun" + - "dkrodsheradkrokstadelvaldaostarostwodzislawindmillkryminamioguni" + - "5kumatorinokumejimasoykumenantokigawakunisakis-a-rockstarachowic" + - "ekunitachiarailwaykunitomigusukumamotoyamashikokuchuokunneppubtl" + - "shishikuis-a-socialistdlibestadkunstsammlungkunstunddesignkuokgr" + - "oupilotshisognekurehabmerkurgankurobelaudibleasingleshisuifuette" + - "rtdasnetzkurogiminamiashigarakuroisoftwarezzokuromatsunais-a-sox" + - "fankurotakikawasakis-a-studentalkushirogawakustanais-a-teacherka" + - "ssyno-dshinshinotsurgerykusupplynxn--3bst00minamisanrikubetsurfa" + - "uskedsmokorsetagayaseralingenoamishirasatogokasells-for-lessauhe" + - "radynv6kutchanelkutnokuzumakis-a-techietis-a-nascarfankvafjordkv" + - "alsundkvamfamberkeleykvanangenkvinesdalkvinnheradkviteseidatingk" + - "vitsoykwpspectruminamitanekzmishimatsumaebashimodatemissileluxem" + - "bourgmisugitokuyamatsumotofukemitourismolanxesshitaramamitoyoake" + - "miuramiyazurewebsiteshikagamiishibukawamiyotamanomjondalenmlbfan" + - "montrealestatefarmequipmentrentinoa-adigemonza-brianzapposhizuku" + - "ishimogosenmonza-e-della-brianzaptokyotangotsukitahatakamoriokak" + - "egawamonzabrianzaramonzaebrianzamonzaedellabrianzamoonscaleforce" + - "mordoviamoriyamatsunomoriyoshiminamiawajikis-an-actormormonsterm" + - "oroyamatsusakahoginankokubunjis-an-actresshintokushimamortgagemo" + - "scowindowskrakowinnershizuokanagawamoseushistorymosjoenmoskenesh" + - "oppingmosshopwarendalenugmosvikhersonmoteginowaniihamatamakawaji" + - "mansionshoujis-an-anarchistoricalsocietymoviemovimientolgamozill" + - "a-iotrentinoaadigemtranbymuenstermuginozawaonsenmuikamiokameokam" + - "akurazakiwakunigamiharumukoebenhavnmulhouseoullensvanguardmunaka" + - "tanemuncienciamuosattemupimientakkoelnmurmanskhmelnitskiyamarumo" + - "rimachidamurotorcraftrentinoalto-adigemusashimurayamatsushigemus" + - "ashinoharamuseetrentinoaltoadigemuseumverenigingmusicargodaddyn-" + - "vpndnshowamutsuzawamy-vigorgemy-wanggouvichristmaseratiresangomu" + - "tashinainvestmentsanjotoyouramyactivedirectorymyasustor-elvdalmy" + - "cdmydattolocalhistorymyddnskingmydissentrentinos-tirolmydobisshi" + - "kis-an-artistgorymydroboehringerikemydshowtimelhusdecorativearts" + - "hriramlidlugolekadenagahamaroygardendoftheinternetlifyis-an-engi" + - "neeringmyeffectrentinostirolmyfastly-terrariuminamiuonumasudamyf" + - "irewallonieruchomoscienceandindustrynmyforuminamiyamashirokawana" + - "belembetsukubankharkovaomyfritzmyftpaccesshwiosienarutomobellevu" + - "elosangelesjabbottrentinosud-tirolmyhome-servermyjinomykolaivare" + - "servehalflifestylemymailermymediapchromedicaltanissettaishinomak" + - "inkobeardubaiduckdnsannanishiwakinzais-a-candidatemyokohamamatsu" + - "damypepinkhmelnytskyivaporcloudmypetsigdalmyphotoshibalatinogift" + - "silkhplaystation-cloudmypicturesimple-urlmypsxn--3ds443gmysecuri" + - "tycamerakermyshopblocksirdalmythic-beastsjcbnpparibaselburgmytis" + - "-a-bookkeeperspectakasugais-an-entertainermytuleaprendemasakikon" + - "aikawachinaganoharamcoachampionshiphoptobishimadridvagsoyermyvnc" + - "hungnamdalseidfjordyndns-picsannohelplfinancialukowhalingrimstad" + - "yndns-remotewdyndns-serverisignissandiegomywirepaircraftingvollo" + - "mbardiamondslupsklabudhabikinokawabarthadselectrentin-sued-tirol" + - "platformshangrilapyplatter-appioneerplatterpippugliaplazaplcube-" + - "serverplumbingoplurinacionalpodhalevangerpodlasiellaktyubinskipt" + - "veterinaireadthedocscappgafannefrankfurtrentinosudtirolpodzonepo" + - "hlpoivronpokerpokrovsknx-serversicherungpoliticarrierpolitiendap" + - "olkowicepoltavalle-aostathellewismillerpomorzeszowitdkomaganepon" + - "pesaro-urbino-pesarourbinopesaromasvuotnaritakurashikis-bytomari" + - "timekeepingponypordenonepornporsangerporsangugeporsgrunnanyokosh" + - "ibahikariwanumatamayufuelveruminanopoznanpraxis-a-bruinsfanprdpr" + - "eservationpresidioprgmrprimelbourneprincipeprivatizehealthinsura" + - "nceprofesionalprogressivenneslaskerrylogisticsnoasakakinokiaprom" + - "ombetsurgeonshalloffameiwamassa-carrara-massacarraramassabusines" + - "sebykleclerchurcharternidyndns-webhareidsbergentingripepropertyp" + - "rotectionprotonetrentinosued-tirolprudentialpruszkowithgoogleapi" + - "szprvcyberlevagangaviikanonjis-certifieducatorahimeshimamateramo" + - "baraprzeworskogptplusgardenpulawypupittsburghofficialpvhagakhana" + - "migawapvtrentinosuedtirolpwcircustomer-ociprianiigataitogitsulda" + - "luroypzqhagebostadqldqponiatowadaqslingqualifioappiwatequickconn" + - "ectrentinsud-tirolquicksytestingquipelementsokananiimihoboleslaw" + - "iecistrondheimmobilienissayokkaichiropractichernovtsyncloudyndns" + - "-at-homedepotenzamamidsundyndns-at-workisboringlugmbhartipscbgmi" + - "nakamichiharaqvcitadeliveryggeesusonosuzakanazawasuzukaneyamazoe" + - "suzukis-into-animegurownprovidersvalbardunloppacificitichirurgie" + - "ns-dentistes-en-francesvcivilaviationissedalutskashibatakatsukiy" + - "osatokamachintaifun-dnsaliasanokashiharasveiosvelvikommunalforbu" + - "ndsvizzerasvn-reposolutionsokndalswidnicasacamdvrcampinagrandebu" + - "ilderschlesischesomaswidnikkokonoeswiebodzin-butterswiftcoverswi" + - "noujscienceandhistoryswissmarterthanyousynology-dsomnarviikamisa" + - "tokaizukameyamatotakadatuscanytushuissier-justicetuvalle-daostat" + - "icsor-varangertuxfamilytwmailvestre-slidreportrevisohughesoovest" + - "re-totennishiawakuravestvagoyvevelstadvibo-valentiavibovalentiav" + - "ideovillasorocabalestrandabergamo-siemensncfdvinnicasadelamoneda" + - "pliernewportlligatritonvinnytsiavipsinaappixolinovirginiavirtual" + - "-userveftpizzavirtualservervirtualuservegame-servervirtueeldomei" + - "n-vigorlicevirtuelvisakegawaviterboknowsitallvivolkenkundenvixn-" + - "-3hcrj9civilisationisshinguccircleverappsantabarbaravlaanderenvl" + - "adikavkazimierz-dolnyvladimirvlogintoyonezawavminiservervologdan" + - "skomonowruzhgorodeovolvolkswagentsorreisahayakawakamiichikawamis" + - "atottoris-foundationvolyngdalvoorloperauniterois-into-carshintom" + - "ikasaharavossevangenvotevotingvotoyonowmcloudwmflabsortlandwnext" + - "directrogstadworldworse-thandawowithyoutuberspacekitagatargitpag" + - "efrontappkmpspbar2wpdevcloudwpenginepoweredwritesthisblogsytewro" + - "clawiwatsukiyonotairestaurantroandinosaurepbodynamic-dnsopotrent" + - "insudtirolwtcminnesotaketaketomisatokorozawawtfbsbxn--1ck2e1banz" + - "aicloudcontrolledekagaminombresciaustraliajudaicable-modemocraci" + - "abruzzoologicalvinklein-addrammenuorochesterimo-i-rana4u2-localh" + - "ostrowiec66wuozuwzmiuwajimaxn--45q11civilwarmiaxn--4gbriminingxn" + - "--4it168dxn--4it797kongsbergxn--4pvxs4allxn--54b7fta0cclanbibaid" + - "armeniaxn--55qw42gxn--55qx5dxn--5js045dxn--5rtp49cldmailovecolle" + - "gefantasyleaguernseyxn--5rtq34kongsvingerxn--5su34j936bgsgxn--5t" + - "zm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn--7t0a264clic" + - "20001wwwhoswhokksundyndns-wikirkenesantacruzsantafedjejuifmetace" + - "ntrumeteorappartis-a-catererxn--80adxhksorumincomcastresindevice" + - "nzaporizhzhiaxn--80ao21axn--80aqecdr1axn--80asehdbarefootballoon" + - "ingjerdrumckinseyolasiteu-1xn--80aswgxn--80augustowloclawekomoro" + - "tsukaminokawanishiaizubangexn--8ltr62koninjambylxn--8pvr4uxn--8y" + - "0a063axn--90a3academiamicaaarborteaches-yogasawaracingxn--90aero" + - "portalabamagasakishimabaraogakibichuoxn--90aishobarakawagoexn--9" + - "0azhytomyravendbargainstantcloudfunctionswedenvironmentalconserv" + - "ationfabricafederationionjukudoyamaintenanceu-2xn--9dbhblg6digit" + - "alxn--9dbq2axn--9et52uxn--9krt00axn--andy-iraxn--aroport-byaotsu" + - "rreyxn--asky-iraxn--aurskog-hland-jnbarreauction-webhopenairbusa" + - "ntiquest-a-la-maisondre-landroidiscourses3-us-gov-west-1xn--aver" + - "y-yuasakuhokkaidovre-eikerxn--b-5gaxn--b4w605ferdxn--balsan-sdti" + - "rol-nsbsoundcastronomy-routerxn--bck1b9a5dre4clickashiwaraxn--bd" + - "ddj-mrabdxn--bearalvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--" + - "bhccavuotna-k7axn--bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-f" + - "yasakaiminatoyookaniepcexn--bjddar-ptarumizusawaxn--blt-elabourx" + - "n--bmlo-graingerxn--bod-2natalxn--bozen-sdtirol-2obanazawaxn--br" + - "nny-wuacademy-firewall-gatewayxn--brnnysund-m8accident-investiga" + - "tion-aptibleadpagest-mon-blogueurovision-k3southcarolinarvikomat" + - "sushimarylhurstjordalshalsenxn--brum-voagatromsakataobaomoriguch" + - "iharahkkeravjuegoshikijobservableusercontentrentoyonakagyokutoya" + - "kolobrzegersundxn--btsfjord-9zaxn--bulsan-sdtirol-nsbarrel-of-kn" + - "owledgeapplicationcloudappspotagerevistaples3-us-west-1xn--c1avg" + - "xn--c2br7gxn--c3s14mintereitrentino-suedtirolxn--cck2b3barrell-o" + - "f-knowledgestack12xn--cckwcxetdxn--cesena-forl-mcbremangerxn--ce" + - "senaforl-i8axn--cg4bkis-into-cartoonshinyoshitomiokamitondabayas" + - "hiogamagoriziaxn--ciqpnxn--clchc0ea0b2g2a9gcdxn--comunicaes-v6a2" + - "oxn--correios-e-telecomunicaes-ghc29axn--czr694barsycenterprises" + - "akimobetsuitainaioirasebastopologyeongnamegawakayamagazineat-url" + - "illyombolzano-altoadigeorgeorgiaustrheimatunduhrennesoyokozebina" + - "gisoccertmgrazimutheworkpccwebredirectmembers3-eu-west-1xn--czrs" + - "0tromsojamisonxn--czru2dxn--czrw28barsyonlinewhampshirealtysnes3" + - "-us-west-2xn--d1acj3bashkiriauthordalandeportenrivnebinordreisa-" + - "hockeynutazuerichardlikescandyn53utilitiesquare7xn--d1alfaromeox" + - "n--d1atrusteexn--d5qv7z876clinichiryukyuragifuchungbukharavennag" + - "asakindlecznagasukexn--davvenjrga-y4axn--djrs72d6uyxn--djty4kons" + - "kowolayangroupiemontexn--dnna-grajewolterskluwerxn--drbak-wuaxn-" + - "-dyry-iraxn--e1a4cliniquenoharaxn--eckvdtc9dxn--efvn9southwestfa" + - "lenxn--efvy88haibarakitahiroshimaoris-a-greenxn--ehqz56nxn--elqq" + - "16hair-surveillancexn--eveni-0qa01gaxn--f6qx53axn--fct429konsula" + - "trobeepilepsykkylvenetodayxn--fhbeiarnxn--finny-yuaxn--fiq228c5h" + - "sowaxn--fiq64basicservercelliguriautomotiveconomiastagemological" + - "lyngenflfanquanpachigasakihokumakogenebakkeshibechambagriculture" + - "nnebudejjuedischesapeakebayernufcfanavigationavoizumizakibmdevel" + - "opmentatsunobiramusementdllpages3-ap-southeast-2ix4432-balsan-su" + - "edtirolkuszczytnoipirangamvik-serverrankoshigayachimataikikugawa" + - "lesundd-dnshome-webserverdal-o-g-i-n4tatarantours3-ap-northeast-" + - "2xn--fiqs8speedpartnersolarssonxn--fiqz9sphinxn--3e0b707exn--fjo" + - "rd-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--forl-cesen" + - "a-fcbsspjelkavikomforbarcelonagawalmartattoolforgemreviewsaitosh" + - "imayfirstockholmestrandgcahcesuoloans3-fips-us-gov-west-1xn--for" + - "lcesena-c8axn--fpcrj9c3dxn--frde-grandrapidspreadbettingxn--frna" + - "-woaraisaijosoyrorospydebergxn--frya-hraxn--fzc2c9e2clintonoshoe" + - "santamariakexn--fzys8d69uvgmailxn--g2xx48clothingdustdataiwanair" + - "forcebetsuikidsmynasushiobaragusabaejrietisalatinabenonicbcn-nor" + - "th-1xn--gckr3f0fbx-ostrowwlkpmgruexn--gecrj9cn-northwest-1xn--gg" + - "aviika-8ya47hakatanortonxn--gildeskl-g0axn--givuotna-8yasugivest" + - "bytemarkonyvelolipoppdalxn--gjvik-wuaxn--gk3at1exn--gls-elacaixa" + - "xn--gmq050is-into-gamessinazawaxn--gmqw5axn--h-2failxn--h1aeghak" + - "odatexn--h2breg3evenesrlxn--h2brj9c8cngriwataraidyndns-workshopi" + - "tsitevadsobetsumidatlantichitachinakagawashtenawdev-myqnapcloude" + - "itysfjordyndns-blogdnsamsclubartowfarmsteadyndns-freeboxosloftoy" + - "osatoyokawaxn--h3cuzk1discountyxn--hbmer-xqaxn--hcesuolo-7ya35ba" + - "silicataniautoscanadaeguambulancechirealmpmnavuotnapleskns3-eu-w" + - "est-2xn--hery-iraxn--hgebostad-g3axn--hkkinen-5waxn--hmmrfeasta-" + - "s4accident-prevention-rancherkasydneyxn--hnefoss-q1axn--hobl-ira" + - "xn--holtlen-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hyland" + - "et-54axn--i1b6b1a6a2exn--imr513nxn--indery-fyasuokanoyaltakatori" + - "s-leetrentino-stirolxn--io0a7is-lostrodawaraxn--j1aefbxosavannah" + - "gaxn--j1amhakonexn--j6w193gxn--jlq480n2rgxn--jlq61u9w7basketball" + - "finanzgoraveroykengerdalces3-eu-west-3xn--jlster-byatominamidait" + - "omanchesterxn--jrpeland-54axn--jvr189misakis-a-therapistoiaxn--k" + - "7yn95exn--karmy-yuaxn--kbrq7oxn--kcrx77d1x4axn--kfjord-iuaxn--kl" + - "bu-woaxn--klt787dxn--kltp7dxn--kltx9axn--klty5xn--3oq18vl8pn36ax" + - "n--koluokta-7ya57hakubahcavuotnagaivuotnagaokakyotambabyenglandx" + - "n--kprw13dxn--kpry57dxn--kput3is-not-certifiedugit-pagespeedmobi" + - "lizeroticanonoichinomiyakexn--krager-gyatsukanraxn--kranghke-b0a" + - "xn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jdevcloudnshir" + - "ahamatonbetsurnadalxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatsu" + - "shiroxn--kvnangen-k0axn--l-1fairwindsrvarggatrentinsued-tirolxn-" + - "-l1accentureklamborghinikolaeventstoregontrailroadxn--laheadju-7" + - "yawaraxn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagaviika-52" + - "batochiokinoshimaizuruhrhcloudiscoveryomitanobninskaracoldwarsza" + - "wavocatanzarowebspacebizenakanojohanamakinoharaukraanghkeymachin" + - "eustargardds3-ca-central-1xn--lesund-huaxn--lgbbat1ad8jdfastvps-" + - "serveronakanotoddenxn--lgrd-poacctrvaroyxn--lhppi-xqaxn--linds-p" + - "ramericanartrycloudflareplantationxn--lns-qlaquilanstorfjordxn--" + - "loabt-0qaxn--lrdal-sraxn--lrenskog-54axn--lt-liacnpyatigorskodje" + - "ffersonxn--lten-granexn--lury-iraxn--m3ch0j3axn--mely-iraxn--mer" + - "ker-kuaxn--mgb2ddestorjcphonefosshioyandexcloudxn--mgb9awbfedora" + - "peoplegnicapebretonamicrosoftbankasukabedzin-berlindasdaburxn--m" + - "gba3a3ejtrysiljanxn--mgba3a4f16axn--mgba3a4franamizuholdingstpet" + - "ersburgxn--mgba7c0bbn0axn--mgbaakc7dvfedoraprojectraniandriabarl" + - "ettatraniandriaxn--mgbaam7a8hakuis-a-gurustkannamilanotogawaxn--" + - "mgbab2bdxn--mgbah1a3hjkrdxn--mgbai9a5eva00batsfjordishakotanayor" + - "ovigovtaxihuanfshostrolekamishihoronobeauxartsandcrafts3-website" + - "-ap-northeast-1xn--mgbai9azgqp6jelasticbeanstalkddietnedalxn--mg" + - "bayh7gpaleoxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgberp" + - "4a5d4a87gxn--mgberp4a5d4arxn--mgbgu82axn--mgbi4ecexposedxn--mgbp" + - "l2fhskydivingxn--mgbqly7c0a67fbcnsantoandreamhostersanukis-a-cel" + - "ticsfanxn--mgbqly7cvafranziskanerimaringatlantakahashimamakiryuo" + - "hdattorelayxn--mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2bauhausposts" + - "-and-telecommunications3-website-ap-southeast-1xn--mgbx4cd0abbvi" + - "eeexn--mix082feiraquarelleaseeklogesaveincloudynvpnplus-4xn--mix" + - "891fermochizukirovogradoyxn--mjndalen-64axn--mk0axin-dslgbtuneso" + - "r-odalxn--mk1bu44cntoystre-slidrettozawaxn--mkru45is-savedunetfl" + - "ixilxn--mlatvuopmi-s4axn--mli-tlarvikooris-a-nursembokukitchenxn" + - "--mlselv-iuaxn--moreke-juaxn--mori-qsakuragawaxn--mosjen-eyawata" + - "hamaxn--mot-tlavagiskexn--mre-og-romsdal-qqbuserveexchangexn--ms" + - "y-ula0hakusanagochijiwadell-ogliastraderxn--mtta-vrjjat-k7aflaks" + - "tadaokagakicks-assnasaarlandxn--muost-0qaxn--mxtq1misasaguris-an" + - "-accountantshinshiroxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--3pxu8kom" + - "vuxn--32vp30haebaruericssongdalenviknakatsugawaxn--nit225kopervi" + - "khakassiaxn--nmesjevuemie-tcbalsan-sudtirollagdenesnaaseinet-fre" + - "akstreamswatch-and-clockerxn--nnx388axn--nodessakurais-slickazun" + - "ow-dnshiojirishirifujiedaxn--nqv7fs00emaxn--nry-yla5gxn--ntso0iq" + - "x3axn--ntsq17gxn--nttery-byaeservehttplantslzxn--nvuotna-hwaxn--" + - "nyqy26axn--o1acheltenham-radio-opencraftrainingxn--o3cw4haldenxn" + - "--o3cyx2axn--od0algorithmiasakuchinotsuchiurakawaxn--od0aq3benev" + - "entoeidskoguchikuzenhktcp4xn--ogbpf8flekkefjordxn--oppegrd-ixaxn" + - "--ostery-fyaxn--osyro-wuaxn--otu796dxn--p1acferraraxn--p1ais-ube" + - "rleetrentino-sud-tirolxn--pgbs0dhlxn--porsgu-sta26ferraris-a-cub" + - "icle-slavellinodeobjectsaves-the-whalessandria-trani-barletta-an" + - "driatranibarlettaandriaxn--pssu33lxn--pssy2uxn--q9jyb4collection" + - "xn--qcka1pmcdirxn--qqqt11misawaxn--qxa6axn--qxamuneuestudioxn--r" + - "ady-iraxn--rdal-poaxn--rde-ulavangenxn--rdy-0nabaris-very-badajo" + - "zxn--rennesy-v1axn--rhkkervju-01aferrerotikagoshimalvikasumigaur" + - "ayasudaxn--rholt-mragowoodsidemonmouthalsaitamatsukuris-a-hard-w" + - "orkersewilliamhillxn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--ri" + - "sa-5nativeamericanantiquestudynamisches-dnsolognexn--risr-iraxn-" + - "-rland-uuaxn--rlingen-mxaxn--rmskog-byaxn--rny31hammarfeastafric" + - "apitalonewmexicodyn-o-saurlandesharis-a-hunterxn--rovu88bentleyo" + - "nagoyavoues3-external-1xn--rros-granvindafjordxn--rskog-uuaxn--r" + - "st-0naturalhistorymuseumcenterxn--rsta-francaiseharaxn--rvc1e0am" + - "3exn--ryken-vuaxn--ryrvik-byaxn--s-1faithamurakamigoris-a-knight" + - "pointtohobby-sitexn--s9brj9colognewyorkshirecifedexeterxn--sandn" + - "essjen-ogbeppublishproxyzgorzeleccogjerstadotsuruokakamigaharaxa" + - "urskog-holandinggfarmerseine164-baltimore-og-romsdalipayboltates" + - "hinanomachimkentateyamaetnaamesjevuemielno-ipifonyaarpalmasfjord" + - "enaturhistorisches3-ap-southeast-1xn--sandy-yuaxn--sdtirol-n2axn" + - "--seral-lraxn--ses554gxn--sgne-graphoxn--42c2d9axn--skierv-utaza" + - "stuff-4-salexn--skjervy-v1axn--skjk-soaxn--sknit-yqaxn--sknland-" + - "fxaxn--slat-5naturalsciencesnaturellestufftoread-booksnesolundbe" + - "ckomakiyosunndalxn--slt-elabcieszynxn--smla-hraxn--smna-gratange" + - "ntlentapisa-geekoryokamikawanehonbetsurutaharaxn--snase-nraxn--s" + - "ndre-land-0cbeskidyn-ip24xn--snes-poaxn--snsa-roaxn--sr-aurdal-l" + - "8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbestbuyshouses" + - "3-website-ap-southeast-2xn--srfold-byaxn--srreisa-q1axn--srum-gr" + - "atis-a-bulls-fanxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-" + - "sqbetainaboxfusejnymemergencyahabaghdadiskussionsbereichaseljeep" + - "sondriodejaneirockartuzyonagunicommbankaragandaxn--stre-toten-zc" + - "bhzcasertairaumalborkarasjohkamikitayamatsurin-the-bandain-vpnca" + - "sinordkappalmspringsakerxn--t60b56axn--tckweatherchannelxn--tiq4" + - "9xqyjelenia-goraxn--tjme-hraxn--tn0agrinetbankosaigawaxn--tnsber" + - "g-q1axn--tor131oxn--trany-yuaxn--trentin-sd-tirol-rzbieidsvollim" + - "anowarudaxn--trentin-sdtirol-7vbrplsbxn--45br5cylxn--trentino-sd" + - "-tirol-c3bielawaltervistaipeigersundisrechtranakaiwamizawatchand" + - "clockarasjokarasuyamarshallstatebankarateu-3xn--trentino-sdtirol" + - "-szbiellaakesvuemielecceu-4xn--trentinosd-tirol-rzbieszczadygeya" + - "chiyodaejeonbukcoalvdalaheadjudygarlandivtasvuodnakamagayahikobi" + - "erzycevje-og-hornnes3-website-eu-west-1xn--trentinosdtirol-7vbie" + - "vat-band-campaniaxn--trentinsd-tirol-6vbifukagawashingtondclkara" + - "tsuginamikatagamilitaryoriikareliancextraspace-to-rentalstomakom" + - "aibaraxn--trentinsdtirol-nsbigv-infoodnetworkangerxn--trgstad-r1" + - "axn--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvestfoldxn--uc0a" + - "y4axn--uist22handsonyoursidellogliastradingxn--uisz3gxn--unjrga-" + - "rtashkentunkommunexn--unup4yxn--uuwu58axn--vads-jraxn--valle-aos" + - "te-ebbturystykanmakiwielunnerxn--valle-d-aoste-ehbodollstuttgart" + - "rentinsuedtirolxn--valleaoste-e7axn--valledaoste-ebbvacationsusa" + - "kis-gonexn--vard-jraxn--vegrshei-c0axn--vermgensberater-ctbihoro" + - "logyoshiokanzakiyokawaraxn--vermgensberatung-pwbikedaemoneyukinc" + - "heonhlfanhs3-website-sa-east-1xn--vestvgy-ixa6oxn--vg-yiabkhazia" + - "xn--vgan-qoaxn--vgsy-qoa0jeonnamerikawauexn--vgu402colonialwilli" + - "amsburgroks-thisayamanobeokakudamatsuexn--vhquvestnesorfoldxn--v" + - "ler-qoaxn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bil" + - "baokinawashirosatochigiessensiositecnologiaxn--w4r85el8fhu5dnrax" + - "n--w4rs40lxn--wcvs22dxn--wgbh1coloradoplateaudioxn--wgbl6axn--xh" + - "q521billustrationredumbrellahppiacenzachpomorskienikonanporovnob" + - "serverxn--xkc2al3hye2axn--xkc2dl3a5ee0hangglidingxn--y9a3aquariu" + - "misconfusedxn--yer-znaturbruksgymnxn--yfro4i67oxn--ygarden-p1axn" + - "--ygbi2ammxn--45brj9civilizationiyodogawaxn--ystre-slidre-ujbioc" + - "eanographics3-website-us-east-1xn--zbx025dxn--zf0ao64axn--zf0avx" + - "lxn--zfr164birdartcenterprisecloudcontrolappleborkdalwaysdatabas" + - "eballangenkainanaerobatickets3-website-us-west-1xnbayxz" + "trosnubalsfjordd-dnshome-webserverdal-o-g-i-n4tatsunobihirosakik" + + "amijimatsuuragrocerybnikeisenbahnaturhistorisches3-ap-south-1bip" + + "almasfjordenikonanporovnocpalmspringsakerbirdartcenterprisecloud" + + "accesscambridgeiseiyoichippubetsubetsugarussiabirkenesoddtangeno" + + "varahkkeravjuegoshikilatironrenderbirthplacevje-og-hornnes3-webs" + + "ite-us-west-1bjarkoyukuhashimojin-the-bandain-vpncateringebuildi" + + "ngladegreextraspace-to-rentalstomakomaibarabjerkreimbamblebesbyg" + + "landroverhalla-speziaustevollaziobiramswatch-and-clockereviewsai" + + "toshimattelekommunikationatuurwetenschappengine164-baltimore-og-" + + "romsdalp1bjugnieznord-odalwaysdatabaseballangenkainanaejrietisal" + + "atinabenonicatholicaxiaskimitsubatamibugattiffanyaaarborteaches-" + + "yogasawara-rugbydgoszczecinemaceratabuseating-organicbcieszynino" + + "hekinannestadiyurihonjournalistjohninomiyakonojorpelandnpanamats" + + "uzakincheonirasakindianapolis-a-bloggerblackfridayusuharabloombe" + + "rgbauernishiazaindianmarketinglassassinationalheritagebloxcms3-w" + + "ebsite-us-west-2bluedagestangemologicallyngenishigoddabmoattachm" + + "ents5yusuisservehttpanasonichernivtsiciliabmsakyotanabellunord-f" + + "rontierbmwedeployuulmemsettlersalangenishiharabnrwegroweibologna" + + "gareyamakeupowiatmallorcafederation-webhopencraftrainingleezebom" + + "loabathsbchernovtsyncloudrangedalondrinamsskoganeindielddanuorri" + + "ndigenaklodzkodairabondigitaloceanographicsxboxenishiizunazukind" + + "owapblogsiteleafamilycompany-2bonnishikataketomisatomobellevuelo" + + "sangelesjabbottjeldsundray-dnstracebookinghosted-by-previderboom" + + "lair-traffic-controlleyuzawaboschaefflerdalorenskoglitcheltenham" + + "-radio-opensocialottebostikariyameiwamarugame-hostedpictetjmaxxx" + + "finitybostonakijinsekikogentappsalon-1botanicalgardenishikatsura" + + "git-reposaltdalottokonamegatakayamassa-carrara-massacarraramassa" + + "businessebykleclerchirurgiens-dentistes-en-francebotanicgardenis" + + "hikawazukamishihoronobeauxartsandcraftsaludrayddnsfreebox-osasco" + + "li-picenordlandraydnsupdaterbotanychiryukyuragifuchungbukharauma" + + "lborkarlsoybouncemerckmsdnipropetrovskjervoyageorgeorgiabounty-f" + + "ullensakerrypropertiesalvadordalibabalena-devicesalzburgliwicebo" + + "utiquebechitachinakagawatchandclockarmoybozen-sudtirolouvrehabme" + + "rbozen-suedtirolowiczest-le-patronishimerabplaceducatorahimeshim" + + "amateraholtalenishinomiyashironohtawaramotoineppueblockbusternii" + + "minamiawajikindustriabrandywinevalleybrasiliabrindisibenikimobet" + + "suitaipeigersundrivefsnillfjordrobaknoluoktachikawafflecellcube-" + + "serverbristoloseyouriparachutinglobalashovhachinohedmarkarpaczel" + + "adzlgloboavistanbulsan-sudtirolpusercontentjomeloyalistoragebrit" + + "ishcolumbialowiezaganishinoomotegomniweatherchannelubindalublind" + + "esnesamegawabroadcastlebtimnetzparaglidinglogoweirbroadwaybroke-" + + "itvedestrandrudupontariobranconakaniikawatanagurabrokerbronnoysu" + + "ndurbanamexhibitionishinoshimatsushigebrothermesaverdeatnulvikar" + + "uizawabrowsersafetymarketsamnangerbrumunddalucaniabrunelastxjava" + + "ld-aostarnbergloppenzaolbia-tempio-olbiatempioolbialystokkembuch" + + "ikumagayagawakayamagentositecnologiabrusselsampalacebruxellesams" + + "clubartowellbeingzonebryansklepparisor-fronishiokoppegardurhambu" + + "rglugsjcbnpparibaselburgmbhartipsselfiparliamentjxn--0trq7p7nnis" + + "hitosashimizunaminamibosogndaluccargodaddyn-o-saurlandesamsungmi" + + "nakamichiharabrynewhollandynathomebuiltwithdarkarumaifarmsteadyn" + + "dns-at-homedepotenzamamidsundyndns-at-workisboringmodellingmxn--" + + "11b4c3dyndns-blogdnsandnessjoenishiwakindustriesteamfamberkeleyb" + + "uskerudyndns-freeboxoslocus-4buzentsujiiebuzzwesteuropenairbusan" + + "tiquest-a-la-maisondre-landroidyndns-homednsandoybwestfalenissan" + + "diegomurabzhitomirumalatvuopmicrolightingretakamoriokakudamatsue" + + "bzzcompute-1computerhistoryofscience-fictioncomsecaaskoyabearalv" + + "ahkijobservableusercontentoyotsukaidocondoshichinohealth-careref" + + "ormitakeharaconferenceconstructionconsuladoesntexisteingeekashiw" + + "araconsultanthropologyconsultingrongausdalcontactoyouracontagema" + + "tsubaracontemporaryarteducationalchikugodogadollsapporocontracto" + + "rskenconventureshinodeartheworkpccwhoswhokksundyndns1cookingchan" + + "nelsdvrdnsdojoburgrossetouchihayaakasakawaharacoolcooperativano-" + + "frankivskolefrakkestadynnsardegnaroycopenhagencyclopedichonanbul" + + "san-suedtirolukowestus2coproductionsardiniacorporationcorsicanon" + + "oichinomiyakecorvettemp-dnsarlcosenzakopanelastycoffeedbackplane" + + "applinzinzais-a-candidatecosidnsfor-better-thanawatchesarpsborgr" + + "oundhandlingroznynysaintlouis-a-anarchistoireggio-emilia-romagna" + + "katombetsumitakagiizecostumedicinagatorodoycouchpotatofriesarufu" + + "tsunomiyawakasaikaitabashikaoizumizakis-a-caterercoukashiwazakiy" + + "okawaracouncilcouponsasayamayfirstockholmestrandynservebbsasebof" + + "ageologycozoracqcxn--12co0c3b4evalleaostavangercranbrookuwanalyt" + + "icsaskatchewancrdynuniversitycreditcardynv6creditunioncremonashg" + + "abadaddjaguarqhachiojiyaizuwakamatsubushikusakadogawacrewiencric" + + "ketrzyncrimeast-kazakhstanangercrotonexus-3crownipartsassaris-a-" + + "celticsfancrsvps-hostrolekagoshimalopolskanlandynvpnpluscountrye" + + "stateofdelawareclaimsaudacruisesauheradyroyrvikingrpartycryptono" + + "michigangwoncuisinellajollamericanexpressexyculturalcentertainme" + + "ntoystre-slidrettozawacuneocupcakecuritibaghdadcurvalled-aostave" + + "rncymrunjargacyonabarumetacentrumeteorappasadenarashinocyouthruh" + + "erecifedexeterferrarivneferrerotikakamigaharafetsundfguidell-ogl" + + "iastraderfhskydivinguitarsavonarusawafhvalerfidontexistmein-iser" + + "vebeerfieldfigueresinstagingujoinvilleirvikasserversaillesaxofil" + + "ateliafilegear-audnedalnfilegear-debianfilegear-gbizfilegear-ief" + + "ilegear-jpmorganfilegear-sg-1filminamifuranofinalfinancefinearts" + + "choenbrunnfinlandfinnoyfirebaseappassagenschokokekschokoladenfir" + + "enetrani-andria-barletta-trani-andriafirenzefirestonefirmdalegni" + + "capetownnews-stagingulenfishingoldpoint2thisamitsukefitjarvodkaf" + + "jordvagsoygardenflfanquanpachigasakievennodesabaerobaticketschol" + + "arshipschoolsztynsettsurgeonshalloffameldalfitnessettlementrania" + + "ndriabarlettatraniandriafjalerflesbergunmansionschulezajskasukab" + + "edzin-berlindasdaburflickragerogerschulserverflightschwarzgwangj" + + "uifminamiiserniaflirfloginlinefloraflorencefloridatsunanjoetsuwa" + + "nouchikujogaszkolancashirecipescaravantaarpassenger-associationf" + + "loripaderbornfloristanohatajiris-a-chefashionflorokunohealthcare" + + "erschweizflowersciencecentersciencehistoryfltranoyflynnhosting-c" + + "lusterfndfnwkasumigaurayasudafoodnetworkdalfor-ourfor-somedizinh" + + "istorischescientistordalfor-theaterforexrothachirogatakanabeauty" + + "sfjordforgotdnscjohnsonforli-cesena-forlicesenaforlikescandyn53f" + + "orsalegolffanscrapper-siteforsandasuoloftranslatefortalfortextil" + + "eikangerfortmissoulancasterfortworthadanorth-kazakhstanfosnescra" + + "ppinguovdageaidnunusualpersonfotaruis-a-conservativegarsheis-a-c" + + "padualstackasuyanaizuerichardlillesandefjordfoxafozfrancaisehara" + + "franziskanerimaringatlantakahamalvikaszubyfredrikstadtvscrysecur" + + "itytacticservehumourfreeddnsgeekgalaxyfreedesktopocznordreisa-ho" + + "ckeynutazurestaticappspotagerfreemasonryfreesitefreetlserveircho" + + "shibuyahabackyardsangomutashinainfinitintelligencefreiburgushika" + + "mifuranorfolkebibleitungsenfreseniusculturecreationfribourgwiddl" + + "eksvikatowicefriuli-v-giuliafriuli-ve-giuliafriuli-vegiuliafriul" + + "i-venezia-giuliafriuli-veneziagiuliafriuli-vgiuliafriuliv-giulia" + + "friulive-giuliafriulivegiuliafriulivenezia-giuliafriuliveneziagi" + + "uliafriulivgiuliafrlfroganserveminecraftransportefrognfrolandfro" + + "m-akrehamnfrom-alfrom-arfrom-azurewebsiteshikagamiishibukawalbrz" + + "ycharternopilawalesundfrom-capitalonewjerseyfrom-cogxn--1ctwolom" + + "inamatargitlaborfrom-ctransurlfrom-dchoyodobashichikashukujitawa" + + "ravennagasakinderoyfrom-dedyn-berlincolnfrom-flanderservemp3from" + + "-gaulardalfrom-hichisochildrensgardenfrom-iafrom-idfrom-ilfrom-i" + + "n-brbar1from-kservep2patriafrom-kyowariasahikawafrom-lanciafrom-" + + "mamurogawafrom-mdfrom-meeresistancefrom-mifunefrom-mnfrom-modale" + + "nfrom-mservepicservequakefrom-mtnfrom-nctulangevagrigentomologye" + + "onggiehtavuoatnabudapest-a-la-masion-rancherkasydneyfrom-ndfrom-" + + "nefrom-nh-serveblogspotrapaniizafrom-njservesarcasmatartanddesig" + + "nfrom-nminamiizukaminoyamaxunispacefrom-nvalledaostaobaomoriguch" + + "iharag-cloud-charitychyattorneyagawakepnogatagajobojis-a-cubicle" + + "-slavellinodeobjectservicesevastopolefrom-nyminamimakis-a-democr" + + "atravelchannelfrom-ohdattorelayfrom-oketogurafrom-orfrom-padovak" + + "sdalfrom-pratohmandalfrom-ris-a-designerfrom-schmidtre-gauldalfr" + + "om-sdfrom-tnfrom-txn--1lqs03nfrom-utsiracusagamiharafrom-val-dao" + + "stavalleyfrom-vtravelersinsurancefrom-wafrom-wiardwebredirectmee" + + "trdfrom-wvallee-aosteroyfrom-wyfrosinonefrostalowa-wolawafroyait" + + "akaharunzenfstcgroupaviancarrierfujiiderafujikawaguchikonefujimi" + + "nokamoenairguardiannakadomarinebraskaunicommbankatsushikabeelden" + + "geluidvallee-d-aosteigenfujinomiyadattowebcampinashikiminohostfo" + + "ldnavyfujiokayamangonohejis-a-doctorayfujisatoshonairlinedre-eik" + + "erfujisawafujishiroishidakabiratoridefenseljordfujitsurugashiman" + + "gyshlakasamatsudoomdnsiskinkyotobetsumidatlantichristiansburgrim" + + "stadyndns-mailutskashibatakatorinternationalfirearmsanjotlon-2fu" + + "jixeroxfordefinimakanegasakinkobierzycefujiyoshidavvenjargap-nor" + + "theast-3fukayabeatsevenassisicilyfukuchiyamadavvesiidappnodebala" + + "ncertificationfukudomigawafukuis-a-financialadvisor-aurdalfukumi" + + "tsubishigakirovogradoyfukuokazakiryuohkurafukuroishikarikaturind" + + "alfukusakisarazure-mobileirfjordfukuyamagatakahashimamakishiwada" + + "zaifudaigojomedio-campidano-mediocampidanomediofunabashiriuchina" + + "dafunagatakahatakaishimoichinosekigaharafunahashikamiamakusatsum" + + "asendaisennangooglecodespotrendhostingfundaciofunkfeuerfuoiskuju" + + "kuriyamaniwakuratefuosskoczowiiheyakumoduminamiminowafurnituregg" + + "io-calabriafurubirafurudonostiaafurukawairportland-4-salernobori" + + "betsucksharis-a-geekatsuyamarumorimachidafusodegaurafussaikisofu" + + "kushimannore-og-uvdalfutabayamaguchinomihachimanagementrentin-su" + + "d-tirolfutboldlygoingnowhere-for-morenakasatsunairtelebitbridges" + + "toneendoftheinternethnologyfuttsurugimperiafuturecmsharpfizerfut" + + "urehostingfuturemailingfvgfyresdalhangglidinghangoutsystemscloud" + + "hannanmokuizumodenakayamanxn--1lqs71dhannortonhanyuzenhapmirclou" + + "dplatform0harstadharvestcelebrationhasamaoris-a-hunterhasaminami" + + "-alpshimokawahashbanghasudahasura-appgfoggiahasvikautokeinotogaw" + + "ahatoyamazakitahiroshimapartmentshimokitayamahatsukaichikaiseihe" + + "ijis-a-knightpointtohobby-sitehattfjelldalhayashimamotobungotaka" + + "dancehazuminobusells-for-ustkanmakiwakunigamiharutwentehelsinkit" + + "akamiizumisanofidelitysvardonnakamuratajimidorittogliattis-a-lan" + + "dscaperugiahembygdsforbundhemneshimonitayanagitappharmacienshimo" + + "nosekikawahemsedalhepforgeherokussldheroyhgtvalleeaosteinkjerusa" + + "lembroideryhidorahigashiagatsumagoianiahigashichichibunkyonanaos" + + "himageandsoundandvisionthewifiatrentin-sued-tirolhigashihiroshim" + + "anehigashiizumozakitakatakaokaluganskygearappharmacyshimosuwalki" + + "s-a-lawyerhigashikagawahigashikagurasoedahigashikawakitaaikitaky" + + "ushuaiahigashikurumegurownproviderhigashimatsushimarburghigashim" + + "atsuyamakitaakitadaitoigawahigashimurayamamotorcycleshimotsukehi" + + "gashinarusells-itrentin-suedtirolhigashinehigashiomitamamurausuk" + + "itamihamadahigashiosakasayamanakakogawahigashishirakawamatakaraz" + + "ukamakurazakitamotosumy-gatewayhigashisumiyoshikawaminamiaikitan" + + "akagusukumodernhigashitsunosegawahigashiurawa-mazowszexnetrentin" + + "o-a-adigehigashiyamatokoriyamanashiibahccavuotnagaragusadocktera" + + "mo-siemenscaledogawarabikomaezakirunoipirangalsacentralus-2higas" + + "hiyodogawahigashiyoshinogaris-a-liberalhiraizumisatohnoshoooshik" + + "amaishimofusartshimotsumahirakatashinagawahiranairtrafficplexus-" + + "1hirarahiratsukaeruhirayakagehistorichouseshinichinanhitachiomiy" + + "agildeskaliszhitachiotagoppdalhitraeumtgeradeloittenrissagaerocl" + + "ubmedecincinnationwidealstahaugesunderseaportsinfolionetworkange" + + "rhjartdalhjelmelandholeckochikushinonsenergyholidayhomegoodshinj" + + "ournalismailillehammerfeste-iphdfcbankazoologyhomeiphiladelphiaa" + + "readmyblogsytehomelinkyard-cloudnshinjukumanowruzhgorodeohomelin" + + "uxn--1qqw23ahomeofficehomesecuritymacaparecidahomesecuritypchris" + + "tmaseratiresannanisshingucciprianidyndns-office-on-the-weberhome" + + "senseeringhomeunixn--2m4a15ehondahongotembaixadahonjyoitakasagot" + + "pantheonsitehornindalhorsellsyourhomeftphilatelyhortendofinterne" + + "t-dnshinkamigototalhospitalhoteleshinshinotsurgeryhotmailhoyange" + + "rhoylandetroitskypehumanitieshinshirohurdalhurumajis-a-libertari" + + "anhyllestadhyogoris-a-linux-usershintokushimahyugawarahyundaiwaf" + + "uneis-very-badajozis-a-nursembokukitchenis-very-evillageis-very-" + + "goodyearis-very-niceis-very-sweetpepperis-with-thebandovre-eiker" + + "isleofmanaustdaljenv-arubabizjeonnamerikawauejetztrentino-stirol" + + "jevnakershusdecorativeartshiranukamitondabayashiogamagoriziajewe" + + "lryjewishartgalleryjfkddiamondshiraois-a-painterhostsolutionshin" + + "tomikasaharajgorajlljls-sto1jls-sto2jls-sto3jmphonefosshiraokami" + + "tsuejnjaworznotairestaurantrentino-s-tiroljoyentrentino-sud-tiro" + + "ljoyokaichibajddarchitecturealtorlandjpnjprshiratakahagithubuser" + + "contentrentino-sudtiroljurkosaigawakosakaerodromegallupinbarclay" + + "cards3-sa-east-1koseis-a-photographerokuapphilipsynology-disksta" + + "tionkosherbrookegawakoshimizumakiyosemitekoshunantankhakassiakos" + + "ugekotohiradomainsureggioemiliaromagnamsosnowiechurchaseljedugit" + + "-pagespeedmobilizeroticahcesuoloansanokashiharakotourakouhokutam" + + "akiyosunndalkounosupplieshitaramakouyamashikekouzushimashikizuno" + + "kunimilitarykozagawakozakis-a-playershifteditchyouriphoenixn--2s" + + "crj9chromedicaltanissettaishinomakindlecznagasukekozowildlifesty" + + "lekpnkppspdnshizukuishimogosenkrasnikahokutokashikis-a-republica" + + "ncerresearchaeologicaliforniakrasnodarkredstonekristiansandcatsh" + + "izuokamogawakristiansundkrodsheradkrokstadelvaldaostarostwodzisl" + + "awilliamhillkryminamioguni5kumatorinowtvaporcloudkumejimasoykume" + + "nantokigawakunisakis-a-rockstarachowicekunitachiarailwaykunitomi" + + "gusukumamotoyamashikokuchuokunneppubtlshoppingkunstsammlungkunst" + + "unddesignkuokgrouphxn--32vp30haebaruericssongdalenviknakatsugawa" + + "kuregruhostingkurgankurobelaudibleasingleshopwarendalenugkurogim" + + "imatakatsukis-a-socialistdlibestadkuroisoftwarezzokuromatsunais-" + + "a-soxfankurotakikawasakis-a-studentalkushirogawakustanais-a-teac" + + "herkassyno-dshinyoshitomiokamisunagawakusupplynxn--3bst00minamis" + + "anrikubetsupportrentino-sued-tirolkutchanelveruminamitanekutnoku" + + "zumakis-a-techietis-a-llamarnardalkvafjordkvalsundkvamlidlugolek" + + "adenagahamaroyerkvanangenkvinesdalkvinnheradkviteseidatingkvitso" + + "ykwpspectruminamiuonumassivegridkzmisconfusedmishimasudamissilel" + + "uxembourgmisugitokorozawamitourismilevangermitoyoakemiuramiyazur" + + "econtainerdpolicemiyotamanomjondalenmlbfanmontrealestatefarmequi" + + "pmentrentino-suedtirolmonza-brianzapposhoujis-an-actresshioyande" + + "xcloudmonza-e-della-brianzaptokuyamatsumaebashimodatemonzabrianz" + + "aramonzaebrianzamonzaedellabrianzamoonscaleforcemordoviamoriyama" + + "tsumotofukemoriyoshiminamiashigaramormonstermoroyamatsunomortgag" + + "emoscowinbarclays3-us-east-2moseushistorymosjoenmoskeneshowamoss" + + "howtimelhusgardenmosvikharkovanylvenicemoteginowaniigatakamatsuk" + + "awamoviemovimientokyotangotsukisosakitagawamozilla-iotrentinoa-a" + + "digemtranbymuginozawaonsenmuikamiokameokameyamatotakadamukoebenh" + + "avnmulhouseoullensvanguardmunakatanemuncienciamuosattemupiemonte" + + "murmanskhersonmurotorcraftrentinoaadigemusashimurayamatsusakahog" + + "inankokubunjis-an-anarchistoricalsocietymusashinoharamuseetrenti" + + "noalto-adigemuseumverenigingmusicarrdmutsuzawamy-vigorgemy-wangg" + + "ouvicircustomer-ocimdbananarepublic66myactivedirectorymyasustor-" + + "elvdalmycdn77-sslattuminamiyamashirokawanabelembetsukubankharkiv" + + "alleedaostemycloudswitcheshwindmillmydattolocalhistorymyddnsking" + + "mydissentrentinoaltoadigemydobisshikis-an-artistgorymydroboehrin" + + "gerikemydsienarutolgamyeffectrentinos-tirolmyfastblogermyfirewal" + + "lonieruchomoscienceandindustrynmyforuminanomyfritzmyftpaccessigd" + + "almyhome-servermyjinomykolaivareservegame-servermymailermymediap" + + "cistrondheimmobilieniyodogawamyokohamamatsudamypepilotsilkhmelni" + + "tskiyamarylandmypetsimple-urlmyphotoshibalatinombresciamypicture" + + "sirdalmypsxn--3ds443gmysecuritycamerakermyshopblockslupskhmelnyt" + + "skyivaomythic-beastslzmytis-a-bookkeeperspectakashimaritimoldelt" + + "aiwanairforcebetsuikidsmynasushiobarackmazerbaijan-mayen-rootari" + + "beiraogashimadachicagoboatsmolapymntrentinostirolmytuleaprendema" + + "sakihokumakogenebakkeshibechambagriculturennebudejjuedischesapea" + + "kebayernrtrentinosud-tirolmyvncitadeliverydyndns-remotewdyndns-s" + + "erverisignmywireitrentinosudtirolpklabudhabikinokawabarthadselec" + + "trentin-sudtirolplantsnoasakakinokiaplatformshangrilanxessokanag" + + "awaplatter-appimientakinoueplatterpinkhplaystation-cloudplazaplc" + + "itichocolatelevisionissayokkaichiropractichitosetogakushimotogan" + + "ewportkmaxxn--12c1fe0bradescotlandyndns-iparmatta-varjjatksatxn-" + + "-12cfi8ixb8lucerneplumbingoplurinacionalpodhaleviracloudletsoknd" + + "alpodlasiellaktyubinskiptveterinaireadthedocscappgafannefrankfur" + + "trentinosued-tirolpodzonepohlpoivronpokerpokrovskmpspbar2politic" + + "artoonartdecologiapolitiendapolkowicepoltavalle-aostathellewismi" + + "llerpomorzeszowindowskrakowinnersolarssonponpesaro-urbino-pesaro" + + "urbinopesaromasvuotnaritakoelnponypordenonepornporsangerporsangu" + + "geporsgrunnanyokoshibahikariwanumatakkofuefukihaboromskogpoznanp" + + "raxis-a-bruinsfanprdpreservationpresidioprgmrprimetelemarknx-ser" + + "versicherungprincipeprivatizehealthinsuranceprofesionalprogressi" + + "venneslaskerrylogisticsolognepromombetsurfastvps-serveronakanoto" + + "ddenpropertyprotectionprotonetrentinosuedtirolprudentialpruszkow" + + "iosolundbeckomaganeprvcyberlevagangaviikanonjis-an-engineeringpr" + + "zeworskogpulawypupioneerpvhagakhanamigawapvtrentinsud-tirolpwciv" + + "ilaviationpzqldqotoyohashimotoolsomaqponiatowadaqslingqualifioap" + + "pippugliaquickconnectrentinsudtirolquicksytestingquipelementsomn" + + "arviikamisatokaizukamikitayamatsuris-an-entertainerqvcivilisatio" + + "nsveiosvelvikomforbarcelonagawalmartattoolforgebinagisoccertmgra" + + "zimuthatogayachimataiji234lima-cityeatselinogradultateshinanomac" + + "himkentateyamaetnaamesjevuemielno-ipifony-1svizzerasvn-reposor-v" + + "arangerswidnicasadelamonedapliernewmexicodyn-vpndnsorfoldswidnik" + + "kokonoeswiebodzin-butterswiftcoverswinoujscienceandhistoryswissm" + + "arterthanyousynology-dsorocabalestrandabergamoareketunkommunalfo" + + "rbundturystykaniepcetuscanytushuissier-justicetuvalle-daostatics" + + "oundcastronomy-routertuxfamilytwmailvestre-slidreplantationvestr" + + "e-totennishiawakuravestvagoyvevelstadvibo-valentiavibovalentiavi" + + "deovillasouthwest1-uslivinghistoryvinnicaseihicampobassociatest-" + + "iservecounterstrikevinnytsiavipsinaappittsburghofficialvirginiav" + + "irtual-userveexchangevirtualcloudvirtualservervirtualuserveftpiw" + + "atevirtueeldomein-vigorlicevirtuelvisakegawaviterboknowsitallviv" + + "olkenkundenvixn--3hcrj9clanbibaidarmeniavlaanderenvladikavkazimi" + + "erz-dolnyvladimirvlogintoyonezawavminiservervologdanskommunevolv" + + "olkswagentsowavolyngdalvoorloperauniterois-gonevossevangenvotevo" + + "tingvotoyonowiwatsukiyonoshiroomgwloclawekomorotsukagawawmcloudw" + + "mflabspeedpartnersoownextdirectrevisohughesorreisahayakawakamiic" + + "hikawamisatottoris-bytomaritimekeepingworldworse-thandawowitdkom" + + "onow-dnshisognewpdevcloudwpenginepoweredwritesthisblogwroclawith" + + "googleapiszwtcircleverappsphinxn--3e0b707ewtfauskedsmokorsetagay" + + "aseralingenoamishirasatogokasells-for-lessavannahgawuozuwzmiuwaj" + + "imaxn--45q11clic20001wwwfarsundyndns-webhareidsbergentingripexn-" + + "-4gbriminingxn--4it168dxn--4it797kongsbergxn--4pvxs4allxn--54b7f" + + "ta0cclicketcloudcontrolapplicationcloud66xn--55qw42gxn--55qx5dxn" + + "--5js045dxn--5rtp49clinichofunatoriginstitutemasekasaokamiminers" + + "andvikcoromantovalle-d-aostatic-accessanfranciscofreakunemuroran" + + "gecloudyclusterxn--5rtq34kongsvingerxn--5su34j936bgsgxn--5tzm5gx" + + "n--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn--7t0a264cliniquen" + + "oharaxn--80adxhkspjelkavikomatsushimarylhurstjordalshalsenxn--80" + + "ao21axn--80aqecdr1axn--80asehdbarefootballooningjerdrumckinseyol" + + "asitebinordre-landiscoveryggeebizenakanojohanamakinoharaustinnau" + + "mburggfarmerseineastasiamuneues3-ap-southeast-2ix4432-balsan-sue" + + "dtirolkuszczytnord-aurdalipayboltatarantours3-ap-northeast-2xn--" + + "80aswgxn--80augustowithyoutuberspacekitagatargetmyiphosteurxn--8" + + "ltr62koninjambylxn--8pvr4uxn--8y0a063axn--90a3academiamicable-mo" + + "democraciaxn--90aeroportalabamagasakishimabaraogakibichuoxn--90a" + + "ishobarakawagoexn--90azhytomyravendbargainstantcloudfunctionsncf" + + "dishakotanavigationavoirmcpehimejibigawaustraliamusementdllpages" + + "3-ca-central-1xn--9dbhblg6dietritonxn--9dbq2axn--9et52uxn--9krt0" + + "0axn--andy-iraxn--aroport-byaotsurreyxn--asky-iraxn--aurskog-hla" + + "nd-jnbarreauctionfabricagliaricoharuhrxn--avery-yuasakuhokkaidop" + + "aaskvollxn--b-5gaxn--b4w605ferdxn--balsan-sdtirol-nsbspreadbetti" + + "ngxn--bck1b9a5dre4clintonoshoesantabarbaraxn--bdddj-mrabdxn--bea" + + "ralvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7ax" + + "n--bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fyasakaiminatoyoo" + + "kaneyamazoexn--bjddar-ptarnobrzegyptianxn--blt-elabourxn--bmlo-g" + + "raingerxn--bod-2natalxn--bozen-sdtirol-2obanazawaxn--brnny-wuaca" + + "demy-firewall-gatewayxn--brnnysund-m8accident-investigation-apti" + + "bleadpagesquare7xn--brum-voagatroandinosaurepaircraftingvollomba" + + "rdiademonmouthagebostadxn--btsfjord-9zaxn--bulsan-sdtirol-nsbarr" + + "el-of-knowledgeappleborkaracoldwarszawaustrheimatunduhrennesoyok" + + "osukanraukraanghkeymachineustargardds3-eu-central-1xn--c1avgxn--" + + "c2br7gxn--c3s14minnesotaketakazakis-a-therapistoiaxn--cck2b3barr" + + "ell-of-knowledgehirnufcfanavuotnapleskns3-us-gov-west-1xn--cckwc" + + "xetdxn--cesena-forl-mcbremangerxn--cesenaforl-i8axn--cg4bkis-int" + + "o-animeinforumzxn--ciqpnxn--clchc0ea0b2g2a9gcdxn--comunicaes-v6a" + + "2oxn--correios-e-telecomunicaes-ghc29axn--czr694barsycenterprise" + + "sakikuchikuseikarugamvik-serverrankoshigayachiyodaejeonbukcoalph" + + "a-myqnapcloud-fr1xn--czrs0trogstadxn--czru2dxn--czrw28barsyonlin" + + "ewhampshirealtydalvdalaskanittedallasalleangaviikaascolipicenodu" + + "members3-us-west-1xn--d1acj3bashkiriauthordalandgcapebretonamicr" + + "osoftbank12xn--d1alfaromeoxn--d1atromsakatamayufuelblagrarchaeol" + + "ogyeongbuk0xn--d5qv7z876clothingdustdataitogitsuldalvivanovoldax" + + "n--davvenjrga-y4axn--djrs72d6uyxn--djty4konskowolayangrouphotogr" + + "aphysioxn--dnna-grajewolterskluwerxn--drbak-wuaxn--dyry-iraxn--e" + + "1a4cn-northwest-1xn--eckvdtc9dxn--efvn9spydebergxn--efvy88haibar" + + "akitahatakanezawaxn--ehqz56nxn--elqq16hair-surveillancexn--eveni" + + "-0qa01gaxn--f6qx53axn--fct429konsulatrobeepilepsykkylvenetodayxn" + + "--fhbeiarnxn--finny-yuaxn--fiq228c5hsrlxn--fiq64basicservercelli" + + "guriautomotiveconomiasakuchinotsuchiurakawakuyabukikonaikawachin" + + "aganoharamcoachampionshiphoptobamadridnbloggerevistaples3-eu-wes" + + "t-1xn--fiqs8srvarggatrentinsuedtirolxn--fiqz9storegontrailroadxn" + + "--fjord-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--forl-" + + "cesena-fcbsstorfjordxn--forlcesena-c8axn--fpcrj9c3dxn--frde-gran" + + "drapidstorjcloud-ver-jpchungnamdalseidfjordyndns-picsannohelplfi" + + "nancialuxuryxn--frna-woaraisaijosoyrorostpetersburgxn--frya-hrax" + + "n--fzc2c9e2cngriwataraidyndns-wikiraxn--fzys8d69uvgmailxn--g2xx4" + + "8cnpyatigorskodjeepsondriodejaneirockartuzyxn--gckr3f0fbsbxn--1c" + + "k2e1bar0emmafann-arboretumbriamallamaceiobbcg12038xn--gecrj9cnsa" + + "ntacruzsewhalingroks-thisayamanobeokalmykiaxn--ggaviika-8ya47hak" + + "atanorthwesternmutualxn--gildeskl-g0axn--givuotna-8yasugitpagefr" + + "ontappixolinoxn--gjvik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050i" + + "s-into-carshirahamatonbetsurnadalxn--gmqw5axn--h-2failxn--h1aegh" + + "akodatexn--h2breg3evenestreams1xn--h2brj9c8cntoyotaparsantafedje" + + "ffersonxn--h3cuzk1discountysnestudioxn--hbmer-xqaxn--hcesuolo-7y" + + "a35basilicataniautoscanadaeguambulancechirealmpmnaval-d-aosta-va" + + "lleyokoteastcoastaldefenceastus2xn--hery-iraxn--hgebostad-g3axn-" + + "-hkkinen-5waxn--hmmrfeasta-s4accident-prevention-k3studynamische" + + "s-dnsopotrentinsued-tirolxn--hnefoss-q1axn--hobl-iraxn--holtlen-" + + "hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1" + + "b6b1a6a2exn--imr513nxn--indery-fyasuokannamihoboleslawiecolognew" + + "spaperxn--io0a7is-into-cartoonshirakokaminokawanishiaizubangexn-" + + "-j1aefbx-ostrowiechoseiroumuenchenissedaluroyxn--j1amhakonexn--j" + + "6w193gxn--jlq480n2rgxn--jlq61u9w7basketballfinanzgorzeleccollect" + + "ionayorovigovtaxihuanfshostyhostingjerstadotsuruokakegawaveroyke" + + "ngerdalces3-eu-west-2xn--jlster-byatominamidaitomanchesterxn--jr" + + "peland-54axn--jvr189mintereisenxn--k7yn95exn--karmy-yuaxn--kbrq7" + + "oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dx" + + "n--kltx9axn--klty5xn--3oq18vl8pn36axn--koluokta-7ya57hakubahcavu" + + "otnagaivuotnagaokakyotambabyenglandxn--kprw13dxn--kpry57dxn--kpu" + + "t3is-into-gamessinazawaxn--krager-gyatsukanoyaltakasugais-leetre" + + "ntino-aadigexn--kranghke-b0axn--krdsherad-m8axn--krehamn-dxaxn--" + + "krjohka-hwab49jdevcloudjiffylkesbiblackbaudcdn-edgestackhero-net" + + "workinggroupaashorokanaiexn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-" + + "fyatsushiroxn--kvnangen-k0axn--l-1fairwindstuff-4-salexn--l1acce" + + "ntureklamborghinikolaeventstufftoread-booksnesor-odalxn--laheadj" + + "u-7yawaraxn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagaviika" + + "-52batochiokinoshimaintenanceobninskaragandavocatanzarowbq-aursk" + + "og-holandingdyniajudaicadaquest-mon-blogueurovision-riopretobish" + + "imagazinekobayashikshacknetnedalaheadjudygarlanddnslivelanddnss3" + + "-ap-southeast-1xn--lesund-huaxn--lgbbat1ad8jdfastlylbanzaiclouda" + + "ppscbgivingjemnes3-fips-us-gov-west-1xn--lgrd-poacctromsojamison" + + "xn--lhppi-xqaxn--linds-pramericanartrusteexn--lns-qlaquilanstutt" + + "gartrentoyonakagyokutoyakolobrzegersundxn--loabt-0qaxn--lrdal-sr" + + "axn--lrenskog-54axn--lt-liacolonialwilliamsburgrondarxn--lten-gr" + + "anexn--lury-iraxn--m3ch0j3axn--mely-iraxn--merker-kuaxn--mgb2dde" + + "susakis-certifiedunetlifyis-a-musicianxn--mgb9awbfbxostrowwlkpmg" + + "ruexn--mgba3a3ejtrvaroyxn--mgba3a4f16axn--mgba3a4fra1-dexn--mgba" + + "7c0bbn0axn--mgbaakc7dvfedorainfracloudfrontdoorxn--mgbaam7a8haku" + + "is-a-greenxn--mgbab2bdxn--mgbah1a3hjkrdxn--mgbai9a5eva00batsfjor" + + "diskussionsbereichattanooganordeste-idcasertairanzanhktcmemergen" + + "cyahikobeardubaiduckdns3-us-west-2xn--mgbai9azgqp6jejuniperxn--m" + + "gbayh7gpaleoxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgber" + + "p4a5d4a87gxn--mgberp4a5d4arxn--mgbgu82axn--mgbi4ecexposedxn--mgb" + + "pl2fhappouxn--mgbqly7c0a67fbcoloradoplateaudiopsysantamariakexn-" + + "-mgbqly7cvafr-1xn--mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2bauhausp" + + "osts-and-telecommunicationswedeniwaizumiotsukumiyamazonawsmpplan" + + "etariumemorialillyombolzano-altoadigeometre-experts-comptables3-" + + "website-ap-northeast-1xn--mgbx4cd0abbvieeexn--mix082fedorapeople" + + "gallodingenxn--mix891fedoraprojectozsdeportevadsobetsulikes-pied" + + "monticellocalzonexn--mjndalen-64axn--mk0axin-dslgbtrycloudflarep" + + "bodynamic-dnsortlandxn--mk1bu44columbusheyxn--mkru45is-lostre-to" + + "teneis-a-nascarfanxn--mlatvuopmi-s4axn--mli-tlarvikonyvelolipopu" + + "sinteractivegashisuifuettertdasnetzxn--mlselv-iuaxn--moreke-juax" + + "n--mori-qsakuragawaxn--mosjen-eyawatahamaxn--mot-tlavagiskexn--m" + + "re-og-romsdal-qqbuseranishiaritakurashikis-not-certifiedxn--msy-" + + "ula0hakusanagochijiwadellogliastradingxn--mtta-vrjjat-k7aflaksta" + + "daokagakicks-assnasaarlandxn--muost-0qaxn--mxtq1misakis-an-accou" + + "ntantshiojirishirifujiedaxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--3px" + + "u8komvuxn--30rr7yxn--nit225kooris-a-personaltrainerxn--nmesjevue" + + "mie-tcbalsan-sudtirollagdenesnaaseinet-freaksusonoxn--nnx388axn-" + + "-nodessakurais-savedxn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn" + + "--ntsq17gxn--nttery-byaeservehalflifeinsurancexn--nvuotna-hwaxn-" + + "-nyqy26axn--o1achernihivgubsuzakananiikappuboliviajessheimpertri" + + "xcdn77-secureggiocalabriaxn--o3cw4haldenxn--o3cyx2axn--od0algxn-" + + "-od0aq3beneventoeidskoguchikuzenvironmentalconservationionjukudo" + + "yamaizuruovat-band-campaniavoues3-eu-west-3utilities-1kappchizip" + + "6116-b-datacentermezgorabogadobeaemcloud-dealerimo-i-rana4u2-loc" + + "alhostrodawarabruzzoologicalvinklein-addrammenuorochestereport3l" + + "3p0rtashkentatamotors3-ap-northeast-1337xn--ogbpf8flekkefjordxn-" + + "-oppegrd-ixaxn--ostery-fyaxn--osyro-wuaxn--otu796dxn--p1acfeiraq" + + "uarelleaseeklogesaveincloudxn--p1ais-slickazteleportlligatrentin" + + "o-alto-adigexn--pgbs0dhlxn--porsgu-sta26fermochizukirkenesaves-t" + + "he-whalessandria-trani-barletta-andriatranibarlettaandriaxn--pss" + + "u33lxn--pssy2uxn--q9jyb4communewyorkshirebungoonordkappartintuit" + + "oyotomiyazakinuyamashinatsukigatakasakitauraxn--qcka1pmcdirxn--q" + + "qqt11misasaguris-an-actorxn--qxa6axn--qxamsterdamnserverbaniaxn-" + + "-rady-iraxn--rdal-poaxn--rde-ulavangenxn--rdy-0nabaris-uberleetr" + + "entino-altoadigexn--rennesy-v1axn--rhkkervju-01aferraraxn--rholt" + + "-mragowoodsidevelopmentrysiljanxn--rhqv96gxn--rht27zxn--rht3dxn-" + + "-rht61exn--risa-5nativeamericanantiquesuzukanazawaxn--risr-iraxn" + + "--rland-uuaxn--rlingen-mxaxn--rmskog-byaxn--rny31halsaitamatsuku" + + "ris-a-gurusrcfastly-terrariuminamiechizenxn--rovu88bentleyomitan" + + "observerxn--rros-granvindafjordxn--rskog-uuaxn--rst-0naturalhist" + + "orymuseumcenterxn--rsta-franamizuholdingsmall-webhostingxn--rvc1" + + "e0am3exn--ryken-vuaxn--ryrvik-byaxn--s-1faithammarfeastafricarbo" + + "nia-iglesias-carboniaiglesiascarboniaxn--s9brj9community-prochow" + + "icexn--sandnessjen-ogbeppublishproxyzjampagexlimanowarudaxarnetf" + + "lixilovecollegefantasyleaguernseyokozeatonsbergivestbytemarkanza" + + "kiwielunnerhcloudiscourses3-external-1xn--sandy-yuaxn--sdtirol-n" + + "2axn--seral-lraxn--ses554gxn--sgne-graphoxn--42c2d9axn--skierv-u" + + "tazasuzukis-foundationxn--skjervy-v1axn--skjk-soaxn--sknit-yqaxn" + + "--sknland-fxaxn--slat-5naturalsciencesnaturellesvalbardunloppaci" + + "ficivilizationxn--slt-elabcn-north-1xn--smla-hraxn--smna-gratang" + + "entlentapisa-geekopervikfh-muensterxn--snase-nraxn--sndre-land-0" + + "cbeskidyn-ip24xn--snes-poaxn--snsa-roaxn--sr-aurdal-l8axn--sr-fr" + + "on-q1axn--sr-odal-q1axn--sr-varanger-ggbestbuyshouses3-website-a" + + "p-southeast-1xn--srfold-byaxn--srreisa-q1axn--srum-gratis-a-bull" + + "s-fanxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbetainabo" + + "xfusejnyanagawaltervistaikikugawashingtondclk3xn--stre-toten-zcb" + + "hzcasinorddalimitedisrechtranaharimalselvendrellimoliseminempres" + + "ashibetsukuibmdivtasvuodnakaiwamizawaweddingjesdalivornoceanogra" + + "phiquemrxn--t60b56axn--tckwebspacexn--tiq49xqyjelasticbeanstalka" + + "zunotteroyxn--tjme-hraxn--tn0agrinetbankoryokamikawanehonbetsuru" + + "taharaxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trentin-sd-tiro" + + "l-rzbieidsvollombardynaliasnesoddenmarkhangelskjakdnepropetrovsk" + + "iervaapsteiermarkarasjohkamikoaniihamatamakawajimarriottcp4xn--t" + + "rentin-sdtirol-7vbrplsbxn--45br5cylxn--trentino-sd-tirol-c3biela" + + "washtenawdev-myqnapcloudcontrolledekagaminogifts3-website-ap-sou" + + "theast-2xn--trentino-sdtirol-szbiellaakesvuemielecceu-1xn--trent" + + "inosd-tirol-rzbieszczadygeyachts3-website-eu-west-1xn--trentinos" + + "dtirol-7vbievathletajimabaridagawakkanaibetsubamericanfamilydscl" + + "ouderacingjovikarasjokarasuyamarshallstatebankarateu-2xn--trenti" + + "nsd-tirol-6vbifukagawassamukawatarikuzentakatainaioirasebastopol" + + "ogyeongnamegawafaicloudineat-urlomzaporizhzheguriitatebayashijon" + + "awateu-3xn--trentinsdtirol-nsbigv-infolldalondonetskaratsuginami" + + "katagamilanoticias3-website-sa-east-1xn--trgstad-r1axn--trna-woa" + + "xn--troms-zuaxn--tysvr-vraxn--uc0atvestfoldxn--uc0ay4axn--uist22" + + "hamurakamigoris-a-hard-workershawaiijimarcheapigeelvinckaufenxn-" + + "-uisz3gxn--unjrga-rtarumizusawaxn--unup4yxn--uuwu58axn--vads-jra" + + "xn--valle-aoste-ebbtunesorumincomcastresindevicenzaporizhzhiaxn-" + + "-valle-d-aoste-ehbodoes-it1-eurxn--valleaoste-e7axn--valledaoste" + + "-ebbvacationsvcivilwarmiastagets-itmparochernigovernmentoyosatoy" + + "okawaxn--vard-jraxn--vegrshei-c0axn--vermgensberater-ctbihorolog" + + "yonagoyaxn--vermgensberatung-pwblogoipizzaxn--vestvgy-ixa6oxn--v" + + "g-yiabkhaziaxn--vgan-qoaxn--vgsy-qoa0jelenia-goraxn--vgu402comob" + + "araxn--vhquvestnesouthcarolinarvikomakiyosatokamachintaifun-dnsa" + + "liashishikuis-a-patsfanxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xq" + + "adxn--vry-yla5gxn--vuq861bikedaemoneyonagunicloudivttasvuotnakam" + + "agayahooguyoriikarelianceu-4xn--w4r85el8fhu5dnraxn--w4rs40lxn--w" + + "cvs22dxn--wgbh1comparemarkerryhotelsantoandreamhostersanukinvest" + + "mentsaobernardownloadyndns-workshopitsitexasaogoncasacamdvrcampi" + + "nagrandebuilderschlesischesaotomelbournexn--wgbl6axn--xhq521bilb" + + "aokinawashirosatochigiessensiositechnologyoshiokanumazuryukiiyam" + + "anouchikuhokuryugasakitashiobaraxn--xkc2al3hye2axn--xkc2dl3a5ee0" + + "handsonyoursidelmenhorstalbanshellaspeziaxn--y9a3aquariumisawaxn" + + "--yer-znaturbruksgymnxn--yfro4i67oxn--ygarden-p1axn--ygbi2ammxn-" + + "-45brj9cldmailuzernxn--ystre-slidre-ujbillustrationredumbrellahp" + + "piacenzachpomorskienhlfanhs3-website-us-east-1xn--zbx025dxn--zf0" + + "ao64axn--zf0avxlxn--zfr164biocelotenkawaxnbayxz" // nodes is the list of nodes. Each node is represented as a uint32, which // encodes the node's children, wildcard bit and node type (as an index into @@ -528,1808 +535,1812 @@ const text = "9guacuiababia-goracleaningroks-theatree12hpalermomahachijolstere" // [15 bits] text index // [ 6 bits] text length var nodes = [...]uint32{ - 0x32f643, - 0x3b5c84, - 0x2f7846, - 0x2ed303, - 0x2ed306, - 0x391ec6, - 0x3ba683, - 0x242cc4, - 0x2089c7, - 0x2f7488, + 0x20bc43, + 0x25d9c4, + 0x2f8cc6, + 0x217243, + 0x217246, + 0x38e886, + 0x3bb603, + 0x2392c4, + 0x3a15c7, + 0x2f8908, 0x1a000c2, - 0x1f3c187, - 0x37b0c9, - 0x39a04a, - 0x39a04b, - 0x231983, - 0x234b85, - 0x2202642, - 0x280004, - 0x2f79c3, - 0x202645, - 0x2608c02, - 0x365e83, - 0x2a15d84, - 0x3b5585, - 0x2e12282, - 0x27520e, - 0x251a43, - 0x3adec6, - 0x3207d42, - 0x306e07, - 0x237306, - 0x3601f82, - 0x26d143, - 0x334e46, - 0x360f48, - 0x28e806, - 0x276804, - 0x3a00ac2, - 0x34cd89, - 0x222087, - 0x3b4c86, - 0x370f49, - 0x3c8608, - 0x354f84, - 0x25b9c6, - 0x3cdd86, - 0x3e029c2, - 0x2a7f06, - 0x24394f, - 0x27f04e, - 0x221684, - 0x2d4205, - 0x32f545, - 0x215589, - 0x23d909, - 0x335647, - 0x355246, - 0x203583, - 0x42272c2, - 0x22ce03, - 0x2937ca, - 0x4601ac3, - 0x3e1a45, - 0x239202, - 0x392449, - 0x4e03502, - 0x209784, - 0x2f4406, - 0x28fac5, - 0x3732c4, - 0x56263c4, - 0x233f03, - 0x233f04, - 0x5a02e42, - 0x385d04, - 0x5e83a84, - 0x25d6ca, - 0x6200882, - 0x229547, - 0x27e508, - 0x7a07282, - 0x334a47, - 0x2ce984, - 0x2ce987, - 0x3dbac5, - 0x390e07, - 0x34b706, - 0x2a1184, - 0x36a285, - 0x257e87, - 0x8e07cc2, - 0x2a8083, - 0x9210642, - 0x3b3f43, - 0x96074c2, - 0x2173c5, - 0x9a00202, - 0x375d04, - 0x2ef285, - 0x2215c7, - 0x25d04e, - 0x2ba484, - 0x29a884, - 0x20ebc3, - 0x35c549, - 0x2c17cb, - 0x2c75c8, - 0x32cc48, - 0x3313c8, - 0x3e1f48, - 0x370d8a, - 0x390d07, - 0x356606, - 0x9e3de82, - 0x26f0c3, - 0x3d2103, - 0x3d3c84, - 0x26f103, - 0x361e43, - 0x1737f82, - 0xa206c02, - 0x284a05, - 0x2bc146, - 0x234944, - 0x3aee07, - 0x26bdc6, - 0x2cd644, - 0x3bdc87, - 0x20d483, - 0xa6d7f02, - 0xab0bf02, - 0xae7b6c2, - 0x30bcc6, - 0xb200282, - 0x2a4d45, - 0x3394c3, - 0x3d5bc4, - 0x2f9284, - 0x2f9285, - 0x3dff03, - 0xb64ac43, - 0xba05102, - 0x2093c5, - 0x2093cb, - 0x2b2a0b, - 0x204cc4, - 0x209849, - 0x20ae84, - 0xbe0b742, - 0x20c303, - 0x20e1c3, - 0xc207f42, - 0x2f2aca, - 0xc608a02, - 0x280285, - 0x2e858a, - 0x242644, - 0x210143, - 0x210a04, - 0x211943, - 0x211944, - 0x211947, - 0x212685, - 0x213086, - 0x213386, - 0x214683, - 0x218248, - 0x217143, - 0xca0cfc2, - 0x266308, - 0x28ea8b, - 0x2208c8, - 0x221106, - 0x222887, - 0x225048, - 0xda0aac2, - 0xde1c942, - 0x272d48, - 0x20f1c7, - 0x20f705, - 0x310f88, - 0xe302e48, - 0x2b0ec3, - 0x22bec4, - 0x391f42, - 0xe62c0c2, - 0xea06cc2, - 0xf22c442, - 0x22c443, - 0xf60cf02, - 0x316343, - 0x332284, - 0x214803, - 0x354f44, - 0x32430b, - 0x20cf03, - 0x2f2086, - 0x25d544, - 0x2c888e, - 0x377205, - 0x268a88, - 0x3adfc7, - 0x3adfca, - 0x231503, - 0x2355c7, - 0x2c1985, - 0x231504, - 0x253a06, - 0x253a07, - 0x31dd84, - 0xfb109c4, - 0x25d384, - 0x25d386, - 0x252684, - 0x3c2f86, - 0x20f4c3, - 0x20f4c8, - 0x210448, - 0x29a843, - 0x2f2a83, - 0x343c04, - 0x35c0c3, - 0x1020cdc2, - 0x106bd282, - 0x205083, - 0x243fc6, - 0x25bac3, - 0x274784, - 0x10a30c82, - 0x25ce43, - 0x316a83, - 0x214dc2, - 0x10e00d42, - 0x2d3286, - 0x235a07, - 0x229bc7, - 0x3c0d85, - 0x21cc84, - 0x2a0dc5, - 0x30f247, - 0x2e5a49, - 0x2ee886, - 0x3032c6, - 0x11602282, - 0x307a08, - 0x31a706, - 0x2b1bc5, - 0x30c3c7, - 0x30dcc4, - 0x30dcc5, - 0x11a02284, - 0x202288, - 0x11e09482, - 0x12200482, - 0x275946, - 0x200488, - 0x337b45, - 0x34d686, - 0x350448, - 0x360a48, - 0x12608cc5, - 0x12a15e84, - 0x215e87, - 0x12e0a902, - 0x13361e82, - 0x14612402, - 0x2f4505, - 0x14e8af45, - 0x269506, - 0x327ec7, - 0x3b26c7, - 0x1522ea43, - 0x32bb87, - 0x3c17c8, - 0x2162ed49, - 0x2753c7, - 0x22f487, - 0x22fe88, - 0x230686, - 0x231006, - 0x231c4c, - 0x23294a, - 0x232d47, - 0x234a4b, - 0x235847, - 0x23584e, - 0x21a36344, - 0x236704, - 0x238a07, - 0x260b47, - 0x23d046, - 0x23d047, - 0x335887, - 0x226dc3, - 0x21e2c982, - 0x23e846, - 0x23e84a, - 0x24004b, - 0x241287, - 0x241d05, - 0x242183, - 0x2423c6, - 0x2423c7, - 0x2fa483, - 0x22200102, - 0x2435ca, - 0x2277c682, - 0x22b49682, - 0x22e40902, - 0x23237402, - 0x246ac5, - 0x247344, - 0x23e0da02, - 0x385d85, - 0x240643, - 0x299645, - 0x201ec4, - 0x21dd04, - 0x2d4e46, - 0x251dc6, - 0x2095c3, - 0x3cce44, - 0x37f243, - 0x24e0f982, - 0x216404, - 0x216406, - 0x222c05, - 0x2482c6, - 0x30c4c8, - 0x265e44, - 0x294208, - 0x232fc5, - 0x259508, - 0x2d0686, - 0x30e0c7, - 0x269c04, - 0x26269c06, - 0x26622383, - 0x3a47c3, - 0x2f7108, - 0x38bc44, - 0x26b32ec7, - 0x2e6946, - 0x2e6949, - 0x369588, - 0x37d748, - 0x389c84, - 0x204583, - 0x240702, - 0x2724e682, - 0x27626282, - 0x205c83, - 0x27a08b02, - 0x2fa404, - 0x2790c6, - 0x21a203, - 0x2c3d47, - 0x3b3a83, - 0x2ba548, - 0x21edc5, - 0x259f83, - 0x2ef205, - 0x2ef344, - 0x30d9c6, - 0x220006, - 0x221506, - 0x2f4c84, - 0x235c03, - 0x27e11702, - 0x282351c5, - 0x200843, - 0x28a0da82, - 0x22f203, - 0x3233c5, - 0x28e33fc3, - 0x29633fc9, - 0x29a00942, - 0x2a20fc42, - 0x292845, - 0x2166c6, - 0x2ada86, - 0x2e9f08, - 0x2e9f0b, - 0x346d4b, - 0x3c0f85, - 0x2d8489, - 0x1600b42, - 0x39b4c8, - 0x209b44, - 0x2aa031c2, - 0x34ca03, - 0x2b260d06, - 0x2b600fc2, - 0x3619c8, - 0x2ba293c2, - 0x33d78a, - 0x2bedd983, - 0x2c77b706, - 0x397c88, - 0x242986, - 0x38dc47, - 0x243b47, - 0x3cd90a, - 0x2426c4, - 0x365c04, - 0x37a709, - 0x2cbb1905, - 0x275246, - 0x20f3c3, - 0x24e104, - 0x2ced8384, - 0x3b4447, - 0x2d233647, - 0x25ce84, - 0x3b2b85, - 0x2695c8, - 0x3a4c87, - 0x3a9847, - 0x2d60fa02, - 0x26acc4, - 0x2981c8, - 0x248604, - 0x24bb44, - 0x24bf45, - 0x24c087, - 0x2da81989, - 0x21eb04, - 0x24d4c9, - 0x24d708, - 0x24de84, - 0x24de87, - 0x2de4e483, - 0x24f8c7, - 0x2e201282, - 0x16be142, - 0x250386, - 0x251187, - 0x2515c4, - 0x252dc7, - 0x254047, - 0x254603, - 0x2ba882, - 0x20e782, - 0x32cd43, - 0x3ce884, - 0x3ce88b, - 0x2e72cd48, - 0x259a04, - 0x255d05, - 0x2576c7, - 0x20e785, - 0x31d28a, - 0x259943, - 0x2ea091c2, - 0x21d304, - 0x260909, - 0x264e43, - 0x264f07, - 0x28c949, - 0x2091c8, - 0x26f783, - 0x283187, - 0x283b89, - 0x26a503, - 0x28b544, - 0x28cb89, - 0x290cc6, - 0x2e9d03, - 0x207c82, - 0x23cc03, - 0x2bdf47, - 0x23cc05, - 0x2c15c6, - 0x296d84, - 0x365485, - 0x2844c3, - 0x2148c6, - 0x27eb43, - 0x209a42, - 0x24ac04, - 0x2ee08882, - 0x2f368483, - 0x2f6033c2, - 0x249f83, - 0x20dc44, - 0x303b07, - 0x348546, - 0x27cec2, - 0x2fa04d82, - 0x30c6c4, - 0x30211ac2, - 0x30621c42, - 0x2f0f04, - 0x2f0f05, - 0x363e85, - 0x260286, - 0x30a06d42, - 0x20f8c5, - 0x219a45, - 0x21bb43, - 0x225d86, - 0x227545, - 0x265d82, - 0x360685, - 0x30bc44, - 0x265d83, - 0x265fc3, - 0x30e08f42, - 0x2e4dc7, - 0x24d904, - 0x24d909, - 0x24e004, - 0x28adc3, - 0x2b9808, - 0x3128adc4, - 0x28adc6, - 0x2a49c3, - 0x256543, - 0x266a83, - 0x316fb9c2, - 0x308982, - 0x31a00642, - 0x33b208, - 0x3e0108, - 0x3bef86, - 0x351a05, - 0x303c85, - 0x207d87, - 0x31e46145, - 0x23ca82, - 0x3229cac2, - 0x32600042, - 0x27db48, - 0x31a645, - 0x2feac4, - 0x248205, - 0x2497c7, - 0x388944, - 0x2434c2, - 0x32a0b2c2, - 0x352084, - 0x228b07, - 0x292d07, - 0x390dc4, - 0x3d2c03, - 0x29a784, - 0x29a788, - 0x231346, - 0x25388a, - 0x2f5844, - 0x299e48, - 0x235384, - 0x222986, - 0x29ca84, - 0x2f4806, - 0x24dbc9, - 0x2abc07, - 0x213ec3, - 0x32e5b542, - 0x3a2503, - 0x20b942, - 0x33205742, - 0x34c006, - 0x386d08, - 0x2adc07, - 0x30b109, - 0x2addc9, - 0x2b0405, - 0x2b2d89, - 0x2b3cc5, - 0x2b4b05, - 0x2b5f88, - 0x33611b04, - 0x33a54747, - 0x22f843, - 0x2b6187, - 0x22f846, - 0x2b6987, - 0x2ab845, - 0x22f0c3, - 0x33e32702, - 0x210384, - 0x3422cb02, - 0x3460b5c2, - 0x314d06, - 0x27e485, - 0x2b8ec7, - 0x356e03, - 0x361dc4, - 0x21d783, - 0x355e03, - 0x34a09582, - 0x35208fc2, - 0x391fc4, - 0x32ae03, - 0x305545, - 0x3560f782, - 0x35e02182, - 0x305d46, - 0x2069c4, - 0x30a304, - 0x30a30a, - 0x366005c2, - 0x2160c3, - 0x21528a, - 0x219008, - 0x36a0e704, - 0x2005c3, - 0x36e0a2c3, - 0x26a749, - 0x247109, - 0x2c3e46, - 0x372191c3, - 0x2191c5, - 0x21e7cd, - 0x22db06, - 0x2e61cb, - 0x37607542, - 0x358448, - 0x3b20c202, - 0x3b603082, - 0x39e285, - 0x3ba04b82, - 0x2af7c7, - 0x205603, - 0x227708, - 0x3be022c2, - 0x25ef84, - 0x21fc83, - 0x354a05, - 0x240746, - 0x227104, - 0x2f2a43, - 0x384583, - 0x3c206142, - 0x3c0f04, - 0x2bab45, - 0x2bdb47, - 0x281403, - 0x2be4c3, - 0x1616fc2, - 0x2be783, - 0x2beb83, - 0x3c600e02, - 0x33f584, + 0x1f3cf47, + 0x376f09, + 0x397eca, + 0x397ecb, + 0x23a2c3, + 0x23cf05, + 0x22070c2, + 0x2f5304, + 0x2f8e43, + 0x30eb85, + 0x260ad42, + 0x360f03, + 0x2a58bc4, + 0x30f345, + 0x2e13602, + 0x21638e, + 0x25c3c3, + 0x3b3dc6, + 0x3202302, + 0x3096c7, + 0x23fa86, + 0x3606a82, + 0x28e183, 0x235e06, - 0x2e6503, - 0x2bf943, - 0x3ca4b202, - 0x24b208, - 0x2c0904, - 0x33f306, - 0x253e87, - 0x29a946, - 0x38bbc4, - 0x4ae03102, - 0x22f70b, - 0x30180e, - 0x217a8f, - 0x2be183, - 0x4b65a642, - 0x1641882, - 0x4ba03802, - 0x2563c3, - 0x20ee83, - 0x21b306, - 0x34e0c6, - 0x395dc7, - 0x3d2484, - 0x4be16802, - 0x4c21f2c2, - 0x2e2845, - 0x33dec7, - 0x2c2506, - 0x4c669782, - 0x3626c4, - 0x2c7a83, - 0x4ca06902, - 0x4cf78103, - 0x2c9284, - 0x2cde89, - 0x4d2d5182, - 0x4d60a342, - 0x248985, - 0x4dad5682, - 0x4de01582, - 0x364e47, - 0x37b34b, - 0x243905, - 0x258509, - 0x270906, - 0x4e201584, - 0x206d89, - 0x2d6a07, - 0x22a147, - 0x22c743, - 0x2f0d86, - 0x352f87, - 0x21df43, - 0x2a87c6, - 0x4ea29a82, - 0x4ee34242, - 0x2061c3, - 0x392605, - 0x303147, - 0x236d06, - 0x23cb85, - 0x24d884, - 0x2aad45, - 0x393dc4, - 0x4f201482, - 0x2e9184, - 0x247004, - 0x24700d, - 0x2ee249, - 0x22ca48, - 0x248c04, - 0x347fc5, - 0x204407, - 0x206504, - 0x26be87, - 0x267a45, - 0x4f60a284, - 0x2c6045, - 0x201484, - 0x253306, - 0x394fc5, - 0x4faa4c82, - 0x2758c3, - 0x357643, - 0x35d804, - 0x35d805, - 0x39d506, - 0x23ccc5, - 0x368e84, - 0x364343, - 0x4fe17e86, - 0x21a8c5, - 0x21e2c5, - 0x327dc4, - 0x2f58c3, - 0x2f58cc, - 0x502bdc42, - 0x50600e82, - 0x50a02702, - 0x21e1c3, - 0x21e1c4, - 0x50e0a682, - 0x3b9e88, - 0x2c1685, - 0x2d5ec4, - 0x230e86, - 0x51204202, - 0x5162d582, - 0x51a00c42, - 0x296545, - 0x2f4b46, - 0x265684, - 0x335386, - 0x229306, - 0x25bfc3, - 0x51e9068a, - 0x2815c5, - 0x293783, - 0x209f06, - 0x209f09, - 0x223fc7, - 0x2b7fc8, - 0x3c84c9, - 0x2e5bc8, - 0x22dd86, - 0x20eb83, - 0x52208c82, - 0x32d248, - 0x52606a02, - 0x52a0b982, - 0x215f83, - 0x2ee705, - 0x2a0484, - 0x300689, - 0x3c04c4, - 0x20bc08, - 0x5320b983, - 0x53724784, - 0x216708, - 0x246f47, - 0x53b49242, - 0x370242, - 0x32f4c5, - 0x385509, - 0x23cb03, - 0x31bb84, - 0x3424c4, - 0x204483, - 0x28698a, - 0x53f93b42, - 0x542101c2, - 0x2d7e83, - 0x396083, - 0x162dfc2, - 0x26e8c3, - 0x54615782, - 0x54a00bc2, - 0x54e17544, - 0x217546, - 0x271a44, - 0x27d983, - 0x289683, - 0x55200bc3, - 0x2403c6, - 0x3d5d85, - 0x2dbe07, - 0x2dbd46, - 0x2dcd88, - 0x2dcf86, - 0x202a04, - 0x2a21cb, - 0x2dfa03, - 0x2dfa05, - 0x20e982, - 0x365142, - 0x55646b42, - 0x55a0a942, - 0x216843, - 0x55e720c2, - 0x2720c3, - 0x2e0483, - 0x56603e42, - 0x56ae4806, - 0x258d46, - 0x56ee4942, - 0x5720e202, - 0x57666002, - 0x57a0cac2, - 0x57e0e882, - 0x58203882, - 0x20c543, - 0x3af006, - 0x5861e484, - 0x21620a, - 0x3b0106, - 0x281284, - 0x208143, - 0x59216102, - 0x203182, - 0x241c83, - 0x59617fc3, - 0x3c49c7, - 0x394ec7, - 0x5c245ec7, - 0x37efc7, - 0x228803, - 0x22880a, - 0x237bc4, - 0x31ef04, - 0x31ef0a, - 0x22eb85, - 0x5c60e742, - 0x250343, - 0x5ca00602, - 0x24dfc3, - 0x3a24c3, - 0x5d200582, - 0x3c1744, - 0x207f84, - 0x3dcc45, - 0x32e9c5, - 0x2f6786, - 0x30a546, - 0x5d63bec2, - 0x5da02542, - 0x301dc5, - 0x258a52, - 0x363486, - 0x291043, - 0x31c146, - 0x2b6585, - 0x1605cc2, - 0x65e0fec2, - 0x377b43, - 0x20fec3, - 0x39f483, - 0x66201102, - 0x20f443, - 0x666035c2, - 0x207583, - 0x3dcf88, - 0x269543, - 0x2b0286, - 0x3da087, - 0x34f0c6, - 0x34f0cb, - 0x2811c7, - 0x2f6f04, - 0x66e00c02, - 0x2c1505, - 0x67217f83, - 0x235fc3, - 0x332505, - 0x34a9c3, - 0x67b4a9c6, - 0x3d048a, - 0x2a98c3, - 0x2371c4, - 0x2003c6, - 0x2b1fc6, - 0x67e3e083, - 0x273987, - 0x26a647, - 0x2a3e85, - 0x2b2346, - 0x21a903, - 0x6aa25fc3, - 0x6ae00a82, - 0x6b20e9c4, - 0x213b49, - 0x226685, - 0x266e44, - 0x35a3c8, - 0x241e85, - 0x6b642285, + 0x2f4148, + 0x295bc6, + 0x3c7c04, + 0x3a00ac2, + 0x34b449, + 0x220787, + 0x32e5c6, + 0x36ba09, + 0x3ce888, + 0x210944, + 0x2acb06, + 0x2076c6, + 0x3e02002, + 0x38cc46, + 0x24d68f, + 0x3cdb8e, + 0x22b1c4, + 0x234c85, + 0x330d45, + 0x3aaa09, 0x247e89, - 0x3b4d43, - 0x349604, - 0x6ba05b42, - 0x216a43, - 0x6be75c42, - 0x275c46, - 0x167ce82, - 0x6c20c182, - 0x296448, - 0x29a743, - 0x2c5f87, - 0x384605, - 0x2be805, - 0x2be80b, - 0x2f0b06, - 0x2bea06, - 0x2804c4, - 0x211c86, - 0x6c6f1608, - 0x287403, - 0x25be43, - 0x25be44, - 0x2f0184, - 0x2f8747, - 0x318245, - 0x6cb20202, - 0x6ce04fc2, - 0x6d604fc5, - 0x2c6a84, - 0x2f114b, - 0x2f9188, - 0x306444, - 0x6da2c8c2, - 0x6de2d782, - 0x3c2f03, - 0x2faf84, - 0x2fb245, - 0x2fbd47, - 0x6e2fe604, - 0x390ec4, - 0x6e616982, - 0x380fc9, - 0x2ffa45, - 0x243bc5, - 0x3005c5, - 0x6ea16983, - 0x237e84, - 0x237e8b, - 0x3010c4, - 0x30138b, - 0x301f05, - 0x217bca, - 0x303dc8, - 0x303fca, - 0x304883, - 0x30488a, - 0x6f213982, - 0x6f642c42, - 0x6fa0d403, - 0x6fede302, - 0x307643, - 0x702f8442, - 0x70739c42, - 0x308544, - 0x218386, - 0x3350c5, - 0x30c343, - 0x32fc06, - 0x3a0645, - 0x366b44, - 0x70a00902, - 0x2ae704, - 0x2d810a, - 0x2c0587, - 0x34ad46, - 0x235407, - 0x23e883, - 0x2c92c8, - 0x3dc44b, - 0x2ce445, - 0x223585, - 0x223586, - 0x342604, - 0x3cd748, - 0x2198c3, - 0x28b144, - 0x3cdc87, - 0x2f6b46, - 0x314a06, - 0x2c86ca, - 0x24d544, - 0x3214ca, - 0x70f5ccc6, - 0x35ccc7, - 0x255d87, - 0x2ab784, - 0x34c349, - 0x238cc5, - 0x2f8343, - 0x2201c3, - 0x7121b843, - 0x231704, - 0x71600682, - 0x266886, - 0x71acbc45, - 0x31c385, - 0x2505c6, - 0x2a6184, - 0x71e02b02, - 0x2421c4, - 0x7220d782, - 0x20d785, - 0x37d504, - 0x7361a6c3, - 0x73a08382, - 0x208383, - 0x34d886, - 0x73e07742, - 0x399508, - 0x223e44, - 0x223e46, - 0x396906, - 0x74257784, - 0x217e05, - 0x368548, - 0x265c07, - 0x2b1087, - 0x2b108f, - 0x2980c6, - 0x23c0c3, - 0x23db04, - 0x219b43, - 0x222ac4, - 0x24c404, - 0x74606c82, - 0x2bef83, - 0x337143, - 0x74a08502, - 0x20cec3, - 0x30be83, - 0x21270a, - 0x279407, - 0x25070c, - 0x74e509c6, - 0x250b46, - 0x253b87, - 0x752302c7, - 0x259009, - 0x75666444, - 0x75a0a1c2, - 0x75e02442, - 0x2c8a86, - 0x273784, - 0x2bf406, - 0x230748, - 0x3926c4, - 0x2f7a46, - 0x2ada45, - 0x7628dc88, - 0x2424c3, - 0x292005, - 0x3ab143, - 0x243cc3, - 0x243cc4, - 0x21d2c3, - 0x7664b642, - 0x76a04782, - 0x2f8209, - 0x293a05, - 0x293d84, - 0x294545, - 0x210f44, - 0x28eec7, - 0x35ff05, - 0x772ddf84, - 0x2ddf88, - 0x2df1c6, - 0x2e5144, - 0x2e8988, - 0x2e8fc7, - 0x7760ab02, - 0x2f1004, - 0x219c04, - 0x2ceb87, - 0x77a0ab04, - 0x2670c2, - 0x77e0ee42, - 0x20ee43, - 0x248884, - 0x29a503, - 0x2b7085, - 0x78201442, - 0x308885, - 0x23cac2, - 0x312645, - 0x23cac5, - 0x786010c2, - 0x316a04, - 0x78a018c2, - 0x349086, - 0x25ab46, - 0x385648, - 0x2cf888, - 0x314c84, - 0x35a585, - 0x310489, - 0x39b604, - 0x3d0444, - 0x2132c3, - 0x237c83, - 0x78f1fb05, - 0x24fd85, - 0x28b044, - 0x35eacd, - 0x25cdc2, - 0x366543, - 0x79201702, - 0x79600ec2, - 0x398fc5, - 0x341947, - 0x227344, - 0x3c86c9, - 0x2d8249, + 0x236607, + 0x2584c6, + 0x267083, + 0x422d0c2, + 0x22d543, + 0x29b5ca, + 0x4609983, + 0x3403c5, + 0x30a8c2, + 0x3a4f89, + 0x4e03b42, + 0x207a04, + 0x354186, + 0x243885, + 0x36ebc4, + 0x5626e04, + 0x203b43, + 0x23c4c4, + 0x5a030c2, + 0x25b344, + 0x5f2d504, + 0x316d0a, + 0x6200882, + 0x3cd347, + 0x27b5c8, + 0x7a08502, + 0x336287, + 0x2d36c4, + 0x2d36c7, + 0x38aa45, + 0x38bf07, + 0x34a906, + 0x29ac84, + 0x3633c5, + 0x282507, + 0x920c142, + 0x38cdc3, + 0x960b4c2, + 0x3b5e03, + 0x9a08742, + 0x2691c5, + 0x9e00202, + 0x371604, + 0x387345, + 0x22b107, + 0x2e954e, + 0x206984, + 0x283b04, + 0x2079c3, + 0x30d489, + 0x2c4e4b, + 0x2e1248, + 0x32b788, + 0x3328c8, + 0x20a888, + 0xa36b84a, + 0x38be07, + 0x2f7086, + 0xa617282, + 0x35ca43, + 0x3d6443, + 0x3d8084, + 0x35ca83, + 0x3bb643, + 0x1738b82, + 0xaa04702, + 0x28a385, + 0x261e86, + 0x252084, + 0x3b0cc7, + 0x25b186, + 0x2d4704, + 0x3be9c7, + 0x204703, + 0xb2dc982, + 0xb728c42, + 0xba13982, + 0x230646, + 0xbe00282, + 0x26b385, + 0x33a0c3, + 0x3de644, + 0x2fd584, + 0x2fd585, + 0x3e9683, + 0xc253c43, + 0xc606342, + 0x20e9c5, + 0x20e9cb, + 0x223c8b, + 0x20e804, + 0x20ee49, + 0x210404, + 0xca10d82, + 0x211a83, + 0x2121c3, + 0xce02502, + 0x23020a, + 0xd20bd42, + 0x2f5585, + 0x2ece4a, + 0x246f44, + 0x213f43, + 0x2154c4, + 0x2178c3, + 0x2178c4, + 0x2178c7, + 0x218705, + 0x219546, + 0x21a186, + 0x2172c3, + 0x220f88, + 0x215b03, + 0xd604242, + 0x2fc548, + 0x295e4b, + 0x229c88, + 0x22ac46, + 0x22b987, + 0x22e908, + 0xee016c2, + 0xf2295c2, + 0x278408, + 0x20b947, + 0x206e85, + 0x3e2208, + 0xf61c008, + 0x26a0c3, + 0x235a44, + 0x38e902, + 0xfa36c42, + 0xfe07f42, + 0x10637242, + 0x237243, + 0x10a04182, + 0x312683, + 0x2135c4, + 0x210903, + 0x210904, + 0x3a264b, + 0x204183, + 0x2f27c6, + 0x284a84, + 0x2ccf8e, + 0x240ec5, + 0x257008, + 0x2716c7, + 0x2716ca, + 0x21b9c3, + 0x25d7c7, + 0x2c5005, + 0x239e44, + 0x25ef06, + 0x25ef07, + 0x3601c4, + 0x10f10344, + 0x3169c4, + 0x3169c6, + 0x25d4c4, + 0x3c2086, + 0x206c43, + 0x206c48, + 0x20b2c8, + 0x2b3843, + 0x2301c3, + 0x344544, + 0x357203, + 0x11604042, + 0x11aea202, + 0x217843, + 0x203c06, + 0x3796c3, + 0x2fd344, + 0x11efd0c2, + 0x343583, + 0x332f83, + 0x21cdc2, + 0x12200d42, + 0x2d7946, + 0x228b07, + 0x27b347, + 0x2c7cc5, + 0x386404, + 0x3d4a45, + 0x3dcc47, + 0x2b5ec9, + 0x2cb106, + 0x2c7bc6, + 0x1320c602, + 0x2b6688, + 0x321346, + 0x327b05, + 0x2f7787, + 0x2fafc4, + 0x2fafc5, + 0x1370e7c4, + 0x30e7c8, + 0x13a08d02, + 0x13e00482, + 0x24c3c6, + 0x200488, + 0x325105, + 0x3264c6, + 0x329dc8, + 0x34c608, + 0x14203ec5, + 0x16e2f004, + 0x2b0f87, + 0x1720fe82, + 0x1762e702, + 0x18a16542, + 0x354285, + 0x192904c5, + 0x241c06, + 0x3b6207, + 0x368e07, + 0x19616543, + 0x3d6787, + 0x283a08, + 0x273b4bc9, + 0x216547, + 0x3e03c7, + 0x238308, + 0x238b06, + 0x239946, + 0x23a58c, + 0x23b58a, + 0x23ba87, + 0x23cdcb, + 0x23dd47, + 0x23dd4e, + 0x2763eb84, + 0x23ec84, + 0x240d87, + 0x24be07, + 0x246386, + 0x246387, + 0x3b74c7, + 0x203643, + 0x27a13b02, + 0x248746, + 0x24874a, + 0x248acb, + 0x249f07, + 0x24aac5, + 0x24b283, + 0x24c646, + 0x24c647, + 0x2feac3, + 0x27e00102, + 0x24d30a, + 0x28378742, + 0x2863d842, + 0x28a47402, + 0x28e3fb82, + 0x24f085, + 0x24fdc4, + 0x29a0c542, + 0x25b3c5, + 0x231943, + 0x29d005, + 0x20a784, + 0x21e5c4, + 0x2d9d06, + 0x25cc06, + 0x20ebc3, + 0x3c1a44, + 0x341883, + 0x2aa03242, + 0x2b1504, + 0x3a1a46, + 0x2b1505, + 0x207106, + 0x2f7888, + 0x233d04, + 0x2b0ac8, + 0x2f3f05, + 0x27ce88, + 0x2d57c6, + 0x21c787, + 0x279ec4, + 0x2be79ec6, + 0x2c220a83, + 0x3a6543, + 0x2c05c8, + 0x334684, + 0x2c615587, + 0x280dc6, + 0x2e9b49, + 0x362488, + 0x32c448, + 0x333004, + 0x20d303, + 0x249182, + 0x2ce57f02, + 0x2d226cc2, + 0x20dd83, + 0x2d615fc2, + 0x2fea44, + 0x285786, + 0x23ca03, + 0x2c72c7, + 0x36ca43, + 0x3e1348, + 0x2253c5, + 0x267d03, + 0x3872c5, + 0x387404, + 0x3bad86, + 0x22a386, + 0x22b046, + 0x2580c4, + 0x23e103, + 0x2da15282, + 0x2de3d545, + 0x200843, + 0x2e603e82, + 0x23a543, + 0x3ca805, + 0x2ea22bc3, + 0x2f23c589, + 0x2f600942, + 0x2fe05342, + 0x2973c5, + 0x21f406, + 0x2b2986, + 0x308cc8, + 0x308ccb, + 0x346d8b, + 0x35b445, + 0x2dcf09, + 0x1600b42, + 0x2d2908, + 0x20f144, + 0x30602bc2, + 0x33e203, + 0x30e4bfc6, + 0x31200fc2, + 0x20ae88, + 0x31613242, + 0x37aa4a, + 0x32239383, + 0x32b77546, + 0x318348, + 0x38db06, + 0x389c87, + 0x24d887, + 0x20724a, + 0x246fc4, + 0x360c84, + 0x376889, + 0x32fb3a05, + 0x2163c6, + 0x20bb43, + 0x263284, + 0x33232d44, + 0x32d187, + 0x3365e987, + 0x2edb44, + 0x250145, + 0x241cc8, + 0x250387, + 0x250607, + 0x33a18242, + 0x2a2704, + 0x29e388, + 0x251b04, + 0x254744, + 0x254b05, + 0x254c47, + 0x3468b8c9, + 0x2555c4, + 0x256b09, + 0x256d48, + 0x257604, + 0x257607, + 0x257d03, + 0x259ac7, + 0x34a01282, + 0x16c0502, + 0x25b506, + 0x25bb47, + 0x25c404, + 0x25e347, + 0x25f247, 0x25fc83, - 0x27ccc8, - 0x35d1c9, - 0x220f47, - 0x79b7b845, - 0x39d086, - 0x3a7d46, - 0x3ac645, - 0x2ee345, - 0x79e06242, - 0x28db85, - 0x2c4b48, - 0x2d1686, - 0x7a22aa87, - 0x2d1ec4, - 0x2d1447, - 0x30d006, - 0x7a603c02, - 0x39d206, - 0x311cca, - 0x312545, - 0x7aa30ac2, - 0x7ae92ec2, - 0x36c7c6, - 0x7b292ec7, - 0x7b60d982, - 0x242c83, - 0x3c75c6, - 0x2d0744, - 0x33ec86, - 0x24eac6, - 0x20290a, - 0x359945, - 0x35c986, - 0x38a183, - 0x38a184, - 0x7ba1cc42, - 0x28f183, - 0x7be1e202, - 0x2fccc3, - 0x7c215504, - 0x20de04, - 0x7c60de0a, - 0x219243, - 0x239747, - 0x315146, - 0x3670c4, - 0x281142, - 0x2ac982, - 0x7ca007c2, - 0x22b3c3, - 0x255b47, - 0x2007c7, - 0x28e544, - 0x3e2587, - 0x2fbe46, - 0x20f307, - 0x30bdc4, - 0x2e5d45, - 0x218ac5, - 0x7ce05682, - 0x216f86, - 0x227043, - 0x227ec2, - 0x227ec6, - 0x7d21c882, - 0x7d62dc42, - 0x238f85, - 0x7da03d02, - 0x7de02a82, - 0x353545, - 0x2d9845, - 0x2af105, - 0x7e65aa03, - 0x279185, - 0x2f0bc7, - 0x2b7945, - 0x359b05, - 0x268b84, - 0x266cc6, - 0x3944c4, - 0x7ea008c2, - 0x7f798885, - 0x3d0907, - 0x3a09c8, - 0x269f86, - 0x269f8d, - 0x26f7c9, - 0x26f7d2, - 0x34d185, - 0x380843, - 0x7fa03b42, - 0x31f9c4, - 0x22db83, - 0x393e85, - 0x313785, - 0x7fe1fcc2, - 0x259fc3, - 0x8022b302, - 0x80a1cac2, - 0x80e00082, - 0x2ec2c5, - 0x213fc3, - 0x81208f02, - 0x81604642, - 0x3c1706, - 0x27e1ca, - 0x20c6c3, - 0x257c83, - 0x2f7343, - 0x832072c2, - 0x9161f702, - 0x91e07ac2, - 0x2034c2, - 0x3d3d09, - 0x2d4584, - 0x2e1c88, - 0x92305102, - 0x92a01502, - 0x2c2285, - 0x234e88, - 0x2f65c8, - 0x2fb70c, - 0x239683, - 0x92e13f42, - 0x9320e482, - 0x2bce06, - 0x315fc5, - 0x2e5583, - 0x247cc6, - 0x316106, - 0x253383, - 0x317803, - 0x317c46, - 0x319484, - 0x26aa06, - 0x236444, - 0x319b44, - 0x31ad0a, - 0x936bb102, - 0x24e605, - 0x31c58a, - 0x31c4c5, - 0x31e504, - 0x31e606, - 0x31e784, - 0x216d06, - 0x93a03c42, - 0x2ecf86, - 0x358f85, - 0x35c807, - 0x3c7386, - 0x253d84, - 0x2e5807, - 0x21dfc5, - 0x21dfc7, - 0x3c3a87, - 0x3c3a8e, - 0x280bc6, - 0x2bda05, - 0x20aa47, - 0x20e243, - 0x20e247, + 0x34e5c082, + 0x239fc2, + 0x260743, + 0x260744, + 0x26074b, + 0x32b888, + 0x2891c4, + 0x2618c5, + 0x262fc7, + 0x2ee845, + 0x3b930a, + 0x266b03, + 0x3520eb02, + 0x21dc84, + 0x26b6c9, + 0x26f443, + 0x26f507, + 0x384989, + 0x211fc8, + 0x213bc3, + 0x286bc7, + 0x288f89, + 0x276a83, + 0x290984, + 0x291d49, + 0x2951c6, + 0x3825c3, + 0x204982, + 0x268803, + 0x2c0307, + 0x38f005, + 0x2c4c46, + 0x219a44, + 0x372285, + 0x289e43, + 0x21abc6, + 0x22e143, + 0x20c342, + 0x253c04, + 0x35634402, + 0x35a34403, + 0x35e04342, + 0x253283, + 0x21a604, + 0x323c87, + 0x21fb46, + 0x290942, + 0x3620e8c2, + 0x32c684, + 0x36a17a42, + 0x36e09ac2, + 0x3caac4, + 0x3caac5, + 0x3b6b85, + 0x37d146, + 0x37207042, + 0x207045, + 0x20f745, + 0x213dc3, + 0x2267c6, + 0x227105, + 0x2305c2, + 0x35ac85, + 0x2305c4, + 0x233c43, + 0x233e83, + 0x3760a302, + 0x2318c7, + 0x257784, + 0x257789, + 0x263184, + 0x290343, + 0x2bd008, + 0x37a90344, + 0x290346, + 0x2b05c3, + 0x262243, + 0x343b43, + 0x37f03e02, + 0x30ad42, + 0x38200642, + 0x33bfc8, + 0x2158c8, + 0x3bfcc6, + 0x385145, + 0x323e05, + 0x202347, + 0x386823c5, + 0x2038c2, + 0x38aa0a82, + 0x38e00042, + 0x2832c8, + 0x2b65c5, + 0x302f84, + 0x250d45, + 0x2514c7, + 0x3b0184, + 0x24d202, + 0x3923b502, + 0x350984, + 0x22fec7, + 0x297b47, + 0x38bec4, + 0x3d7403, + 0x2b3784, + 0x2b3788, + 0x239c86, + 0x25ed8a, + 0x358e44, + 0x29ddc8, + 0x24ffc4, + 0x22ba86, + 0x2a0a44, + 0x354586, + 0x257a49, + 0x221247, + 0x39d543, + 0x39605102, + 0x386d03, + 0x210f82, + 0x39a027c2, + 0x268f86, + 0x3b2848, + 0x2b2b07, + 0x2331c9, + 0x2b2cc9, + 0x2b5585, + 0x2b6f09, + 0x2b7705, + 0x2b8545, + 0x2b94c8, + 0x39e17a84, + 0x3a25fdc7, + 0x2b96c3, + 0x2b96c7, + 0x3e0786, + 0x2b9c87, + 0x2af945, + 0x2d0843, + 0x3a63b342, + 0x214184, + 0x3aa11402, + 0x3ae1ec82, + 0x31e946, + 0x27b545, + 0x2bbd87, + 0x3c32c3, + 0x20ccc4, + 0x21e103, + 0x2f6883, + 0x3b2042c2, + 0x3ba08e82, + 0x38e984, + 0x25c043, + 0x308985, + 0x3be05502, + 0x3c602102, + 0x222f86, + 0x2e9484, + 0x2f0284, + 0x2f028a, + 0x3ce005c2, + 0x20e103, + 0x23498a, + 0x26a7c8, + 0x3d2b1b84, + 0x2005c3, + 0x3d687643, + 0x326909, + 0x280609, + 0x2c73c6, + 0x3da43543, + 0x2887cd, + 0x3a8e86, + 0x3e0e8b, + 0x3de087c2, + 0x2ac948, + 0x42221082, + 0x42601e02, + 0x398285, + 0x42a02642, + 0x2b3187, + 0x202983, + 0x2272c8, + 0x42e06002, + 0x3a9984, + 0x22a003, + 0x3532c5, + 0x2491c6, + 0x22cf04, + 0x230183, + 0x44205b42, + 0x35b3c4, + 0x2beb45, + 0x2bff07, + 0x285203, + 0x2c1443, + 0x1619e82, + 0x2c1b03, + 0x2c2103, + 0x44600e02, + 0x239104, + 0x23e306, + 0x288d83, + 0x2c2a83, + 0x44a54202, + 0x254208, + 0x2c3a04, + 0x2052c6, + 0x387d07, + 0x3d4dc6, + 0x2c0544, + 0x52e025c2, + 0x3e064b, + 0x30624e, + 0x2201cf, + 0x3bc5c3, + 0x536687c2, + 0x161ee02, + 0x53a01f42, + 0x2f9843, + 0x20b603, + 0x2732c6, + 0x2cb846, + 0x2bc847, + 0x3b7004, + 0x53e1f542, + 0x542258c2, + 0x302645, + 0x32a647, + 0x2c6106, + 0x5463d782, + 0x382f04, + 0x2cc083, + 0x54a07bc2, + 0x54f73803, + 0x2cd984, + 0x2d2249, + 0x552da042, + 0x55611b82, + 0x2876c5, + 0x55ada802, + 0x56205542, + 0x35fb87, + 0x37718b, + 0x24d645, + 0x264489, + 0x275d46, + 0x56608004, + 0x208009, + 0x2f9cc7, + 0x349887, + 0x205543, + 0x2f1a46, + 0x351887, + 0x24c243, + 0x2a4106, + 0x56e1f002, + 0x57225e82, + 0x217443, + 0x3a5145, + 0x21c307, + 0x23f286, + 0x38ef85, + 0x263104, + 0x2aee85, + 0x390bc4, + 0x5760b402, + 0x2d8d84, + 0x2cbe44, + 0x39c84d, + 0x2cbe49, + 0x237848, + 0x262c84, + 0x38d345, + 0x3c2307, + 0x3c2bc4, + 0x273847, 0x228f05, - 0x22bfc4, - 0x368842, - 0x32a1c7, - 0x241184, - 0x32a684, - 0x3ab1cb, - 0x21ab83, - 0x2dd0c7, - 0x21ab84, - 0x2dd3c7, - 0x3ae243, - 0x34f8cd, - 0x3aa588, - 0x93e45f84, - 0x366dc5, - 0x31f345, - 0x31f783, - 0x94223d42, - 0x322283, - 0x322b03, - 0x217104, - 0x283c85, - 0x224e87, - 0x38a206, - 0x393c43, - 0x22ad4b, - 0x322c8b, - 0x283d8b, - 0x2b32cb, - 0x2c718a, - 0x2d184b, - 0x2f1b4b, - 0x35ab4c, - 0x319f4b, - 0x374b91, - 0x39ad0a, - 0x3b794b, - 0x3c694c, - 0x3df28b, - 0x3256ca, - 0x325bca, - 0x326a4e, - 0x3271cb, - 0x32748a, - 0x328a51, - 0x328e8a, - 0x32938b, - 0x3298ce, - 0x32b70c, - 0x32c34b, - 0x32c60e, - 0x32c98c, - 0x32d6ca, - 0x32ee8c, - 0x9472f18a, - 0x32fd88, - 0x330949, - 0x33308a, - 0x33330a, - 0x33358b, - 0x3368ce, - 0x337751, - 0x341dc9, - 0x34200a, - 0x342b4b, - 0x34348d, - 0x34430a, - 0x3455d6, - 0x34694b, - 0x349e0a, - 0x34a38a, - 0x34b28b, - 0x34cc09, - 0x350249, - 0x3507cd, - 0x3510cb, - 0x352bcb, - 0x353689, - 0x353cce, - 0x35410a, - 0x35a04a, - 0x35a7ca, - 0x35b18b, - 0x35b9cb, - 0x35e2cd, - 0x35fa0d, - 0x360310, - 0x3607cb, - 0x36210c, - 0x36288b, - 0x36494b, - 0x36614e, - 0x36660b, - 0x36660d, - 0x36d70b, - 0x36e18f, - 0x36e54b, - 0x36f50a, - 0x36fb09, - 0x370089, - 0x94b7040b, - 0x3706ce, - 0x370a4e, - 0x3726cb, - 0x37374f, - 0x375fcb, - 0x37628b, - 0x37654a, - 0x37af49, - 0x37fa0f, - 0x3841cc, - 0x384bcc, - 0x385ece, - 0x38644f, - 0x38680e, - 0x3871d0, - 0x3875cf, - 0x3883ce, - 0x388f0c, - 0x389211, - 0x389652, - 0x38b3d1, - 0x38be8e, - 0x38c2cb, - 0x38c2ce, - 0x38c64f, - 0x38ca0e, - 0x38cd93, - 0x38d251, - 0x38d68c, - 0x38d98e, - 0x38de0c, - 0x38e353, - 0x38f1d0, - 0x3902cc, - 0x3905cc, - 0x390a8b, - 0x391bce, - 0x3920cb, - 0x392e4b, - 0x39418c, - 0x399a4a, - 0x39a50c, - 0x39a80c, - 0x39ab09, - 0x39d68b, - 0x39d948, - 0x39e649, - 0x39e64f, - 0x39ff0b, - 0x94fa0bca, - 0x3a268c, - 0x3a364b, - 0x3a3909, - 0x3a3cc8, - 0x3a458b, - 0x3a688a, - 0x3a6b0b, - 0x3a700c, - 0x3a77c9, - 0x3a7a08, - 0x3ab48b, - 0x3aeb8b, - 0x3b0d0e, - 0x3b244b, - 0x3b72cb, - 0x3c360b, - 0x3c38c9, - 0x3c3e0d, - 0x3d148a, - 0x3d4917, - 0x3d5618, - 0x3d8989, - 0x3d9ccb, - 0x3daad4, - 0x3dafcb, - 0x3db54a, - 0x3dbc0a, - 0x3dbe8b, - 0x3dd190, - 0x3dd591, - 0x3ddc4a, - 0x3de88d, - 0x3def8d, - 0x3e104b, - 0x217083, - 0x953b3583, - 0x2b0f46, - 0x27ca85, - 0x29c647, - 0x384906, - 0x1602342, - 0x2b3609, - 0x32fa04, - 0x2efcc8, - 0x21b783, - 0x31f907, - 0x230902, - 0x2b8f03, - 0x95603602, - 0x2d8d06, - 0x2da3c4, - 0x377084, - 0x201c43, - 0x95ed56c2, - 0x9622c344, - 0x34c287, - 0x9662bf82, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x106b48, - 0x205803, - 0x2000c2, - 0xae888, - 0x212402, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, - 0x208503, - 0x33cb96, - 0x36c093, - 0x3e2409, - 0x215d88, - 0x2c1389, - 0x31c706, - 0x3520d0, - 0x212113, - 0x2f6c08, - 0x282247, - 0x28d487, - 0x2aaa8a, - 0x36a609, - 0x3573c9, - 0x24cd4b, - 0x34b706, - 0x32ce4a, - 0x221106, - 0x32f603, - 0x2e4d05, - 0x20f4c8, - 0x28598d, - 0x2f45cc, - 0x3033c7, - 0x30e60d, - 0x215e84, - 0x2319ca, - 0x23248a, - 0x23294a, - 0x212407, - 0x23ce87, - 0x2410c4, - 0x269c06, - 0x35d584, - 0x305988, - 0x3c0509, - 0x2e9f06, - 0x2e9f08, - 0x24400d, - 0x2d8489, - 0x397c88, - 0x243b47, - 0x33230a, - 0x251186, - 0x2ff544, - 0x225c07, - 0x266a8a, - 0x23fb8e, - 0x246145, - 0x3dd98b, - 0x22b109, - 0x247109, - 0x205447, - 0x20544a, - 0x2ceac7, - 0x301949, - 0x347c88, - 0x33284b, - 0x2ee705, - 0x22c90a, - 0x265dc9, - 0x3568ca, - 0x21b8cb, - 0x225b0b, - 0x24cad5, - 0x2ce085, - 0x243bc5, - 0x237e8a, - 0x2527ca, - 0x321a07, - 0x234fc3, - 0x2c8a08, - 0x2e32ca, - 0x223e46, - 0x256689, - 0x28dc88, - 0x2e5144, - 0x38e109, - 0x2cf888, - 0x2d05c7, - 0x398886, - 0x3d0907, - 0x2c51c7, - 0x2401c5, - 0x245f8c, - 0x366dc5, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x5803, - 0x23e083, - 0x212402, - 0x22ea43, - 0x217fc3, - 0x205803, - 0x23e083, - 0x22ea43, - 0x217fc3, - 0x5803, - 0x269543, - 0x23e083, - 0x1d1843, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, - 0xae888, - 0x212402, - 0x22ea43, - 0x22ea47, - 0x8ecc4, - 0x217fc3, - 0x1b5c04, - 0x23e083, - 0x212402, - 0x204542, - 0x2f6e82, - 0x2022c2, - 0x202582, - 0x2f2402, - 0x96206, - 0x51709, - 0xe9bc7, - 0x481a6c3, - 0x8e8c7, - 0x154546, - 0xaa43, - 0x11eec5, - 0xc1, - 0x522ea43, - 0x233fc3, - 0x280203, - 0x266a83, - 0x2191c3, - 0x23cb03, - 0x2e4c06, - 0x217fc3, - 0x23e083, - 0x234f43, - 0xae888, - 0x3b46c4, - 0x324547, + 0x57ab4484, + 0x2c5b45, + 0x26e104, + 0x316546, + 0x3b6005, + 0x57e6b2c2, + 0x225e43, + 0x333e43, + 0x2c8784, + 0x2c8785, + 0x208c86, + 0x235585, + 0x263944, + 0x58392e03, + 0x587d1a86, + 0x219405, + 0x21b385, + 0x3b6104, + 0x2f93c3, + 0x358ecc, + 0x58ac0002, + 0x58e00e82, + 0x59209d42, + 0x21b283, + 0x21b284, + 0x59610442, + 0x308108, + 0x2c4d05, + 0x2dafc4, + 0x359186, + 0x59a205c2, + 0x59e109c2, + 0x5a200c42, + 0x2a3c05, + 0x354806, + 0x232c84, + 0x236346, + 0x213186, + 0x25aa03, + 0x5a694b4a, + 0x2853c5, + 0x29b583, + 0x20f546, + 0x5aa0f549, + 0x22c4c7, + 0x3c8c08, + 0x3ce749, + 0x2b6048, + 0x209146, + 0x207cc3, + 0x5af1de42, + 0x32bd88, + 0x5b256e02, + 0x5b601582, + 0x233243, + 0x2efe85, + 0x280f44, + 0x3e27c9, + 0x386e04, + 0x38d188, + 0x5be10fc3, + 0x5c3a2ac4, + 0x21f448, + 0x5c70df02, + 0x2cf1c2, + 0x330cc5, + 0x34af09, + 0x216443, + 0x31b884, + 0x36e504, + 0x20b683, + 0x28bf8a, + 0x5cb0f082, + 0x5ce13fc2, + 0x2dc903, + 0x3939c3, + 0x1609382, + 0x35c243, + 0x5d228882, + 0x5d600bc2, + 0x5da8d4c4, + 0x28d4c6, + 0x276e84, + 0x283103, + 0x28f583, + 0x5de00bc3, + 0x248e46, + 0x3de805, + 0x2e0947, + 0x2e0886, + 0x2e0e48, + 0x2e1046, + 0x2239c4, + 0x2a6a8b, + 0x2e30c3, + 0x2e30c5, + 0x2165c2, + 0x35fe82, + 0x5e24f102, + 0x5e603742, + 0x20a083, + 0x5ea77782, + 0x277783, + 0x2e4103, + 0x5f2093c2, + 0x5f6e8306, + 0x35e3c6, + 0x5fae8442, + 0x5fe12202, + 0x60233ec2, + 0x60ea9542, + 0x61345342, + 0x61602802, + 0x20b0c3, + 0x3da086, + 0x61a1b544, + 0x2b130a, + 0x3b1d46, + 0x285084, + 0x202703, + 0x62606c02, + 0x204cc2, + 0x26f843, + 0x62a296c3, + 0x3c5847, + 0x3b5f07, + 0x67e60847, + 0x341607, + 0x232403, + 0x23240a, + 0x257204, + 0x31e544, + 0x31e54a, + 0x24a905, + 0x6823a382, + 0x2583c3, + 0x68600602, + 0x257743, + 0x386cc3, + 0x68e00582, + 0x283984, + 0x202544, + 0x2032c5, + 0x3301c5, + 0x236e86, + 0x2fb4c6, + 0x6924ba82, + 0x69601cc2, + 0x2f97c5, + 0x35e0d2, + 0x298a06, + 0x291c43, + 0x2b4ac6, + 0x2cf8c5, + 0x1603442, + 0x71a056c2, + 0x341143, + 0x212bc3, + 0x29c403, + 0x71e01102, + 0x21e803, + 0x7222d4c2, + 0x201d03, + 0x3b1008, + 0x241c43, + 0x2b5406, + 0x3e3047, + 0x34dbc6, + 0x34dbcb, + 0x284fc7, + 0x33ee44, + 0x72a00c02, + 0x2c4b85, + 0x72e2f483, + 0x23b843, + 0x39fd45, + 0x348ec3, + 0x73748ec6, + 0x3e514a, + 0x2ade43, + 0x213a04, + 0x2003c6, + 0x327f06, + 0x73a0cb83, + 0x20cb87, + 0x326807, + 0x2a8485, + 0x239706, + 0x217303, + 0x76626a03, + 0x76a00a82, + 0x76ec8044, + 0x2114c9, + 0x22f7c5, + 0x361cc4, + 0x31e288, + 0x24ac45, + 0x7724ccc5, + 0x255849, + 0x32e683, + 0x23d7c4, + 0x77608402, + 0x21f783, + 0x77a96dc2, + 0x296dc6, + 0x169a902, + 0x77e15982, + 0x2a3b08, + 0x2b3743, + 0x2c5a87, + 0x2c1b85, + 0x2c5645, + 0x34de4b, + 0x2f17c6, + 0x34e046, + 0x277304, + 0x219d06, + 0x782f1e48, + 0x28e543, + 0x265043, + 0x265044, + 0x2fa884, + 0x309447, + 0x3da945, + 0x786f8842, + 0x78a059c2, + 0x792059c5, + 0x2ca784, + 0x2fa9cb, + 0x2fd488, + 0x24bd04, + 0x796376c2, + 0x79a06bc2, + 0x206bc3, + 0x2ff644, + 0x2ff905, + 0x300487, + 0x79f02ac4, + 0x38bfc4, + 0x7a2037c2, + 0x37e5c9, + 0x303fc5, + 0x24d905, + 0x304b45, + 0x7a61f6c3, + 0x240644, + 0x24064b, + 0x305b04, + 0x305dcb, + 0x306745, + 0x22030a, + 0x307108, + 0x30730a, + 0x307b83, + 0x307b8a, + 0x7ae1a782, + 0x7b24cec2, + 0x7b604683, + 0x7bad3b02, + 0x309ec3, + 0x7bef57c2, + 0x7c33a842, + 0x30a904, + 0x2210c6, + 0x236085, + 0x30ccc3, + 0x3ce106, + 0x219045, + 0x35a504, + 0x7c600902, + 0x2b4004, + 0x2dcb8a, + 0x2c3687, + 0x349246, + 0x25d607, + 0x248783, + 0x2cd9c8, + 0x3e7ccb, + 0x221e45, + 0x36e645, + 0x36e646, + 0x2f8384, + 0x3df448, + 0x205703, + 0x2075c4, + 0x2075c7, + 0x33ea86, + 0x3a2e06, + 0x2ccdca, + 0x256b84, + 0x2c244a, + 0x7ca08dc6, + 0x208dc7, + 0x261947, + 0x266584, + 0x266589, + 0x336705, + 0x2f9c43, + 0x22a543, + 0x7ce264c3, + 0x23a044, + 0x7d200682, + 0x3d8986, + 0x7d6d05c5, + 0x2b4d05, + 0x25b746, + 0x31d704, + 0x7da12742, + 0x24b2c4, + 0x7de04a02, + 0x20c2c5, + 0x336884, + 0x7f22ccc3, + 0x7f609742, + 0x209743, + 0x21e946, + 0x7fa01ec2, + 0x397488, + 0x22c344, + 0x22c346, + 0x394246, + 0x7fe63084, + 0x21a7c5, + 0x22ef08, + 0x231dc7, + 0x326fc7, + 0x326fcf, + 0x29e286, + 0x23cc03, + 0x241684, + 0x20f843, + 0x22bbc4, + 0x252e44, + 0x80207f02, + 0x3747c3, + 0x337cc3, + 0x80602b02, + 0x204143, + 0x37d083, + 0x21878a, + 0x27eb47, + 0x258ecc, + 0x80a59186, + 0x25abc6, + 0x25bcc7, + 0x80e38747, + 0x262389, + 0x812fc684, + 0x8160a0c2, + 0x81a01702, + 0x2cd186, + 0x20c984, + 0x39e1c6, + 0x267ec8, + 0x3a5204, + 0x2f8ec6, + 0x2b2945, + 0x81e7c4c8, + 0x24c743, + 0x28a485, + 0x35d1c3, + 0x24da03, + 0x24da04, + 0x21dc43, + 0x82254642, + 0x826014c2, + 0x2f9b09, + 0x296cc5, + 0x3d4744, + 0x3e5745, + 0x20f244, + 0x37b3c7, + 0x338685, + 0x82ed1984, + 0x2d1988, + 0x2dd986, + 0x2e1dc4, + 0x2e1fc8, + 0x83204ac2, + 0x2f0d84, + 0x20f904, + 0x2d38c7, + 0x83605fc4, + 0x2171c2, + 0x83a0b5c2, + 0x20b5c3, + 0x2875c4, + 0x2512c3, + 0x2ba385, + 0x83e35542, + 0x30ac45, + 0x279c42, + 0x311f85, + 0x2db805, + 0x842010c2, + 0x332f04, + 0x84602d82, + 0x30dd46, + 0x2192c6, + 0x34b048, + 0x2d49c8, + 0x31e8c4, + 0x301805, + 0x2c0d09, + 0x2d2a44, + 0x3e5104, + 0x21f203, + 0x207383, + 0x84a07385, + 0x26fac5, + 0x269544, + 0x337d4d, + 0x352902, + 0x352903, + 0x84e04102, + 0x85200ec2, + 0x396f45, + 0x354c47, + 0x22d144, + 0x3ce949, + 0x2dccc9, + 0x282303, + 0x282308, + 0x246809, + 0x227d47, + 0x85755b45, + 0x3615c6, + 0x362786, + 0x365cc5, + 0x2cbf45, + 0x85a01c42, + 0x2930c5, + 0x2c9448, + 0x2d6a06, + 0x85ed7247, + 0x306984, + 0x2b9ac7, + 0x3b9106, + 0x8624b302, + 0x208986, + 0x31160a, + 0x311e85, + 0x86615a82, + 0x86a14442, + 0x278b86, + 0x86e97d07, + 0x8720c4c2, + 0x20a803, + 0x2250c6, + 0x2d5884, + 0x27ac86, + 0x32fa86, + 0x3a32ca, + 0x32e805, + 0x30d8c6, + 0x36c343, + 0x36c344, + 0x87603bc2, + 0x321303, + 0x87a1b2c2, + 0x31fec3, + 0x87e34c04, + 0x2d8284, + 0x883e380a, + 0x209203, + 0x326ac7, + 0x315106, + 0x38fa84, + 0x236d42, + 0x2b0982, + 0x886007c2, + 0x232a43, + 0x261707, + 0x2007c7, + 0x292704, + 0x258d47, + 0x300586, + 0x20ba87, + 0x230744, + 0x2b61c5, + 0x221c45, + 0x88a0d782, + 0x219e46, + 0x230bc3, + 0x29d6c2, + 0x2fc146, + 0x88e12682, + 0x89213402, + 0x213405, + 0x8962bdc2, + 0x89a02a02, + 0x351e45, + 0x2e3405, + 0x30a705, + 0x8a268b83, + 0x285845, + 0x2f1887, + 0x2b9385, + 0x32e9c5, + 0x257104, + 0x361b46, + 0x24e044, + 0x8a6008c2, + 0x8b2510c5, + 0x3967c7, + 0x213c08, + 0x27d046, + 0x27d04d, + 0x2803c9, + 0x2803d2, + 0x37e8c5, + 0x383403, + 0x8b6091c2, + 0x32f684, + 0x3a8f03, + 0x3d64c5, + 0x3136c5, + 0x8ba2a042, + 0x267d43, + 0x8be32982, + 0x8c629742, + 0x8ca00082, + 0x2ead45, + 0x39d643, + 0x8ce04942, + 0x8d206502, + 0x283946, + 0x2484ca, 0x201c83, - 0x39e284, - 0x2052c3, - 0x2054c3, - 0x266a83, - 0x178d87, - 0x9c4, - 0x157bc3, - 0x2105, - 0x66000c2, - 0x4ac43, - 0x6a12402, - 0x6e8b749, - 0x7091e09, - 0x923cd, - 0x9270d, - 0x2f6e82, - 0xe704, - 0x2149, - 0x2003c2, - 0x7623188, - 0x100ac4, - 0x320c03, - 0xae888, - 0x41184, - 0x140ea82, - 0x14005c2, - 0x140ea82, - 0x1519d46, - 0x230983, - 0x276243, - 0x7e2ea43, - 0x2319c4, - 0x8233fc3, - 0x8a66a83, - 0x209582, - 0x20e704, - 0x217fc3, - 0x3319c3, - 0x209282, - 0x23e083, - 0x2188c2, - 0x308483, - 0x207742, - 0x203b83, - 0x222403, - 0x207d02, - 0xae888, - 0x230983, - 0x210448, - 0x87319c3, - 0x209282, - 0x308483, - 0x207742, - 0x203b83, - 0x222403, - 0x207d02, - 0x2509c7, - 0x308483, - 0x207742, - 0x203b83, - 0x222403, - 0x207d02, - 0x22ea43, - 0x6c02, - 0xf4c3, - 0x31c2, - 0x293c2, - 0x4d82, - 0x8c82, - 0x72c2, - 0x43d42, - 0x24ac43, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x2191c3, - 0x23cb03, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x201b02, - 0x216983, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x24ac43, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x217fc3, - 0x23e083, - 0x37b845, - 0x21fcc2, + 0x2638c3, + 0x2f2d43, + 0x8ee04a42, + 0x9d666342, + 0x9de0e002, + 0x205002, + 0x3d8109, + 0x2d9444, + 0x2e5488, + 0x9e308542, + 0x9ea017c2, + 0x393285, + 0x23d208, + 0x2f8088, + 0x30500c, + 0x241403, + 0x9ee6dac2, + 0x9f208e42, + 0x39dbc6, + 0x315f85, + 0x2e8c43, + 0x24cb06, + 0x3160c6, + 0x251403, + 0x317703, + 0x317dc6, + 0x319884, + 0x2a2446, + 0x34cd04, + 0x319f44, + 0x31aa0a, + 0x9f603582, + 0x257e85, + 0x31bfca, + 0x31bf05, + 0x31ce84, + 0x31cf86, + 0x31d104, + 0x21fa46, + 0x9fa16ec2, + 0x216ec6, + 0x271385, + 0x30d747, + 0x3c1346, + 0x25bec4, + 0x2e8ec7, + 0x2089c5, + 0x242c07, + 0x228947, + 0x22894e, + 0x2849c6, + 0x2b6dc5, + 0x205f07, + 0x3c3947, + 0x212d85, + 0x229b84, + 0x3235c2, + 0x23d887, + 0x249e04, + 0x35a784, + 0x2cf04b, + 0x9fe246c3, + 0x301387, + 0x2246c4, + 0x301687, + 0x310883, + 0x34e54d, + 0x3ad188, + 0xa0233984, + 0x3e16c5, + 0x31f985, + 0x31fdc3, + 0xa0608f02, + 0x3212c3, + 0x321a83, + 0x215ac4, + 0x289085, + 0x219fc7, + 0x36c3c6, + 0x390a43, + 0x233f0b, + 0x35be8b, + 0x2b504b, + 0x2cae8b, + 0x3991ca, + 0x2d6bcb, + 0x2f228b, + 0x32178c, + 0x31a34b, + 0x370491, + 0x398e4a, + 0x3b8a4b, + 0x3c95cc, + 0x3e6f4b, + 0x3230ca, + 0x323f4a, + 0x324dce, + 0x325a4b, + 0x325d0a, + 0x328911, + 0x328d4a, + 0x32924b, + 0x32978e, + 0x32a14c, + 0x32ae8b, + 0x32b14e, + 0x32b4cc, + 0x32ef0a, + 0x33068c, + 0xa0b3098a, + 0x331288, + 0x331e49, + 0x3348ca, + 0x334b4a, + 0x334dcb, + 0x33744e, + 0x338091, + 0x341cc9, + 0x341f0a, + 0x342c8b, + 0x343dcd, + 0x344c4a, + 0x345616, + 0x34698b, + 0x34844a, + 0x34888a, + 0x34a48b, + 0x34b2c9, + 0x34eec9, + 0x34f44d, + 0x34fc0b, + 0x3514cb, + 0x351f89, + 0x3525ce, + 0x3529ca, + 0x3550ca, + 0x35590a, + 0x3562cb, + 0x356b0b, + 0x35798d, + 0x359fcd, + 0x35a910, + 0x35adcb, + 0x35bacc, + 0x35cc8b, + 0x35f68b, + 0x3611ce, + 0x3617cb, + 0x3617cd, + 0x36740b, + 0x367e8f, + 0x36824b, + 0x36918a, + 0x369f49, + 0x36ab49, + 0xa0f6aecb, + 0x36b18e, + 0x36b50e, + 0x36e28b, + 0x36f04f, + 0x3718cb, + 0x371b8b, + 0x371e4a, + 0x376d89, + 0x37c74f, + 0x381d4c, + 0x38298c, + 0x3830ce, + 0x3835cf, + 0x38398e, + 0x383e10, + 0x38420f, + 0x384bce, + 0x38528c, + 0x385591, + 0x3859d2, + 0x387891, + 0x387ece, + 0x38830b, + 0x38830e, + 0x38868f, + 0x388a4e, + 0x388dd3, + 0x389291, + 0x3896cc, + 0x3899ce, + 0x389e4c, + 0x38a293, + 0x38af50, + 0x38b3cc, + 0x38b6cc, + 0x38bb8b, + 0x38e58e, + 0x38ea8b, + 0x38f2cb, + 0x39150c, + 0x3979ca, + 0x39864c, + 0x39894c, + 0x398c49, + 0x39ac8b, + 0x39af48, + 0x39b509, + 0x39b50f, + 0x39cf4b, + 0xa139e64a, + 0x3a3a0c, + 0x3a49cb, + 0x3a4c89, + 0x3a56c8, + 0x3a630b, + 0x3a810a, + 0x3a838b, + 0x3a9b0c, + 0x3aa649, + 0x3aa888, + 0x3ad7cb, + 0x3b0a4b, + 0x3b2e0e, + 0x3b494b, + 0x3b83cb, + 0x3c420b, + 0x3c44c9, + 0x3c488d, + 0x3d57ca, + 0x3d9857, + 0x3da218, + 0x3dc0c9, + 0x3de3cb, + 0x3df714, + 0x3dfc0b, + 0x3e018a, + 0x3e2a0a, + 0x3e2c8b, + 0x3e4810, + 0x3e4c11, + 0x3e5a4a, + 0x3e654d, + 0x3e6c4d, + 0x3e940b, + 0x219f43, + 0xa17b5883, + 0x3cc686, + 0x3df0c5, + 0x27a587, + 0x2ddec6, + 0x164bf82, + 0x2729c9, + 0x20c004, + 0x2f0788, + 0x226403, + 0x32f5c7, + 0x247f82, + 0x2bbdc3, + 0xa1a0e042, + 0x2dd846, + 0x2defc4, + 0x2c8404, + 0x3a0f43, + 0xa22da842, + 0xa262f444, + 0x2664c7, + 0xa2a35b02, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x117bc8, + 0x20d903, 0x2000c2, - 0xae888, - 0x1454408, - 0x7b64a, - 0x266a83, - 0x202881, + 0x793c8, + 0x216542, + 0x343b43, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x202b03, + 0x33d956, + 0x365753, + 0x258bc9, + 0x2b0e88, + 0x2c4a09, + 0x31c146, + 0x3509d0, + 0x218053, + 0x33eb48, + 0x285c87, + 0x2929c7, + 0x2aebca, + 0x363749, + 0x333bc9, + 0x25dd0b, + 0x34a906, + 0x32b98a, + 0x22ac46, + 0x238c43, + 0x231805, + 0x206c48, + 0x28b04d, + 0x35434c, + 0x271047, + 0x309f4d, + 0x22f004, + 0x23a30a, + 0x23b0ca, + 0x23b58a, + 0x218347, + 0x2461c7, + 0x249d44, + 0x279ec6, + 0x34abc4, + 0x222bc8, + 0x386e49, + 0x209a46, + 0x308cc8, + 0x24dd4d, + 0x2dcf09, + 0x318348, + 0x24d887, + 0x21364a, + 0x25bb46, + 0x34bbc4, + 0x2298c7, + 0x3d8b8a, + 0x242f8e, + 0x2823c5, + 0x29788b, + 0x232789, + 0x280609, + 0x20d547, + 0x20d54a, + 0x2d3807, + 0x306389, + 0x37b048, + 0x37948b, + 0x2efe85, + 0x23770a, + 0x233c89, + 0x33324a, + 0x22654b, + 0x2297cb, + 0x25da95, + 0x2f0c45, + 0x24d905, + 0x24064a, + 0x26ba4a, + 0x390f47, + 0x23d343, + 0x2cd108, + 0x2e640a, + 0x22c346, + 0x261289, + 0x27c4c8, + 0x2e1dc4, + 0x2512c9, + 0x2d49c8, + 0x2d5707, + 0x2510c6, + 0x3967c7, + 0x399b07, + 0x248c45, + 0x37500c, + 0x3e16c5, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x216542, + 0x216543, + 0x2296c3, + 0x20d903, + 0x20cb83, + 0x216543, + 0x2296c3, + 0xd903, + 0x241c43, + 0x20cb83, + 0x1d5b83, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x793c8, + 0x216542, + 0x216543, + 0x3a8607, + 0x17b1c4, + 0x2296c3, + 0xbbc4, + 0x20cb83, + 0x19045, + 0x216542, + 0x2104c2, + 0x31d0c2, + 0x206002, + 0x205c02, + 0x2160c2, + 0x9a6c6, + 0x5c549, + 0x182487, + 0x1550e, + 0x99049, + 0x482ccc3, + 0x95c87, + 0x152e06, + 0x1643, + 0x11e505, + 0xc1, + 0x5216543, + 0x222bc3, + 0x2f5503, + 0x343b43, + 0x243543, + 0x216443, + 0x2e8706, + 0x2296c3, + 0x20cb83, + 0x202883, + 0x793c8, + 0x209b84, + 0x3a2887, + 0x3a0f83, + 0x25e704, + 0x20d3c3, + 0x20d5c3, + 0x343b43, + 0xb46c7, + 0x9c4, + 0x12db83, + 0x10e645, + 0x66000c2, + 0x53c43, + 0x6a16542, + 0x6e90b89, + 0x7096ac9, + 0x96f4d, + 0x9728d, + 0x31d0c2, + 0xb1b84, + 0x10e689, + 0x2003c2, + 0x76b1a88, + 0x105504, + 0x320b43, + 0x793c8, + 0x49e04, + 0x1407242, + 0x14005c2, + 0x1407242, + 0x151a146, + 0x23bb83, + 0x2cc803, + 0x7e16543, + 0x23a304, + 0x8622bc3, + 0x8f43b43, + 0x2042c2, + 0x2b1b84, + 0x2296c3, + 0x38c643, + 0x203c82, + 0x20cb83, + 0x221a42, + 0x30a303, + 0x201ec2, + 0x26a603, + 0x220b03, + 0x2089c2, + 0x793c8, + 0x82fdcc9, + 0x27b43, + 0x23bb83, + 0x20b2c8, + 0x8b8c643, + 0x203c82, + 0x30a303, + 0x201ec2, + 0x26a603, + 0x220b03, + 0x2089c2, + 0x259187, + 0x30a303, + 0x201ec2, + 0x26a603, + 0x220b03, + 0x2089c2, + 0x216543, + 0x4702, + 0x6c43, + 0x2bc2, + 0x13242, + 0xe8c2, + 0x11de42, + 0x4a42, + 0x4da82, + 0x253c43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x243543, + 0x216443, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x204642, + 0x21f6c3, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x8503, + 0x2d4c2, + 0x253c43, + 0x216542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x2296c3, + 0x20cb83, + 0x355b45, + 0x22a042, + 0x2000c2, + 0x793c8, + 0xaec0ad2, + 0x1472588, + 0x1b2b8a, + 0x3ec5, + 0x343b43, + 0x230d41, 0x2009c1, 0x200a01, - 0x201781, - 0x202101, - 0x20bac1, - 0x201d01, - 0x203001, - 0x230d41, + 0x202c41, + 0x201b41, + 0x211101, + 0x209c01, + 0x230e41, + 0x2fd181, 0x200001, 0x2000c1, 0x200201, - 0x146bc5, - 0xae888, + 0x146c05, + 0x793c8, 0x200101, 0x201381, 0x200501, @@ -2344,7257 +2355,7413 @@ var nodes = [...]uint32{ 0x200581, 0x2003c1, 0x200a81, - 0x20c241, + 0x2210c1, 0x200401, 0x200741, 0x2007c1, 0x200081, - 0x201501, - 0x207d01, - 0x20a8c1, - 0x202341, - 0x201c41, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x212402, - 0x22ea43, - 0x233fc3, + 0x2017c1, + 0x201641, + 0x207281, + 0x2024c1, + 0x208481, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x216542, + 0x216543, + 0x222bc3, 0x2003c2, - 0x23e083, - 0x1a083, - 0x178d87, - 0x7f3c7, - 0x36fc6, - 0x3a8ca, - 0x91248, - 0x54d88, - 0x55a47, - 0x6e8c6, - 0xec7c5, - 0x1b5a05, - 0x129783, - 0x13a06, - 0x134c46, - 0x24cd44, - 0x334907, - 0xae888, - 0x2e5904, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x12402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x32f388, - 0x207d44, - 0x233f04, - 0x204cc4, - 0x2bcd07, - 0x2e21c7, - 0x22ea43, - 0x23670b, - 0x323dca, - 0x34b9c7, - 0x238548, - 0x354a88, - 0x233fc3, - 0x25e4c7, - 0x280203, - 0x211448, - 0x212e49, - 0x20e704, - 0x2191c3, - 0x23b948, - 0x23cb03, - 0x2dfb4a, - 0x2e4c06, - 0x3b0107, - 0x217fc3, - 0x323606, - 0x2760c8, - 0x23e083, - 0x257546, - 0x2f93cd, - 0x2fba08, - 0x3010cb, - 0x2b2946, - 0x341847, - 0x21ecc5, - 0x3da84a, - 0x22ac05, - 0x24fc8a, - 0x21fcc2, - 0x20aa43, - 0x32a684, + 0x20cb83, + 0x22a83, + 0xb46c7, + 0x1cdf07, + 0x32f46, + 0x4280a, + 0x95748, + 0x60c88, + 0x61607, + 0xbc3c4, + 0x15c246, + 0xeec85, + 0x10f7c5, + 0x129643, + 0x30846, + 0x13906, + 0x25dd04, + 0x336147, + 0x793c8, + 0x2e8fc4, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x16542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x330b88, + 0x202304, + 0x23c4c4, + 0x20e804, + 0x39dac7, + 0x2e59c7, + 0x216543, + 0x23ec8b, + 0x33100a, + 0x38f947, + 0x300288, + 0x353348, + 0x222bc3, + 0x3c2e87, + 0x2f5503, + 0x214fc8, + 0x224309, + 0x2b1b84, + 0x243543, + 0x244688, + 0x216443, + 0x2e320a, + 0x2e8706, + 0x3b1d47, + 0x2296c3, + 0x2f1b46, + 0x3d2288, + 0x20cb83, + 0x275546, + 0x2fd6cd, + 0x2ffe48, + 0x305b0b, + 0x223bc6, + 0x354b47, + 0x21d985, + 0x22e68a, + 0x2fce05, + 0x26f9ca, + 0x22a042, + 0x201643, + 0x35a784, 0x200006, - 0x3ba683, - 0x2ae783, - 0x281bc3, - 0x207d43, - 0x323a43, - 0x2029c2, - 0x309b85, - 0x2b07c9, - 0x201ac3, - 0x240843, - 0x233f03, - 0x232283, + 0x3bb603, + 0x2b4083, + 0x28bb03, + 0x202303, + 0x37a403, + 0x202002, + 0x39d805, + 0x2b5949, + 0x209983, + 0x2492c3, + 0x203b43, + 0x216c43, 0x200201, - 0x39b3c7, - 0x2ec005, - 0x3c2003, - 0x2a4d43, - 0x3dff03, - 0x204cc4, - 0x356e43, - 0x227608, - 0x322bc3, - 0x310c4d, - 0x280c88, - 0x210606, - 0x28f1c3, - 0x366903, - 0x394443, - 0xce2ea43, - 0x233808, - 0x236704, - 0x23d3c3, - 0x241283, + 0x2d2807, + 0x2eaa85, + 0x3c1fc3, + 0x26b383, + 0x3e9683, + 0x20e804, + 0x3c3303, + 0x2271c8, + 0x35bdc3, + 0x3e1ecd, + 0x284a88, + 0x20b486, + 0x2e9443, + 0x35a2c3, + 0x361ac3, + 0xda16543, + 0x23bdc8, + 0x23ec84, + 0x247203, + 0x249f03, 0x200106, - 0x244e88, - 0x20f983, - 0x21fa43, - 0x2b6ec3, - 0x222383, - 0x3da883, - 0x22f203, - 0x233fc3, - 0x22d003, - 0x249203, - 0x24cbc3, - 0x28b003, - 0x28f143, - 0x20a003, + 0x24e888, + 0x266943, + 0x228fc3, + 0x2ba1c3, + 0x220a83, + 0x22e6c3, + 0x23a543, + 0x222bc3, + 0x22d743, + 0x255ec3, + 0x209a43, + 0x290583, + 0x325243, + 0x20ae83, + 0x232d43, + 0x3a4e85, + 0x25c504, + 0x25dfc7, + 0x25c082, + 0x260183, + 0x263c46, 0x265743, - 0x392345, - 0x2516c4, - 0x252a47, - 0x2ba882, - 0x254b03, - 0x258106, - 0x259243, - 0x259c43, - 0x27cc83, - 0x26f183, - 0x20b183, - 0x3b43c3, - 0x29d847, - 0xd266a83, - 0x2c3fc3, - 0x28f203, - 0x204903, - 0x20e703, - 0x2ed2c3, - 0x20e905, - 0x37fd83, - 0x24b709, + 0x266c03, + 0x2822c3, + 0x35cb03, + 0x21fb43, + 0x32d103, + 0x2a1807, + 0xe743b43, + 0x2d3103, + 0x207c83, + 0x20e443, + 0x26a7c3, + 0x217203, + 0x3b5945, + 0x37cac3, + 0x252749, 0x2012c3, - 0x313a83, - 0xd63cb83, - 0x2d5e43, - 0x204d03, - 0x218bc8, - 0x2b0706, - 0x26ef46, - 0x2ba8c6, - 0x38f887, - 0x205e03, - 0x215f83, - 0x23cb03, - 0x291346, - 0x20e982, - 0x2b8a83, - 0x33b645, - 0x217fc3, - 0x31da07, - 0x1605803, - 0x2760c3, - 0x212483, - 0x232383, - 0x235fc3, - 0x23e083, - 0x21d506, - 0x3b5d46, - 0x380703, - 0x2fa583, - 0x216983, - 0x250983, - 0x317883, - 0x306d43, - 0x308843, - 0x3a0645, - 0x235403, - 0x3b2a86, - 0x221d43, - 0x27fc88, - 0x2201c3, - 0x2201c9, - 0x273288, - 0x221e48, - 0x225645, - 0x36000a, - 0x38e84a, - 0x22f98b, - 0x238108, - 0x294983, - 0x2f2a03, - 0x393d83, - 0x39fa83, - 0x316248, - 0x37a903, - 0x38a184, - 0x21cc42, - 0x20de03, - 0x260e03, + 0x3139c3, + 0xea53203, + 0x2daf43, + 0x20e843, + 0x214808, + 0x2b5886, + 0x35c8c6, + 0x2be186, + 0x267347, + 0x202143, + 0x233243, + 0x216443, + 0x295846, + 0x2165c2, + 0x2e69c3, + 0x33c405, + 0x2296c3, + 0x31c887, + 0x160d903, + 0x29ae43, + 0x2183c3, + 0x23c9c3, + 0x23b843, + 0x20cb83, + 0x21de86, + 0x202fc6, + 0x37db83, + 0x29a8c3, + 0x21f6c3, + 0x259143, + 0x317783, + 0x309603, + 0x30ac03, + 0x219045, + 0x24c343, + 0x250046, + 0x21b103, + 0x2f4f88, + 0x22a543, + 0x22a549, + 0x37ad08, + 0x220548, + 0x22eac5, + 0x38ac4a, + 0x3e08ca, + 0x3e110b, + 0x3e1ac8, + 0x2aa6c3, + 0x230143, + 0x390b83, + 0x2f34c3, + 0x312588, + 0x355303, + 0x36c344, + 0x203bc2, + 0x22e683, + 0x24c0c3, 0x2007c3, - 0x22dc43, - 0x27b143, - 0x234f43, - 0x21fcc2, - 0x22b8c3, - 0x239683, - 0x319ec3, - 0x31b744, - 0x32a684, - 0x21cb03, - 0xae888, + 0x3d8883, + 0x281003, + 0x202883, + 0x22a042, + 0x2d3703, + 0x241403, + 0x31a2c3, + 0x31b444, + 0x35a784, + 0x227083, + 0x793c8, + 0xdf1854c, + 0xe2ac245, + 0xbb705, 0x2000c2, 0x200ac2, - 0x2029c2, - 0x201802, + 0x202002, + 0x202cc2, 0x200202, - 0x205082, - 0x249382, - 0x2031c2, + 0x202402, + 0x250cc2, + 0x202bc2, 0x200382, 0x200c42, - 0x349242, - 0x20a942, - 0x2720c2, + 0x30df02, + 0x203742, + 0x277782, 0x200a82, - 0x2f2402, - 0x205b42, - 0x211c82, - 0x216982, - 0x206002, - 0x205502, + 0x2160c2, + 0x208402, + 0x219d02, + 0x2037c2, + 0x2cb042, + 0x205d42, 0x200682, - 0x2113c2, + 0x214f42, + 0x212742, 0x202b02, - 0x208502, - 0x202442, - 0x207142, - 0x202a82, + 0x201702, + 0x203782, + 0x202a02, 0xc2, 0xac2, - 0x29c2, - 0x1802, + 0x2002, + 0x2cc2, 0x202, - 0x5082, - 0x49382, - 0x31c2, + 0x2402, + 0x50cc2, + 0x2bc2, 0x382, 0xc42, - 0x149242, - 0xa942, - 0x720c2, + 0x10df02, + 0x3742, + 0x77782, 0xa82, - 0xf2402, - 0x5b42, - 0x11c82, - 0x16982, - 0x6002, - 0x5502, + 0x160c2, + 0x8402, + 0x19d02, + 0x37c2, + 0xcb042, + 0x5d42, 0x682, - 0x113c2, + 0x14f42, + 0x12742, 0x2b02, - 0x8502, - 0x2442, - 0x7142, - 0x2a82, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x83c2, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x12402, - 0x212402, - 0x23e083, - 0xee2ea43, - 0x266a83, - 0x23cb03, - 0x1c0443, - 0x230242, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x5803, - 0x1c0443, - 0x23e083, - 0x3602, + 0x1702, + 0x3782, + 0x2a02, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x1642, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x16542, + 0x216542, + 0x20cb83, + 0x10216543, + 0x343b43, + 0x216443, + 0xeb2c7, + 0x7ca83, + 0x2386c2, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x30103, + 0x2296c3, + 0xd903, + 0x7ca83, + 0x20cb83, + 0xe042, 0x2001c2, - 0x1567b85, - 0x146bc5, - 0x210402, - 0xae888, - 0x12402, - 0x2359c2, - 0x206b02, - 0x208142, - 0x20e742, - 0x23bec2, - 0x1b5a05, - 0x201402, - 0x209282, + 0x15ca1c5, + 0x146c05, + 0x20cd42, + 0x793c8, + 0x16542, + 0x23dec2, + 0x204202, + 0x202702, + 0x23a382, + 0x24ba82, + 0x10f7c5, + 0x201482, + 0x203c82, 0x201102, - 0x2053c2, - 0x205b42, - 0x2408c2, - 0x20ee42, - 0x256382, - 0xfe72cc4, + 0x203382, + 0x208402, + 0x2473c2, + 0x20b5c2, + 0x21c282, + 0x11278384, 0x142, - 0x178d87, - 0x30a83, - 0x12808d, - 0xec849, - 0x118a0b, - 0xf0a88, - 0x5bd09, - 0x1145c6, - 0x266a83, - 0xae888, + 0xb46c7, + 0x15a43, + 0x1b63cd, + 0xeed09, + 0xef94b, + 0xf1748, + 0x64f09, + 0x114786, + 0x343b43, + 0x793c8, 0x9c4, - 0x157bc3, - 0x2105, - 0xae888, - 0xe7607, - 0x1104d007, - 0x56546, - 0x2149, - 0xa28e, - 0x14ca47, - 0x150e583, + 0x12db83, + 0x10e645, + 0x793c8, + 0xebe47, + 0x12455f47, + 0x12a5f244, + 0x62246, + 0x10e689, + 0xb448e, + 0x13e247, + 0x15d8303, + 0x12e0ad42, + 0x9989, + 0xa144, 0x2000c2, - 0x24cd44, - 0x212402, - 0x22ea43, - 0x204542, - 0x233fc3, - 0xfa03, + 0x25dd04, + 0x216542, + 0x216543, + 0x2104c2, + 0x222bc3, + 0x1a003, 0x200382, - 0x2e5904, - 0x2191c3, - 0x206a02, - 0x217fc3, - 0x3bec2, + 0x2e8fc4, + 0x243543, + 0x256e02, + 0x2296c3, + 0x4ba82, 0x2003c2, - 0x23e083, - 0x243bc6, - 0x333b4f, + 0x20cb83, + 0x24d906, + 0x33538f, 0x602, - 0x72a143, - 0x2f3c0a, - 0xae888, - 0x212402, - 0x280203, - 0x266a83, - 0x23cb03, - 0x5803, - 0x1522f06, - 0x1c4104, - 0xa288, - 0x140dbcb, - 0x156c4ca, - 0xf3289, - 0x15da64a, - 0x1513f07, - 0xaab4b, - 0x10d4c5, - 0xf0545, - 0x11d749, - 0x146bc5, - 0x178d87, - 0x1c4104, - 0xfe2c4, - 0x212402, - 0x22ea43, - 0x266a83, - 0x217fc3, + 0x723543, + 0x2f5dca, + 0x793c8, + 0x216542, + 0x2f5503, + 0x343b43, + 0x216443, + 0xd903, + 0x147b5e07, + 0x157cd06, + 0x13f046, + 0x14bc4b88, + 0x1db944, + 0x14ebe40a, + 0x15abe40d, + 0xb4488, + 0x142e44b, + 0x147888a, + 0x15c66b43, + 0xf3949, + 0x16104b48, + 0x1664c347, + 0x15e360a, + 0x1513e47, + 0xaec8b, + 0x16a9068c, + 0xa5545, + 0xcf9c5, + 0x11c5c9, + 0x1a0c84, + 0x117703, + 0x152be545, + 0x124443, + 0x15635c43, + 0x124443, + 0x1d7607, + 0x2bdc2, + 0x6502, + 0x6502, + 0x4182, + 0x6502, + 0x4a42, + 0xd42, + 0x3242, + 0x146c05, + 0xb46c7, + 0x1db944, + 0x102784, + 0x216542, + 0x216543, + 0x343b43, + 0x2296c3, 0x2000c2, 0x200c82, - 0x205102, - 0x1362ea43, - 0x23d542, - 0x233fc3, + 0x206342, + 0x17a16543, + 0x247382, + 0x222bc3, 0x201282, - 0x208882, - 0x266a83, - 0x23ca82, - 0x27b882, - 0x22c302, + 0x234402, + 0x343b43, + 0x2038c2, + 0x271cc2, + 0x22f402, 0x200cc2, - 0x295f42, + 0x29a402, 0x200802, 0x200d82, - 0x25b542, - 0x2295c2, - 0x205742, - 0x13150c, - 0x2be4c2, - 0x250d42, - 0x227082, - 0x24a282, - 0x23cb03, + 0x205102, + 0x2870c2, + 0x2027c2, + 0x132a0c, + 0x2c1442, + 0x25adc2, + 0x230c02, + 0x253582, + 0x216443, 0x200bc2, - 0x217fc3, - 0x209ec2, - 0x25c042, - 0x23e083, - 0x3081c2, - 0x208502, - 0x20a1c2, - 0x204782, + 0x2296c3, + 0x20f502, + 0x298642, + 0x20cb83, + 0x249342, + 0x202b02, + 0x20a0c2, + 0x2014c2, 0x2010c2, - 0x230ac2, - 0x205682, - 0x22b302, - 0x2270c2, - 0x32748a, - 0x36f50a, - 0x3a124a, - 0x3e2d42, - 0x208902, - 0x20e8c2, - 0x13aa7f09, - 0x13f61e8a, - 0x142fc47, - 0x142050c2, - 0x143a083, - 0x1742, - 0x161e8a, - 0x162b0e, - 0x241ec4, - 0x57fc5, - 0x14a2ea43, - 0x3dc03, - 0x233fc3, - 0x24d704, - 0x266a83, - 0x20e704, - 0x2191c3, - 0x13d289, - 0x157686, - 0x23cb03, - 0xf1584, - 0x1598c3, - 0x217fc3, - 0x2a7c5, - 0x205803, - 0x23e083, - 0x1466d84, - 0x235403, - 0x181584, - 0x20aa43, - 0xae888, - 0x154f043, - 0x12a086, - 0x146e844, - 0x1a45, - 0x14c80a, - 0x124d82, - 0x15408acd, - 0x1adec6, - 0x159a140b, - 0xc951, - 0x15ea7f09, - 0x1ac8, - 0x69908, - 0x1c9415c7, - 0x3502, - 0xa8087, - 0x221ce, - 0x146bcb, - 0x14a88b, - 0x1c008a, - 0x1683c7, - 0xae888, - 0x120d48, - 0xa807, - 0x1cc176cb, - 0x1a087, - 0xcfc2, - 0x2b20d, - 0x16a7c7, - 0xb1bca, - 0x1e174f, - 0x12308f, - 0x161e82, - 0x12402, - 0x8af48, - 0x1d10778c, - 0x1570a, - 0xe710a, - 0x19004a, - 0x80a88, - 0x1d208, - 0x5a488, - 0xe75c8, - 0x1388, - 0xf982, - 0x167c0f, - 0xc6d8b, - 0x10f508, - 0x35cc7, - 0x4878a, - 0xbc3cb, - 0x34449, - 0x48687, - 0x83986, - 0x1d108, - 0x18ea0c, - 0x161347, - 0x1ae40a, - 0xec88, - 0x10ae8e, - 0x10b64e, - 0x16820b, - 0x168a8b, - 0x658cb, - 0x66609, - 0x6754b, - 0xbd4cd, - 0xf548b, - 0xf5fcd, - 0xf634d, - 0x10360a, - 0x12a4cb, - 0x166c0b, - 0x3bfc5, - 0x1d58b810, - 0x13514f, - 0x72e8f, - 0x2470d, - 0x13d450, - 0x293c2, - 0x1da1f8c8, - 0x7f248, - 0xea790, - 0x17fe0e, - 0x1df22b85, - 0x4c84b, - 0x13c390, - 0x1d30a, - 0x168c49, - 0x680c7, - 0x68407, - 0x685c7, - 0x68947, - 0x69e07, - 0x6a2c7, - 0x6bb07, - 0x6c047, - 0x6d587, - 0x6d907, - 0x6dfc7, - 0x6e187, - 0x6e347, - 0x6e507, - 0x6f307, - 0x6fc47, - 0x70a87, - 0x70e47, - 0x71487, - 0x71747, - 0x71907, - 0x71c07, - 0x71f87, - 0x72187, - 0x748c7, - 0x74a87, - 0x74c47, - 0x75dc7, - 0x77207, - 0x776c7, - 0x77dc7, - 0x78087, - 0x78407, - 0x785c7, - 0x789c7, - 0x78e07, - 0x792c7, - 0x79847, - 0x79a07, - 0x79bc7, - 0x7a007, - 0x7aa87, - 0x7afc7, - 0x7b207, - 0x7b3c7, - 0x7bb87, - 0x7c187, - 0x9a42, - 0x5a58a, - 0x13808, - 0x1baf8c, - 0x4eb87, - 0x918c5, - 0x9b311, - 0x1bb46, - 0x104dca, - 0x8adca, - 0x56546, - 0xb3ecb, + 0x215a82, + 0x20d782, + 0x232982, + 0x22cec2, + 0x325d0a, + 0x36918a, + 0x39ecca, + 0x3e9b42, + 0x20cec2, + 0x2be702, + 0x17f8cc49, + 0x183bb68a, + 0x14380c7, + 0x18601682, + 0x1430483, + 0x2c02, + 0x1bb68a, + 0x14f0ce, + 0x21d684, + 0xe8805, + 0x18e16543, + 0x48383, + 0x222bc3, + 0x256d44, + 0x343b43, + 0x2b1b84, + 0x243543, + 0x13e049, + 0x133e86, + 0x216443, + 0xf1dc4, + 0x1b03, + 0x2296c3, + 0x149f05, + 0x20d903, + 0x20cb83, + 0x1561c04, + 0x24c343, + 0x114bc4, + 0x201643, + 0x793c8, + 0x154db43, + 0x123486, + 0x155c1c4, + 0x1a0d45, + 0x1a0a8a, + 0x130602, + 0x199a16cd, + 0x1b3dc6, + 0x147f11, + 0x19f8cc49, + 0x1a0dc8, + 0x42008, + 0x20869487, + 0x3b42, + 0x18cdc7, + 0x208ce, + 0x146c0b, + 0x148d8b, + 0x1c0dca, + 0x34347, + 0x793c8, + 0xb4188, + 0xfd87, + 0x20c1fe0b, + 0x22a87, + 0x4242, + 0x3288d, + 0x163907, + 0x127b0a, + 0x12510c, + 0x1252cf, + 0x1ca4cf, + 0x212eb34d, + 0x2e702, + 0x16542, + 0x904c8, + 0x214e91cc, + 0x1aab8a, + 0xeb94a, + 0x7d54a, + 0x84888, + 0x1db88, + 0x68608, + 0xebe08, + 0x17bbc8, + 0x3242, + 0x1ca24f, + 0xcaa8b, + 0x1dcf08, + 0x3e1c7, + 0x874ca, + 0x3aa4b, + 0x51b89, + 0x873c7, + 0x136f46, + 0x1da88, + 0x1e0a8c, + 0xf4547, + 0x31a0a, + 0x1c74c8, + 0x32f4e, + 0x3370e, + 0x3418b, + 0x3518b, + 0x3678b, + 0xfc849, + 0x880cb, + 0xb688d, + 0x158a8b, + 0xf7a8d, + 0xf7e0d, + 0x12378a, + 0x15a5cb, + 0x1e150b, + 0x3f545, + 0x219c4bd0, + 0x21c41a88, + 0x3610f, + 0x7854f, + 0x2254d, + 0x17a710, + 0x13242, + 0x22258908, + 0x1cdd88, + 0x1b0350, + 0x106a4e, + 0x2275bd85, + 0x555cb, + 0x13d150, + 0x1dc8a, + 0x35349, + 0x6ff47, + 0x70287, + 0x70447, + 0x71587, + 0x72407, + 0x72787, + 0x734c7, + 0x73a07, + 0x73f07, + 0x74287, + 0x74947, + 0x74b07, + 0x74cc7, + 0x74e87, + 0x75207, + 0x756c7, + 0x75ec7, + 0x76287, + 0x768c7, + 0x76b87, + 0x76d47, + 0x77047, + 0x77647, + 0x77847, + 0x78d07, + 0x78ec7, + 0x79087, + 0x79807, + 0x7a047, + 0x7a8c7, + 0x7d387, + 0x7d7c7, + 0x7db47, + 0x7dd07, + 0x7e107, + 0x7e547, + 0x7ea07, + 0x7ef87, + 0x7f147, + 0x7f307, + 0x7f747, + 0x7fd07, + 0x80247, + 0x80847, + 0x80a07, + 0x810c7, + 0x81607, + 0xc342, + 0x6870a, + 0x1a608, + 0x1bbfcc, + 0x12fb47, + 0x44405, + 0xc3d91, + 0x13dc6, + 0x12100a, + 0x9034a, + 0x62246, + 0xb7f4b, 0x642, - 0x31351, - 0xc5d89, - 0x9bf49, - 0x9d306, - 0x5b542, - 0x1b21ca, - 0xafcc9, - 0xb040f, - 0xb0a0e, - 0xb3108, - 0x11b08, - 0xb5c2, - 0x6ed89, - 0x1e3586c9, - 0xbd049, - 0xbd04c, - 0x8f90e, - 0x4b8c, - 0xf2f8f, - 0x1bf08e, - 0x12b40c, - 0x33449, - 0x45391, - 0x45948, - 0x1a4e12, - 0x593cd, - 0x69acd, - 0x78f8b, - 0x81855, - 0x860c9, - 0x1518ca, - 0x188809, - 0x1aad50, - 0x1ae8cb, - 0x9890f, - 0xa868b, - 0xa914c, - 0xaa110, - 0xb7dca, - 0xb894d, - 0xd3a0e, - 0x195a0a, - 0xc1e8c, - 0xc4e94, - 0xc5a11, - 0xc694b, - 0xc858f, - 0xcbb0d, - 0xcd20e, - 0xd048c, - 0xd0c8c, - 0xd370b, - 0x172a8e, - 0x199ed0, - 0xdba8b, - 0xdc74d, - 0xdf30f, - 0xe804c, - 0xe9d8e, - 0xf3651, - 0x10570c, - 0x1d4047, - 0x10d14d, - 0x11db8c, - 0x144550, - 0x16528d, - 0x16efc7, - 0x176790, - 0x19dd08, - 0x1a3e8b, - 0xba1cf, - 0x1bb208, - 0x14bf0d, - 0x1125d0, - 0x178c89, - 0x1e78b7c8, - 0x1eabf946, - 0xc0843, - 0x3ec49, - 0xc7405, - 0x6902, - 0x48c09, - 0x14c50a, - 0x1efa52c6, - 0x15a52cd, - 0x1f36a9c4, - 0x57d06, - 0x1b68a, - 0x27bcd, - 0x1f52b109, - 0x216c3, - 0x11bb8a, - 0xe6751, - 0xe6b89, - 0xe7087, - 0xe7d88, - 0xe8447, - 0x4ec48, - 0xcacb, - 0x1311c9, - 0xf1e10, - 0xf22cc, - 0x1faf270d, - 0xf3a88, - 0xf4ec5, - 0x147e08, - 0x19ce4a, - 0x18a347, - 0x2542, - 0x1ff3f5d5, - 0x13d08a, - 0x1320c9, - 0x9e588, - 0x6ab09, - 0x7cb45, - 0x11d88a, - 0x92e0f, - 0x10d54b, - 0x11ff4c, - 0x176cd2, - 0xe9c6, - 0x7ce85, - 0x117a48, - 0xf84cb, - 0xf1151, - 0x16acc7, - 0x4da0a, - 0x20300485, - 0x1b330c, - 0x139c43, - 0x197a86, - 0x408c2, - 0x1089cb, - 0x10948a, - 0x150980c, - 0x7f5c8, - 0xf6188, - 0x2069e606, - 0x17d5c7, - 0xd782, - 0x7742, - 0x1a55d0, - 0x65087, - 0x3074f, - 0x13a06, - 0xd2b8e, - 0x99a0b, - 0x3dd48, - 0x34809, - 0x5da12, - 0x197b4d, - 0x118088, - 0x1188c9, - 0xee00d, - 0x19f749, - 0xb48b, - 0x6c348, - 0x71d88, - 0x75a88, - 0x80389, - 0x8058a, - 0x84b0c, - 0x166eca, - 0xf17ca, - 0x1178c7, - 0x9a50a, - 0x1cda4d, - 0x45c51, - 0x20acd506, - 0x1b994b, - 0x12f80c, - 0x94388, - 0x149449, - 0x160b0d, - 0x68b90, - 0x1812cd, - 0x4642, - 0x4a68d, - 0x72c2, - 0x1f702, - 0x11780a, - 0x756ca, - 0x20e7b508, - 0x104cca, - 0x11f80b, - 0x10b8cc, - 0x12048a, - 0x12070f, - 0x120ace, - 0x171cd, - 0x211e2c05, - 0x12d408, - 0x3602, - 0x1422383, - 0x415505, - 0x45d884, - 0x16202c0e, - 0x16b59cce, - 0x1720180a, - 0x17b9184e, - 0x1835788e, - 0x18b7f38c, - 0x142fc47, - 0x142fc49, - 0x143a083, - 0x1926060c, - 0x19b49bc9, - 0x1a36af09, - 0x1ab71749, - 0x1742, - 0x2b51, - 0x159c11, - 0x174d, - 0x1b6451, - 0x1577d1, - 0x17f2cf, - 0x6054f, - 0x149b0c, - 0x16ae4c, - 0x17168c, - 0x1af28d, - 0x15d915, - 0xc1a8c, - 0xc778c, - 0x135a10, - 0x141acc, - 0x14af8c, - 0x18ad99, - 0x191599, - 0x1bdfd9, - 0x1cb4d4, - 0x1d6294, - 0x1e02d4, - 0x1e2714, - 0xa994, - 0x1b2c1b49, - 0x1b9e0589, - 0x1c2c7849, - 0x16645b49, - 0x1742, - 0x16e45b49, - 0x1742, - 0xa98a, - 0x1742, - 0x17645b49, - 0x1742, - 0xa98a, - 0x1742, - 0x17e45b49, - 0x1742, - 0x18645b49, - 0x1742, - 0x18e45b49, - 0x1742, - 0xa98a, - 0x1742, - 0x19645b49, - 0x1742, - 0xa98a, - 0x1742, - 0x19e45b49, - 0x1742, - 0x1a645b49, - 0x1742, - 0xa98a, - 0x1742, - 0x1ae45b49, - 0x1742, - 0xa98a, - 0x1742, - 0x1b645b49, - 0x1742, - 0x1be45b49, - 0x1742, - 0x1c645b49, - 0x1742, - 0xa98a, - 0x1742, + 0x39c91, + 0xc5889, + 0xa0689, + 0xa12c6, + 0x5102, + 0x9c50a, + 0xb4e49, + 0xb558f, + 0xb5b8e, + 0xb7288, + 0x22a17a92, + 0x19b88, + 0x22f2fd07, + 0x1ec82, + 0x15c709, + 0x15490a, + 0x23347589, + 0x19de09, + 0x19de0c, + 0x15f4b, + 0x436ce, + 0xe6cc, + 0xf364f, + 0x1bfdce, + 0x4594c, + 0x5e789, + 0x658d1, + 0x65e88, + 0x7bd12, + 0x7cd4d, + 0x7e6cd, + 0x8564b, + 0x8b795, + 0x932c9, + 0x18500a, + 0x1b0049, + 0x1d4350, + 0x99acb, + 0x9ee0f, + 0xa3fcb, + 0xad6cc, + 0xbac90, + 0xd844a, + 0x18264d, + 0x19210e, + 0xbc48a, + 0xc090c, + 0x1997d4, + 0xc5511, + 0xca64b, + 0xccc8f, + 0xd048d, + 0xd42ce, + 0xd55cc, + 0xd5dcc, + 0xd814b, + 0x14284e, + 0x197d50, + 0x1aa38b, + 0xddacd, + 0xe730f, + 0xec90c, + 0x108b4e, + 0x10c891, + 0x18214c, + 0x11ca07, + 0x144e8d, + 0x15ffcc, + 0x1693d0, + 0x17208d, + 0x172dc7, + 0x195a10, + 0x1a5888, + 0x1abd0b, + 0xbd9cf, + 0x1bc248, + 0x68e8d, + 0x111f10, + 0x174389, + 0x237c4b88, + 0x23ac2a86, + 0xc3943, + 0x52a89, + 0x54c9, + 0xcbc45, + 0x7bc2, + 0x18fd89, + 0x62c8a, + 0x23e7c1c6, + 0x147c1cd, + 0x24363b04, + 0x1da806, + 0x2630a, + 0x2778d, + 0x246da54b, + 0x2484f809, + 0x2b203, + 0x11b88a, + 0xe9951, + 0xe9d89, + 0xeb8c7, + 0xec648, + 0xecd07, + 0x12fc08, + 0x14808b, + 0x1326c9, + 0xf2550, + 0xf2a0c, + 0x24ef31cd, + 0xf5c48, + 0xf7685, + 0x1d0608, + 0x19a8ca, + 0x16c507, + 0x1cc2, + 0x25239155, + 0x13de4a, + 0x1363c9, + 0x5688, + 0xa2549, + 0x1df185, + 0x11c70a, + 0x97c4f, + 0xa55cb, + 0x15ee8c, + 0xc8052, + 0x1b5a06, + 0x9a905, + 0x15f148, + 0xfa0cb, + 0xfa9d1, + 0x143847, + 0x5788a, + 0x25704a05, + 0x1b560c, + 0x13a843, + 0x1953c6, + 0x473c2, + 0x10ad8b, + 0x10b8ca, + 0x150bc4c, + 0xf48c8, + 0xf7c48, + 0x25a05706, + 0x1b7287, + 0x4a02, + 0x1ec2, + 0x1a6e50, + 0x67dc7, + 0x67ecf, + 0x30846, + 0x12270e, + 0x9d3cb, + 0x46c88, + 0x51f49, + 0x117052, + 0x11820d, + 0x118d88, + 0xef809, + 0x19c60d, + 0x112c9, + 0x6824b, + 0x69d88, + 0x73d08, + 0x75388, + 0x771c9, + 0x773ca, + 0x799cc, + 0x1e17ca, + 0xf14ca, + 0x1177c7, + 0xa38ca, + 0x738d, + 0x174cd1, + 0x25ed45c6, + 0x17768b, + 0xbe0c, + 0x414c8, + 0x3d609, + 0x14c6cd, + 0x57110, + 0x190c8d, + 0x6502, + 0x6540d, + 0x4a42, + 0x66342, + 0x11770a, + 0x263d034a, + 0x25c4a, + 0x26680b48, + 0x120f0a, + 0x12f4cb, + 0x3398c, + 0x1203ca, + 0x2692064f, + 0x120a0e, + 0x26de9a05, + 0x12bf48, + 0xe042, + 0x1420a83, + 0x1a38e20e, + 0x1ab2eb8e, + 0x1b202cca, + 0x1bb7c04e, + 0x1c32d84e, + 0x1cb3408c, + 0x14380c7, + 0x14380c9, + 0x1430483, + 0x1d3419cc, + 0x1db54e89, + 0x1e36d309, + 0x1eba0889, + 0x2c02, + 0x1a3511, + 0x12ead1, + 0x2c0d, + 0x17bf91, + 0x12d791, + 0x133fcf, + 0x14190f, + 0x154dcc, + 0x16d24c, + 0x1a07cc, + 0x1b764d, + 0x17d415, + 0xc510c, + 0xe140c, + 0x1439d0, + 0x14a18c, + 0x18758c, + 0x18df59, + 0x1bed19, + 0x1cabd9, + 0x1cc7d4, + 0x1d2454, + 0x1e8694, + 0x5e54, + 0xff14, + 0x1f2c51c9, + 0x1f9e8949, + 0x202e14c9, + 0x1a666089, + 0x2c02, + 0x1ae66089, + 0x2c02, + 0x5e4a, + 0x2c02, + 0x1b666089, + 0x2c02, + 0x5e4a, + 0x2c02, + 0x1be66089, + 0x2c02, + 0x1c666089, + 0x2c02, + 0x1ce66089, + 0x2c02, + 0x5e4a, + 0x2c02, + 0x1d666089, + 0x2c02, + 0x5e4a, + 0x2c02, + 0x1de66089, + 0x2c02, + 0x1e666089, + 0x2c02, + 0x5e4a, + 0x2c02, + 0x1ee66089, + 0x2c02, + 0x5e4a, + 0x2c02, + 0x1f666089, + 0x2c02, + 0x1fe66089, + 0x2c02, + 0x20666089, + 0x2c02, + 0x5e4a, + 0x2c02, 0x1400401, - 0xc945, - 0x1c0084, - 0x144ce03, - 0x1426d83, - 0x14fa443, - 0x2c0e, - 0x159cce, - 0x8450e, - 0x180a, - 0x19184e, - 0x15788e, - 0x17f38c, - 0x6060c, - 0x149bc9, - 0x16af09, - 0x171749, - 0xc1b49, - 0x1e0589, - 0xc7849, - 0x135acd, - 0x141b89, - 0xac49, - 0x12d5c4, - 0x132ac4, - 0x1c8a04, - 0x1c95c4, - 0xaae04, - 0x2ec44, - 0x3cd84, - 0x192d44, - 0x13904, - 0xbec06, - 0x59504, - 0x158e7c3, - 0x149987, - 0x148574c, - 0x1ac3, - 0x293c2, - 0x107788, - 0xd1784, - 0x14386, - 0xd8a84, - 0x15aa06, - 0x16b82, - 0xa8c1, - 0x20e44, - 0xb1706, - 0x171c3, - 0x1ac3, - 0xa0e83, - 0x13d385, - 0x124dc2, - 0x124dc8, - 0xeb947, - 0x131247, - 0xf982, - 0x2000c2, - 0x212402, - 0x204542, - 0x20fa02, - 0x200382, - 0x2003c2, - 0x207742, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e703, - 0x217fc3, - 0x23e083, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x217fc3, - 0x23e083, - 0x10303, - 0x266a83, - 0xe704, - 0x2000c2, - 0x24ac43, - 0x2362ea43, - 0x392747, - 0x266a83, - 0x21e1c3, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x226e0a, - 0x243bc5, - 0x216983, - 0x22dc42, - 0xae888, - 0x23adad8a, - 0xe01, - 0xae888, - 0x12402, - 0x137ac2, - 0x2432ae8b, - 0x2462e004, - 0x16a905, - 0x8cc5, - 0x107786, - 0x24a08cc5, - 0x54383, - 0x5cd83, - 0x9c4, - 0x157bc3, - 0x2105, - 0x146bc5, - 0xae888, - 0x1a087, - 0x2ea43, - 0x2ed4d, - 0x2523a707, - 0x159146, - 0x25401645, - 0x1c0992, - 0x159207, - 0x1dbca, - 0x10ac8, - 0x1dac7, - 0x6bcca, - 0x1bc448, - 0xe4f07, - 0x1ac70f, - 0x36fc7, - 0x192b46, - 0x13c390, - 0xcee8f, - 0x21c49, - 0x57d84, - 0x259592ce, - 0x185a89, - 0x6e646, - 0x111a89, - 0x193c86, - 0x1c2e06, - 0x4f10c, - 0xbc5ca, - 0x345c7, - 0x17edca, - 0x1596c9, - 0xf8e8c, - 0x1c8ca, - 0x4b8ca, - 0x2149, - 0x57d06, - 0x3468a, - 0x118f4a, - 0xa3a4a, - 0x137509, - 0xe54c8, - 0xe5746, - 0xed88d, - 0x5130b, - 0xc7c05, - 0x25f5a28c, - 0x14ca47, - 0x110289, - 0xd1047, - 0xc6114, - 0x1129cb, - 0x10f34a, - 0x5d88a, - 0xac80d, - 0x151fa09, - 0x117e4c, - 0x1186cb, - 0x88c3, - 0x88c3, - 0x36fc6, - 0x88c3, - 0x107788, - 0x15c103, - 0x46604, - 0x54603, - 0x347c5, - 0x1475903, - 0x51709, - 0xf84cb, - 0x14e82c3, - 0x154546, - 0x15037c7, - 0x1aafc7, - 0x26d41489, - 0x17e86, - 0x4ac43, - 0xae888, - 0x12402, - 0x4d704, - 0x61083, - 0x17b845, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x233f03, - 0x22ea43, - 0x233fc3, - 0x280203, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x2bd443, - 0x20aa43, - 0x233f03, - 0x24cd44, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x204ac3, - 0x28541585, - 0x142e6c3, - 0x22ea43, - 0x233fc3, - 0x20fa03, - 0x280203, - 0x266a83, - 0x20e704, - 0x3433c3, - 0x215f83, - 0x23cb03, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0x216983, - 0x29219f03, - 0x176bc9, - 0x12402, - 0x3c7603, - 0x29e2ea43, - 0x233fc3, - 0x249283, - 0x266a83, - 0x2220c3, - 0x215f83, - 0x23e083, - 0x3005c3, - 0x3cd604, - 0xae888, - 0x2a62ea43, - 0x233fc3, - 0x2b31c3, - 0x266a83, - 0x23cb03, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x2302c3, - 0xae888, - 0x2ae2ea43, - 0x233fc3, - 0x280203, - 0x205803, - 0x23e083, - 0xae888, - 0x142fc47, - 0x24ac43, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x146bc5, - 0x178d87, - 0xc634b, - 0xe6f84, - 0xc7c05, - 0x1454408, - 0x2c10d, - 0x2c242285, + 0x147f05, + 0x1c0dc4, + 0x8903, + 0x8502, + 0x54642, + 0x1419303, + 0x1403603, + 0x14fea83, + 0x18e20e, + 0x12eb8e, + 0x89e8e, + 0x2cca, + 0x17c04e, + 0x12d84e, + 0x13408c, + 0x1419cc, + 0x154e89, + 0x16d309, + 0x1a0889, + 0xc51c9, + 0x1e8949, + 0xe14c9, + 0x143a8d, + 0x6109, + 0x101c9, + 0x3d1c2, + 0x1cbcc4, + 0x1cec84, + 0x1d1104, + 0x1df604, + 0xaef44, + 0xacdc4, + 0x4a9c4, + 0x35644, + 0x1a704, + 0x136fc4, + 0x7b0c9, + 0x7b0cc, + 0x158286, + 0x15828e, + 0x7ce84, + 0x155cf03, + 0x14a007, + 0x148ae0c, + 0x9983, + 0x136fc4, + 0x13242, + 0xe91c8, + 0xd6b04, + 0x1e9706, + 0xdd5c4, + 0x121646, + 0x1f8c2, + 0x7281, 0x27c44, - 0x12402, - 0x10103, - 0x184485, - 0x30242, - 0x53c2, - 0x34b8c5, - 0xae888, - 0x88c2, - 0x1b2c3, - 0x16b88f, - 0x12402, - 0x1063c6, + 0x69306, + 0x15b83, + 0x9983, + 0x71703, + 0xc7e43, + 0x14803, + 0xf7a03, + 0xc8045, + 0x5adc2, + 0x148a42, + 0x1a1e88, + 0xee7c7, + 0x132747, + 0x3242, 0x2000c2, - 0x24ac43, - 0x22ea43, - 0x266a83, - 0x20e704, - 0x23cb03, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x216983, - 0x30242, - 0x32ff08, - 0x24cd44, - 0x37e046, - 0x3af146, - 0xae888, - 0x31a6c3, - 0x355c09, - 0x30ddd5, - 0x10dddf, - 0x22ea43, - 0x7fa87, - 0x242992, - 0x1623c6, - 0x16fd05, - 0x1d30a, - 0x168c49, - 0x24274f, - 0x2e5904, - 0x2bbf05, - 0x313850, - 0x215f87, - 0x205803, - 0x321388, - 0x134b86, - 0x293b0a, - 0x223144, - 0x2ffec3, - 0x22dc42, - 0x2fa00b, - 0x5803, - 0x182c04, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, - 0x307183, - 0x212402, - 0x1c06c3, - 0x2a4c4, - 0x217fc3, - 0x23e083, - 0x2fc39fc5, - 0x1d5cc6, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x21e1c3, - 0x265dc3, - 0x23e083, - 0x4ac43, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x217fc3, - 0x5803, - 0x23e083, - 0x17082, - 0x2000c2, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x8cc5, - 0x1ac3, - 0x24cd44, - 0x22ea43, - 0x233fc3, - 0x217544, - 0x217fc3, - 0x23e083, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0x1357c9, - 0x4cc4, - 0x22ea43, - 0xf982, - 0x233fc3, - 0x280203, - 0x204903, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, - 0x2a82, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x36a584, - 0x20e704, - 0x217fc3, - 0x23e083, - 0x20aa43, - 0x6c02, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x2f4c43, - 0x160c3, - 0x1e1c3, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0x32748a, - 0x345389, - 0x36500b, - 0x3657ca, - 0x36f50a, - 0x37c54b, - 0x393a4a, - 0x399a4a, - 0x3a124a, - 0x3a1c4b, - 0x3c4709, - 0x3cf9ca, - 0x3cfe0b, - 0x3db28b, - 0x3e0d8a, - 0xcdc2, - 0x22ea43, - 0x233fc3, - 0x280203, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, - 0xcc4b, - 0x17fe07, - 0x5af88, - 0xee144, - 0x1c4104, - 0x94dc8, - 0xea706, - 0xcc06, - 0x1a07c9, - 0xae888, - 0x22ea43, - 0x1d304, - 0x2680c4, - 0x201c02, - 0x21e484, - 0x202645, - 0x233f03, - 0x24cd44, - 0x22ea43, - 0x236704, - 0x233fc3, - 0x24d704, - 0x2e5904, - 0x20e704, - 0x215f83, - 0x217fc3, - 0x23e083, - 0x24a845, - 0x204ac3, - 0x216983, - 0x204343, - 0x2ddf84, - 0x32a004, - 0x23a185, - 0xae888, - 0x3b4e04, - 0x3c2f86, - 0x202284, - 0x212402, - 0x3770c7, - 0x3a9947, - 0x24bb44, - 0x20e785, - 0x365485, - 0x22f845, - 0x20e704, - 0x38f948, - 0x2523c6, - 0x3641c8, - 0x2836c5, - 0x2ee705, - 0x237bc4, - 0x23e083, - 0x300ac4, - 0x37b286, - 0x243cc3, - 0x2ddf84, - 0x24fd85, - 0x248b84, - 0x2a67c4, - 0x22dc42, - 0x232ec6, - 0x3b7ec6, - 0x315fc5, - 0x2000c2, - 0x24ac43, - 0x34e12402, - 0x21fa44, + 0x216542, + 0x2104c2, + 0x218242, 0x200382, - 0x23cb03, - 0x20cac2, - 0x217fc3, 0x2003c2, - 0x2fcf46, - 0x208503, - 0x20aa43, - 0xae888, - 0xae888, - 0x266a83, - 0x1c0443, + 0x201ec2, + 0x216543, + 0x222bc3, + 0x343b43, + 0x26a7c3, + 0x2296c3, + 0x20cb83, + 0x793c8, + 0x216543, + 0x222bc3, + 0x2296c3, + 0x20cb83, + 0xb303, + 0x343b43, + 0xb1b84, 0x2000c2, - 0x35a12402, - 0x266a83, - 0x26e2c3, - 0x3433c3, - 0x22e004, - 0x217fc3, - 0x23e083, - 0xae888, + 0x253c43, + 0x29216543, + 0x3a5287, + 0x343b43, + 0x21b283, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x23098a, + 0x24d905, + 0x21f6c3, + 0x213402, + 0x793c8, + 0x296df98a, + 0xe01, + 0x793c8, + 0x16542, + 0x138402, + 0x29e4f58b, + 0x2a2093c4, + 0x163a45, + 0x1403ec5, + 0xe91c6, + 0x2a603ec5, + 0x5fa83, + 0x1b0243, + 0x9c4, + 0x12db83, + 0x10e645, + 0x146c05, + 0x793c8, + 0x22a87, + 0x16543, + 0x1b4bcd, + 0x2ae42647, + 0x1386, + 0x2b17be85, + 0x186012, + 0x1447, + 0x1e48a, + 0x17588, + 0x1e387, + 0x7368a, + 0x1bd188, + 0x110a47, + 0x165d8f, + 0x3db87, + 0x4bb86, + 0x13d150, + 0x19350f, + 0x1b009, + 0x1da884, + 0x2b40150e, + 0x5b0c9, + 0x74fc6, + 0x1113c9, + 0x190a86, + 0x6ac6, + 0xb8e4c, + 0x3ac4a, + 0x51d07, + 0x14140a, + 0x1909, + 0x25e8c, + 0x2954a, + 0x6b44a, + 0x10e689, + 0x1da806, + 0x51dca, + 0x11934a, + 0xa954a, + 0x114309, + 0xe8b88, + 0xe8e06, + 0xef08d, + 0x5b88b, + 0xcc205, + 0x2bb1e14c, + 0x13e247, + 0x10fcc9, + 0xd6187, + 0xc5c14, + 0x11230b, + 0x1dcd4a, + 0x116eca, + 0xb080d, + 0x152f6c9, + 0x117fcc, + 0x118b8b, + 0x31a03, + 0x31a03, + 0x32f46, + 0x31a03, + 0xe91c8, + 0x157243, + 0x4ebc4, + 0x5fc83, + 0x14a9607, + 0x51f05, + 0x15186c3, + 0x5c549, + 0xc8045, + 0xfa0cb, + 0x14ecb83, + 0x152e06, + 0x1523947, + 0x1d45c7, + 0x2c97ce89, + 0x1d1a86, + 0x53c43, + 0x793c8, + 0x16542, + 0x56d44, + 0x43ac3, + 0x155b45, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x203b43, + 0x216543, + 0x222bc3, + 0x2f5503, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x2a0843, + 0x201643, + 0x203b43, + 0x25dd04, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x20e603, + 0x2192c3, + 0x213402, + 0x2e17cf85, + 0x1438003, + 0x216543, + 0x222bc3, + 0x21a003, + 0x2f5503, + 0x343b43, + 0x2b1b84, + 0x34b203, + 0x233243, + 0x216443, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x21f6c3, + 0x2ee0fc03, + 0xc7f49, + 0x16542, + 0x225103, + 0x2fa16543, + 0x222bc3, + 0x252183, + 0x343b43, + 0x2207c3, + 0x233243, + 0x20cb83, + 0x2037c3, + 0x3df304, + 0x793c8, + 0x30216543, + 0x222bc3, + 0x2b7343, + 0x343b43, + 0x216443, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x238743, + 0x793c8, + 0x30a16543, + 0x222bc3, + 0x2f5503, + 0x20d903, + 0x20cb83, + 0x793c8, + 0x14380c7, + 0x253c43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x146c05, + 0xb46c7, + 0xc5e4b, + 0x31a3ca06, + 0x31efdb4b, + 0xea184, + 0xcc205, + 0x1472588, + 0x2f20d, + 0x1c4b88, + 0x136fc4, + 0x3264ccc5, + 0x27804, + 0x16542, + 0x1a143, + 0x158185, + 0x386c2, + 0x34aac5, + 0x793c8, + 0x33e98f0d, + 0x343a11ca, + 0x24642, + 0x5483, + 0x164f4f, + 0x18242, + 0x7ce84, + 0x136fc4, + 0x16542, 0x2000c2, - 0x36212402, - 0x22ea43, - 0x217fc3, - 0x5803, - 0x23e083, + 0x253c43, + 0x216543, + 0x343b43, + 0x2b1b84, + 0x216443, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x21f6c3, + 0x216543, + 0x222bc3, + 0x2296c3, + 0x20cb83, + 0x19045, + 0x331408, + 0x25dd04, + 0x379ac6, + 0x3a0686, + 0x793c8, + 0x2b6643, + 0x2f6689, + 0x21c495, + 0x1c49f, + 0x216543, + 0xf4d87, + 0x38db12, + 0x16a146, + 0x182c45, + 0x1dc8a, + 0x35349, + 0x38d8cf, + 0x2e8fc4, + 0x237a05, + 0x313790, + 0x2b1087, + 0x20d903, + 0x2c2308, + 0x13846, + 0x29fc4a, + 0x26fb04, + 0x304443, + 0x213402, + 0x2fe64b, + 0x222bc3, + 0x343b43, + 0xd903, + 0x15b044, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x309a43, + 0x216542, + 0x187003, + 0x149c04, + 0x2296c3, + 0x20cb83, + 0x364419c5, + 0x1de746, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x21b283, + 0x233c83, + 0x20cb83, + 0x53c43, + 0x216542, + 0x216543, + 0x222bc3, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x19f42, + 0x2000c2, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x3ec5, + 0x63a09, + 0x9983, + 0x25dd04, + 0x216543, + 0x222bc3, + 0x28d4c4, + 0x2296c3, + 0x20cb83, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x1b7409, + 0xe804, + 0x216543, + 0x3242, + 0x222bc3, + 0x2f5503, + 0x20e443, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x2a02, + 0x216543, + 0x222bc3, + 0x343b43, + 0x3636c4, + 0x2b1b84, + 0x2296c3, + 0x20cb83, + 0x201643, + 0x4702, + 0x216542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x284103, + 0xe103, + 0x1b283, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x38bc6, + 0x325d0a, + 0x3453c9, + 0x35fd4b, + 0x36084a, + 0x36918a, + 0x37860b, + 0x39084a, + 0x3979ca, + 0x39ecca, + 0x39ef4b, + 0x3c5589, + 0x3d368a, + 0x3d3acb, + 0x3dfecb, + 0x3e914a, + 0x4042, + 0x216543, + 0x222bc3, + 0x2f5503, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x3ecb, + 0x106a47, + 0x69a08, + 0x19c744, + 0x1db944, + 0x98e48, + 0xedac6, + 0x1481c6, + 0x13a09, + 0x793c8, + 0x216543, + 0x1dc84, + 0x26ff44, + 0x215d42, + 0x21b544, + 0x30eb85, + 0x203b43, + 0x25dd04, + 0x216543, + 0x23ec84, + 0x222bc3, + 0x256d44, + 0x2e8fc4, + 0x2b1b84, + 0x233243, + 0x2296c3, + 0x20cb83, + 0x2655c5, + 0x20e603, + 0x21f6c3, + 0x27d683, + 0x2d1984, + 0x323404, + 0x34bd45, + 0x793c8, + 0x32e744, + 0x3c2086, + 0x30e7c4, + 0x216542, + 0x2c8447, + 0x250707, + 0x254744, + 0x2ee845, + 0x372285, + 0x2b96c5, + 0x2b1b84, + 0x267408, + 0x25d206, + 0x392c88, + 0x287105, + 0x2efe85, + 0x257204, + 0x20cb83, + 0x305504, + 0x3770c6, + 0x24da03, + 0x2d1984, + 0x26fac5, + 0x38fd04, + 0x2aacc4, + 0x213402, + 0x38f846, + 0x3b8fc6, + 0x315f85, + 0x2000c2, + 0x253c43, + 0xedc46, + 0x3b616542, + 0x231d44, + 0x63dc5, + 0x200382, + 0x216443, + 0x2a9542, + 0x2296c3, + 0x2003c2, + 0x301a46, + 0x202b03, + 0x1da785, + 0x201643, + 0x793c8, + 0x793c8, + 0x343b43, + 0x7ca83, + 0x2000c2, + 0x3c216542, + 0x343b43, + 0x274c43, + 0x34b203, + 0x2093c4, + 0x2296c3, + 0x20cb83, + 0x793c8, + 0x2000c2, + 0x3ca16542, + 0x216543, + 0x2296c3, + 0xd903, + 0x20cb83, 0x682, - 0x203b42, - 0x21fcc2, - 0x21e1c3, - 0x2f8e43, - 0x2000c2, - 0x146bc5, - 0xae888, - 0x178d87, - 0x212402, - 0x233fc3, - 0x24d704, - 0x2033c3, - 0x266a83, - 0x204903, - 0x23cb03, - 0x217fc3, - 0x213cc3, - 0x23e083, - 0x234fc3, - 0x140d13, - 0x142dd4, - 0x146bc5, - 0x178d87, - 0x1dbc9, - 0x110b86, - 0x121b4b, - 0x36fc6, - 0x54bc7, - 0xe786, - 0x649, - 0x1d818a, - 0x9110d, - 0x127d8c, - 0x1198ca, - 0x15d048, - 0x1b5a05, - 0x1dc08, - 0x13a06, - 0x1ce786, - 0x134c46, - 0x602, - 0x2293c2, - 0x6f204, - 0xa0e86, - 0x1411d0, - 0x147a54e, - 0x1e46, - 0x696cc, - 0x37b22f0b, - 0x146bc5, - 0x15434b, - 0x37fce6c4, - 0x1c0247, - 0x23c91, - 0x11a7ca, - 0x22ea43, - 0x38285648, - 0x6bc45, - 0xf988, - 0x1ff44, - 0x14c705, - 0x38561cc6, - 0x9b306, - 0xc9b46, - 0x9620a, - 0x96ecc, - 0x1c2043, - 0x1c4104, - 0x38a120c4, - 0x51709, - 0x164347, - 0x1167ca, - 0x14dac89, - 0x605, - 0x103583, - 0x38e35107, - 0x2a7c5, - 0x153d986, - 0x14731c6, - 0xb3f8c, - 0x104248, - 0x390408c3, - 0xfa24b, - 0x12bd4b, - 0x3964950c, - 0x140ba83, - 0xc96c8, - 0xfa4c5, - 0xc6c09, - 0xeca43, - 0x11fb08, - 0x141b5c6, - 0x8e8c7, - 0x39b60b09, - 0x99c87, - 0xf054a, - 0x3afc6788, - 0x11838d, - 0xff48, - 0x1ac3, - 0x1445009, - 0x3a643, - 0x36fc6, - 0x107788, - 0x13904, - 0x154c85, - 0x1492ec3, - 0x22387, - 0x39e22383, - 0x3a3c78c6, - 0x3a637e84, - 0x3ab09647, - 0x107784, - 0x107784, - 0x107784, - 0x107784, - 0x41, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x2000c2, - 0x212402, - 0x266a83, - 0x209582, - 0x217fc3, - 0x23e083, - 0x208503, - 0x38644f, - 0x38680e, - 0xae888, - 0x22ea43, - 0x44cc7, - 0x233fc3, - 0x266a83, - 0x2191c3, - 0x217fc3, - 0x23e083, - 0x1d84, - 0x157d04, - 0x1b4744, - 0x21afc3, - 0x324007, - 0x207d42, - 0x272549, - 0x200ac2, - 0x3a58cb, - 0x2a6b8a, - 0x2aec89, - 0x200542, - 0x220306, - 0x244495, - 0x3a5a15, - 0x387d93, - 0x3a5f93, - 0x2272c2, - 0x2272c5, - 0x25f44c, - 0x27ad0b, - 0x277a05, - 0x201802, - 0x239202, - 0x381b06, - 0x203502, - 0x2cf9c6, - 0x21d58d, - 0x22a54c, - 0x38b884, - 0x200882, - 0x222b02, - 0x3a51c8, - 0x200202, - 0x336d46, - 0x39c70f, - 0x357dd0, - 0x229804, - 0x244655, - 0x387f13, - 0x24c943, - 0x369f8a, - 0x20c5c7, - 0x3a1ec9, - 0x316687, - 0x30bf02, - 0x200282, - 0x3c90c6, - 0x204cc2, - 0xae888, - 0x207f42, - 0x208a02, - 0x228fc7, - 0x348187, - 0x348191, - 0x218885, - 0x21888e, - 0x2194cf, - 0x20cfc2, - 0x3236c7, - 0x21b008, - 0x20aac2, - 0x21c942, - 0x227846, - 0x22784f, - 0x26c690, - 0x22c442, - 0x20cf02, - 0x238b48, - 0x214803, - 0x261248, - 0x2eea8d, - 0x20cf03, - 0x3cc248, - 0x28734f, - 0x28770e, - 0x25d54a, - 0x26cb11, - 0x26cf90, - 0x30280d, - 0x302b4c, - 0x3c20c7, - 0x36a107, - 0x37e109, - 0x29a842, - 0x205082, - 0x256b8c, - 0x256e8b, - 0x200d42, - 0x2d38c6, - 0x202282, - 0x200482, - 0x361e82, - 0x212402, - 0x22f244, - 0x239d87, - 0x22c982, - 0x240307, - 0x241b47, - 0x230a82, - 0x211d02, - 0x244b85, - 0x20da02, - 0x3985ce, - 0x3d068d, - 0x233fc3, - 0x28cf0e, - 0x2bb64d, - 0x35cc43, - 0x203142, - 0x28ac84, - 0x29a802, - 0x223ec2, - 0x3930c5, - 0x3a3b07, - 0x2481c2, - 0x20fa02, - 0x24d307, - 0x251a88, - 0x2ba882, - 0x27cf06, - 0x256a0c, - 0x256d4b, 0x2091c2, - 0x261d4f, - 0x262110, - 0x26250f, - 0x2628d5, - 0x262e14, - 0x26330e, - 0x26368e, - 0x263a0f, - 0x263dce, - 0x264154, - 0x264653, - 0x264b0d, - 0x27c349, - 0x292a43, - 0x2033c2, - 0x2d2685, - 0x2033c6, - 0x200382, - 0x3451c7, - 0x266a83, - 0x200642, - 0x23e108, - 0x26cd51, - 0x26d190, - 0x202182, - 0x291c47, - 0x204b82, - 0x277507, - 0x206902, - 0x207089, - 0x381ac7, - 0x294648, - 0x361b06, - 0x207483, - 0x207485, - 0x234242, - 0x2004c2, - 0x3c94c5, - 0x3b3785, - 0x201482, - 0x219303, - 0x3546c7, - 0x20bdc7, - 0x204d02, - 0x249084, - 0x20eb03, - 0x2f6f89, - 0x20eb08, - 0x202702, - 0x20a682, - 0x26b947, - 0x26ca45, - 0x273508, - 0x2b1347, - 0x209f03, - 0x2a0d06, - 0x30268d, - 0x302a0c, - 0x305e06, - 0x206b02, - 0x208c82, - 0x20b982, - 0x2871cf, - 0x2875ce, - 0x365507, - 0x204482, - 0x388c05, - 0x388c06, - 0x215782, - 0x200bc2, - 0x293506, - 0x206583, - 0x206586, - 0x2d8a45, - 0x2d8a4d, - 0x2d92d5, - 0x2da14c, - 0x2da4cd, - 0x2da812, - 0x20a942, - 0x2720c2, - 0x203882, - 0x36ac46, - 0x204a46, - 0x202542, - 0x203446, - 0x201102, - 0x324805, - 0x202582, - 0x398709, - 0x22ce4c, - 0x22d18b, - 0x2003c2, - 0x252e48, - 0x202a42, - 0x200a82, - 0x278706, - 0x245ac5, - 0x200a87, - 0x22dcc5, - 0x257e45, - 0x201b42, - 0x21dcc2, - 0x205b42, - 0x298c07, - 0x2fd00d, - 0x2fd38c, - 0x235507, - 0x27ce82, - 0x211c82, - 0x3dc788, - 0x248d88, - 0x34f348, - 0x3bb1c4, - 0x372d07, - 0x36aa43, - 0x22d782, - 0x204ac2, - 0x2fe3c9, - 0x30b287, - 0x216982, - 0x278b05, - 0x242c42, - 0x20d402, - 0x2f8b83, - 0x2f8b86, - 0x306d42, - 0x308142, - 0x200402, - 0x3616c6, - 0x34de07, - 0x216782, - 0x200902, - 0x26108f, - 0x28cd4d, - 0x28fd0e, - 0x2bb4cc, - 0x208842, - 0x205302, - 0x361945, - 0x325d86, - 0x200b82, - 0x205502, - 0x200682, - 0x28d0c4, - 0x2c14c4, - 0x389fc6, - 0x207742, - 0x28d807, - 0x23c643, - 0x23c648, - 0x23d1c8, - 0x245207, - 0x249946, - 0x20ab02, - 0x2186c3, - 0x2186c7, - 0x292246, - 0x2ecb85, - 0x27a1c8, - 0x2018c2, - 0x3c1007, - 0x207142, - 0x25cdc2, - 0x201702, - 0x219649, - 0x203c02, - 0x10acc8, - 0x201f42, - 0x235783, - 0x3599c7, - 0x200f02, - 0x22cfcc, - 0x22d2cb, - 0x305e86, - 0x3034c5, - 0x203d02, - 0x202a82, - 0x2cb146, - 0x20dd03, - 0x36a307, - 0x2b3f42, - 0x2008c2, - 0x244315, - 0x3a5bd5, - 0x387c53, - 0x3a6113, - 0x2596c7, - 0x28b111, - 0x2908d0, - 0x2f7b92, - 0x29b711, - 0x2a0548, - 0x2a0550, - 0x2a2c8f, - 0x2a6953, - 0x2aea52, - 0x2b8190, - 0x36f14f, - 0x3a4112, - 0x2bac51, - 0x2bfa93, - 0x3426d2, - 0x2d868f, - 0x2e010e, - 0x2e3512, - 0x2e43d1, - 0x2e79cf, - 0x2ea38e, - 0x2ed451, - 0x2fa9d0, - 0x304412, - 0x307211, - 0x309090, - 0x321ecf, - 0x37ab11, - 0x3d2fd0, - 0x33fac6, - 0x314b47, - 0x2153c7, - 0x202402, - 0x288985, - 0x3135c7, - 0x21fcc2, - 0x208d82, - 0x22b8c5, - 0x208743, - 0x26ec86, - 0x2fd1cd, - 0x2fd50c, - 0x2034c2, - 0x25f2cb, - 0x27abca, - 0x22718a, - 0x2ca549, - 0x2fc34b, - 0x2b148d, - 0x313ccc, - 0x240cca, - 0x2466cc, - 0x24e88b, - 0x27784c, - 0x27bd0e, - 0x29cb4b, - 0x2b668c, - 0x2ec543, - 0x2edf06, - 0x3c6782, - 0x305102, - 0x25cb43, - 0x201502, - 0x204243, - 0x353446, - 0x262a87, - 0x2c3846, - 0x2158c8, - 0x354548, - 0x3800c6, - 0x20e482, - 0x31598d, - 0x315ccc, - 0x32bf07, - 0x319707, - 0x223542, - 0x216b82, - 0x203b02, - 0x284302, - 0x336c56, - 0x33b795, - 0x3407d6, - 0x3437d3, - 0x343e92, - 0x35bc93, - 0x35de52, - 0x3b6bcf, - 0x3c5758, - 0x3c6257, - 0x3c6c59, - 0x3c8b18, - 0x3c96d8, - 0x3cb9d7, - 0x3cc457, - 0x3ce196, - 0x3d1cd3, - 0x3d2755, - 0x3d33d2, - 0x3d3853, - 0x212402, - 0x217fc3, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x208503, + 0x22a042, + 0x21b283, + 0x2faf43, 0x2000c2, + 0x146c05, + 0x793c8, + 0xb46c7, + 0x216542, + 0x222bc3, + 0x256d44, + 0x204f03, + 0x343b43, + 0x20e443, + 0x216443, + 0x2296c3, + 0x20b243, + 0x20cb83, + 0x23d343, + 0x1643, + 0x13ff13, + 0x142f14, + 0x146c05, + 0xb46c7, + 0x1e489, + 0x1e1e06, + 0x19108b, + 0x32f46, + 0x60ac7, + 0x145246, + 0x649, + 0x15d3ca, + 0x9560d, + 0x1b60cc, + 0x119cca, + 0x46688, + 0x10f7c5, + 0x1e4c8, + 0x30846, + 0x1d1806, + 0x13906, + 0x602, + 0x213242, + 0x15cb84, + 0x1d4b06, + 0x1255d0, + 0x14dbf0e, + 0x1a1146, + 0x41dcc, + 0x3e37cd0b, + 0x146c05, + 0x152c0b, + 0x3e7d1744, + 0x1c0f87, + 0x2c191, + 0x12140a, + 0x216543, + 0x3ea8ad08, + 0x73605, + 0x89288, + 0x2a2c4, + 0x62e85, + 0x3ec0b186, + 0x1bc60b, + 0xc3d86, + 0x72206, + 0x9a6ca, + 0x16c5cc, + 0x1c2003, + 0x1db944, + 0x3f218004, + 0x5c549, + 0x192e07, + 0xac00a, + 0x14df889, + 0x605, + 0xb6803, + 0x3f63d487, + 0x149f05, + 0x1565b86, + 0x157ac46, + 0x3fb92f4f, + 0xb800c, + 0x107588, + 0x3fc473c3, + 0x10a3c4, + 0xfe88b, + 0x1d694b, + 0x4025240c, + 0x14110c3, + 0xcddc8, + 0xfeb05, + 0xca909, + 0xeb643, + 0x12f7c8, + 0x1426246, + 0x95c87, + 0x4074c6c9, + 0x41a7a6c8, + 0x9dc07, + 0xcf9ca, + 0x41fc9408, + 0x11884d, + 0x12248, + 0x9983, + 0x146a249, + 0x14c203, + 0x32f46, + 0xe91c8, + 0x1a704, + 0x1d8645, + 0xfea83, + 0x1497d03, + 0x20a87, + 0x40a20a83, + 0x40fc2486, + 0x41240644, + 0x4170ba87, + 0xe91c4, + 0xe91c4, + 0xe91c4, + 0xe91c4, + 0x3ec5, + 0x1a18c8, + 0x148209, + 0x41, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x2000c2, + 0x216542, + 0x343b43, + 0x2042c2, + 0x2296c3, + 0x20cb83, + 0x202b03, + 0x3835cf, + 0x38398e, + 0x793c8, + 0x216543, + 0x4e6c7, + 0x222bc3, + 0x343b43, + 0x243543, + 0x2296c3, + 0x20cb83, + 0x1a1084, + 0x12dcc4, + 0x9c04, + 0x224503, + 0x3a2347, + 0x202302, + 0x277c09, + 0x200ac2, + 0x3a714b, + 0x2e808a, + 0x2ec409, + 0x200542, + 0x22a686, + 0x256255, + 0x3a7295, + 0x259fd3, + 0x3a7813, + 0x22d0c2, + 0x22d0c5, + 0x363e0c, + 0x27ff8b, + 0x281405, + 0x202cc2, + 0x30a8c2, + 0x37ed06, + 0x203b42, + 0x2d4b06, + 0x21df0d, + 0x349c8c, + 0x3c4c44, + 0x200882, + 0x205242, + 0x27c0c8, + 0x200202, + 0x32dd86, + 0x39a18f, + 0x32dd90, + 0x3abc44, + 0x256415, + 0x25a153, + 0x20a883, + 0x3630ca, + 0x211d47, + 0x39f1c9, + 0x3129c7, + 0x328c42, + 0x200282, + 0x3cb7c6, + 0x207dc2, + 0x793c8, + 0x202502, + 0x20bd42, + 0x212e47, + 0x38d507, + 0x38d511, + 0x221a05, + 0x221a0e, + 0x22204f, + 0x204242, + 0x2f1c07, + 0x224b48, + 0x2016c2, + 0x2295c2, + 0x227406, + 0x22740f, + 0x23ff50, + 0x237242, + 0x204182, + 0x336588, + 0x210903, + 0x2920c8, + 0x2cb30d, + 0x204183, + 0x3a04c8, + 0x28e48f, + 0x28e84e, + 0x316b8a, + 0x3b3ed1, + 0x3b4350, + 0x21b9cd, + 0x21bd0c, + 0x386987, + 0x363247, + 0x379b89, + 0x20cd02, + 0x202402, + 0x26274c, + 0x262a4b, + 0x200d42, + 0x2d8306, + 0x20c602, + 0x200482, + 0x22e702, + 0x216542, + 0x3dbec4, + 0x241787, + 0x213b02, + 0x248d87, + 0x24a7c7, + 0x215a42, + 0x219d82, + 0x24e585, + 0x20c542, + 0x250e0e, + 0x39654d, + 0x222bc3, + 0x243c8e, + 0x2c764d, + 0x3c4143, + 0x2026c2, + 0x2730c4, + 0x2b3802, + 0x213642, + 0x3a6a05, + 0x3acc07, + 0x250d02, + 0x218242, + 0x256947, + 0x25c8c8, + 0x25c082, + 0x29a986, + 0x2625cc, + 0x26290b, + 0x20eb02, + 0x26c34f, + 0x26c710, + 0x26cb0f, + 0x26ced5, + 0x26d414, + 0x26d90e, + 0x26dc8e, + 0x26e00f, + 0x26e3ce, + 0x26e754, + 0x26ec53, + 0x26f10d, + 0x2817c9, + 0x2975c3, + 0x204342, + 0x322205, + 0x204f06, + 0x200382, + 0x2bfd47, + 0x343b43, + 0x200642, + 0x23e448, + 0x3b4111, + 0x3b4550, + 0x202102, + 0x296907, 0x202642, - 0x3ce98545, - 0x3d25ef05, - 0x3d73ed86, - 0xae888, - 0x3dac0105, - 0x212402, - 0x204542, - 0x3de5de45, - 0x3e285fc5, - 0x3e687a87, - 0x3ea87dc9, - 0x3ef4da84, + 0x25c247, + 0x207bc2, + 0x208309, + 0x37ecc7, + 0x3e5848, + 0x20afc6, + 0x208703, + 0x208705, + 0x225e82, + 0x2004c2, + 0x3cbbc5, + 0x36bd85, + 0x20b402, + 0x237843, + 0x352f87, + 0x3c3c47, + 0x203f02, + 0x38f0c4, + 0x271f43, + 0x33eec9, + 0x3c7348, + 0x209d42, + 0x210442, + 0x22cac7, + 0x231745, + 0x20c708, + 0x327287, + 0x20f543, + 0x3d4986, + 0x21b84d, + 0x21bbcc, + 0x223046, + 0x204202, + 0x31de42, + 0x201582, + 0x28e30f, + 0x28e70e, + 0x372307, + 0x202042, + 0x3d2185, + 0x3d2186, + 0x228882, + 0x200bc2, + 0x298346, + 0x210783, + 0x3c2c46, + 0x2dd585, + 0x2dd58d, + 0x2de195, + 0x2ded4c, + 0x2df0cd, + 0x2df412, + 0x203742, + 0x277782, + 0x202802, + 0x3437c6, + 0x20e586, + 0x43296084, + 0x201cc2, + 0x204f86, + 0x201102, + 0x3a2b45, + 0x205c02, + 0x250f49, + 0x22d58c, + 0x22d8cb, + 0x2003c2, + 0x25e3c8, + 0x211c02, + 0x200a82, + 0x27de46, + 0x266005, + 0x200a87, + 0x2fca45, + 0x2824c5, + 0x23d7c2, + 0x21e582, + 0x208402, + 0x29f107, + 0x301b0d, + 0x301e8c, + 0x25d707, + 0x29a902, + 0x219d02, + 0x3e8008, + 0x38ff08, + 0x2e5e08, + 0x3bc204, + 0x342ac7, + 0x363b83, + 0x206bc2, + 0x203482, + 0x302889, + 0x233347, + 0x2037c2, + 0x27e245, + 0x24cec2, + 0x204682, + 0x30b0c3, + 0x30b0c6, + 0x309602, + 0x30a282, + 0x200402, + 0x2abc86, + 0x273007, + 0x213582, + 0x200902, + 0x291f0f, + 0x243acd, + 0x39e2ce, + 0x2c74cc, + 0x20cbc2, + 0x202a82, + 0x20ae05, + 0x324106, + 0x200b82, + 0x205d42, + 0x200682, + 0x243e44, + 0x2c4b44, + 0x36c186, + 0x201ec2, + 0x292d47, + 0x23f643, + 0x23f648, + 0x2408c8, + 0x24ad47, + 0x251646, + 0x204ac2, + 0x2118c3, + 0x2118c7, + 0x28a6c6, + 0x2ed245, + 0x27f908, + 0x202d82, + 0x35b4c7, + 0x203782, + 0x352902, + 0x204102, + 0x2221c9, + 0x24b302, + 0x14448, + 0x201b82, + 0x25d983, + 0x32e887, + 0x200f02, + 0x22d70c, + 0x22da0b, + 0x2abf06, + 0x223e85, + 0x43609d83, + 0x22bdc2, + 0x202a02, + 0x2cf7c6, + 0x209003, + 0x363447, + 0x211482, + 0x2008c2, + 0x2560d5, + 0x3a7455, + 0x259e93, + 0x3a7993, + 0x279587, + 0x294d91, + 0x2f9010, + 0x2a27d2, + 0x2a7411, + 0x2aae48, + 0x2aae50, + 0x372f4f, + 0x3a5e53, + 0x3abf92, + 0x2c2690, + 0x2bec4f, + 0x2c2bd2, + 0x2c4191, + 0x2d73d3, + 0x2dd112, + 0x2e3d4f, + 0x2e664e, + 0x2e7e92, + 0x2ec211, + 0x2ed70f, + 0x2f58ce, + 0x2f7251, + 0x2f8450, + 0x2ff012, + 0x307751, + 0x309ad0, + 0x30b50f, + 0x366211, + 0x355510, + 0x37f0c6, + 0x31e787, + 0x234ac7, + 0x201c02, + 0x28ce85, + 0x313507, + 0x22a042, + 0x203f82, + 0x3d0545, + 0x228183, + 0x35c606, + 0x301ccd, + 0x30200c, + 0x205002, + 0x363c8b, + 0x27fe4a, + 0x22cf8a, + 0x2ceb09, + 0x300a8b, + 0x3273cd, + 0x313c0c, + 0x2477ca, + 0x24ec8c, + 0x27aa4b, + 0x28124c, + 0x28418e, + 0x2a0b0b, + 0x2eafcc, + 0x2f3103, + 0x2ef706, + 0x3c9402, + 0x308542, + 0x2651c3, + 0x2017c2, + 0x23d203, + 0x351d46, + 0x26d087, + 0x2e2846, + 0x3aad48, + 0x352e08, + 0x306d06, + 0x208e42, + 0x31594d, + 0x315c8c, + 0x3d6b07, + 0x319b07, + 0x221e02, + 0x21f8c2, + 0x211842, + 0x289c82, + 0x3377d6, + 0x33c555, + 0x33f9d6, + 0x344113, + 0x3447d2, + 0x356dd3, + 0x357512, + 0x3b7ccf, + 0x3c6b58, + 0x3c8ed7, + 0x3c98d9, + 0x3cb218, + 0x3cbdd8, + 0x3cccd7, + 0x3ced97, + 0x3d1216, + 0x3d6013, + 0x3d6f55, + 0x3d77d2, + 0x3d7c53, + 0x30182, + 0x43a13a04, + 0x43fc4b88, + 0x3ec5, + 0x216542, + 0x2296c3, + 0x386c2, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x202b03, + 0x2000c2, + 0x2070c2, + 0x44e9bcc5, + 0x4529b285, + 0x4567ad86, + 0x793c8, + 0x45ac3205, + 0x216542, + 0x2104c2, + 0x45f336c5, + 0x4628b685, + 0x4668c587, + 0x46a93f89, + 0x46e1eb44, 0x200382, 0x200642, - 0x3f25bf05, - 0x3f69e949, - 0x3fb36248, - 0x3feb87c5, - 0x403513c7, - 0x40623708, - 0x40b08c85, - 0x40e9f486, - 0x413a9a89, - 0x416dd6c8, - 0x41ad02c8, - 0x41e9ef8a, - 0x422ef084, - 0x426ad705, - 0x42acc788, - 0x42e48985, - 0x214882, - 0x4324bd03, - 0x436abe06, - 0x43a6af08, - 0x43ef4246, - 0x4434df48, - 0x447af006, - 0x44a463c4, - 0x44e03182, - 0x45707b87, - 0x45ab43c4, - 0x45e81487, - 0x463da087, + 0x4725a945, + 0x4769b3c9, + 0x47b36dc8, + 0x47ebb2c5, + 0x4834ff07, + 0x4861cf88, + 0x48b18f85, + 0x48e21486, + 0x4924b649, + 0x496f9ec8, + 0x49ad5408, + 0x49ea4e8a, + 0x4a387144, + 0x4a6b2605, + 0x4aad1108, + 0x4ae876c5, + 0x21ab82, + 0x4b2e3303, + 0x4b6aff46, + 0x4bba9148, + 0x4bf53fc6, + 0x4c273148, + 0x4c7da086, + 0x4ca4fb84, + 0x4ce04cc2, + 0x4d6e2c47, + 0x4dab7d44, + 0x4de85287, + 0x4e3e3047, 0x2003c2, - 0x466a3e85, - 0x46a15cc4, - 0x46faaa07, - 0x4723c0c7, - 0x4768aac6, - 0x47a86b45, - 0x47e9ea47, - 0x482dd548, - 0x487da407, - 0x48adcb49, - 0x48ed9845, - 0x4931d047, - 0x49697b86, - 0x27c4b, - 0x49b47b08, - 0x22800d, - 0x25c089, - 0x279d4b, - 0x27b8cb, - 0x2afecb, - 0x39b08b, + 0x4e6a8485, + 0x4ea7fa84, + 0x4efafd07, + 0x4f23cc07, + 0x4f690046, + 0x4fa8c145, + 0x4fea2f07, + 0x502cdf88, + 0x507e33c7, + 0x50abb909, + 0x50ee3405, + 0x5131f287, + 0x5169b0c6, + 0x2780b, + 0x51a2e2c8, + 0x230c4d, + 0x271d09, + 0x27f48b, + 0x29868b, + 0x2b744b, + 0x2d24cb, + 0x32430b, + 0x3245cb, + 0x324a89, 0x325f8b, 0x32624b, - 0x326709, - 0x32770b, - 0x3279cb, - 0x32850b, - 0x32910a, - 0x32964a, - 0x329c4c, - 0x32e6cb, - 0x32ec0a, - 0x34228a, - 0x34d34e, - 0x34e94e, - 0x34ecca, - 0x350b0a, - 0x351b4b, - 0x351e0b, - 0x35290b, - 0x372ecb, - 0x3734ca, - 0x37418b, - 0x37444a, - 0x3746ca, - 0x37494a, - 0x394a0b, - 0x39bbcb, - 0x39ed4e, - 0x39f0cb, - 0x3a65cb, - 0x3a73cb, - 0x3ab74a, - 0x3ab9c9, - 0x3abc0a, - 0x3ad9ca, - 0x3c514b, - 0x3d00cb, - 0x3d0aca, - 0x3d170b, - 0x3d7a4b, - 0x3e07cb, - 0x49e89188, - 0x4a290209, - 0x4a6a7249, - 0x4aaefcc8, - 0x35f145, - 0x204083, - 0x251f44, - 0x34e385, - 0x34d7c6, - 0x367645, - 0x28f384, - 0x3450c8, - 0x31f645, - 0x299784, - 0x203787, - 0x2a634a, - 0x37738a, - 0x365607, - 0x26b0c7, - 0x2e7ec7, - 0x288047, - 0x33a405, - 0x20e506, - 0x2f34c7, - 0x20fd84, - 0x3ba146, - 0x3ba046, - 0x3dccc5, - 0x389dc4, - 0x29ffc6, - 0x2a5407, - 0x2671c6, - 0x31a487, - 0x235e43, - 0x3a2246, - 0x238d85, - 0x287b87, - 0x26fe0a, - 0x237784, - 0x2219c8, - 0x39a2c9, - 0x2d6b87, - 0x3bba06, - 0x203f48, - 0x2f4989, - 0x3a2084, - 0x2d2a04, - 0x313005, - 0x21e388, - 0x2d6e47, - 0x2b7689, - 0x3690c8, - 0x31b8c6, - 0x266cc6, - 0x2a0b88, - 0x371c86, - 0x25ef05, - 0x28ab86, - 0x281f48, - 0x2870c6, - 0x255f0b, - 0x2be206, - 0x2a280d, - 0x205385, - 0x2b4286, - 0x21f585, - 0x2bc949, - 0x2e0cc7, - 0x3cd248, - 0x39dec6, - 0x2a1949, - 0x2c1246, - 0x26fd85, - 0x2a9606, - 0x2d5506, - 0x2db549, - 0x2c8186, - 0x2a6047, - 0x2d5bc5, - 0x208a43, - 0x22d805, - 0x395c07, - 0x25fac6, - 0x205289, - 0x33ed86, - 0x281686, - 0x226049, - 0x28a589, - 0x2aa947, - 0x207648, - 0x29b149, - 0x288608, - 0x3a7646, - 0x2e5285, - 0x27dd4a, - 0x281706, - 0x347446, - 0x2deb05, - 0x253708, - 0x2f5707, - 0x23114a, - 0x24df06, - 0x2e2785, - 0x3086c6, - 0x20d647, - 0x3bb8c7, - 0x21a3c5, - 0x26ff45, - 0x26c506, - 0x273b06, - 0x2b0d46, - 0x2ccc44, - 0x289b09, - 0x291a06, - 0x306f0a, - 0x30c148, - 0x31cd48, - 0x37738a, - 0x2ef805, - 0x2a5345, - 0x3cac88, - 0x2c7e88, - 0x2398c7, - 0x36ee86, - 0x339788, - 0x20ee87, - 0x27a408, - 0x2c6806, - 0x28bac8, - 0x29de06, - 0x283847, - 0x23b3c6, - 0x29ffc6, - 0x27438a, - 0x305f86, - 0x2e5289, - 0x2a7746, - 0x22910a, - 0x2463c9, - 0x2fd9c6, - 0x2c9144, - 0x2d274d, - 0x285e07, - 0x3325c6, - 0x2d0185, - 0x2c12c5, - 0x396906, - 0x2a9b89, - 0x2c09c7, - 0x282946, - 0x2ced06, - 0x28f409, - 0x288d84, - 0x23f644, - 0x3b53c8, - 0x237ac6, - 0x2a9708, - 0x322708, - 0x3a9f87, - 0x358b89, - 0x3c9f87, - 0x2bffca, - 0x2fee8f, - 0x2b230a, - 0x3e22c5, - 0x282185, - 0x21c3c5, - 0x229747, - 0x20d203, - 0x207848, - 0x355606, - 0x355709, - 0x2f3dc6, - 0x2db387, - 0x2a1709, - 0x3cd148, - 0x2debc7, - 0x325343, - 0x35f1c5, - 0x20d185, - 0x2cca8b, - 0x248a44, - 0x238344, - 0x27d506, - 0x325507, - 0x396e8a, - 0x24bd87, - 0x298787, - 0x285fc5, - 0x3d5c05, - 0x296ac9, - 0x29ffc6, - 0x24bc0d, - 0x273445, - 0x2c3c03, - 0x2059c3, - 0x3617c5, - 0x33a085, - 0x203f48, - 0x283287, - 0x23f3c6, - 0x2a6ec6, - 0x22bbc5, - 0x234287, - 0x25eb47, - 0x252287, - 0x2ad78a, - 0x3a2308, - 0x2ccc44, - 0x286e47, - 0x285187, - 0x363306, - 0x29d487, - 0x2ebd88, - 0x3d8348, - 0x29c3c6, - 0x26b308, - 0x2c8204, - 0x2f34c6, - 0x250dc6, - 0x3d5486, - 0x208006, - 0x218e84, - 0x288106, - 0x2cf246, - 0x2a0386, - 0x24bc06, - 0x205886, - 0x2a7e46, - 0x23f2c8, - 0x2c2a48, - 0x2e1e88, - 0x367848, - 0x3cac06, - 0x210ec5, - 0x22d7c6, - 0x2b8845, - 0x399107, - 0x295d45, - 0x2119c3, - 0x2e5f45, - 0x235fc4, - 0x2059c5, - 0x202a43, - 0x3c4bc7, - 0x399d08, - 0x31a546, - 0x34490d, - 0x282146, - 0x29f945, - 0x219643, - 0x2cc149, - 0x288f06, - 0x23b1c6, - 0x3b2144, - 0x2b2287, - 0x3611c6, - 0x23f845, - 0x270483, - 0x20b344, - 0x285346, - 0x20e604, - 0x275548, - 0x204609, - 0x32e489, - 0x2a950a, - 0x29738d, - 0x23e587, - 0x3c2cc6, - 0x21dd04, - 0x287dc9, - 0x28e308, - 0x290086, - 0x23abc6, - 0x29d487, - 0x2c98c6, - 0x226c46, - 0x25dfc6, - 0x3da10a, - 0x223708, - 0x2ef705, - 0x356c09, - 0x2d75ca, - 0x30cd48, - 0x2a46c8, - 0x299fc8, - 0x2b45cc, - 0x395905, - 0x2a7148, - 0x2c2d46, - 0x2e1446, - 0x2d5707, - 0x24bc85, - 0x28ad05, - 0x32e349, - 0x214207, - 0x3556c5, - 0x2284c7, - 0x2059c3, - 0x2d7a85, - 0x224148, - 0x2d9047, - 0x2a4589, - 0x2e5145, - 0x311404, - 0x2ab1c8, - 0x2eed47, - 0x2ded88, - 0x2206c8, - 0x2b5285, - 0x21f746, - 0x2a6fc6, - 0x3c2909, - 0x250ec7, - 0x2b8cc6, - 0x355347, - 0x208683, - 0x34da84, - 0x2dc405, - 0x2343c4, - 0x24b684, - 0x38fc47, - 0x26da47, - 0x282b04, - 0x2a43d0, - 0x207bc7, - 0x3d5c05, - 0x3b3c8c, - 0x220484, - 0x31e048, - 0x283749, - 0x3d78c6, - 0x31fc48, - 0x27d804, - 0x27d808, - 0x231746, - 0x274208, - 0x2a38c6, - 0x39b90b, - 0x330685, - 0x2dc288, - 0x213684, - 0x28988a, - 0x2a4589, - 0x23b2c6, - 0x2c2f48, - 0x2592c5, - 0x2cb744, - 0x31df46, - 0x252148, - 0x289188, - 0x333e86, - 0x389f44, - 0x27dcc6, - 0x3ca007, - 0x281387, - 0x29d48f, - 0x346f07, - 0x2fda87, - 0x388ac5, - 0x377ac5, - 0x2aa609, - 0x2f7786, - 0x38fe85, - 0x28a887, - 0x2d5988, - 0x302545, - 0x23b3c6, - 0x30bf88, - 0x2f424a, - 0x37e648, - 0x293287, - 0x2ff2c6, - 0x356bc6, - 0x2003c3, - 0x20c483, - 0x2d7789, - 0x29afc9, - 0x2dca46, - 0x2e5145, - 0x2b4448, - 0x2c2f48, - 0x2a3508, - 0x25e04b, - 0x344b47, - 0x3211c9, - 0x29d708, - 0x3505c4, - 0x3d50c8, - 0x295909, - 0x2b8fc5, - 0x229647, - 0x34db05, - 0x289088, - 0x2983cb, - 0x29e790, - 0x2b3e05, - 0x2135cc, - 0x23f585, - 0x25e883, - 0x2b6486, - 0x2ce3c4, - 0x23b686, - 0x2a5407, - 0x203d44, - 0x243208, - 0x20770d, - 0x3224c5, - 0x23e5c4, - 0x2b5684, - 0x2b5689, - 0x2adfc8, - 0x330b47, - 0x2317c8, - 0x289bc8, - 0x282c45, - 0x27ee47, - 0x282bc7, - 0x3559c7, - 0x26ff49, - 0x25e649, - 0x210706, - 0x302d46, - 0x28a946, - 0x326e85, - 0x3c5d04, - 0x3cc9c6, - 0x3d4e86, - 0x282c88, - 0x20d30b, - 0x237647, - 0x21dd04, - 0x361106, - 0x2ec0c7, - 0x2a7a45, - 0x324a85, - 0x267c04, - 0x25e5c6, - 0x3cca48, - 0x287dc9, - 0x261846, - 0x28e108, - 0x23f906, - 0x365f48, - 0x37904c, - 0x282b06, - 0x29f60d, - 0x29fa8b, - 0x2a6105, - 0x25ec87, - 0x2c8286, - 0x3bb788, - 0x210789, - 0x38a7c8, - 0x3d5c05, - 0x20fac7, - 0x288708, - 0x3c7c49, - 0x360e46, - 0x26174a, - 0x3bb508, - 0x38a60b, - 0x22398c, - 0x27d908, - 0x284906, - 0x27e848, - 0x2f3ec7, - 0x347049, - 0x35150d, - 0x29fec6, - 0x30ef48, - 0x2c2909, - 0x2ccd48, - 0x28bbc8, - 0x2cfb4c, - 0x2d0807, - 0x2d31c7, - 0x26fd85, - 0x2c54c7, - 0x2d5848, - 0x31dfc6, - 0x2704cc, - 0x301fc8, - 0x2dd8c8, - 0x23ae06, - 0x2b1f07, - 0x210904, - 0x367848, - 0x28d20c, - 0x29144c, - 0x3e2345, - 0x3dcd47, - 0x389ec6, - 0x2b1e86, - 0x2bcb08, - 0x21b284, - 0x2671cb, - 0x28d94b, - 0x2ff2c6, - 0x207587, - 0x3572c5, - 0x2781c5, - 0x267306, - 0x259285, - 0x248a05, - 0x2d65c7, - 0x2b2789, - 0x273cc4, - 0x23d405, - 0x2f8ac5, - 0x358908, - 0x2bf505, - 0x2d1d09, - 0x39e2c7, - 0x39e2cb, - 0x2fd706, - 0x23f009, - 0x389d08, - 0x3ae7c5, - 0x355ac8, - 0x25e688, - 0x286407, - 0x2b5a87, - 0x38fcc9, - 0x274147, - 0x295c49, - 0x2d11cc, - 0x2dca48, - 0x2c0dc9, - 0x2c4d07, - 0x289c89, - 0x367207, - 0x223a88, - 0x358d45, - 0x2f3446, - 0x2d01c8, - 0x21c488, - 0x2d7489, - 0x248a47, - 0x278bc5, - 0x3cde49, - 0x2fde86, - 0x297b84, - 0x33ff06, - 0x26ad88, - 0x2e6587, - 0x20d508, - 0x26b3c9, - 0x3a1a87, - 0x2a3646, - 0x25ed44, - 0x2e5fc9, - 0x27ecc8, - 0x23acc7, - 0x2702c6, - 0x20d246, - 0x3473c4, - 0x26b5c6, - 0x205943, - 0x330209, - 0x330646, + 0x3283cb, + 0x328fca, + 0x32950a, + 0x329b0c, + 0x32fecb, + 0x33040a, + 0x34218a, + 0x34c2ce, + 0x34d44e, + 0x34d7ca, + 0x34f78a, + 0x35044b, + 0x35070b, + 0x35120b, + 0x36e7cb, + 0x36edca, + 0x36fa8b, + 0x36fd4a, + 0x36ffca, + 0x37024a, + 0x391a8b, + 0x39944b, + 0x39bc0e, + 0x39bf8b, + 0x3a7e4b, + 0x3a9ecb, + 0x3ada8a, + 0x3add09, + 0x3adf4a, + 0x3afa0a, + 0x3c654b, + 0x3d3d8b, + 0x3d4f4a, + 0x3d5a4b, + 0x3dbc4b, + 0x3e8b8b, + 0x51e8d908, + 0x522946c9, + 0x526ab689, + 0x52af0788, + 0x359645, + 0x20dec3, + 0x25cd84, + 0x2cbb05, + 0x21e886, + 0x221205, + 0x293a44, + 0x2bfc48, + 0x31fc85, + 0x29d144, + 0x20d007, + 0x2aa84a, + 0x24104a, + 0x372407, + 0x3a9307, + 0x2ec787, + 0x291247, + 0x313305, + 0x219686, + 0x372c47, + 0x35a804, + 0x2c9046, + 0x3dc846, + 0x203345, + 0x333144, + 0x2a80c6, + 0x2a9a07, + 0x22fa86, + 0x2b6407, + 0x23e343, + 0x39f546, + 0x3367c5, + 0x28c687, + 0x27588a, + 0x23e544, + 0x21ad88, + 0x2ba709, + 0x2c9607, + 0x3c6006, + 0x267608, + 0x37ae89, + 0x39f384, + 0x322584, + 0x30c2c5, + 0x21b448, + 0x2dbb47, + 0x30a449, + 0x3d8f48, + 0x31b5c6, + 0x361b46, + 0x2a5ac8, + 0x36d846, + 0x29b285, + 0x290106, + 0x285988, + 0x28e206, + 0x261acb, + 0x38a106, + 0x2a6f8d, + 0x20d485, + 0x2b7c06, + 0x21d045, + 0x3c8609, + 0x2e4747, + 0x3d2008, + 0x3c4f86, + 0x2a6209, + 0x2c48c6, + 0x275805, + 0x216b86, + 0x2d7cc6, + 0x2e02c9, + 0x2cc886, + 0x31d5c7, + 0x2dec05, + 0x20c043, + 0x261c45, + 0x2bc687, + 0x3640c6, + 0x20d389, + 0x27ad86, + 0x285486, + 0x226a89, + 0x28fb09, + 0x2aea87, + 0x201dc8, + 0x29f949, + 0x28cb08, + 0x3e5e06, + 0x2e8945, + 0x2834ca, + 0x285506, + 0x3cfc86, + 0x2e2b85, + 0x25ec08, + 0x358d07, + 0x239a8a, + 0x257686, + 0x303885, + 0x30aa86, + 0x2048c7, + 0x3c5ec7, + 0x2ac545, + 0x2759c5, + 0x23fdc6, + 0x36a446, + 0x269f46, + 0x2d15c4, + 0x28ebc9, + 0x2966c6, + 0x3097ca, + 0x232148, + 0x31ef88, + 0x24104a, + 0x2421c5, + 0x2a9945, + 0x3def48, + 0x2ce108, + 0x23ae87, + 0x288686, + 0x33a388, + 0x20b607, + 0x28d208, + 0x2ca506, + 0x290f08, + 0x2a1dc6, + 0x287287, + 0x29ea46, + 0x2a80c6, + 0x2313ca, + 0x3dbf46, + 0x2e8949, + 0x2abb86, + 0x212f8a, + 0x24fb89, + 0x3024c6, + 0x2cd844, + 0x3222cd, + 0x28b4c7, + 0x39fe06, + 0x2d52c5, + 0x2c4945, + 0x394246, + 0x2ae109, + 0x369787, + 0x286386, + 0x393386, + 0x293ac9, + 0x2e37c4, + 0x3025c4, + 0x30f188, + 0x2fbec6, + 0x2adc88, + 0x216b08, + 0x260507, + 0x30e2c9, + 0x347a47, + 0x2c30ca, + 0x30334f, + 0x2396ca, + 0x20ac05, + 0x285bc5, + 0x216945, + 0x3cd547, + 0x204483, + 0x201fc8, + 0x2f6086, + 0x2f6189, + 0x2f5f86, + 0x2e0c87, + 0x2a5fc9, + 0x3d1f08, + 0x3c87c7, + 0x322d43, + 0x3596c5, + 0x204405, + 0x2d140b, + 0x287784, + 0x300084, + 0x282c86, + 0x322f07, + 0x3947ca, + 0x3b0887, + 0x29bf07, + 0x28b685, + 0x3de685, + 0x2934c9, + 0x2a80c6, + 0x3b070d, + 0x354745, + 0x2c7183, + 0x20dac3, + 0x258b05, + 0x33ac85, + 0x267608, + 0x286cc7, + 0x245246, + 0x2ab306, + 0x235745, + 0x23c847, + 0x3e4107, + 0x25d0c7, + 0x2b268a, + 0x39f608, + 0x2d15c4, + 0x28df87, + 0x28a847, + 0x35df46, + 0x2a1447, + 0x2ea808, + 0x35d588, + 0x27a306, + 0x3a9548, + 0x2cc904, + 0x372c46, + 0x266286, + 0x246046, + 0x2025c6, + 0x214ac4, + 0x291306, + 0x2d3e46, + 0x2a5386, + 0x224006, + 0x20d986, + 0x2ea646, + 0x245148, + 0x2c6648, + 0x2e5688, + 0x221408, + 0x3deec6, + 0x20f1c5, + 0x27b9c6, + 0x2bb345, + 0x397087, + 0x246005, + 0x217943, + 0x26a545, + 0x23b844, + 0x20dac5, + 0x223a03, + 0x2c4707, + 0x3aa1c8, + 0x2b64c6, + 0x2d630d, + 0x285b86, 0x2a4905, - 0x2a6ec6, - 0x2db905, - 0x288b88, - 0x33f3c7, - 0x23bb46, - 0x25de86, - 0x31cd48, - 0x2aa787, - 0x29ff05, - 0x2a41c8, - 0x3b1b88, - 0x3bb508, - 0x23f445, - 0x2f34c6, - 0x32e249, - 0x3c2784, - 0x2db78b, - 0x22694b, - 0x2ef609, - 0x2059c3, - 0x257b05, - 0x2ef4c6, - 0x241f88, - 0x30a604, - 0x31a546, - 0x2ad8c9, - 0x2ce1c5, - 0x2d6506, - 0x2eed46, - 0x203f44, - 0x29a14a, - 0x2a4848, - 0x21c486, - 0x375c45, - 0x357147, - 0x33a2c7, - 0x21f744, - 0x226b87, - 0x2bffc4, - 0x369146, - 0x207883, - 0x26ff45, - 0x2ba485, - 0x25b688, - 0x287005, - 0x282849, - 0x2abc07, - 0x36768b, - 0x2abc0c, - 0x2ac20a, - 0x3513c7, - 0x203843, - 0x280d88, - 0x23f605, - 0x3025c5, - 0x35f284, - 0x223986, - 0x283746, - 0x26b607, - 0x3a9d8b, - 0x218e84, - 0x309d04, - 0x2d6784, - 0x2db206, - 0x203d44, - 0x21e488, - 0x35f085, - 0x21a245, - 0x2a3447, - 0x25ed89, - 0x33a085, - 0x39690a, - 0x2d5ac9, - 0x2aceca, - 0x3da249, - 0x354004, - 0x2cedc5, - 0x2c99c8, - 0x3aaacb, - 0x313005, - 0x2ecd46, - 0x241c04, - 0x282d86, - 0x3a1909, - 0x2ec1c7, - 0x33ef48, - 0x297706, - 0x3c9f87, - 0x289188, - 0x37c006, - 0x3d5e84, - 0x386b47, - 0x388705, - 0x398187, - 0x29f484, - 0x2c8206, - 0x30ca48, - 0x29fc48, - 0x33dec7, - 0x3801c8, - 0x29dec5, - 0x205804, - 0x377288, - 0x3802c4, - 0x21c345, - 0x30cc44, - 0x20ef87, - 0x291ac7, - 0x289dc8, - 0x2def06, - 0x286f85, - 0x282648, - 0x37e848, - 0x2a9449, - 0x226c46, - 0x2311c8, - 0x28970a, - 0x2a7ac8, - 0x308c85, - 0x22d9c6, - 0x2a9a48, - 0x20fb8a, - 0x265587, - 0x28e745, - 0x297d88, - 0x2b3a44, - 0x253786, - 0x2d3548, - 0x205886, - 0x33aa08, - 0x2d9e07, - 0x203686, - 0x2c9144, - 0x26a4c7, - 0x2c3304, - 0x3a18c7, - 0x23b00d, - 0x239945, - 0x2d8e4b, - 0x2916c6, - 0x252f48, - 0x2431c4, - 0x3c0706, - 0x285346, - 0x27eb87, - 0x29f2cd, - 0x305587, - 0x2c3b48, - 0x28bd45, - 0x296c88, - 0x2d6dc6, - 0x29df48, - 0x38ecc6, - 0x3b3a07, - 0x28a149, - 0x35fe07, - 0x290348, - 0x34c1c5, - 0x22bc48, - 0x2b1dc5, - 0x2d6d05, - 0x37d145, - 0x24dc03, - 0x208084, - 0x297f85, - 0x3a9a89, - 0x36ec46, - 0x2ebe88, - 0x2eefc5, - 0x2c5387, - 0x2e0fca, - 0x2d6449, - 0x2d540a, - 0x2e1f08, - 0x22830c, - 0x28a90d, - 0x314e43, - 0x33a908, - 0x20b305, - 0x2f4006, - 0x3ccfc6, - 0x2d2405, - 0x355449, - 0x348ec5, - 0x282648, - 0x258946, - 0x370286, - 0x2ab089, - 0x3b0b47, - 0x298686, - 0x2e0f48, - 0x3d5388, - 0x2efec7, - 0x2cf3ce, - 0x2d7005, - 0x3c7b45, - 0x205788, - 0x36f947, - 0x20d282, - 0x2cf804, - 0x23b58a, - 0x23ad88, - 0x25e7c6, - 0x2a1848, - 0x2a6fc6, - 0x25f708, - 0x2b8cc8, - 0x30b3c4, - 0x2c5745, - 0x602284, - 0x602284, - 0x602284, - 0x207783, - 0x20d0c6, - 0x282b06, - 0x2a5dcc, - 0x202503, - 0x2d75c6, - 0x207844, - 0x288e88, - 0x2ad705, - 0x23b686, - 0x2cc888, - 0x2e3246, - 0x23bac6, - 0x203d48, - 0x2dc487, - 0x273f09, - 0x3df7ca, - 0x26dbc4, - 0x295d45, - 0x2b7645, - 0x2d9a86, - 0x23e5c6, - 0x2a5b46, - 0x3d3f06, - 0x274044, - 0x27404b, - 0x266cc4, - 0x23f185, - 0x2b7cc5, - 0x3aa046, - 0x209648, - 0x28a7c7, - 0x3305c4, - 0x213c03, - 0x2b3545, - 0x33fdc7, - 0x28a6cb, - 0x25b587, - 0x2cc788, - 0x2c5887, - 0x2715c6, - 0x25c348, - 0x2cad4b, - 0x34e2c6, - 0x214a09, - 0x2caec5, - 0x325343, - 0x2d6506, - 0x2d9d08, - 0x215203, - 0x2a11c3, - 0x289186, - 0x2a6fc6, - 0x379eca, - 0x284945, - 0x28518b, - 0x2a6e0b, - 0x2163c3, - 0x206743, - 0x2bff44, - 0x2e0e07, - 0x27d904, - 0x25ef44, - 0x2c2bc4, - 0x2a7dc8, - 0x375b88, - 0x20c409, - 0x2d98c8, - 0x37d3c7, - 0x24bc06, - 0x2ebacf, - 0x2d7146, - 0x2e15c4, - 0x3759ca, - 0x33fcc7, - 0x2c3406, - 0x297bc9, - 0x20c385, - 0x25b7c5, - 0x20c4c6, - 0x22bd83, - 0x2b3a89, - 0x223886, - 0x26b189, - 0x396e86, - 0x26ff45, - 0x361bc5, - 0x206643, - 0x3131c8, - 0x330d07, - 0x355604, - 0x288d08, - 0x2e11c4, - 0x31c046, - 0x2b6486, - 0x23d846, - 0x2dc149, - 0x302545, - 0x29ffc6, - 0x277389, - 0x2d6146, - 0x2a7e46, - 0x3a8b46, - 0x22e405, - 0x30cc46, - 0x3b3a04, - 0x358d45, - 0x21c484, - 0x2c45c6, - 0x273404, - 0x207a43, - 0x28e3c5, - 0x234f88, - 0x366a47, - 0x30a689, - 0x28e648, - 0x2a0951, - 0x2eedca, - 0x2ff207, - 0x3d8686, - 0x207844, - 0x2d02c8, - 0x2e2e88, - 0x2a0b0a, - 0x2d1acd, - 0x2a9606, - 0x203e46, - 0x26a586, - 0x21a247, - 0x2c3c05, - 0x35c6c7, - 0x207705, - 0x39e404, - 0x206686, - 0x30ec47, - 0x2b378d, - 0x2a9987, - 0x344fc8, - 0x282949, - 0x22d8c6, - 0x360dc5, - 0x2393c4, - 0x26ae86, - 0x21f646, - 0x23af06, - 0x2a20c8, - 0x22cdc3, - 0x23e443, - 0x34bcc5, - 0x2d2a86, - 0x2b8c85, - 0x297908, - 0x2a55ca, - 0x33f504, - 0x288e88, - 0x299fc8, - 0x25ef47, - 0x28ed49, - 0x2cc488, - 0x287e47, - 0x2c2e46, - 0x20588a, - 0x26af08, - 0x32df09, - 0x2ae088, - 0x224a09, - 0x3d8547, - 0x35ce45, - 0x2a73c6, - 0x31de48, - 0x2530c8, - 0x2bbfc8, - 0x21e608, - 0x23f185, - 0x200d04, - 0x233908, - 0x241984, - 0x3da044, - 0x26ff45, - 0x2997c7, - 0x25eb49, - 0x27e987, - 0x2260c5, - 0x27d706, - 0x375446, - 0x209744, - 0x2ab3c6, - 0x2855c4, - 0x293ec6, - 0x25e906, - 0x215046, - 0x3d5c05, - 0x2977c7, - 0x203843, - 0x22b509, - 0x31cb48, - 0x287cc4, - 0x287ccd, - 0x29fd48, - 0x2fcd48, - 0x32de86, - 0x28a249, - 0x2d6449, - 0x3a1605, - 0x2a56ca, - 0x2a844a, - 0x2b5c8c, - 0x2b5e06, - 0x280986, - 0x2d79c6, - 0x393189, - 0x2f4246, - 0x223b06, - 0x348f86, - 0x367848, - 0x37e646, - 0x2e094b, - 0x299945, - 0x21a245, - 0x281485, - 0x3b5146, - 0x205843, - 0x23d7c6, - 0x2a9907, - 0x2d0185, - 0x27fbc5, - 0x2c12c5, - 0x301c46, - 0x336144, - 0x336146, - 0x2a9e49, - 0x3b4fcc, - 0x39e148, - 0x2520c4, - 0x30c946, - 0x2917c6, - 0x2d9d08, - 0x2c2f48, - 0x3b4ec9, - 0x357147, - 0x237809, - 0x278286, - 0x22c544, - 0x20af04, - 0x286dc4, - 0x289188, - 0x25e98a, - 0x33a006, - 0x36eb07, - 0x398407, - 0x23f105, - 0x2b7604, - 0x2958c6, - 0x2c3c46, - 0x21b2c3, - 0x31c987, - 0x2205c8, - 0x3a174a, - 0x22e4c8, - 0x34df48, - 0x273445, - 0x2a6205, - 0x237745, - 0x23f4c6, - 0x242546, - 0x25d405, - 0x330449, - 0x2b740c, - 0x307d87, - 0x2a0b88, - 0x251045, - 0x602284, - 0x267c84, - 0x2d9184, - 0x212d06, - 0x2a8d0e, - 0x25b847, - 0x21a445, - 0x3c270c, - 0x3d2347, - 0x30ebc7, - 0x30f7c9, - 0x221a89, - 0x28e745, - 0x31cb48, - 0x32e249, - 0x3bb3c5, - 0x2d00c8, + 0x2221c3, + 0x2d0ac9, + 0x2e3946, + 0x2a34c6, + 0x29c484, + 0x239647, + 0x2f43c6, + 0x303ac5, + 0x244243, + 0x211184, + 0x28aa06, + 0x219784, + 0x3c11c8, + 0x2064c9, + 0x369d09, + 0x2ada8a, + 0x2495cd, + 0x23e8c7, + 0x206986, + 0x21e5c4, + 0x293f89, + 0x2924c8, + 0x294546, + 0x242b06, + 0x2a1447, + 0x2c3b06, + 0x223686, + 0x3d0c06, + 0x3e30ca, + 0x21cf88, + 0x234885, + 0x245749, + 0x270b0a, + 0x33b008, + 0x2a8cc8, + 0x2a3448, + 0x3e450c, + 0x3996c5, + 0x2ab588, + 0x2ca006, + 0x29dac6, + 0x2dab47, + 0x3b0785, + 0x290285, + 0x369bc9, + 0x210b07, + 0x2f6145, + 0x2286c7, + 0x20dac3, + 0x2dc505, + 0x229108, + 0x2cc507, + 0x2a8b89, + 0x2e1dc5, + 0x30a804, + 0x31dc08, + 0x2cb5c7, + 0x3c8988, + 0x22aa48, + 0x392005, + 0x353b46, + 0x2ab406, + 0x30c689, + 0x266387, + 0x2bbb86, + 0x2585c7, + 0x215103, + 0x21eb44, + 0x2e6fc5, + 0x23c984, + 0x2526c4, + 0x28db87, + 0x2743c7, + 0x286544, + 0x2a89d0, + 0x333847, + 0x3de685, + 0x25084c, + 0x22a804, + 0x2c1108, + 0x287189, + 0x2be9c6, + 0x32f908, + 0x27a484, + 0x282f88, + 0x23a086, + 0x231248, + 0x2a93c6, + 0x2d2d4b, + 0x331b85, + 0x2e6e48, + 0x21a484, + 0x28f78a, + 0x2a8b89, + 0x29e946, + 0x21b6c8, + 0x2657c5, + 0x2d00c4, 0x2c1006, - 0x377506, - 0x2463c4, - 0x294908, - 0x204883, - 0x20ccc4, - 0x2b35c5, - 0x39db87, - 0x2e5e45, - 0x2895c9, - 0x29664d, - 0x2af506, - 0x213c44, - 0x36ee08, - 0x2b25ca, - 0x2144c7, - 0x34bb05, - 0x20cd03, - 0x2a6fce, - 0x3132cc, - 0x30ce47, - 0x2a8ec7, - 0x4539cd47, - 0xb20c6, - 0x27c44, - 0x215d03, - 0x2f4285, - 0x2d9185, - 0x2a1c08, - 0x29edc9, - 0x251fc6, - 0x27d904, - 0x2ff146, - 0x2398cb, - 0x2eab4c, - 0x24dcc7, - 0x2e0c05, - 0x3b1a88, - 0x2efc85, - 0x3759c7, - 0x307b87, - 0x2475c5, - 0x205843, - 0x21fac4, - 0x2e6445, - 0x273bc5, - 0x273bc6, - 0x2a2608, - 0x30ec47, - 0x3cd2c6, - 0x3472c6, - 0x37d086, - 0x30f0c9, - 0x27ef47, - 0x251e46, - 0x2eacc6, - 0x3cae06, - 0x2b4385, - 0x20e046, - 0x3b3245, - 0x2bf588, - 0x29940b, - 0x295606, - 0x398444, - 0x305bc9, - 0x2abc04, - 0x2c0f88, - 0x3116c7, - 0x28bac4, - 0x2cb948, - 0x2d1604, - 0x2b43c4, - 0x27a345, - 0x322506, - 0x2a7d07, - 0x249b03, - 0x2a3705, - 0x2ff4c4, - 0x3c7b86, - 0x3a1688, - 0x37e545, - 0x2990c9, - 0x3513c5, - 0x323488, - 0x2bc807, - 0x330748, - 0x2cb587, - 0x2fdb49, - 0x287f86, - 0x372946, - 0x29b284, - 0x309c45, - 0x31520c, - 0x281487, - 0x282047, - 0x23e208, - 0x2af506, - 0x2a9844, - 0x34a144, - 0x38fb49, - 0x2d7ac6, - 0x296b47, - 0x27e7c4, - 0x2ab4c6, - 0x3c1685, - 0x2dea47, - 0x2e08c6, - 0x261609, - 0x39b307, - 0x29d487, - 0x2aaf06, - 0x270205, - 0x286b08, - 0x223708, - 0x371f86, - 0x37e585, - 0x2e93c6, - 0x203803, - 0x2a1a89, - 0x2a58ce, - 0x2cb2c8, - 0x2e12c8, - 0x371d8b, - 0x299306, - 0x398304, - 0x23bac4, - 0x2a59ca, - 0x2134c7, - 0x251f05, - 0x214a09, - 0x2cf305, - 0x3da087, - 0x232144, - 0x204787, - 0x322608, - 0x2d6c46, - 0x2c8389, - 0x2cc58a, - 0x213446, - 0x29f886, - 0x2b7c45, - 0x39f685, - 0x37d947, - 0x246d48, - 0x3c15c8, - 0x30b3c6, - 0x361c45, - 0x23e34e, - 0x2ccc44, - 0x2a1b85, - 0x27d089, - 0x2f7588, - 0x2931c6, - 0x2a3ccc, - 0x2a51d0, - 0x2a894f, - 0x2aa508, - 0x3513c7, - 0x3d5c05, - 0x297f85, - 0x2a7b89, - 0x297f89, - 0x27ddc6, - 0x313087, - 0x309b45, - 0x337c49, - 0x363386, - 0x2f408d, - 0x286c89, - 0x25ef44, - 0x2cb048, - 0x2339c9, - 0x33a1c6, - 0x280f85, - 0x372946, - 0x33ee09, - 0x27e648, - 0x210ec5, - 0x289804, - 0x2a3e8b, - 0x33a085, - 0x242006, - 0x28ac46, - 0x22a986, - 0x25e24b, - 0x2991c9, - 0x347205, - 0x399007, - 0x2eed46, - 0x233086, - 0x289488, - 0x30ed89, - 0x344d8c, - 0x33fbc8, - 0x31e806, - 0x333e83, - 0x360186, - 0x2b58c5, - 0x285cc8, - 0x3e21c6, - 0x2dec88, - 0x24be05, - 0x293f85, - 0x2c0b88, - 0x3d5247, - 0x3ccf07, - 0x26b607, - 0x31fc48, - 0x2d9b88, - 0x2e2d86, - 0x2c4407, - 0x34d947, - 0x2b578a, - 0x238643, - 0x3b5146, - 0x23e2c5, - 0x215cc4, - 0x282949, - 0x2fdac4, - 0x2cbd84, - 0x2a3944, - 0x2a8ecb, - 0x330c47, - 0x23e585, - 0x29dbc8, - 0x27d706, - 0x27d708, - 0x284886, - 0x294845, - 0x294b05, - 0x296086, - 0x2971c8, - 0x297b08, - 0x282b06, - 0x29da0f, - 0x2a1550, - 0x205385, - 0x203843, - 0x22c605, - 0x321108, - 0x297e89, - 0x3bb508, - 0x312e88, - 0x385808, - 0x330d07, - 0x27d3c9, - 0x2dee88, - 0x2a4f84, - 0x2a37c8, - 0x3589c9, - 0x2c4a07, - 0x395d44, - 0x27ea48, - 0x29758a, - 0x2ff746, - 0x2a9606, - 0x226b09, - 0x2a5407, - 0x2dbfc8, - 0x2321c8, - 0x347988, - 0x259805, - 0x21ce85, - 0x21a245, - 0x2d9145, - 0x2c2747, - 0x205845, - 0x2d0185, - 0x203546, - 0x3bb447, - 0x3aaa07, - 0x297886, - 0x2e2445, - 0x242006, - 0x280e45, - 0x2c7d08, - 0x309ac4, - 0x2d61c6, - 0x353544, - 0x2cb748, - 0x32288a, - 0x28328c, - 0x2a6505, - 0x21a306, - 0x344f46, - 0x348d86, - 0x31e884, - 0x3cd585, - 0x284147, - 0x2a5489, - 0x2db647, - 0x602284, - 0x602284, - 0x330ac5, - 0x2dfe04, - 0x2a328a, - 0x27d586, - 0x2c0b04, - 0x3dccc5, - 0x2c1d85, - 0x2c3b44, - 0x28a887, - 0x3cdfc7, - 0x2db208, - 0x2e94c8, - 0x210ec9, - 0x388d08, - 0x29048b, - 0x2a7cc4, - 0x233185, - 0x38ff05, - 0x26b589, - 0x30ed89, - 0x305ac8, - 0x368f48, - 0x2e6bc4, - 0x291805, - 0x204083, - 0x2d9a45, - 0x2a0046, - 0x29ec0c, - 0x21f546, - 0x280e86, - 0x293445, - 0x301cc8, - 0x2eadc6, - 0x3d8806, - 0x2a9606, - 0x22e24c, - 0x38ffc4, - 0x37d1ca, - 0x293388, - 0x29ea47, - 0x2ff3c6, - 0x252087, - 0x2fed45, - 0x2702c6, - 0x363d86, - 0x377987, - 0x2cc284, - 0x20f085, - 0x27d084, - 0x39e487, - 0x27d2c8, - 0x28080a, - 0x288587, - 0x2ac487, - 0x351347, - 0x2efdc9, - 0x29ec0a, - 0x22c503, - 0x366a05, - 0x215083, - 0x2c2c09, - 0x2d9f48, - 0x388ac7, - 0x3bb609, - 0x223806, - 0x358e08, - 0x3c4b45, - 0x37e94a, - 0x2079c9, - 0x29c289, - 0x2d5707, - 0x2e2f89, - 0x214f48, - 0x25f906, - 0x21a4c8, - 0x27ff07, - 0x274147, - 0x2d5ac7, - 0x2dd548, - 0x30c7c6, - 0x297345, - 0x284147, - 0x29f388, - 0x37d004, - 0x306dc4, - 0x298587, - 0x2b9047, - 0x32e0ca, - 0x25f886, - 0x3c82ca, - 0x2cf747, - 0x2cca07, - 0x20f144, - 0x295d04, - 0x2de946, - 0x361444, - 0x36144c, - 0x311605, - 0x21c2c9, - 0x2f0e84, - 0x2c3c05, - 0x2b2548, - 0x297bc5, - 0x396906, - 0x2980c4, - 0x2ab98a, - 0x384806, - 0x24774a, - 0x3da407, - 0x20d645, - 0x22bd85, - 0x23f14a, - 0x247685, - 0x2a7b46, - 0x241984, - 0x2c00c6, - 0x37da05, - 0x3e2286, - 0x33decc, - 0x2e3cca, - 0x2a8544, - 0x24bc06, - 0x2a5407, - 0x2e0844, - 0x367848, - 0x2ecc46, - 0x398289, - 0x2cd009, - 0x2dcb49, - 0x2db946, - 0x280006, - 0x21a607, - 0x330388, - 0x27fe09, - 0x330c47, - 0x29dd46, - 0x3ca007, - 0x26a445, - 0x2ccc44, - 0x21a1c7, - 0x34db05, - 0x28f645, - 0x200cc7, - 0x247488, - 0x3b1a06, - 0x2a01cd, - 0x2a1e0f, - 0x2a6e0d, - 0x226104, - 0x235086, - 0x2e4088, - 0x348f45, - 0x2b5948, - 0x2862ca, - 0x25ef44, - 0x239b06, - 0x211787, - 0x218e87, - 0x2dc549, - 0x21a485, - 0x2c3b44, - 0x2c568a, - 0x2cc049, - 0x2e3087, - 0x30d406, - 0x33a1c6, - 0x291746, - 0x386c06, - 0x2e398f, - 0x2e3f49, - 0x37e646, - 0x38f786, - 0x32fa49, - 0x2c4507, - 0x220d03, - 0x22e3c6, - 0x20c483, - 0x2d22c8, - 0x2b0e07, - 0x2aa709, - 0x2b6308, - 0x3cd048, - 0x367346, - 0x21f489, - 0x307cc5, - 0x2a3504, - 0x35cf07, - 0x393205, - 0x226104, - 0x23e648, - 0x213784, - 0x2c4247, - 0x399c86, - 0x26c5c5, - 0x2ae088, - 0x33a08b, - 0x31d047, - 0x23f3c6, - 0x2d71c4, - 0x3aef86, - 0x26ff45, - 0x34db05, - 0x286889, - 0x28a489, - 0x274184, - 0x2741c5, - 0x24bc45, - 0x37e7c6, - 0x31cc48, - 0x2ce7c6, - 0x22040b, - 0x3d774a, - 0x2cb685, - 0x294b86, - 0x25b285, - 0x3c2205, - 0x256147, - 0x3b53c8, - 0x237804, - 0x385406, - 0x297b86, - 0x215107, - 0x325304, - 0x285346, - 0x229845, - 0x229849, - 0x280204, - 0x2b7789, - 0x282b06, - 0x2d08c8, - 0x24bc45, - 0x398505, - 0x3e2286, - 0x344c89, - 0x221a89, - 0x280f06, - 0x2f7688, - 0x296788, - 0x25b244, - 0x2c6604, - 0x2c6608, - 0x3326c8, - 0x237909, - 0x29ffc6, - 0x2a9606, - 0x33964d, - 0x31a546, - 0x378f09, - 0x201f45, - 0x20c4c6, - 0x347b08, - 0x336085, - 0x34d984, - 0x26ff45, - 0x289fc8, - 0x2a3049, - 0x27d144, - 0x2c8206, - 0x29c4ca, - 0x30cd48, - 0x32e249, - 0x270bca, - 0x3bb586, - 0x2a1fc8, - 0x375785, - 0x293608, - 0x2fedc5, - 0x2236c9, - 0x33bc49, - 0x21fb82, - 0x2caec5, - 0x277f06, - 0x282a47, - 0x215cc5, - 0x33eb86, - 0x319508, - 0x2af506, - 0x2c9889, - 0x282146, - 0x289308, - 0x24ef85, - 0x394886, - 0x3b3b08, - 0x289188, - 0x3d8448, - 0x31b948, - 0x20e044, - 0x21f783, - 0x2c9ac4, - 0x288786, - 0x26a484, - 0x2e1207, - 0x3d8709, - 0x2d6785, - 0x2321c6, - 0x22e3c6, - 0x2a244b, - 0x2c3346, - 0x273686, - 0x2d62c8, - 0x266cc6, - 0x20d443, - 0x20bb03, - 0x2ccc44, - 0x2310c5, - 0x23f747, - 0x27d2c8, - 0x27d2cf, - 0x28404b, - 0x31ca48, - 0x2c8286, - 0x31cd4e, - 0x23f583, - 0x23f6c4, - 0x2c32c5, - 0x2c39c6, - 0x2959cb, - 0x299886, - 0x30c009, - 0x26c5c5, - 0x249a48, - 0x209bc8, - 0x22194c, - 0x2a8f06, - 0x2d9a86, - 0x2e5145, - 0x290108, - 0x283285, - 0x3505c8, - 0x2a404a, - 0x2a7249, - 0x602284, - 0x2000c2, - 0x4b212402, - 0x200382, - 0x20e704, - 0x20b982, - 0x217544, - 0x203182, - 0x5803, - 0x2003c2, - 0x208502, - 0xae888, - 0x4cc4, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x7542, - 0x4b202, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x1fcc2, - 0x4642, - 0x72c2, - 0x24ac43, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x217fc3, - 0x23e083, - 0x219ac3, - 0x24cd44, - 0x22ea43, - 0x236704, - 0x233fc3, - 0x2e5904, - 0x266a83, - 0x215f87, - 0x23cb03, - 0x205803, - 0x321388, - 0x23e083, - 0x293b0b, - 0x2ffec3, - 0x243bc6, - 0x22dc42, - 0x2fa00b, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23e083, - 0x221d43, - 0x210cc3, - 0x2000c2, - 0xae888, - 0x334f05, - 0x34db88, - 0x2f4fc8, - 0x212402, - 0x36a4c5, - 0x3ca147, - 0x2031c2, - 0x243407, - 0x200382, - 0x253d47, - 0x23a489, - 0x272888, - 0x347809, - 0x210382, - 0x3d5f47, - 0x32ad04, - 0x3ca207, - 0x3d7647, - 0x25a642, - 0x23cb03, - 0x20a942, - 0x203182, - 0x2003c2, - 0x205b42, - 0x200902, - 0x208502, - 0x2e1a45, - 0x227885, - 0x12402, - 0x33fc3, - 0x22ea43, - 0x233fc3, - 0x27e883, - 0x266a83, - 0x204903, - 0x217fc3, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0xfe83, - 0x101, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x2191c3, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0x217c83, - 0x4e4b1706, - 0x22383, - 0xd7405, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0x5242, - 0xae888, - 0x12f603, - 0x5803, - 0x1c0443, - 0x46d04, - 0x147b604, - 0xf0085, - 0x2000c2, - 0x3993c4, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x247e03, - 0x22f845, - 0x2191c3, - 0x21e1c3, - 0x217fc3, - 0x24dfc3, - 0x23e083, - 0x208503, - 0x24cdc3, - 0x20aa43, - 0x5c2, - 0x30242, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x2000c2, - 0x24ac43, - 0x212402, - 0xf982, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x217fc3, - 0x23e083, - 0x208502, - 0xae888, - 0x266a83, - 0x1c0443, - 0xae888, - 0x1c0443, - 0x276243, - 0x22ea43, - 0x2319c4, - 0x233fc3, - 0x266a83, - 0x209582, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x209582, - 0x215f83, - 0x217fc3, - 0x23e083, - 0x2f8e43, - 0x208503, - 0x2000c2, - 0x212402, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x243bc5, - 0x1375c6, - 0x24cd44, - 0x22dc42, - 0x882, - 0xae888, - 0xf982, - 0x4b202, - 0x2a82, - 0x2000c2, - 0x146bc5, - 0x1ae08, - 0x125203, - 0x212402, - 0x3c904, - 0x52d16f86, - 0x1384, - 0xc634b, - 0x3a806, - 0x7f3c7, - 0x1431c9, - 0x233fc3, - 0x49e88, - 0x49e8b, - 0x4a30b, - 0x4a9cb, - 0x4ad0b, - 0x4afcb, - 0x4b40b, - 0x1cb86, - 0x266a83, - 0xf48c5, - 0x2044, - 0x20ef43, - 0x11b787, - 0xe88c4, - 0x722c4, - 0x217fc3, - 0x81006, - 0x1583c4, - 0x1c0443, - 0x23e083, - 0x300ac4, - 0x131247, - 0x1371c9, - 0xc6108, - 0x1a2584, - 0x1ca344, - 0x134c46, - 0xff48, - 0x1480c5, - 0x124e89, - 0xe783, - 0x146bc5, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x205803, - 0x23e083, - 0x2ffec3, - 0x22dc42, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e703, - 0x21e484, - 0x217fc3, - 0x5803, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x2e5904, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x243bc6, - 0x233fc3, - 0x266a83, - 0xf443, - 0x1c0443, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x146bc5, - 0x7f3c7, - 0x15c3, - 0xe783, - 0xae888, - 0x266a83, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x612c3, - 0x217fc3, - 0x23e083, - 0x5622ea43, - 0x233fc3, - 0x217fc3, - 0x23e083, - 0xae888, - 0x2000c2, - 0x212402, - 0x22ea43, - 0x266a83, - 0x217fc3, - 0x2003c2, - 0x23e083, - 0x33c187, - 0x355d4b, - 0x211843, - 0x27da88, - 0x330107, - 0x229dc6, - 0x2d42c5, - 0x36a609, - 0x243948, - 0x381049, - 0x3ac290, - 0x38104b, - 0x215589, - 0x2015c3, - 0x2fa6c9, - 0x232646, - 0x23264c, - 0x334fc8, - 0x3dde48, - 0x26eac9, - 0x2c8b0e, - 0x23a24b, - 0x2c030c, - 0x233f03, - 0x284e8c, - 0x3e13c9, - 0x238447, - 0x233f0c, - 0x2bde8a, - 0x241ec4, - 0x38aa8d, - 0x284d48, - 0x219acd, - 0x292146, - 0x24cd4b, - 0x337349, - 0x38fa07, - 0x25f0c6, - 0x323849, - 0x35484a, - 0x30e748, - 0x2ffac4, - 0x3a8e87, - 0x3c0807, - 0x208184, - 0x2221c4, - 0x3b4809, - 0x35c549, - 0x3e1f48, - 0x2f2c85, - 0x2102c5, - 0x209a86, - 0x38a949, - 0x28654d, - 0x2ece48, - 0x209987, - 0x2d4348, - 0x26bdc6, - 0x22fa44, - 0x2a4d45, - 0x3d9f46, - 0x3dc104, - 0x3e12c7, - 0x204e8a, - 0x210e04, - 0x213386, - 0x214689, - 0x21468f, - 0x214c4d, - 0x215ac6, - 0x21aa10, - 0x21ae06, - 0x21b507, - 0x21bcc7, - 0x21bccf, - 0x21c689, - 0x224c46, - 0x225047, - 0x225048, - 0x225449, - 0x20f708, - 0x306a07, - 0x22b743, - 0x22e8c6, - 0x239148, - 0x2c8dca, - 0x20cf09, - 0x243a83, - 0x36a3c6, - 0x38524a, - 0x2fbb87, - 0x23828a, - 0x316c8e, - 0x21c7c6, - 0x32bc47, - 0x38ef46, - 0x243fc6, - 0x21cc8b, - 0x3a038a, - 0x35638d, - 0x2800c7, - 0x26dc08, - 0x26dc09, - 0x26dc0f, - 0x30a80c, - 0x265209, - 0x2bbbce, - 0x21608a, - 0x20dac6, - 0x3076c6, - 0x31a1cc, - 0x3df50c, - 0x325908, - 0x35fd07, - 0x39d4c5, - 0x3ca3c4, - 0x25fd0e, - 0x3ae384, - 0x37dd87, - 0x3a6d8a, - 0x3d7cd4, - 0x3db78f, - 0x21be88, - 0x22e788, - 0x39124d, - 0x39124e, - 0x22ed49, - 0x22fe88, - 0x22fe8f, - 0x233c0c, - 0x233c0f, - 0x234dc7, - 0x23718a, - 0x23874b, - 0x2395c8, - 0x23b807, - 0x260b4d, - 0x369646, - 0x38ac46, - 0x23d649, - 0x252848, - 0x243dc8, - 0x243dce, - 0x2bb387, - 0x305145, - 0x246ac5, - 0x206484, - 0x22a086, - 0x3e1e48, - 0x324643, - 0x2e8c8e, - 0x260f08, - 0x2acacb, - 0x276407, - 0x30b205, - 0x269c06, - 0x2b6ec7, - 0x321848, - 0x37d749, - 0x3d2cc5, - 0x28e408, - 0x228a46, - 0x3addca, - 0x25fc09, - 0x233fc9, - 0x233fcb, - 0x25c6c8, - 0x208049, - 0x2f2d46, - 0x2041ca, - 0x29d08a, - 0x23738c, - 0x375e07, - 0x27268a, - 0x331b0b, - 0x331b19, - 0x353148, - 0x243c45, - 0x260d06, - 0x211d89, - 0x3b2c46, - 0x22170a, - 0x275246, - 0x2d8384, - 0x2d838d, - 0x3b4447, - 0x368889, - 0x249285, - 0x2493c8, - 0x249c49, - 0x24bb44, - 0x24c247, - 0x24c248, - 0x24c507, - 0x26c188, - 0x251c87, - 0x2daec5, - 0x25828c, - 0x258749, - 0x31d28a, - 0x3b09c9, - 0x2fa7c9, - 0x38f54c, - 0x25accb, - 0x25c8c8, - 0x261448, - 0x264f04, - 0x28b548, - 0x28cb89, - 0x2bdf47, - 0x2148c6, - 0x2a3b07, - 0x2a0f49, - 0x354d4b, - 0x20b187, - 0x348647, - 0x3da547, - 0x219a44, - 0x219a45, - 0x2e5605, - 0x35e84b, - 0x349284, - 0x328308, - 0x30234a, - 0x228b07, - 0x3d0347, - 0x295192, - 0x293dc6, - 0x231346, - 0x34890e, - 0x294586, - 0x299e48, - 0x29aacf, - 0x219e88, - 0x28fb88, - 0x2df5ca, - 0x2df5d1, - 0x2ab64e, - 0x2550ca, - 0x2550cc, - 0x230087, - 0x230090, - 0x3d4f08, - 0x2ab845, - 0x2b71ca, - 0x3dc14c, - 0x29e08d, - 0x204906, - 0x204907, - 0x20490c, - 0x209d8c, - 0x2191cc, - 0x2c204b, - 0x3923c4, - 0x226c84, - 0x2ba749, - 0x34a1c7, - 0x382f89, - 0x29cec9, - 0x2bdb47, - 0x2bdd06, - 0x2bdd09, - 0x2be103, - 0x2af60a, - 0x323a87, - 0x3ca70b, - 0x35620a, - 0x32ad84, - 0x3c88c6, - 0x288809, - 0x3612c4, - 0x2e164a, - 0x2e2845, - 0x2cd7c5, - 0x2cd7cd, - 0x2cdb0e, + 0x25cf88, + 0x28d908, + 0x3356c6, + 0x36c104, + 0x283446, + 0x347ac7, + 0x285187, + 0x2a144f, + 0x346f47, + 0x395747, + 0x368945, + 0x3410c5, + 0x2ae749, + 0x2f8c06, + 0x28c7c5, + 0x28fe07, + 0x2de9c8, + 0x219805, + 0x29ea46, + 0x231f88, + 0x353fca, + 0x32c888, + 0x2980c7, + 0x303786, + 0x245706, + 0x2003c3, + 0x211c03, + 0x270cc9, + 0x29f7c9, + 0x2bb806, + 0x2e1dc5, + 0x3a97c8, + 0x21b6c8, + 0x2a7d08, + 0x3d0c8b, + 0x2d6547, + 0x31d409, + 0x2a16c8, + 0x329f44, + 0x3e3a48, + 0x299dc9, + 0x2bbe85, + 0x3cd447, + 0x21ebc5, + 0x28d808, + 0x29bb4b, + 0x2a2c50, + 0x2b7845, + 0x21a3cc, + 0x245405, + 0x28b703, + 0x2b49c6, + 0x2d3004, + 0x27fb86, + 0x2a9a07, + 0x221404, + 0x24cf48, + 0x201e8d, + 0x342545, + 0x23e904, + 0x2b60c4, + 0x395489, + 0x2afa88, + 0x332047, + 0x23a108, + 0x28ec88, + 0x286685, + 0x3cd987, + 0x286607, + 0x2f6447, + 0x2759c9, + 0x3c3009, + 0x375346, + 0x21bf06, + 0x28fec6, + 0x31a6c5, + 0x3c7104, + 0x3cf306, + 0x3d9dc6, + 0x2866c8, + 0x20458b, + 0x2fba47, + 0x21e5c4, + 0x2f4306, + 0x2eab47, + 0x38c785, + 0x3a1b45, + 0x266844, + 0x3c2f86, + 0x3cf388, + 0x293f89, + 0x254986, + 0x2922c8, + 0x303b86, + 0x360fc8, + 0x3603cc, + 0x286546, + 0x2a45cd, + 0x2a4a4b, + 0x31d685, + 0x3e4247, + 0x2cc986, + 0x3c5d88, + 0x3753c9, + 0x21d3c8, + 0x3de685, + 0x2893c7, + 0x28cc08, + 0x3c3709, + 0x2f4046, + 0x26af8a, + 0x3c5b08, + 0x21d20b, + 0x2d668c, + 0x283088, + 0x28a286, + 0x22de48, + 0x353c47, + 0x224e49, + 0x29b2cd, + 0x2a7fc6, + 0x3dc948, + 0x2c6509, + 0x2d16c8, + 0x291008, + 0x2d4c8c, + 0x2d5947, + 0x2d7887, + 0x275805, + 0x2c9987, + 0x2de888, + 0x2c1086, + 0x25480c, + 0x306808, + 0x2e1708, + 0x3cf646, + 0x327e47, + 0x375544, + 0x221408, + 0x29594c, + 0x243f8c, + 0x20ac85, + 0x2033c7, + 0x36c086, + 0x327dc6, + 0x39d8c8, + 0x224dc4, + 0x22fa8b, + 0x292e8b, + 0x303786, + 0x201d07, + 0x208805, + 0x27d905, + 0x22fbc6, + 0x265785, + 0x287745, + 0x2e0107, + 0x223a09, + 0x36a604, + 0x247245, + 0x30b005, + 0x3477c8, + 0x3a89c5, + 0x2d7089, + 0x3982c7, + 0x3982cb, + 0x302206, + 0x244e89, + 0x333088, + 0x2931c5, + 0x2f6548, + 0x3c3048, + 0x283d07, + 0x2455c7, + 0x28dc09, + 0x231187, + 0x29a109, + 0x2b984c, + 0x2bb808, + 0x2bf649, + 0x2c0787, + 0x28ed49, + 0x38fbc7, + 0x2d6788, + 0x3c1585, + 0x372bc6, + 0x2d5308, + 0x2fa4c8, + 0x2709c9, + 0x287787, + 0x27e305, + 0x207789, + 0x31f546, + 0x29b0c4, + 0x37f506, + 0x3a8fc8, + 0x23bc07, + 0x204788, + 0x3a9609, + 0x353907, + 0x2a7e46, + 0x3e3d84, + 0x26a5c9, + 0x3cd808, + 0x3cf507, + 0x291846, + 0x2044c6, + 0x3cfc04, + 0x2f3b46, + 0x207843, + 0x331709, + 0x331b46, + 0x2b7e85, + 0x2ab306, + 0x224185, + 0x28d088, + 0x205387, + 0x3c2786, + 0x333706, + 0x31ef88, + 0x2ae8c7, + 0x2a8005, + 0x2a87c8, + 0x3d4188, + 0x3c5b08, + 0x2452c5, + 0x372c46, + 0x369ac9, + 0x30c504, + 0x22400b, + 0x22338b, + 0x234789, + 0x20dac3, + 0x263745, + 0x2b62c6, + 0x246508, + 0x2fb584, + 0x2b64c6, + 0x2b27c9, + 0x3201c5, + 0x2e0046, + 0x2cb5c6, + 0x21b6c4, + 0x2a8e4a, + 0x2b7dc8, + 0x2fa4c6, + 0x371545, + 0x201b87, + 0x33aec7, + 0x353b44, + 0x2235c7, + 0x245fc4, + 0x245fc6, + 0x202003, + 0x2759c5, + 0x2bdc85, + 0x347188, + 0x28e145, + 0x286289, + 0x221247, + 0x22124b, + 0x2afd4c, + 0x2b034a, + 0x34ff07, + 0x20ac43, + 0x284b88, + 0x302585, + 0x219885, + 0x359784, + 0x2d6686, + 0x287186, + 0x2f3b87, + 0x26030b, + 0x214ac4, + 0x368a84, + 0x2bf884, + 0x2dfe06, + 0x221404, + 0x21b548, + 0x359585, + 0x249c05, + 0x2a7c47, + 0x3e4349, + 0x33ac85, + 0x39424a, + 0x2deb09, + 0x2ae3ca, + 0x3e3209, + 0x31c284, + 0x393445, + 0x2c3c08, + 0x3afdcb, + 0x30c2c5, + 0x216c86, + 0x24a884, + 0x2867c6, + 0x353789, + 0x2eac47, + 0x27af48, + 0x249946, + 0x347a47, + 0x28d908, + 0x3780c6, + 0x3e3e04, + 0x3b2687, + 0x384f05, + 0x396107, + 0x221484, + 0x2cc906, + 0x3aea88, + 0x2a4c08, + 0x32a647, + 0x306e08, + 0x2a1e85, + 0x20d904, + 0x240f48, + 0x29ae44, + 0x2168c5, + 0x3ae984, + 0x20b707, + 0x296787, + 0x28ee88, + 0x322f46, + 0x28e0c5, + 0x286088, + 0x32ca88, + 0x2ad9c9, + 0x223686, + 0x239b08, + 0x28f60a, + 0x38c808, + 0x318f85, + 0x27bbc6, + 0x2adfc8, + 0x28948a, + 0x232b87, + 0x292905, + 0x29df48, + 0x272e04, + 0x25ec86, + 0x2d7f88, + 0x20d986, + 0x3d55c8, + 0x237bc7, + 0x20cf06, + 0x2cd844, + 0x326687, + 0x2c6a84, + 0x353747, + 0x3cf84d, + 0x234805, + 0x2cc30b, + 0x244206, + 0x25e4c8, + 0x24cf04, + 0x26a146, + 0x28aa06, + 0x22e187, + 0x2a428d, + 0x3089c7, + 0x2c70c8, + 0x294145, + 0x219948, + 0x2dbac6, + 0x2a1f08, + 0x3e0d46, + 0x36c9c7, + 0x2e2d89, + 0x338587, + 0x294808, + 0x269145, + 0x2357c8, + 0x327d05, + 0x2334c5, + 0x379205, + 0x20af03, + 0x202644, + 0x245745, + 0x24b649, + 0x372a06, + 0x2ea908, + 0x289685, + 0x2c9847, + 0x2a90ca, + 0x2dff89, + 0x2d7bca, + 0x2e5708, + 0x22850c, + 0x28fe8d, + 0x31e443, + 0x3d54c8, + 0x211145, + 0x353d86, + 0x3d1d86, + 0x321f85, + 0x2586c9, + 0x30db85, + 0x286088, + 0x2648c6, + 0x36ad46, + 0x2af1c9, + 0x266e47, + 0x29be06, + 0x2a9048, + 0x245f48, + 0x2f0987, + 0x2e050e, + 0x2dbd05, + 0x3c3605, + 0x20d888, + 0x3a21c7, + 0x204502, + 0x2d4944, + 0x27fa8a, + 0x3cf5c8, + 0x3c3186, + 0x2a6108, + 0x2ab406, + 0x340f48, + 0x2bbb88, + 0x233484, 0x2c9c05, - 0x33ae46, - 0x2437c7, - 0x2525ca, - 0x3ae686, - 0x381c04, - 0x35a607, - 0x2fc70b, - 0x26be87, - 0x2699c4, - 0x253306, - 0x25330d, - 0x2e724c, - 0x217e86, - 0x2ed04a, - 0x223486, - 0x220dc8, - 0x274707, - 0x2d5eca, - 0x2361c6, - 0x27ffc3, - 0x2f4b46, - 0x238fc8, - 0x37204a, - 0x2df007, - 0x2df008, - 0x25bfc4, - 0x295707, - 0x2fdf08, - 0x293fc8, - 0x2c30c8, - 0x33e14a, - 0x2ee705, - 0x2ee987, - 0x254f13, - 0x271146, - 0x20bc08, - 0x222a49, - 0x2432c8, - 0x3673cb, - 0x3cd3c8, - 0x2cab84, - 0x2c0c86, - 0x325e06, - 0x322349, - 0x2d5d07, - 0x258388, - 0x2a5c46, - 0x200bc4, - 0x3d5d85, - 0x3aa788, - 0x248e8a, - 0x2d8008, - 0x2dcf86, - 0x2a21ca, - 0x273d48, - 0x2e0648, - 0x2e18c8, - 0x2e2106, - 0x2e4286, - 0x3b048c, - 0x2e4810, - 0x2b8a85, - 0x219c88, - 0x21e910, - 0x219c90, - 0x3ac10e, - 0x3b010e, - 0x3b0114, - 0x3b934f, - 0x3b9706, - 0x3b6051, - 0x208253, - 0x2086c8, - 0x25f245, - 0x27dfc8, - 0x3a7c45, - 0x34aacc, - 0x22b989, - 0x3ae1c9, - 0x317147, - 0x237bc9, - 0x3b2807, - 0x33a486, - 0x2a4b47, - 0x202cc5, - 0x20fec3, - 0x20f443, - 0x215bc4, - 0x3dff8d, - 0x20bf4f, - 0x200c05, - 0x34a9c6, - 0x2200c7, - 0x334d47, - 0x37b8c6, - 0x37b8cb, - 0x2ac3c5, - 0x259986, - 0x30db47, - 0x252b89, - 0x225706, - 0x38c185, - 0x3c324b, - 0x205d06, - 0x226685, - 0x246248, - 0x296448, - 0x2ae3cc, - 0x2ae3d0, - 0x2b4f89, - 0x2c7007, - 0x2be80b, - 0x2ce086, - 0x3068ca, - 0x2a81cb, - 0x38160a, - 0x39f946, - 0x2f8d05, - 0x330006, - 0x28d548, - 0x31720a, - 0x390edc, - 0x2fff8c, - 0x300288, - 0x243bc5, - 0x387ac7, - 0x25d246, - 0x2bcc85, - 0x218386, - 0x37ba88, - 0x2cc2c7, - 0x2c8a08, - 0x27120a, - 0x3c110c, - 0x3248c9, - 0x3c1387, - 0x28d0c4, - 0x246b86, - 0x28f70a, - 0x29cfc5, - 0x221e4c, - 0x222508, - 0x2f6848, - 0x2b1a0c, - 0x31aa0c, - 0x32a8c9, - 0x32ab07, - 0x242dcc, - 0x22ac84, - 0x36fe0a, - 0x31114c, - 0x24e1cb, - 0x24f60b, - 0x2509c6, - 0x2541c7, - 0x2302c7, - 0x2302cf, - 0x312111, - 0x2eb492, - 0x25538d, - 0x25538e, - 0x2556ce, - 0x3b9508, - 0x3b9512, - 0x266448, - 0x223087, - 0x24fa4a, - 0x2af348, - 0x294545, - 0x2c258a, - 0x21b187, - 0x2f1004, - 0x20ee43, - 0x236c45, - 0x2df847, - 0x3aca87, - 0x29e28e, - 0x33dacd, - 0x350d49, - 0x31fb05, - 0x35f4c3, - 0x34ca46, - 0x259ec5, - 0x2acd08, - 0x227349, - 0x260d45, - 0x260d4f, - 0x2c6447, - 0x2154c5, - 0x276dca, - 0x205646, - 0x35d1c9, - 0x386ecc, - 0x3d2dc9, - 0x20b386, - 0x30214c, - 0x333f86, - 0x310088, - 0x331a06, - 0x36c7c6, - 0x2c34c4, - 0x3222c3, - 0x20de0a, - 0x22de51, - 0x26a90a, - 0x25b105, - 0x288207, - 0x255b47, - 0x2e8a84, - 0x2fe00b, - 0x347688, - 0x2cb146, - 0x23e285, - 0x268b84, - 0x24fc89, - 0x2008c4, - 0x2124c7, - 0x34d185, - 0x34d187, - 0x348b45, - 0x20bb83, - 0x222f48, - 0x27e1ca, - 0x249b03, - 0x334f4a, - 0x2a9d06, - 0x260acf, - 0x2bb309, - 0x2e8c10, - 0x3064c8, - 0x2dd9c9, - 0x29f107, - 0x25328f, - 0x3bb9c4, - 0x2e5984, - 0x21ac86, - 0x2356c6, - 0x23edca, - 0x247cc6, - 0x2b9447, - 0x317c48, - 0x317e47, - 0x3192c7, - 0x31ad0a, - 0x319bcb, - 0x358f85, - 0x2eb0c8, - 0x21a303, - 0x3ccbcc, - 0x39d24f, - 0x3c7e0d, - 0x258b87, - 0x350e89, - 0x2f5c87, - 0x28c3c8, - 0x3d7ecc, - 0x2caa88, - 0x366dc8, - 0x332bce, - 0x345b54, - 0x346064, - 0x365d0a, - 0x38188b, - 0x3b28c4, - 0x3b28c9, - 0x239b88, - 0x247385, - 0x32414a, - 0x2a5007, - 0x215d84, - 0x24ac43, - 0x22ea43, - 0x236704, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x2191c3, - 0x23cb03, - 0x2e4806, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x216983, + 0x70e7c4, + 0x70e7c4, + 0x70e7c4, + 0x201f03, + 0x204346, + 0x286546, + 0x2aa3cc, + 0x20cf43, + 0x270b06, + 0x201fc4, + 0x2e38c8, + 0x2b2605, + 0x27fb86, + 0x2d1208, + 0x2e6386, + 0x3c2706, + 0x29e748, + 0x2e7047, + 0x230f49, + 0x2f04ca, + 0x274544, + 0x246005, + 0x30a405, + 0x2e3646, + 0x23e906, + 0x2aa146, + 0x382006, + 0x231084, + 0x23108b, + 0x239644, + 0x201c05, + 0x2bab85, + 0x2605c6, + 0x20ec48, + 0x28fd47, + 0x331ac4, + 0x211583, + 0x272905, + 0x37f3c7, + 0x28fc4b, + 0x347087, + 0x2d1108, + 0x2c9d47, + 0x276a06, + 0x271fc8, + 0x2cf3cb, + 0x2cba46, + 0x212949, + 0x2cf545, + 0x322d43, + 0x2e0046, + 0x237ac8, + 0x215ec3, + 0x29acc3, + 0x28d906, + 0x2ab406, + 0x37604a, + 0x28a2c5, + 0x28a84b, + 0x2ab24b, + 0x217e03, + 0x209b03, + 0x2c3044, + 0x2e4887, + 0x237b44, + 0x29b2c4, + 0x2c9e84, + 0x38cb08, + 0x371488, + 0x211b89, + 0x2e3488, + 0x3a0087, + 0x224006, + 0x2ea54f, + 0x2dbe46, + 0x2e4dc4, + 0x3712ca, + 0x37f2c7, + 0x2c6b86, + 0x29b109, + 0x211b05, + 0x3472c5, + 0x211c46, + 0x235903, + 0x272e49, + 0x21d106, + 0x3a93c9, + 0x3947c6, + 0x2759c5, + 0x20b085, + 0x202643, + 0x2e49c8, + 0x332207, + 0x2f6084, + 0x2e3748, + 0x29d844, + 0x31ff46, + 0x2b49c6, + 0x247dc6, + 0x2e6d09, + 0x219805, + 0x2a80c6, + 0x25c0c9, + 0x2db246, + 0x2ea646, + 0x3abbc6, + 0x209085, + 0x3ae986, + 0x36c9c4, + 0x3c1585, + 0x2d5304, + 0x2c8f46, + 0x354704, + 0x201c03, + 0x292585, + 0x23d308, + 0x35a407, + 0x2fb609, + 0x292808, + 0x2a5891, + 0x2cb64a, + 0x3036c7, + 0x237d06, + 0x201fc4, + 0x2d5408, + 0x293688, + 0x2a5a4a, + 0x2d6e4d, + 0x216b86, + 0x29e846, + 0x326746, + 0x2ac3c7, + 0x2c7185, + 0x30d607, + 0x201e85, + 0x398404, + 0x3c2d46, + 0x2884c7, + 0x272b4d, + 0x2adf07, + 0x2bfb48, + 0x286389, + 0x27bac6, + 0x2f3fc5, + 0x2e9284, + 0x3a90c6, + 0x353a46, + 0x3cf746, + 0x2a6988, + 0x22d503, + 0x21b783, + 0x32c105, + 0x322606, + 0x2bbb45, + 0x249b48, + 0x2a9bca, + 0x239084, + 0x2e38c8, + 0x2a3448, + 0x3a9947, + 0x37b249, + 0x2d0e08, + 0x294007, + 0x2d3fc6, + 0x20d98a, + 0x3a9148, + 0x31dac9, + 0x2afb48, + 0x222849, + 0x35d787, + 0x208f45, + 0x2ab806, + 0x2c0f08, + 0x281fc8, + 0x261d08, + 0x342688, + 0x201c05, + 0x200d04, + 0x23bec8, + 0x24a604, + 0x3e3004, + 0x2759c5, + 0x29d187, + 0x3e4109, + 0x22df87, + 0x226b05, + 0x282e86, + 0x370d46, + 0x20ed44, + 0x2af4c6, + 0x28ac84, + 0x3d4886, + 0x3e3ec6, + 0x215d06, + 0x3de685, + 0x249a07, + 0x20ac43, + 0x22bf49, + 0x31ed88, + 0x293e84, + 0x293e8d, + 0x2a4d08, + 0x3082c8, + 0x31da46, + 0x2e2e89, + 0x2dff89, + 0x353485, + 0x2a9cca, + 0x27cb0a, + 0x291a4c, + 0x291bc6, + 0x284786, + 0x2dc446, + 0x3a6ac9, + 0x353fc6, + 0x2ae906, + 0x30dc46, + 0x221408, + 0x306e06, + 0x2e43cb, + 0x29d305, + 0x249c05, + 0x285285, + 0x30ef06, + 0x20d943, + 0x247d46, + 0x2ade87, + 0x2d52c5, + 0x2f4ec5, + 0x2c4945, + 0x2f9646, + 0x336cc4, + 0x336cc6, + 0x2a3d09, + 0x30ed8c, + 0x398148, + 0x25cf04, + 0x39d6c6, + 0x244306, + 0x237ac8, + 0x21b6c8, + 0x30ec89, + 0x201b87, + 0x2fbc09, + 0x27d9c6, + 0x216b04, + 0x210484, + 0x28df04, + 0x28d908, + 0x3e3f4a, + 0x33ac06, + 0x368807, + 0x396387, + 0x244f85, + 0x2b9304, + 0x299d86, + 0x2c71c6, + 0x205483, + 0x31ebc7, + 0x22a948, + 0x3535ca, + 0x202148, + 0x273148, + 0x354745, + 0x237105, + 0x2fbb45, + 0x245346, + 0x246e46, + 0x316a45, + 0x331949, + 0x2b910c, + 0x34ca47, + 0x2a5ac8, + 0x282185, + 0x70e7c4, + 0x236b04, + 0x2cc644, + 0x3d0ac6, + 0x2ad28e, + 0x347347, + 0x2ac5c5, + 0x30c48c, + 0x29d707, + 0x288447, + 0x2c8989, + 0x21ae49, + 0x292905, + 0x31ed88, + 0x369ac9, + 0x3c59c5, + 0x2d5208, + 0x2c1f86, + 0x2411c6, + 0x24fb84, + 0x2aa648, + 0x206743, + 0x203f44, + 0x272985, + 0x39b187, + 0x26a445, + 0x28f4c9, + 0x29b80d, + 0x2b2ec6, + 0x2115c4, + 0x288608, + 0x22384a, + 0x3e9847, + 0x2b0c45, + 0x203f83, + 0x2ab40e, + 0x2e4acc, + 0x33b107, + 0x2ad447, + 0x4d39a7c7, + 0x143386, + 0x27804, + 0x212fc3, + 0x354005, + 0x2cc645, + 0x2a64c8, + 0x2a3289, + 0x25ce06, + 0x237b44, + 0x303606, + 0x245d0b, + 0x2da2cc, + 0x257b47, + 0x2e4685, + 0x3d4088, + 0x2f0745, + 0x3712c7, + 0x2e2c47, + 0x2494c5, + 0x20d943, + 0x2abd84, + 0x288cc5, + 0x36a505, + 0x36a506, + 0x2a0088, + 0x2884c7, + 0x3d2086, + 0x3cfb06, + 0x379146, + 0x3dcac9, + 0x3cda87, + 0x25cc86, + 0x2da446, + 0x387046, + 0x2b7d05, + 0x218586, + 0x3b5545, + 0x3a8a48, + 0x29cdcb, + 0x2998c6, + 0x3963c4, + 0x222e09, + 0x221244, + 0x2c1f08, + 0x311007, + 0x290f04, + 0x2d02c8, + 0x2d6984, + 0x2b7d44, + 0x293dc5, + 0x342586, + 0x38ca47, + 0x235f03, + 0x2a7f05, + 0x34bb44, + 0x3c3646, + 0x353508, + 0x32c785, + 0x29ca89, + 0x207985, + 0x3ca8c8, + 0x326c47, + 0x331c48, + 0x2cff07, + 0x395809, + 0x291186, + 0x397c06, + 0x29fa84, + 0x223f45, + 0x3151cc, + 0x285287, + 0x285a87, + 0x23e548, + 0x2b2ec6, + 0x2addc4, + 0x37ddc4, + 0x28da89, + 0x2dc546, + 0x293547, + 0x27b884, + 0x2af5c6, + 0x3de9c5, + 0x2e2ac7, + 0x2e4346, + 0x26ae49, + 0x2d2747, + 0x2a1447, + 0x2af046, + 0x291785, + 0x28c108, + 0x21cf88, + 0x36db46, + 0x32c7c5, + 0x2d8fc6, + 0x20d083, + 0x2a6349, + 0x2a9ece, + 0x2cfc48, + 0x29d948, + 0x36d94b, + 0x29ccc6, + 0x396284, + 0x28fa84, + 0x2a9fca, + 0x21a2c7, + 0x25cd45, + 0x212949, + 0x2d3f05, + 0x3e3047, + 0x29e6c4, + 0x206647, + 0x216a08, + 0x2c96c6, + 0x2cca89, + 0x2d0f0a, + 0x21a246, + 0x2a4846, + 0x2bab05, + 0x39c545, + 0x3b0e47, + 0x24f388, + 0x3de908, + 0x233486, + 0x20b105, + 0x23e68e, + 0x2d15c4, + 0x2a6445, + 0x282809, + 0x2f8a08, + 0x298006, + 0x2a82cc, + 0x2a97d0, + 0x2acecf, + 0x2ae648, + 0x34ff07, + 0x3de685, + 0x245745, + 0x38c8c9, + 0x29e149, + 0x283546, + 0x30c347, + 0x39d7c5, + 0x23ae89, + 0x35dfc6, + 0x353e0d, + 0x28ddc9, + 0x29b2c4, + 0x2cf6c8, + 0x23bf89, + 0x33adc6, + 0x284d85, + 0x397c06, + 0x27ae09, + 0x27b708, + 0x20f1c5, + 0x28f704, + 0x2a848b, + 0x33ac85, + 0x246586, + 0x2901c6, + 0x259446, + 0x3d0e8b, + 0x29cb89, + 0x225005, + 0x396f87, + 0x2cb5c6, + 0x25e646, + 0x28f388, + 0x2d40c9, + 0x2bf90c, + 0x37f1c8, + 0x31d186, + 0x3356c3, + 0x38adc6, + 0x302505, + 0x28b388, + 0x20ab06, + 0x3c8888, + 0x3b0905, + 0x267305, + 0x326d88, + 0x3b6ec7, + 0x3d1cc7, + 0x2f3b87, + 0x32f908, + 0x350048, + 0x2f1086, + 0x2c8d87, + 0x21ea07, + 0x39558a, + 0x210843, + 0x30ef06, + 0x23e605, + 0x27fa84, + 0x286389, + 0x395784, + 0x2c96c4, + 0x2a9444, + 0x2ad44b, + 0x332147, + 0x23e8c5, + 0x2a1b88, + 0x282e86, + 0x282e88, + 0x28a206, + 0x298945, + 0x298b85, + 0x29a546, + 0x30e148, + 0x29b048, + 0x286546, + 0x2a19cf, + 0x2a5e10, + 0x20d485, + 0x20ac43, + 0x237405, + 0x31d348, + 0x29e049, + 0x3c5b08, + 0x30c148, + 0x25ae48, + 0x332207, + 0x282b49, + 0x3c8a88, + 0x2b3944, + 0x2a92c8, + 0x347889, + 0x2c9307, + 0x2bc7c4, + 0x22e048, + 0x2497ca, + 0x2ee946, + 0x216b86, + 0x223549, + 0x2a9a07, + 0x2e0b08, + 0x244808, + 0x3d01c8, + 0x2796c5, + 0x386605, + 0x249c05, + 0x2cc605, + 0x2c6347, + 0x20d945, + 0x2d52c5, + 0x386b86, + 0x3c5a47, + 0x3afd07, + 0x249ac6, + 0x2e5c45, + 0x246586, + 0x205405, + 0x2c1d88, + 0x2f9e44, + 0x2db2c6, + 0x351e44, + 0x2d00c8, + 0x2db3ca, + 0x286ccc, + 0x2aaa05, + 0x2ac486, + 0x2bfac6, + 0x3b6806, + 0x31d204, + 0x3df285, + 0x289ac7, + 0x2a9a89, + 0x2e03c7, + 0x70e7c4, + 0x70e7c4, + 0x331fc5, + 0x312a84, + 0x2a7a8a, + 0x282d06, + 0x3698c4, + 0x203345, + 0x2c5405, + 0x2c70c4, + 0x28fe07, + 0x207907, + 0x2dfe08, + 0x2d90c8, + 0x20f1c9, + 0x29ae48, + 0x29494b, + 0x239704, + 0x29eb45, + 0x28c845, + 0x2f3b09, + 0x2d40c9, + 0x222d08, + 0x3d8dc8, + 0x2605c4, + 0x244345, + 0x20dec3, + 0x2e3605, + 0x2a8146, + 0x2a30cc, + 0x21d006, + 0x284c86, + 0x298285, + 0x2f96c8, + 0x2dac86, + 0x237e86, + 0x216b86, + 0x22b48c, + 0x27d4c4, + 0x37928a, + 0x2981c8, + 0x2a2f07, + 0x34ba46, + 0x25cec7, + 0x303205, + 0x291846, + 0x35ecc6, + 0x3728c7, + 0x2d0c04, + 0x20b805, + 0x282804, + 0x398487, + 0x282a48, + 0x28460a, + 0x28ca87, + 0x2b7907, + 0x34fe87, + 0x2f0889, + 0x2a30ca, + 0x208fc3, + 0x35a3c5, + 0x215d43, + 0x2c9ec9, + 0x36cc48, + 0x368947, + 0x3c5c09, + 0x21d086, + 0x3c1648, + 0x2c4685, + 0x32cb8a, + 0x20df09, + 0x27a1c9, + 0x2dab47, + 0x293789, + 0x215c08, + 0x3e3c46, + 0x2ac648, + 0x2f5207, + 0x231187, + 0x2deb07, + 0x2cdf88, + 0x39ab06, + 0x249585, + 0x289ac7, + 0x2a4348, + 0x3790c4, + 0x309684, + 0x29bd07, + 0x2bbf07, + 0x36994a, + 0x3e3bc6, + 0x3ce54a, + 0x2d4887, + 0x2d1387, + 0x20b8c4, + 0x29a1c4, + 0x2e29c6, + 0x2f4644, + 0x2f464c, + 0x310f45, + 0x216849, + 0x3caa44, + 0x2c7185, + 0x2237c8, + 0x27a545, + 0x394246, + 0x29e284, + 0x2a6d0a, + 0x2dddc6, + 0x3501ca, + 0x3e33c7, + 0x2048c5, + 0x235905, + 0x244fca, + 0x281f05, + 0x2ada86, + 0x24a604, + 0x2c31c6, + 0x3b0f05, + 0x20abc6, + 0x32a64c, + 0x22b70a, + 0x27cc04, + 0x224006, + 0x2a9a07, + 0x2e42c4, + 0x221408, + 0x2ed306, + 0x396209, + 0x3dd0c9, + 0x2bb909, + 0x2241c6, + 0x2f5306, + 0x2ac787, + 0x331888, + 0x2f5109, + 0x332147, + 0x2a1d06, + 0x347ac7, + 0x326605, + 0x2d15c4, + 0x2ac347, + 0x21ebc5, + 0x293d05, + 0x200cc7, + 0x249388, + 0x3d4006, + 0x2a51cd, + 0x2a66cf, + 0x2ab24d, + 0x223444, + 0x23d406, + 0x2e7b48, + 0x30dc05, + 0x245488, + 0x283bca, + 0x29b2c4, + 0x2c67c6, + 0x215307, + 0x214ac7, + 0x2e7109, + 0x2ac605, + 0x2c70c4, + 0x2c9b4a, + 0x2d09c9, + 0x293887, + 0x2a5486, + 0x33adc6, + 0x244286, + 0x3b2746, + 0x2e69cf, + 0x2e7a09, + 0x306e06, + 0x267246, + 0x20c049, + 0x2c8e87, + 0x201543, + 0x209046, + 0x211c03, + 0x321e48, + 0x26a007, + 0x2ae849, + 0x2b4848, + 0x3d1e08, + 0x2878c6, + 0x225a89, + 0x34c985, + 0x2a7d04, + 0x209007, + 0x3a6b45, + 0x223444, + 0x23e988, + 0x21a584, + 0x2c8bc7, + 0x3aa146, + 0x23fe85, + 0x2afb48, + 0x33ac8b, + 0x31f287, + 0x245246, + 0x2dbec4, + 0x3da006, + 0x2759c5, + 0x21ebc5, + 0x28be89, + 0x28fa09, + 0x2311c4, + 0x231205, + 0x224045, + 0x32ca06, + 0x31ee88, + 0x2d3506, + 0x22a78b, + 0x2be84a, + 0x2d0005, + 0x298c06, + 0x238d85, + 0x386ac5, + 0x2a35c7, + 0x30f188, + 0x29aec4, + 0x34ae06, + 0x29b0c6, + 0x215dc7, + 0x322d04, + 0x28aa06, + 0x3cd645, + 0x3cd649, + 0x2f5504, + 0x30a549, + 0x286546, + 0x2d5a08, + 0x224045, + 0x396485, + 0x20abc6, + 0x2bf809, + 0x21ae49, + 0x284d06, + 0x2f8b08, + 0x29b948, + 0x238d44, + 0x2ca304, + 0x2ca308, + 0x39ff08, + 0x2fbd09, + 0x2a80c6, + 0x216b86, + 0x33a24d, + 0x2b64c6, + 0x360289, + 0x30e485, + 0x211c46, + 0x22e2c8, + 0x336c05, + 0x21ea44, + 0x2759c5, + 0x28f088, + 0x2a7849, + 0x2828c4, + 0x2cc906, + 0x27a40a, + 0x33b008, + 0x369ac9, + 0x27600a, + 0x3c5b86, + 0x2a6888, + 0x371085, + 0x298448, + 0x303285, + 0x21cf49, + 0x33ca09, + 0x234702, + 0x2cf545, + 0x28c906, + 0x286487, + 0x2b0dc5, + 0x34b946, + 0x319908, + 0x2b2ec6, + 0x2c3ac9, + 0x285b86, + 0x28f208, + 0x2b8cc5, + 0x24e406, + 0x36cac8, + 0x28d908, + 0x35d688, + 0x31b648, + 0x218584, + 0x20c8c3, + 0x2c3d04, + 0x28cc86, + 0x326644, + 0x29d887, + 0x237d89, + 0x2db645, + 0x244806, + 0x209046, + 0x29fecb, + 0x2c6ac6, + 0x20c886, + 0x2de708, + 0x361b46, + 0x2046c3, + 0x212403, + 0x2d15c4, + 0x239a05, + 0x3039c7, + 0x282a48, + 0x282a4f, + 0x2899cb, + 0x31ec88, + 0x2cc986, + 0x31ef8e, + 0x20abc3, + 0x303944, + 0x2c6a45, + 0x2c6f46, + 0x299e8b, + 0x29d246, + 0x232009, + 0x23fe85, + 0x251748, + 0x20e288, + 0x21ad0c, + 0x2ad486, + 0x2e3646, + 0x2e1dc5, + 0x2945c8, + 0x286cc5, + 0x329f48, + 0x2a864a, + 0x2ab689, + 0x70e7c4, 0x2000c2, - 0x24ac43, - 0x212402, - 0x22ea43, - 0x236704, - 0x233fc3, - 0x266a83, - 0x2191c3, - 0x2e4806, - 0x217fc3, - 0x23e083, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x280203, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x2000c2, - 0x281bc3, - 0x212402, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x20cf02, - 0x20cdc2, - 0x212402, - 0x22ea43, - 0x204302, - 0x2005c2, - 0x20e704, - 0x217544, - 0x266002, - 0x21e484, + 0x53216542, + 0x200382, + 0x2b1b84, + 0x201582, + 0x28d4c4, + 0x204cc2, + 0xd903, 0x2003c2, - 0x23e083, - 0x216983, - 0x2509c6, - 0x21fcc2, - 0x2072c2, - 0x223d42, - 0x58a13d83, - 0x58e30083, - 0x56486, - 0x56486, - 0x24cd44, - 0x205803, - 0x8acd, - 0x1e1cca, - 0x1cc04c, - 0x173cc, - 0xd720d, - 0x6e784, - 0x8f284, - 0x120384, - 0x146bc5, - 0x8e9c9, - 0xbf04c, - 0x1683c7, - 0x11fc6, - 0x16588, - 0x1a087, - 0x20ac8, - 0x1bdd8a, - 0x1109c7, - 0x59abd285, - 0xbd289, - 0x59c35a0b, - 0x129f08, - 0xcc4b, - 0x141488, - 0x167e89, - 0x8c80a, - 0x1316ce, - 0xbec4a, - 0xa4cd, - 0x2ed4d, - 0x14430cb, - 0xe710a, - 0x1384, - 0x59ac6, - 0xf988, - 0x10f508, - 0x35cc7, - 0x1dbc5, - 0x1fb47, - 0x34449, - 0x161347, - 0xec88, - 0x2afc9, - 0x3ea84, - 0xd3085, - 0x737ce, - 0x1410c7, - 0x5a224d46, - 0x4efcd, - 0x7f248, - 0x5a65ce86, - 0x5b05ce88, - 0x57388, - 0x13c390, - 0x5460c, - 0x68787, - 0x693c7, - 0x707c7, - 0x77c07, - 0x9a42, - 0x16e07, - 0x1a054c, - 0x5d4c5, - 0xb4e07, - 0xae286, - 0xafcc9, - 0xb3108, - 0xb5c2, + 0x202b02, + 0x793c8, + 0xe804, + 0x216543, + 0x222bc3, + 0x343b43, + 0x87c2, + 0x54202, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x2a042, + 0x6502, + 0x4a42, + 0x253c43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x2296c3, + 0x20cb83, + 0x20f7c3, + 0x25dd04, + 0x216543, + 0x23ec84, + 0x222bc3, + 0x2e8fc4, + 0x343b43, + 0x2b1087, + 0x216443, + 0x20d903, + 0x2c2308, + 0x20cb83, + 0x29fc4b, + 0x304443, + 0x24d906, + 0x213402, + 0x2fe64b, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x20cb83, + 0x21b103, + 0x2072c3, + 0x2000c2, + 0x793c8, + 0x235ec5, + 0x21ec48, + 0x3585c8, + 0x216542, + 0x363605, + 0x347c07, + 0x202bc2, + 0x24d147, + 0x200382, + 0x25be87, + 0x34c049, + 0x277f48, + 0x3d0049, + 0x214182, + 0x20e107, + 0x387c84, + 0x347cc7, + 0x2be747, + 0x2687c2, + 0x216443, + 0x203742, + 0x204cc2, + 0x2003c2, + 0x208402, + 0x200902, + 0x202b02, + 0x2e5245, + 0x227445, + 0x16542, + 0x22bc3, + 0x216543, + 0x222bc3, + 0x22de83, + 0x343b43, + 0x20e443, + 0x2296c3, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x158286, + 0x55fa5a4b, + 0x216443, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x175285, + 0x12b83, + 0x101, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x243543, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x2203c3, + 0x56869306, + 0x20a83, + 0x70945, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x216542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x6482, + 0x793c8, + 0x38c43, + 0xd903, + 0x7ca83, + 0x4f344, + 0x1480c44, + 0xf0b45, + 0x2000c2, + 0x397344, + 0x216543, + 0x222bc3, + 0x343b43, + 0x24cc43, + 0x2b96c5, + 0x243543, + 0x21b283, + 0x2296c3, + 0x257743, + 0x20cb83, + 0x202b03, + 0x2192c3, + 0x201643, + 0x11d783, 0x5c2, - 0x193c86, - 0x1c2b0b, - 0x1c2e06, - 0x6f044, - 0x1b5ac7, - 0x33449, - 0x860c9, - 0x1bb208, - 0x4b202, - 0x199249, - 0x11a08, - 0xfb54a, - 0xe689, - 0x2a8c6, - 0xdac89, - 0xe7087, - 0xe77c9, - 0xea1c8, - 0xec607, - 0xee689, - 0xf1a45, - 0xf1e10, - 0x1d60c6, - 0x1b5a05, - 0x19dfc7, - 0xbd68d, - 0x41d85, - 0xfa5c6, - 0xfadc7, - 0x100ad8, - 0x7f5c8, - 0x14978a, - 0xd782, - 0x5b7928cb, - 0x4f3ca, - 0x5a04d, - 0x2442, - 0xd4d86, - 0x13a06, - 0xa2ac8, - 0xb2e8a, - 0x3dd48, - 0x74e49, - 0x118088, - 0x6f48e, - 0x75088, - 0x14ca47, - 0x5ba5cdc4, - 0xb170d, - 0x1095c5, - 0x2748, - 0x35288, - 0x1145c6, - 0x4642, - 0xcaf44, - 0xe5006, - 0x134c46, - 0x5bd8490b, - 0x3602, + 0x386c2, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x2000c2, + 0x253c43, + 0x216542, + 0x3242, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x2296c3, + 0x20cb83, + 0x202b02, + 0x793c8, + 0x343b43, + 0x7ca83, + 0x793c8, + 0x7ca83, + 0x2cc803, + 0x216543, + 0x23a304, + 0x222bc3, + 0x343b43, + 0x2042c2, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2042c2, + 0x233243, + 0x2296c3, + 0x20cb83, + 0x2faf43, + 0x202b03, + 0x2000c2, + 0x216542, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x24d905, + 0x1143c6, + 0x6ff44, + 0x329c4, + 0x25dd04, + 0x213402, + 0x882, + 0x793c8, + 0x3242, + 0x54202, + 0x2a02, + 0x2000c2, + 0x146c05, + 0x24948, + 0xe9883, + 0x216542, + 0x45c44, + 0x5b910646, + 0x1db84, + 0xc5e4b, + 0x42746, + 0x1cdf07, + 0x174bc9, + 0x222bc3, + 0x53188, + 0x5318b, + 0x5360b, + 0x539cb, + 0x53d0b, + 0x53fcb, + 0x5440b, + 0x18c86, + 0x343b43, + 0x154645, + 0x10e584, + 0x20b6c3, + 0x11b487, + 0x133604, + 0xed184, + 0x77984, + 0x2296c3, + 0x84e06, + 0xac8c4, + 0x7ca83, + 0x20cb83, + 0x305504, + 0x132747, + 0x113fc9, + 0xc5c08, + 0x1c8dc4, + 0x147e04, + 0x179dc3, + 0x13906, + 0x12248, + 0x18d445, + 0x1a1f49, + 0x39fc3, + 0x13ea86, + 0x146c05, + 0x216542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x20d903, + 0x20cb83, + 0x304443, + 0x213402, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x26a7c3, + 0x21b544, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x2e8fc4, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x24d906, + 0x222bc3, + 0x343b43, + 0x1e803, + 0x7ca83, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x146c05, + 0x1cdf07, + 0x69c3, + 0x39fc3, + 0x793c8, + 0x343b43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x722c3, + 0x2296c3, + 0x20cb83, + 0x5ee16543, + 0x222bc3, + 0x2296c3, + 0x20cb83, + 0x793c8, + 0x2000c2, + 0x216542, + 0x216543, + 0x343b43, + 0x2296c3, + 0x2003c2, + 0x20cb83, + 0x33cf47, + 0x2f67cb, + 0x2153c3, + 0x283208, + 0x331607, + 0x349506, + 0x234d45, + 0x363749, + 0x24d688, + 0x37e649, + 0x3ae5d0, + 0x37e64b, + 0x3aaa09, + 0x2069c3, + 0x2fed09, + 0x23b286, + 0x23b28c, + 0x235f88, + 0x3e5c48, + 0x35c449, + 0x2cd20e, + 0x34be0b, + 0x2c340c, + 0x203b43, + 0x279d4c, + 0x203b49, + 0x300187, + 0x23c4cc, + 0x2c024a, + 0x21d684, + 0x21d68d, + 0x279c08, + 0x20f7cd, + 0x28a5c6, + 0x25dd0b, + 0x314149, + 0x2674c7, + 0x32cdc6, + 0x3339c9, + 0x35310a, + 0x30a088, + 0x304044, + 0x2bc2c7, + 0x24ea07, + 0x202744, + 0x2208c4, + 0x209cc9, + 0x30d489, + 0x20a888, + 0x2303c5, + 0x2140c5, + 0x20f086, + 0x21d549, + 0x283e4d, + 0x216d88, + 0x20ef87, + 0x234dc8, + 0x25b186, + 0x3e11c4, + 0x26b385, + 0x3e2f06, + 0x3e7984, + 0x203a47, + 0x20588a, + 0x216784, + 0x21a186, + 0x21a989, + 0x21a98f, + 0x21cc4d, + 0x21e706, + 0x224550, + 0x224946, + 0x226187, + 0x227f07, + 0x227f0f, + 0x229309, + 0x22cc86, + 0x22e907, + 0x22e908, + 0x22ed09, + 0x206e88, + 0x317a87, + 0x20c903, + 0x391906, + 0x37a588, + 0x2cd4ca, + 0x204189, + 0x22cb43, + 0x363506, + 0x34ac4a, + 0x282647, + 0x2fffca, + 0x31034e, + 0x229446, + 0x3d6847, + 0x24b006, + 0x203c06, + 0x38640b, + 0x218d8a, + 0x2f6e0d, + 0x2f53c7, + 0x274588, + 0x274589, + 0x27458f, + 0x2fb78c, + 0x2fb0c9, + 0x287bce, + 0x2b118a, + 0x20c606, + 0x2e9106, + 0x30cd4c, + 0x3bb08c, + 0x3d8388, + 0x338487, + 0x208c45, + 0x347e84, + 0x36430e, + 0x3109c4, + 0x3406c7, + 0x36be4a, + 0x3806d4, + 0x38a70f, + 0x2280c8, + 0x3917c8, + 0x38c34d, + 0x38c34e, + 0x3b4bc9, + 0x238308, + 0x23830f, + 0x23c1cc, + 0x23c1cf, + 0x23d147, + 0x23f90a, + 0x240acb, + 0x241348, + 0x244547, + 0x24be0d, + 0x362546, + 0x21d846, + 0x247bc9, + 0x26bac8, + 0x24db08, + 0x24db0e, + 0x26b907, + 0x308585, + 0x24f085, + 0x220744, + 0x3497c6, + 0x20a788, + 0x3a2983, + 0x2bf30e, + 0x24c1c8, + 0x3e534b, + 0x3c7807, + 0x2332c5, + 0x279ec6, + 0x2ba1c7, + 0x33e8c8, + 0x32c449, + 0x23cb05, + 0x2925c8, + 0x22fe06, + 0x3b3cca, + 0x364209, + 0x23c589, + 0x23c58b, + 0x33b7c8, + 0x202609, + 0x230486, + 0x3c298a, + 0x2a104a, + 0x23fb0c, + 0x371707, + 0x277d4a, + 0x39f78b, + 0x39f799, + 0x351a48, + 0x24d985, + 0x24bfc6, + 0x296489, + 0x250206, + 0x22b24a, + 0x2163c6, + 0x232d44, + 0x2dce0d, + 0x32d187, + 0x232d49, + 0x252185, + 0x2522c8, + 0x252f49, + 0x254744, + 0x254e07, + 0x254e08, + 0x255287, + 0x273b48, + 0x25cac7, + 0x2dfac5, + 0x26420c, + 0x2646c9, + 0x3b930a, + 0x266cc9, + 0x2fee09, + 0x26700c, + 0x26974b, + 0x26ac88, + 0x26bcc8, + 0x26f504, + 0x290988, + 0x291d49, + 0x2c0307, + 0x21abc6, + 0x2a9607, + 0x3d4bc9, + 0x21070b, + 0x247047, + 0x21fc47, + 0x3e3507, + 0x20f744, + 0x20f745, + 0x2e8cc5, + 0x357f0b, + 0x30df44, + 0x3b6648, + 0x25974a, + 0x22fec7, + 0x3e5007, + 0x299452, + 0x3d4786, + 0x239c86, + 0x340ace, + 0x3e5786, + 0x29ddc8, + 0x29f2cf, + 0x20fb88, + 0x243948, + 0x2e75ca, + 0x2e75d1, + 0x2af74e, + 0x20294a, + 0x20294c, + 0x238507, + 0x238510, + 0x3d9e48, + 0x2af945, + 0x2ba4ca, + 0x3e79cc, + 0x2a204d, + 0x20e446, + 0x20e447, + 0x20e44c, + 0x20f3cc, + 0x26a98c, + 0x39304b, + 0x3a4f04, + 0x205604, + 0x2be009, + 0x37de47, + 0x361f89, + 0x2a0e89, + 0x2bff07, + 0x2c00c6, + 0x2c00c9, + 0x2c04c3, + 0x2b2fca, + 0x37a447, + 0x37b94b, + 0x2f6c8a, + 0x25bfc4, + 0x3ceb46, + 0x28cd09, + 0x2f44c4, + 0x2e4e4a, + 0x302645, + 0x2d1b85, + 0x2d1b8d, + 0x2d1ece, + 0x2722c5, + 0x33bc06, + 0x24d507, + 0x25d40a, + 0x231c86, + 0x37ee04, + 0x301887, + 0x300e4b, + 0x273847, + 0x2420c4, + 0x316546, + 0x31654d, + 0x2eba8c, + 0x3d1a86, + 0x216f8a, + 0x221d46, + 0x227bc8, + 0x2fd2c7, + 0x2dafca, + 0x3e7346, + 0x28aa83, + 0x354806, + 0x213448, + 0x36dc0a, + 0x25aa07, + 0x25aa08, + 0x2985c4, + 0x2a5c47, + 0x31f5c8, + 0x2f3cc8, + 0x2f1188, + 0x32a8ca, + 0x2efe85, + 0x2cb207, + 0x260e13, + 0x276586, + 0x38d188, + 0x22bb49, + 0x24d008, + 0x28794b, + 0x2ca108, + 0x2eb7c4, + 0x326e86, + 0x324186, + 0x3423c9, + 0x2dae07, + 0x264308, + 0x2aa246, + 0x200bc4, + 0x3de805, + 0x33f188, + 0x39000a, + 0x2dca88, + 0x2e1046, + 0x2a6a8a, + 0x36a688, + 0x3bc6c8, + 0x2e50c8, + 0x2e5906, + 0x2e7d46, + 0x3b20cc, + 0x2e8310, + 0x2e8705, + 0x20f988, + 0x288910, + 0x20f990, + 0x3ae44e, + 0x3b1d4e, + 0x3b1d54, + 0x3ba5cf, + 0x3ba986, + 0x202811, + 0x209613, + 0x32cf48, + 0x363c05, + 0x283748, + 0x32d685, + 0x348fcc, + 0x2718c9, + 0x310809, + 0x2fbfc7, + 0x368f49, + 0x3a8747, + 0x313386, + 0x26b187, + 0x2649c5, + 0x212bc3, + 0x21e803, + 0x2433c4, + 0x21574d, + 0x3c3dcf, + 0x200c05, + 0x348ec6, + 0x22a447, + 0x235d07, + 0x355bc6, + 0x355bcb, + 0x2b0505, + 0x289146, + 0x3baf07, + 0x25e109, + 0x22eb86, + 0x3881c5, + 0x20368b, + 0x20de06, + 0x22f7c5, + 0x24fa08, + 0x2a3b08, + 0x2b3ccc, + 0x2b3cd0, + 0x2b89c9, + 0x2cad07, + 0x34de4b, + 0x2f0c46, + 0x31794a, + 0x38cf0b, + 0x314c4a, + 0x2f9406, + 0x2fae05, + 0x331506, + 0x292a88, + 0x3a5c0a, + 0x38bfdc, + 0x30450c, + 0x304808, + 0x24d905, + 0x38f6c7, + 0x2cce46, + 0x39da45, + 0x2210c6, + 0x355d88, + 0x2d0c47, + 0x2cd108, + 0x27664a, + 0x35b5cc, + 0x3a2c09, + 0x35b847, + 0x243e44, + 0x204a06, + 0x2434ca, + 0x2a0f85, + 0x22054c, + 0x220c08, + 0x236f48, + 0x32794c, + 0x33878c, + 0x35cf89, + 0x361d87, + 0x24808c, + 0x2fce84, + 0x322a4a, + 0x3e23cc, + 0x254fcb, + 0x255c8b, + 0x259186, + 0x25f087, + 0x238747, + 0x23874f, + 0x311a51, + 0x2ee312, + 0x25f3cd, + 0x25f3ce, + 0x25f70e, + 0x3ba788, + 0x3ba792, + 0x2fc688, + 0x2b1987, + 0x259c4a, + 0x2125c8, + 0x3e5745, + 0x2c618a, + 0x224cc7, + 0x2f0d84, + 0x20b5c3, + 0x23f1c5, + 0x2e7847, + 0x306587, + 0x2a224e, + 0x3dc44d, + 0x316209, + 0x207385, + 0x34f9c3, + 0x33e246, + 0x267c45, + 0x3e5588, + 0x22d149, + 0x24c005, + 0x24c00f, + 0x2c5f47, + 0x234bc5, + 0x3c81ca, + 0x20d746, + 0x246809, + 0x3599cc, + 0x37eec9, + 0x2111c6, + 0x25954c, + 0x3357c6, + 0x30fac8, + 0x38c686, + 0x278b86, + 0x2c6c44, + 0x386d83, + 0x3e380a, + 0x209211, + 0x2fb28a, + 0x3e19c5, + 0x263e87, + 0x261707, + 0x2e20c4, + 0x31f6cb, + 0x3cfec8, + 0x2cf7c6, + 0x23e5c5, + 0x257104, + 0x26f9c9, + 0x2008c4, + 0x218407, + 0x37e8c5, + 0x37e8c7, + 0x340d05, + 0x212483, + 0x2b1848, + 0x2484ca, + 0x235f03, + 0x235f0a, + 0x2ae286, + 0x24bd8f, + 0x26b889, + 0x2bf290, + 0x2e2248, + 0x2e1809, + 0x2a5007, + 0x3164cf, + 0x3c5fc4, + 0x2e9044, + 0x2247c6, + 0x25d8c6, + 0x252c0a, + 0x24cb06, + 0x2bcc47, + 0x317dc8, + 0x317fc7, + 0x3196c7, + 0x31aa0a, + 0x319fcb, + 0x271385, + 0x2edf48, + 0x20c183, + 0x3c17cc, + 0x2089cf, + 0x22158d, + 0x35e207, + 0x236c89, + 0x35d247, + 0x2cbd48, + 0x3808cc, + 0x2eb6c8, + 0x3e16c8, + 0x33438e, + 0x345b94, + 0x3460a4, + 0x360d8a, + 0x37ea8b, + 0x3a8804, + 0x3a8809, + 0x2c6848, + 0x24fe05, + 0x3a248a, + 0x2b39c7, + 0x258bc4, + 0x253c43, + 0x216543, + 0x23ec84, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x243543, + 0x216443, + 0x2e8306, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x21f6c3, + 0x2000c2, + 0x253c43, + 0x216542, + 0x216543, + 0x23ec84, + 0x222bc3, + 0x343b43, + 0x243543, + 0x2e8306, + 0x2296c3, + 0x20cb83, + 0x793c8, + 0x216543, + 0x222bc3, + 0x2f5503, + 0x606296c3, + 0x7ca83, + 0x20cb83, + 0x60a01704, + 0xc1442, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x2000c2, + 0x28bb03, + 0x216542, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x204182, + 0x204042, + 0x216542, + 0x216543, + 0x2080c2, + 0x2005c2, + 0x2b1b84, + 0x28d4c4, + 0x233ec2, + 0x21b544, + 0x2003c2, + 0x20cb83, + 0x21f6c3, + 0x259186, + 0x22a042, + 0x204a42, + 0x208f02, + 0x61e0fb83, + 0x62202943, + 0x62186, + 0x62186, + 0x25dd04, + 0x20d903, + 0x1a16cd, + 0xa60a, + 0x1a02cc, + 0x8d34c, + 0x62c691cf, + 0x7074d, + 0x15c104, + 0x75104, + 0xffd44, + 0x146c05, + 0x95d89, + 0x17488c, + 0x34347, + 0x17f06, + 0x1f2c8, + 0x22a87, + 0x29e88, + 0x1beaca, + 0x1e1c47, + 0x174ac9, + 0x632ea205, + 0xea209, + 0x6343df0b, + 0x123308, + 0x3ecb, + 0x17ce88, + 0x18484a, + 0x132bce, + 0x6397448a, + 0x12808d, + 0x1b4bcd, + 0x144ce0b, + 0xeb94a, + 0x1db84, + 0x53846, + 0x89288, + 0x1dcf08, + 0x3e1c7, + 0x1e485, + 0x63eabe08, + 0x1d74c7, + 0x51b89, + 0xf4547, + 0x1c74c8, + 0x32649, + 0x48404, + 0x48985, + 0xc9ce, + 0x1402c7, + 0x6462cd86, + 0xb8d0d, + 0x1cdd88, + 0xedb48, + 0x64b7cb46, + 0x6557cb48, + 0xb3588, + 0x13d150, + 0x5fc8c, + 0x70607, + 0x71b07, + 0x75c07, + 0x7c947, + 0xc342, + 0x1d8707, + 0x18f4c, + 0x116b05, + 0xb8847, + 0xb3b86, + 0xb4e49, + 0xb7288, + 0x1ec82, + 0x5c2, + 0x190a86, + 0x67cb, + 0x6ac6, + 0x15c9c4, + 0x10f887, + 0x5e789, + 0x932c9, + 0x1bc248, + 0x54202, + 0x1971c9, + 0x17988, + 0x104e4a, + 0x65ada54b, + 0x145149, + 0x12506, + 0xdf889, + 0xeb8c7, + 0xec009, + 0xed548, + 0xeeac7, + 0xefe09, + 0xf2185, + 0xf2550, + 0x1e84c6, + 0x10f7c5, + 0x120047, + 0xb6a4d, + 0x4ab45, + 0xfec06, + 0xff487, + 0x105518, + 0xf48c8, + 0x80d4a, + 0x4a02, + 0x663a540b, + 0x666df98a, + 0x55a4a, + 0x6334d, + 0x1702, + 0xd9c46, + 0x30846, + 0xa7248, + 0xb700a, + 0x46c88, + 0x79289, + 0x118d88, + 0x6f68e, + 0x16208, + 0x13e247, + 0x66bb0284, + 0x12764d, + 0x10ba05, + 0x1a2f48, + 0x4fec8, + 0x66eaf2c8, + 0x114786, + 0x6502, + 0xcf5c4, + 0x110b46, + 0x6724b348, + 0x13906, + 0x678ddecb, + 0xe042, + 0xacc09, + 0x12d408, + 0x164647, + 0x35b4a, + 0x40407, 0x401, 0x81, - 0xbe588, - 0x5bb87, - 0x93783, - 0x5aa37e84, - 0x5ae9c0c3, + 0x183c47, + 0x116348, + 0x642c1503, + 0x1616c4, + 0xc1508, + 0xc1708, + 0xc1908, + 0x69c07, + 0x9b583, + 0x64e40644, + 0x652a0803, 0xc1, - 0x25d86, + 0x267c6, 0xc1, 0x201, - 0x25d86, - 0x93783, - 0x18b7c8, - 0x4cdc3, - 0x27c44, - 0x20f47, - 0xaa47, - 0x1571585, - 0x4e584, - 0x149307, - 0x12402, - 0x241ec4, - 0x22ea43, - 0x24d704, - 0x20e704, - 0x217fc3, - 0x222905, - 0x217c83, - 0x235403, - 0x37b845, - 0x20aa43, - 0x1be83, - 0x5ce2ea43, - 0x233fc3, - 0x4d704, - 0x33c3, - 0x266a83, + 0x267c6, + 0x9b583, + 0x65f36fc4, + 0x18b2c4, + 0x1a845, + 0x88e45, + 0x10f9c4, + 0x16684, + 0x54644, + 0x1c4b88, + 0x1866cc, + 0xe01, + 0x192c3, + 0x27804, + 0x1c4b88, + 0x677c4b88, + 0x674c3, + 0x79943, + 0x27d47, + 0x5f07, + 0x156d145, + 0x57e04, + 0x10dfc7, + 0x16542, + 0x88e04, + 0x21d684, + 0x216543, + 0x256d44, + 0x2b1b84, + 0x2296c3, + 0x22ba05, + 0x2203c3, + 0x24c343, + 0x355b45, + 0x201643, + 0x1df83, + 0x68a16543, + 0x222bc3, + 0x56d44, + 0x4f03, + 0x343b43, 0x200181, - 0x1e1c3, - 0x23cb03, - 0x217544, - 0x21e484, - 0x217fc3, - 0x4dfc3, - 0x23e083, - 0x208503, - 0xae888, + 0x1b283, + 0x216443, + 0x28d4c4, + 0x21b544, + 0x2296c3, + 0x57743, + 0x20cb83, + 0x202b03, + 0x793c8, 0x2000c2, - 0x24ac43, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x280203, + 0x253c43, + 0x216542, + 0x216543, + 0x222bc3, + 0x2f5503, 0x2005c2, - 0x20e704, - 0x2191c3, - 0x23cb03, - 0x217fc3, - 0x205803, - 0x23e083, - 0x20aa43, - 0x19d184, - 0xae888, - 0x10a087, - 0x12402, - 0x1aa705, - 0x5474f, - 0xf10c6, - 0x1454408, - 0x118cce, - 0x5de2a502, - 0x32f688, - 0x361886, - 0x24e706, - 0x39cb07, - 0x5e200c82, - 0x5e6bb188, - 0x21f28a, - 0x268208, - 0x200ac2, - 0x3ca549, - 0x358fc7, - 0x214846, - 0x222c89, - 0x2eeac4, - 0x3ca446, - 0x2e9104, - 0x2029c4, - 0x257b49, - 0x310e86, - 0x267c85, - 0x26b845, - 0x22f587, - 0x2de387, - 0x26b784, - 0x2d2486, - 0x301785, - 0x20ee05, - 0x25b1c5, - 0x2c2347, - 0x276245, - 0x24a0c9, - 0x37eb85, - 0x321984, - 0x3ae5c7, - 0x3b3fce, - 0x207289, - 0x3487c9, - 0x371246, - 0x2405c8, - 0x37554b, - 0x2a74cc, - 0x326f06, - 0x2c01c7, - 0x2f0d05, - 0x3163ca, - 0x3e2049, - 0x201189, - 0x206a86, - 0x30d905, - 0x246e45, - 0x389a89, - 0x25b34b, - 0x2ef106, - 0x353806, - 0x209984, - 0x303a46, - 0x3051c8, - 0x3cbf46, - 0x267846, - 0x203048, - 0x205107, - 0x206809, - 0x208e85, - 0xae888, - 0x3d2c44, - 0x319844, - 0x210145, - 0x343c49, - 0x221287, - 0x22128b, - 0x22434a, - 0x228745, - 0x5ea087c2, - 0x3560c7, - 0x5ee2b748, - 0x206cc7, - 0x303085, - 0x35d60a, - 0x12402, - 0x28428b, - 0x28544a, - 0x24a546, - 0x20ffc3, - 0x21114d, - 0x3ca98c, - 0x203a8d, - 0x232105, - 0x3363c5, - 0x324687, - 0x206309, - 0x21f186, - 0x247b45, - 0x3401c8, - 0x2d4dc3, - 0x2f52c8, - 0x303948, - 0x3a2107, - 0x3c5d88, - 0x3c76c9, - 0x2ff5c7, - 0x3558c7, - 0x371408, - 0x38bcc4, - 0x38bcc7, - 0x292048, - 0x366406, - 0x3cb14f, - 0x265747, - 0x2d1f86, - 0x32ac45, - 0x223ec3, - 0x2479c7, - 0x38e083, - 0x24c6c6, - 0x24e486, - 0x24ff06, - 0x298ec5, - 0x26c183, - 0x398ec8, - 0x390849, - 0x3a290b, - 0x250088, - 0x251945, - 0x253645, - 0x5f2ba882, - 0x2a4c09, - 0x223307, - 0x259a05, - 0x257a47, - 0x258ec6, - 0x386ac5, - 0x259d0b, - 0x25c8c4, - 0x267dc5, - 0x267f07, - 0x27c586, - 0x27c9c5, - 0x28b987, - 0x28c147, - 0x2a9cc4, - 0x2bee4a, - 0x292b08, - 0x375809, - 0x25b985, - 0x3585c6, - 0x30538a, - 0x26d6c6, - 0x236047, - 0x272a0d, - 0x2abf09, - 0x397445, - 0x2603c7, - 0x32d088, - 0x3b38c8, - 0x20a107, - 0x20e3c6, - 0x22cc07, - 0x24d903, - 0x310e04, - 0x383405, - 0x3af807, - 0x3bae09, - 0x2f5e08, - 0x235f45, - 0x362784, - 0x250245, - 0x25ca8d, - 0x200cc2, - 0x2ce4c6, - 0x2f7986, - 0x30820a, - 0x3a0e06, - 0x3aa945, - 0x2e95c5, - 0x2e95c7, - 0x3adc0c, - 0x25720a, - 0x294d06, - 0x2e4185, - 0x303886, - 0x294fc7, - 0x296986, - 0x298dcc, - 0x222dc9, - 0x5f626207, - 0x29ae85, - 0x29ae86, - 0x29bb48, - 0x2ca185, - 0x2ac785, - 0x2ad148, - 0x2ad34a, - 0x5fa295c2, - 0x5fe0b942, - 0x309d85, - 0x26a483, - 0x32a308, - 0x210503, - 0x2ad5c4, - 0x35d30b, - 0x2a78c8, - 0x384648, - 0x6034b7c9, - 0x2b48c9, - 0x2b51c6, - 0x2b6b48, - 0x2b6d49, - 0x2b7a86, - 0x2b7c05, - 0x248486, - 0x2b8589, - 0x2cd607, - 0x394746, - 0x21b347, - 0x2014c7, - 0x213f04, - 0x6067f8c9, - 0x2bcec8, - 0x2bb088, - 0x200e07, - 0x2d7c86, - 0x205a89, - 0x24e6c7, - 0x3c250a, - 0x3c8108, - 0x2131c7, - 0x2180c6, - 0x2a114a, - 0x32a708, - 0x2f7405, - 0x225a05, - 0x3d12c7, - 0x3264c9, - 0x32878b, - 0x39be48, - 0x37ec09, - 0x250487, - 0x2c94cc, - 0x2c9d4c, - 0x2ca04a, - 0x2ca2cc, - 0x2d3d88, - 0x2d3f88, - 0x2d4184, - 0x2d4549, - 0x2d4789, - 0x2d49ca, - 0x2d4c49, - 0x2d4fc7, - 0x3c91cc, - 0x3dc686, - 0x2723c8, - 0x26d786, - 0x3957c6, - 0x397347, - 0x3a8708, - 0x22a28b, - 0x206b87, - 0x257809, - 0x288349, - 0x2a4e07, - 0x2e9344, - 0x269087, - 0x39b786, - 0x2128c6, - 0x2ed205, - 0x2f9848, - 0x317044, - 0x317046, - 0x2570cb, - 0x2af909, - 0x385c06, - 0x267a49, - 0x210206, - 0x249088, - 0x20eb03, - 0x30da85, - 0x219849, - 0x214445, - 0x3b9e84, - 0x3d25c6, - 0x308005, - 0x20a686, - 0x31d587, - 0x355006, - 0x22c6cb, - 0x2040c7, - 0x3a9c46, - 0x278c86, - 0x22f646, - 0x26b749, - 0x3b5e0a, - 0x2cb445, - 0x205e0d, - 0x2ad446, - 0x239446, - 0x2e8b06, - 0x220d45, - 0x2f2107, - 0x30b4c7, - 0x2794ce, - 0x23cb03, - 0x2d7c49, - 0x324b49, - 0x22f2c7, - 0x271a47, - 0x2703c5, - 0x294145, - 0x60bb494f, - 0x2ddc07, - 0x2dddc8, - 0x2de184, - 0x2de646, - 0x60e46b42, - 0x2e2386, - 0x2e4806, - 0x3b564e, - 0x2f510a, - 0x2bb906, - 0x218d4a, - 0x203889, - 0x23c7c5, - 0x312d08, - 0x33dd86, - 0x2ba948, - 0x36aac8, - 0x28238b, - 0x39cc05, - 0x2762c8, - 0x20318c, - 0x302f47, - 0x24f986, - 0x30e908, - 0x229f48, - 0x6123bec2, - 0x20c70b, - 0x209089, - 0x2bf709, - 0x21a747, - 0x3c3088, - 0x6161cf48, - 0x21d84b, - 0x34bd89, - 0x28be0d, - 0x3802c8, - 0x2a1348, - 0x61a09282, - 0x228644, - 0x61e30242, - 0x3b9cc6, - 0x62200e42, - 0x2fd7ca, - 0x364486, - 0x267388, - 0x3cea88, - 0x3e1bc6, - 0x2c06c6, - 0x306246, - 0x2acc85, - 0x239dc4, - 0x62768e04, - 0x35f2c6, - 0x277a47, - 0x62a810c7, - 0x24ed8b, - 0x206ec9, - 0x33640a, - 0x2f4dc4, - 0x2e9708, - 0x39450d, - 0x2fe709, - 0x2fe948, - 0x2febc9, - 0x300ac4, - 0x266344, - 0x393505, - 0x33f0cb, - 0x2a7846, - 0x35f105, - 0x236dc9, - 0x2d2548, - 0x2aa9c4, - 0x316549, - 0x3c22c5, - 0x2de3c8, - 0x355f87, - 0x348bc8, - 0x288a06, - 0x20f5c7, - 0x2e8689, - 0x3c33c9, - 0x226705, - 0x23b4c5, - 0x62e13242, - 0x321744, - 0x232345, - 0x39ca06, - 0x33eac5, - 0x23fa07, - 0x35f3c5, - 0x27c5c4, - 0x371306, - 0x247bc7, - 0x238e46, - 0x30c645, - 0x214048, - 0x361a85, - 0x21e147, - 0x225209, - 0x2afa4a, - 0x266f07, - 0x266f0c, - 0x267c46, - 0x23df09, - 0x248085, - 0x2d2ec8, - 0x202443, - 0x2f2d05, - 0x3c0e45, - 0x282fc7, - 0x63201242, - 0x2f9b87, - 0x2f0906, - 0x3862c6, - 0x2f2586, - 0x229e86, - 0x23be08, - 0x27e105, - 0x2d2047, - 0x2d204d, - 0x20ee43, - 0x3dcb45, - 0x276b87, - 0x2f9ec8, - 0x276745, - 0x216bc8, - 0x382e86, - 0x29c107, - 0x2d6945, - 0x39cc86, - 0x399445, - 0x21ef4a, - 0x301b46, - 0x274587, - 0x2ce285, - 0x310687, - 0x35a584, - 0x3b9e06, - 0x312c45, - 0x33544b, - 0x39b609, - 0x281cca, - 0x226788, - 0x393f88, - 0x31408c, - 0x3d8d07, - 0x31c848, - 0x31ecc8, - 0x32b9c5, - 0x35c18a, - 0x35f4c9, - 0x63600ec2, - 0x20b086, - 0x260d44, - 0x2fc549, - 0x240e89, - 0x246907, - 0x27bfc7, - 0x29cd49, - 0x33e348, - 0x33e34f, - 0x22d606, - 0x2e6ccb, - 0x256845, - 0x256847, - 0x381cc9, - 0x21fe06, - 0x3164c7, - 0x2eb805, - 0x232004, - 0x307ec6, - 0x206244, - 0x3ba247, - 0x3792c8, - 0x63b0d808, - 0x30fa05, - 0x30fb47, - 0x3532c9, - 0x20c4c4, - 0x241948, - 0x63e653c8, - 0x2e8a84, - 0x2f6dc8, - 0x25f184, - 0x206109, - 0x220c85, - 0x6422dc42, - 0x22d645, - 0x2dfd45, - 0x2600c8, - 0x234c07, - 0x646008c2, - 0x3c7a85, - 0x2e04c6, - 0x24d186, - 0x321708, - 0x31f148, - 0x33ea86, - 0x34a046, - 0x30a149, - 0x386206, - 0x21fccb, - 0x229d05, - 0x2af286, - 0x368048, - 0x34ae46, - 0x2bc246, - 0x2178ca, - 0x2e1b0a, - 0x23eb45, - 0x29c787, - 0x27a146, - 0x64a034c2, - 0x276cc7, - 0x367145, - 0x305304, - 0x305305, - 0x2f4cc6, - 0x278807, - 0x21ac85, - 0x240f44, - 0x2c3708, - 0x2bc305, - 0x37a987, - 0x3808c5, - 0x21ee85, - 0x245744, - 0x245749, - 0x3015c8, - 0x359586, - 0x358846, - 0x363f06, - 0x64fcfc08, - 0x3d8b87, - 0x31474d, - 0x314f0c, - 0x315509, - 0x315749, - 0x65379942, - 0x3d7403, - 0x20e483, - 0x39b845, - 0x3af90a, - 0x33e946, - 0x2365c5, - 0x31e244, - 0x31e24b, - 0x33384c, - 0x33410c, - 0x334415, - 0x335e0d, - 0x337e8f, - 0x338252, - 0x3386cf, - 0x338a92, - 0x338f13, - 0x3393cd, - 0x33998d, - 0x339d0e, - 0x33a60e, - 0x33ac0c, - 0x33afcc, - 0x33b40b, - 0x33be8e, - 0x33c792, - 0x33e70c, - 0x3403d0, - 0x34e4d2, - 0x34f54c, - 0x34fc0d, - 0x34ff4c, - 0x3524d1, - 0x35398d, - 0x35ae4d, - 0x35b44a, - 0x35b6cc, - 0x35e60c, - 0x35ee0c, - 0x35f70c, - 0x362e93, - 0x363610, - 0x363a10, - 0x36460d, - 0x364c0c, - 0x365a49, - 0x3697cd, - 0x369b13, - 0x36b451, - 0x36bc53, - 0x36c94f, - 0x36cd0c, - 0x36d00f, - 0x36d3cd, - 0x36d9cf, - 0x36dd90, - 0x36e80e, - 0x37198e, - 0x3722d0, - 0x37318d, - 0x373b0e, - 0x373e8c, - 0x374fd3, - 0x37768e, - 0x377c10, - 0x378011, - 0x37844f, - 0x378813, - 0x3794cd, - 0x37980f, - 0x379bce, - 0x37a150, - 0x37a549, - 0x37bc90, - 0x37c18f, - 0x37c80f, - 0x37cbd2, - 0x37f68e, - 0x3804cd, - 0x380a0d, - 0x380d4d, - 0x381f0d, - 0x38224d, - 0x382590, - 0x38298b, - 0x3831cc, - 0x38354c, - 0x383b4c, - 0x383e4e, - 0x393650, - 0x395112, - 0x39558b, - 0x395f8e, - 0x39630e, - 0x396b8e, - 0x39710b, - 0x65797596, - 0x397e8d, - 0x398a14, - 0x39970d, - 0x39c255, - 0x39ea0d, - 0x39f38f, - 0x39fb4f, - 0x3a2bcf, - 0x3a2f8e, - 0x3a330d, - 0x3a4891, - 0x3a7ecc, - 0x3a81cc, - 0x3a84cb, - 0x3a890c, - 0x3a904f, - 0x3a9412, - 0x3aa1cd, - 0x3abe8c, - 0x3acc4c, - 0x3acf4d, - 0x3ad28f, - 0x3ad64e, - 0x3af5cc, - 0x3afb8d, - 0x3afecb, - 0x3b078c, - 0x3b108d, - 0x3b13ce, - 0x3b1749, - 0x3b2dd3, - 0x3b688d, - 0x3b6f8d, - 0x3b758c, - 0x3b7c0e, - 0x3b830f, - 0x3b86cc, - 0x3b89cd, - 0x3b8d0f, - 0x3b90cc, - 0x3ba40c, - 0x3ba8cc, - 0x3babcc, - 0x3bbb8d, - 0x3bbed2, - 0x3bc64c, - 0x3bc94c, - 0x3bcc51, - 0x3bd08f, - 0x3bd44f, - 0x3bd813, - 0x3be60e, - 0x3be98f, - 0x3bed4c, - 0x65bbf40e, - 0x3bf78f, - 0x3bfb56, - 0x3c1bd2, - 0x3c440c, - 0x3c4d8f, - 0x3c540d, - 0x3cec8f, - 0x3cf04c, - 0x3cf34d, - 0x3cf68d, - 0x3d0d4e, - 0x3d19cc, - 0x3d420c, - 0x3d4510, - 0x3d6791, - 0x3d6bcb, - 0x3d700c, - 0x3d730e, - 0x3d91d1, - 0x3d960e, - 0x3d998d, - 0x3de2cb, - 0x3debcf, - 0x3dfa54, - 0x23ca82, - 0x23ca82, - 0x203183, - 0x23ca82, - 0x203183, - 0x23ca82, - 0x201082, - 0x2484c5, - 0x3d8ecc, - 0x23ca82, - 0x23ca82, - 0x201082, - 0x23ca82, - 0x29c945, - 0x2afa45, - 0x23ca82, - 0x23ca82, - 0x208a02, - 0x29c945, - 0x336689, - 0x36b14c, - 0x23ca82, - 0x23ca82, - 0x23ca82, - 0x23ca82, - 0x2484c5, - 0x23ca82, - 0x23ca82, - 0x23ca82, - 0x23ca82, - 0x208a02, - 0x336689, - 0x23ca82, - 0x23ca82, - 0x23ca82, - 0x2afa45, - 0x23ca82, - 0x2afa45, - 0x36b14c, - 0x3d8ecc, - 0x24ac43, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x217fc3, - 0x23e083, - 0x1e14cf, - 0x1b4508, - 0x6704, - 0x5803, - 0x8efc8, - 0x1d1843, - 0x2000c2, - 0x66a12402, - 0x241283, - 0x25a584, - 0x2033c3, - 0x38a0c4, - 0x231346, - 0x222743, - 0x3d2484, - 0x3517c5, - 0x23cb03, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0x226e0a, - 0x2509c6, - 0x39668c, - 0xae888, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x215f83, - 0x2e4806, - 0x217fc3, - 0x23e083, - 0x216983, - 0xe783, - 0xaeec8, - 0x675dc3c5, - 0x49647, - 0x146bc5, - 0xcd89, - 0x8c02, - 0x1c73ca, - 0x683a7b85, - 0x146bc5, - 0x1683c7, - 0x74f88, - 0xb74e, - 0x90d92, - 0x123bcb, - 0x110ac6, - 0x686bd285, - 0x68abf28c, - 0x149147, - 0x178d87, - 0x127eca, - 0x3c290, - 0x1645, - 0xc634b, - 0x10f508, - 0x35cc7, - 0xbc3cb, - 0x34449, - 0x48687, - 0x161347, - 0xef347, - 0x35c06, - 0xec88, - 0x69036fc6, - 0x3dc87, - 0x176b06, - 0x4efcd, - 0xe9890, - 0x694293c2, - 0x7f248, - 0x8c550, - 0x184e8c, - 0x69b8794d, - 0x5a388, - 0x5a80b, - 0x71007, - 0x96d89, - 0x56546, - 0x9bd48, - 0x5b542, - 0x1b21ca, - 0x65a87, - 0xb4e07, - 0xafcc9, - 0xb3108, - 0xf48c5, - 0x193c86, - 0x1c2e06, - 0xffb4e, - 0xef90e, - 0x18ee0f, - 0x33449, - 0x860c9, - 0x1b1d4b, - 0xb538f, - 0xc470c, - 0xcfe0b, - 0x11d1c8, - 0x16f747, - 0x194c88, - 0x1a8c8b, - 0xb920c, - 0xb960c, - 0xb9a0c, - 0xb9d0d, - 0x1bb208, - 0x50d42, - 0x199249, - 0x15d048, - 0x1de00b, - 0xd7e86, - 0xdfe8b, - 0x13c2cb, - 0xeaf4a, - 0xec7c5, - 0xf1e10, - 0xf6a46, - 0x155146, - 0x1b5a05, - 0x19dfc7, - 0xe2608, - 0xfadc7, - 0xfb087, - 0x1416c7, - 0xccec6, - 0x1b9b0a, - 0xae70a, - 0x13a06, - 0xb4bcd, - 0x3dd48, - 0x118088, - 0x1188c9, - 0xc7c05, - 0x1b800c, - 0xb9f0b, - 0x15ca49, - 0x1d1204, - 0x114389, - 0x1145c6, - 0x156786, - 0x3c986, - 0x72c2, - 0x134c46, - 0x1496cb, - 0x11e987, - 0x11eb47, - 0x3602, - 0xd9785, - 0x2de44, - 0x101, - 0x506c3, - 0x68e6a646, - 0x9c0c3, - 0x382, - 0x2b104, - 0xac2, - 0x4cd44, - 0x882, - 0x7282, - 0x6c02, - 0x10bf02, - 0xcf02, - 0xbd282, - 0xd42, - 0x161e82, - 0x37402, - 0xda02, - 0xf982, - 0x4e682, - 0x33fc3, - 0x942, - 0x31c2, - 0xfa02, - 0x91c2, - 0x642, - 0x32702, - 0xb5c2, - 0x8fc2, - 0xf782, - 0x5c2, - 0x191c3, - 0x4b82, - 0x22c2, - 0x4b202, - 0x6902, - 0x2702, - 0xa682, - 0x4202, - 0x8c82, - 0xb982, - 0x193b42, - 0x720c2, - 0xcac2, - 0x17fc3, - 0x602, - 0x3bec2, - 0x2542, - 0x35c2, - 0x26685, - 0x4fc2, - 0x42c42, - 0x3d583, - 0x682, - 0xd782, - 0x2442, - 0xab02, - 0xee42, - 0x8c2, - 0x4642, - 0x72c2, - 0x8cc5, - 0x69e01082, - 0x6a2e82c3, - 0x1ac3, - 0x6a601082, - 0x1ac3, - 0x7a807, - 0x2089c3, - 0x2000c2, - 0x22ea43, - 0x233fc3, - 0x280203, - 0x2005c3, - 0x215f83, - 0x217fc3, - 0x205803, - 0x23e083, - 0x2bd443, - 0xc7c44, - 0x16acc5, - 0x105085, - 0x10103, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x280203, - 0x23cb03, - 0x217fc3, - 0x205803, - 0x1c0443, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x200181, - 0x23cb03, - 0x217fc3, - 0x24dfc3, - 0x23e083, - 0x2f44, - 0x24ac43, - 0x22ea43, - 0x233fc3, - 0x275243, - 0x280203, - 0x2d2a83, - 0x2381c3, - 0x2a49c3, + 0x2b1b84, + 0x243543, + 0x216443, + 0x2296c3, 0x20d903, - 0x266a83, - 0x20e704, - 0x217fc3, - 0x23e083, - 0x20aa43, - 0x207d44, - 0x25cc83, - 0x33f03, - 0x238f43, - 0x32dac8, - 0x2a1184, + 0x20cb83, + 0x201643, + 0x8904, + 0x793c8, + 0xf0007, + 0x16542, + 0x13f105, + 0x5fdcf, + 0xfa946, + 0x1472588, + 0x1190ce, + 0x69a0bc42, + 0x20bc88, + 0x20ad46, + 0x257f86, + 0x39a587, + 0x69e00c82, + 0x6a2bf108, + 0x22588a, + 0x270088, + 0x200ac2, + 0x37b789, + 0x2713c7, + 0x21ab46, + 0x2b1589, + 0x2cb344, + 0x349406, + 0x2d8d04, + 0x223984, + 0x263789, + 0x3e2106, + 0x236b05, + 0x274145, + 0x3e04c7, + 0x2d3b87, + 0x2d8684, + 0x322006, + 0x3061c5, + 0x20b585, + 0x238cc5, + 0x337047, + 0x3c7645, + 0x2533c9, + 0x3411c5, + 0x33ea04, + 0x231bc7, + 0x379ece, + 0x208509, + 0x340989, + 0x36ce06, + 0x249048, + 0x370e4b, + 0x2ab90c, + 0x31a746, + 0x2c32c7, + 0x2f19c5, + 0x31270a, + 0x20a989, + 0x201189, + 0x207d06, + 0x3bacc5, + 0x24f485, + 0x385e09, + 0x238e4b, + 0x3871c6, + 0x352106, + 0x20ef84, + 0x323bc6, + 0x308608, + 0x3cd246, + 0x228d06, + 0x204b88, + 0x206347, + 0x207ac9, + 0x20a245, + 0x793c8, + 0x3d7444, + 0x319c44, + 0x213f45, + 0x344589, + 0x22adc7, + 0x22adcb, + 0x22c88a, + 0x232345, + 0x6a606e82, + 0x2f6b47, + 0x6aa34fc8, + 0x207f47, + 0x21c245, + 0x2c858a, + 0x16542, + 0x289c0b, + 0x28ab0a, + 0x22bd06, + 0x2122c3, + 0x214ccd, + 0x3c338c, + 0x3dec0d, + 0x29e685, + 0x2bdd45, + 0x3a29c7, + 0x214609, + 0x225786, + 0x24c985, + 0x37f7c8, + 0x2d9c83, + 0x3588c8, + 0x323ac8, + 0x39f407, + 0x3c7188, + 0x2251c9, + 0x2d7a47, + 0x2f6347, + 0x36cfc8, + 0x37b644, + 0x37b647, + 0x28a4c8, + 0x361486, + 0x205acf, + 0x323607, + 0x321b06, + 0x361ec5, + 0x22c3c3, + 0x250b47, + 0x251243, + 0x255446, + 0x257d06, + 0x25a606, + 0x29c885, + 0x273b43, + 0x396e48, + 0x38b949, + 0x3a3c8b, + 0x25a788, + 0x25c785, + 0x25eb45, + 0x6ae5c082, + 0x26b249, + 0x3d1907, + 0x2891c5, + 0x263687, + 0x264dc6, + 0x3b2605, + 0x267a8b, + 0x26ac84, + 0x26fc45, + 0x26fd87, + 0x281a06, + 0x281e45, + 0x290dc7, + 0x291487, + 0x2ae244, + 0x37468a, + 0x297688, + 0x371109, + 0x2acac5, + 0x347486, + 0x3087ca, + 0x274046, + 0x23b8c7, + 0x2780cd, + 0x2b0049, + 0x394d85, + 0x37d287, + 0x32bbc8, + 0x36c888, + 0x3c3ac7, + 0x3ce246, + 0x22d347, + 0x257783, + 0x357f04, + 0x380f85, + 0x3b1447, + 0x3bbe49, + 0x287f08, + 0x23b7c5, + 0x382fc4, + 0x2574c5, + 0x26510d, + 0x200cc2, + 0x221ec6, + 0x2f8e06, + 0x33f34a, + 0x39e886, + 0x3afc45, + 0x2d91c5, + 0x2d91c7, + 0x3b3b0c, + 0x2b340a, + 0x298d86, + 0x2e7c45, + 0x323a06, + 0x299287, + 0x29ab06, + 0x29c78c, + 0x2b16c9, + 0x6b226c47, + 0x29f685, + 0x29f686, + 0x2a0288, + 0x24c885, + 0x2b0785, + 0x2b2048, + 0x2b224a, + 0x6b6870c2, + 0x6ba10f82, + 0x368b05, + 0x317b83, + 0x23d9c8, + 0x20b383, + 0x2b24c4, + 0x24694b, + 0x2231c8, + 0x2c1bc8, + 0x6bf4a9c9, + 0x2b8309, + 0x2b8c06, + 0x2b9e48, + 0x2ba049, + 0x2ba946, + 0x2baac5, + 0x251986, + 0x2bb089, + 0x2d46c7, + 0x24e2c6, + 0x273307, + 0x37bd07, + 0x39d584, + 0x6c2f4bc9, + 0x39dc88, + 0x2bf008, + 0x200e07, + 0x2dc706, + 0x20db89, + 0x257f47, + 0x3c840a, + 0x3ce388, + 0x21f107, + 0x221886, + 0x29ac4a, + 0x3a6c88, + 0x2f8885, + 0x22f6c5, + 0x31bd47, + 0x324849, + 0x32864b, + 0x3bc408, + 0x341249, + 0x25b607, + 0x2cdbcc, + 0x2ce30c, + 0x2ce60a, + 0x2ce88c, + 0x2d8888, + 0x2d8a88, + 0x2d8c84, + 0x2d9409, + 0x2d9649, + 0x2d988a, + 0x2d9b09, + 0x2d9e87, + 0x3cb8cc, + 0x3e7f06, + 0x277a88, + 0x274106, + 0x392b46, + 0x394c87, + 0x3ab788, + 0x3499cb, + 0x207e07, + 0x263fc9, + 0x28d5c9, + 0x252907, + 0x24b5c4, + 0x26bfc7, + 0x2d2bc6, + 0x218946, + 0x217145, + 0x2db8c8, + 0x310704, + 0x310706, + 0x2b32cb, + 0x266749, + 0x25b246, + 0x228f09, + 0x214006, + 0x38f0c8, + 0x271f43, + 0x3bae45, + 0x218a89, + 0x3e97c5, + 0x308104, + 0x3b7146, + 0x36aa05, + 0x260006, + 0x31c407, + 0x2109c6, + 0x2374cb, + 0x3c2887, + 0x267786, + 0x27e3c6, + 0x3e0586, + 0x2d8649, + 0x20308a, + 0x2cfdc5, + 0x2fcb0d, + 0x2b2346, + 0x259946, + 0x2e2146, + 0x227b45, + 0x2f2847, + 0x233587, + 0x27ec0e, + 0x216443, + 0x2dc6c9, + 0x3a1c09, + 0x312b07, + 0x276e87, + 0x291945, + 0x2f3e45, + 0x6c609e0f, + 0x2e1a47, + 0x2e1c08, + 0x2e1f04, + 0x2e2446, + 0x6ca4f102, + 0x2e5b86, + 0x2e8306, + 0x30f40e, + 0x35870a, + 0x2c7906, + 0x21498a, + 0x20d109, + 0x23f7c5, + 0x30bfc8, + 0x3dc706, + 0x2be208, + 0x343648, + 0x285dcb, + 0x39a685, + 0x3c76c8, + 0x204ccc, + 0x21c107, + 0x259b86, + 0x36a848, + 0x349688, + 0x6ce4ba82, + 0x32e38b, + 0x211e89, + 0x20a449, + 0x3c2187, + 0x3a8bc8, + 0x6d21e1c8, + 0x32c1cb, + 0x268d09, + 0x29420d, + 0x306f08, + 0x3c5088, + 0x6d603c82, + 0x210c84, + 0x6da386c2, + 0x377a06, + 0x6de00e42, + 0x3022ca, + 0x2b0606, + 0x22fc48, + 0x2b1e48, + 0x260946, + 0x2c37c6, + 0x3090c6, + 0x3e5505, + 0x2417c4, + 0x6e235504, + 0x3597c6, + 0x281447, + 0x6e684ec7, + 0x391e0b, + 0x208149, + 0x2bdd8a, + 0x2d9304, + 0x258208, + 0x24e08d, + 0x302bc9, + 0x302e08, + 0x303089, + 0x305504, + 0x251104, + 0x28c445, + 0x20508b, + 0x223146, + 0x359605, + 0x23f349, + 0x3220c8, + 0x2aeb04, + 0x312889, + 0x21eec5, + 0x2d3bc8, + 0x2f6a07, + 0x340d88, + 0x28cf06, + 0x206d47, + 0x2ecf49, + 0x203809, + 0x22f845, + 0x2b0d05, + 0x6ea1f182, + 0x33e7c4, + 0x244985, + 0x39a486, + 0x34b885, + 0x303c87, + 0x3598c5, + 0x281a44, + 0x36cec6, + 0x24ca07, + 0x3a01c6, + 0x32c605, + 0x212788, + 0x20af45, + 0x21b207, + 0x22c649, + 0x26688a, + 0x2344c7, + 0x2344cc, + 0x236ac6, + 0x242d89, + 0x24c505, + 0x24c7c8, + 0x22ea03, + 0x230445, + 0x2c7d85, + 0x286a07, + 0x6ee01242, + 0x2fe1c7, + 0x2eef06, + 0x3ad646, + 0x2f2006, + 0x3495c6, + 0x24b9c8, + 0x283885, + 0x321bc7, + 0x321bcd, + 0x20b5c3, + 0x3e83c5, + 0x3c7f87, + 0x2fe508, + 0x3c7b45, + 0x21f908, + 0x35b2c6, + 0x2ea3c7, + 0x2f5685, + 0x39a706, + 0x3973c5, + 0x22554a, + 0x2f9546, + 0x2315c7, + 0x320285, + 0x2fdec7, + 0x301804, + 0x308086, + 0x30bf05, + 0x23640b, + 0x2d2a49, + 0x28bc0a, + 0x22f8c8, + 0x377b48, + 0x30fecc, + 0x310c87, + 0x31ea88, + 0x391308, + 0x3d65c5, + 0x32a40a, + 0x34f9c9, + 0x6f200ec2, + 0x210606, + 0x24c004, + 0x300c89, + 0x247989, + 0x24eec7, + 0x284447, + 0x2a0d09, + 0x32aac8, + 0x32aacf, + 0x22dd46, + 0x2e9ecb, + 0x261445, + 0x261447, + 0x3572c9, + 0x22a186, + 0x312807, + 0x2ee685, + 0x23a944, + 0x34cb86, + 0x2174c4, + 0x2c9147, + 0x360648, + 0x6f7babc8, + 0x30d045, + 0x30d187, + 0x351bc9, + 0x211c44, + 0x24a5c8, + 0x6fb04c88, + 0x2e20c4, + 0x33ed08, + 0x32ce84, + 0x217389, + 0x227a85, + 0x6fe13402, + 0x22dd85, + 0x2ed405, + 0x3b69c8, + 0x23cf87, + 0x702008c2, + 0x3c2645, + 0x2e4146, + 0x25fb06, + 0x33e788, + 0x348688, + 0x34b846, + 0x37dcc6, + 0x2f00c9, + 0x3ad586, + 0x22a04b, + 0x349345, + 0x259386, + 0x261f88, + 0x362646, + 0x29e506, + 0x22000a, + 0x2e530a, + 0x22be45, + 0x24f187, + 0x27f886, + 0x70605002, + 0x3c80c7, + 0x38fb05, + 0x308744, + 0x308745, + 0x258106, + 0x27df47, + 0x2247c5, + 0x247a44, + 0x2e2708, + 0x29e5c5, + 0x355387, + 0x383485, + 0x225485, + 0x265c84, + 0x265c89, + 0x306008, + 0x2017c6, + 0x347706, + 0x3b6c06, + 0x70bd38c8, + 0x3dc2c7, + 0x31490d, + 0x314ecc, + 0x3154c9, + 0x315709, + 0x70f75ac2, + 0x3db703, + 0x22bec3, + 0x2d2c85, + 0x3b154a, + 0x33e646, + 0x34ce85, + 0x31cbc4, + 0x31cbcb, + 0x33508c, + 0x33594c, + 0x335c55, + 0x33698d, + 0x338a8f, + 0x338e52, + 0x3392cf, + 0x339692, + 0x339b13, + 0x339fcd, + 0x33a58d, + 0x33a90e, + 0x33b2ce, + 0x33b9cc, + 0x33bd8c, + 0x33c1cb, + 0x33cc4e, + 0x33d552, + 0x33e40c, + 0x33f5d0, + 0x34cfd2, + 0x34e1cc, + 0x34e88d, + 0x34ebcc, + 0x350dd1, + 0x35228d, + 0x355f8d, + 0x35658a, + 0x35680c, + 0x357ccc, + 0x35930c, + 0x359ccc, + 0x35dad3, + 0x35e550, + 0x35e950, + 0x35f34d, + 0x35f94c, + 0x360ac9, + 0x36290d, + 0x362c53, + 0x364b11, + 0x365313, + 0x36664f, + 0x366a0c, + 0x366d0f, + 0x3670cd, + 0x3676cf, + 0x367a90, + 0x36850e, + 0x36d54e, + 0x36de90, + 0x36ea8d, + 0x36f40e, + 0x36f78c, + 0x3708d3, + 0x3725ce, + 0x373310, + 0x373711, + 0x373b4f, + 0x373f13, + 0x37564d, + 0x37598f, + 0x375d4e, + 0x3762d0, + 0x3766c9, + 0x377d50, + 0x37824f, + 0x3788cf, + 0x378c92, + 0x37c3ce, + 0x37d94d, + 0x37e00d, + 0x37e34d, + 0x37f9cd, + 0x37fd0d, + 0x380050, + 0x38044b, + 0x380d4c, + 0x3810cc, + 0x3816cc, + 0x3819ce, + 0x390450, + 0x392492, + 0x39290b, + 0x3938ce, + 0x393c4e, + 0x3944ce, + 0x394a4b, + 0x71394ed6, + 0x395e0d, + 0x396994, + 0x39768d, + 0x399cd5, + 0x39b8cd, + 0x39c24f, + 0x39cb8f, + 0x3a3f4f, + 0x3a430e, + 0x3a468d, + 0x3a6611, + 0x3aaf4c, + 0x3ab24c, + 0x3ab54b, + 0x3ab98c, + 0x3ac40f, + 0x3ac7d2, + 0x3acdcd, + 0x3ae1cc, + 0x3aec8c, + 0x3aef8d, + 0x3af2cf, + 0x3af68e, + 0x3b120c, + 0x3b17cd, + 0x3b1b0b, + 0x3b23cc, + 0x3b318d, + 0x3b34ce, + 0x3b3849, + 0x3b50d3, + 0x3b798d, + 0x3b808d, + 0x3b868c, + 0x3b8d0e, + 0x3b958f, + 0x3b994c, + 0x3b9c4d, + 0x3b9f8f, + 0x3ba34c, + 0x3bb38c, + 0x3bb90c, + 0x3bbc0c, + 0x3bc8cd, + 0x3bcc12, + 0x3bd38c, + 0x3bd68c, + 0x3bd991, + 0x3bddcf, + 0x3be18f, + 0x3be553, + 0x3bf34e, + 0x3bf6cf, + 0x3bfa8c, + 0x717c014e, + 0x3c04cf, + 0x3c0896, + 0x3c1b92, + 0x3c528c, + 0x3c618f, + 0x3c680d, + 0x3d294f, + 0x3d2d0c, + 0x3d300d, + 0x3d334d, + 0x3d51ce, + 0x3d5d0c, + 0x3d914c, + 0x3d9450, + 0x3daa91, + 0x3daecb, + 0x3db30c, + 0x3db60e, + 0x3dd8d1, + 0x3ddd0e, + 0x3de08d, + 0x3e5f8b, + 0x3e688f, + 0x3e74d4, + 0x2038c2, + 0x2038c2, + 0x204cc3, + 0x2038c2, + 0x204cc3, + 0x2038c2, + 0x201082, + 0x2519c5, + 0x3dd5cc, + 0x2038c2, + 0x2038c2, + 0x201082, + 0x2038c2, + 0x2a0905, + 0x266885, + 0x2038c2, + 0x2038c2, + 0x20bd42, + 0x2a0905, + 0x337209, + 0x36480c, + 0x2038c2, + 0x2038c2, + 0x2038c2, + 0x2038c2, + 0x2519c5, + 0x2038c2, + 0x2038c2, + 0x2038c2, + 0x2038c2, + 0x20bd42, + 0x337209, + 0x2038c2, + 0x2038c2, + 0x2038c2, + 0x266885, + 0x2038c2, + 0x266885, + 0x36480c, + 0x3dd5cc, + 0x253c43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x2296c3, + 0x20cb83, + 0x3c4f, + 0x12d248, + 0x6f7c4, + 0xd903, + 0x17b4c8, + 0x1d5b83, + 0x2000c2, + 0x72616542, + 0x249f03, + 0x23adc4, + 0x204f03, + 0x36c284, + 0x239c86, + 0x220e43, + 0x3b7004, + 0x2999c5, + 0x216443, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x23098a, + 0x259186, + 0x393fcc, + 0x793c8, + 0x216542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x233243, + 0x2e8306, + 0x2296c3, + 0x20cb83, + 0x21f6c3, + 0x39fc3, + 0xb4388, + 0x731e7c45, + 0x7c4c7, + 0xb1845, + 0x52547, + 0x146c05, + 0x4009, + 0xad42, + 0x1c138a, + 0x73f2d5c5, + 0x146c05, + 0x34347, + 0x16108, + 0x10d8e, + 0x95292, + 0x130e0b, + 0x1e1d46, + 0x742ea205, + 0x7479e04c, + 0x10de07, + 0xb46c7, + 0x1b620a, + 0x44ad0, + 0x17be85, + 0xc5e4b, + 0x1dcf08, + 0x3e1c7, + 0x3aa4b, + 0x51b89, + 0x873c7, + 0xf4547, + 0x187407, + 0x3e106, + 0x1c74c8, + 0x74c32f46, + 0x46bc7, + 0xc7e86, + 0xb8d0d, + 0x96110, + 0x75013242, + 0x1cdd88, + 0x184590, + 0x18ed0c, + 0x7578f54d, + 0x68508, + 0x6898b, + 0x76447, + 0x19a49, + 0x62246, + 0xa0488, + 0x5102, + 0x9c50a, + 0x36947, + 0xb8847, + 0xb4e49, + 0xb7288, + 0x154645, + 0x190a86, + 0x6ac6, + 0x1040ce, + 0x422ce, + 0x4aecf, + 0x5e789, + 0x932c9, + 0x9c08b, + 0xbb44f, + 0x1dd2cc, + 0xd4f4b, + 0x1b9248, + 0x191d07, + 0x19b308, + 0xbc0cb, + 0xbca0c, + 0xbce0c, + 0xbd20c, + 0xbd50d, + 0x1bc248, + 0x5adc2, + 0x1971c9, + 0x46688, + 0xda88b, + 0xdc906, + 0xe3acb, + 0x13d08b, + 0xeddca, + 0xeec85, + 0xf2550, + 0xf8286, + 0x583c6, + 0x10f7c5, + 0x120047, + 0xfa348, + 0xff487, + 0xff747, + 0x69587, + 0xd1846, + 0x17784a, + 0xb400a, + 0x30846, + 0xb860d, + 0x46c88, + 0x118d88, + 0xef809, + 0x1b2a09, + 0xcc205, + 0x176a8c, + 0xbd70b, + 0x10d989, + 0x112cc4, + 0x114549, + 0x114786, + 0x143506, + 0x4a42, + 0x13906, + 0x80c8b, + 0x11de07, + 0x11dfc7, + 0xe042, + 0xde645, + 0x9204, + 0x101, + 0x5b843, + 0x74b26806, + 0xa0803, + 0x382, + 0x1504, + 0xac2, + 0x5dd04, + 0x882, + 0x8502, + 0x4702, + 0x128c42, + 0x4182, + 0xea202, + 0xd42, + 0x2e702, + 0x3fb82, + 0xc542, + 0x3242, + 0x57f02, + 0x22bc3, + 0x942, + 0x2bc2, + 0x18242, + 0xeb02, + 0x642, + 0x3b342, + 0x1ec82, + 0x8e82, + 0x5502, + 0x5c2, + 0x43543, + 0x2642, + 0x6002, + 0x54202, + 0x7bc2, + 0x9d42, + 0x10442, + 0x205c2, + 0x11de42, + 0x1582, + 0x10f082, + 0x77782, + 0xa9542, + 0x296c3, + 0x602, + 0x4ba82, + 0x1cc2, + 0x2d4c2, + 0x2f7c5, + 0x59c2, + 0x4cec2, + 0x179e43, + 0x682, + 0x4a02, + 0x1702, + 0x4ac2, + 0xb5c2, + 0x8c2, + 0x6502, + 0x4a42, + 0x3ec5, + 0x75a01082, + 0x75eecb83, + 0x9983, + 0x76201082, + 0x9983, + 0xdc1c7, + 0x215483, + 0x2000c2, + 0x216543, + 0x222bc3, + 0x2f5503, + 0x2005c3, + 0x233243, + 0x2296c3, + 0x20d903, + 0x20cb83, + 0x2a0843, + 0xcc244, + 0x143845, + 0x1084c5, + 0x1a143, + 0x793c8, + 0x216543, + 0x222bc3, + 0x2f5503, + 0x216443, + 0x2296c3, + 0x20d903, + 0x7ca83, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x200181, + 0x216443, + 0x2296c3, + 0x257743, + 0x20cb83, + 0x1a3904, + 0x253c43, + 0x216543, + 0x222bc3, + 0x2163c3, + 0x2f5503, + 0x322603, + 0x285483, + 0x2b05c3, + 0x205383, + 0x343b43, + 0x2b1b84, + 0x2296c3, + 0x20cb83, + 0x201643, + 0x202304, + 0x239843, + 0x3b43, + 0x2133c3, + 0x32f308, + 0x29ac84, 0x20020a, - 0x385986, - 0x1530c4, - 0x3bc307, - 0x21bfca, - 0x22d4c9, - 0x3c7247, - 0x3c9c8a, - 0x24ac43, - 0x309e0b, - 0x20d849, - 0x2fde05, - 0x3ba707, - 0x12402, - 0x22ea43, - 0x2264c7, - 0x224685, - 0x2e9209, - 0x233fc3, - 0x23a086, - 0x2d3383, - 0xf0983, - 0x11bf06, - 0x8886, - 0x226c7, - 0x228c86, - 0x30bf45, - 0x208f47, - 0x319107, - 0x6d266a83, - 0x34f787, - 0x23ca83, - 0x21df05, - 0x20e704, - 0x275f48, - 0x3c410c, - 0x2be385, - 0x2ac086, - 0x226387, - 0x3c1447, - 0x269207, - 0x277008, - 0x31b18f, - 0x22d705, - 0x241387, - 0x211647, - 0x3caf0a, - 0x340009, - 0x32e945, - 0x34ef0a, - 0xdd286, - 0xc8087, - 0x2d3405, - 0x2f83c4, - 0x3e1b06, - 0x14e1c6, - 0x385107, - 0x250c47, - 0x3c5f48, - 0x212a05, - 0x224586, - 0x168688, - 0x2677c5, - 0x67986, - 0x2f5b85, - 0x267704, - 0x3c2387, - 0x23bc4a, - 0x2a6688, - 0x25f986, - 0x15f83, - 0x2ee705, - 0x354bc6, - 0x3c9406, - 0x3b5906, - 0x23cb03, - 0x3aa447, - 0x2115c5, - 0x217fc3, - 0x2eb20d, - 0x205803, - 0x3c6048, - 0x215c44, - 0x27c885, - 0x2ad606, - 0x358146, - 0x2af187, - 0x2a4a07, - 0x28dfc5, - 0x23e083, - 0x36f847, - 0x38a449, - 0x325009, - 0x3624ca, - 0x201b42, - 0x21dec4, - 0x304f84, - 0x2f9707, - 0x2f9a48, - 0x2fbfc9, - 0x3dca09, - 0x2fc9c7, - 0x108589, - 0x229446, - 0xff8c6, - 0x300ac4, - 0x22efca, - 0x304b08, - 0x306109, - 0x3066c6, - 0x2c3cc5, - 0x2a6548, - 0x2d810a, - 0x204343, - 0x207ec6, - 0x2fcac7, - 0x30f6c5, - 0x3c0385, - 0x243cc3, - 0x2ddf84, - 0x2259c5, - 0x28c247, - 0x301705, - 0x2f72c6, - 0x121dc5, - 0x288d83, - 0x2bb9c9, - 0x27c64c, - 0x2cbd4c, - 0x37f088, - 0x2a9f87, - 0x310848, - 0x111507, - 0x31188a, - 0x311f4b, - 0x20d988, - 0x358248, - 0x2524c6, - 0x31fdc5, - 0x25c4ca, - 0x2e8305, - 0x22dc42, - 0x2d6807, - 0x269f86, - 0x37b205, - 0x3d2189, - 0x27e3c5, - 0x388a05, - 0x229a09, - 0x325a46, - 0x37de88, - 0x270103, - 0x228dc6, - 0x3d2506, - 0x32dc85, - 0x32dc89, - 0x2ca889, - 0x25c247, - 0x120f44, - 0x320f47, - 0x3dc909, - 0x21c1c5, - 0x39ec8, - 0x37e245, - 0x371145, - 0x3b3609, - 0x201802, - 0x366984, - 0x20d2c2, - 0x204b82, - 0x320245, - 0x352e48, - 0x2c7b45, - 0x2d5183, - 0x2d5185, - 0x2e2583, - 0x20e202, - 0x2b5bc4, - 0x273cc3, - 0x200a82, - 0x2c1704, - 0x308c43, - 0x204ac2, - 0x2c7bc3, - 0x213984, - 0x306843, - 0x253cc4, - 0x207742, - 0x216883, - 0x218e43, - 0x2018c2, - 0x25cdc2, - 0x2ca6c9, - 0x208f02, - 0x291bc4, - 0x208742, - 0x3a9e44, - 0x229404, - 0x22aac4, - 0x2072c2, - 0x23d882, - 0x32aa83, - 0x26ac43, - 0x270184, - 0x2c7504, - 0x2ecac4, - 0x2fcc44, - 0x3210c3, - 0x35ce03, - 0x2dd204, - 0x3252c4, - 0x325406, - 0x226642, - 0x12402, - 0x41d83, - 0x212402, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x110c5, - 0x2000c2, - 0x24ac43, - 0x22ea43, - 0x233fc3, - 0x203983, - 0x266a83, - 0x20e704, - 0x2ca984, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x216983, - 0x3010c4, - 0x32f643, - 0x2b0743, - 0x380784, - 0x37e046, - 0x20ebc3, - 0x146bc5, - 0x178d87, - 0x226dc3, - 0x6ee10c08, - 0x24cbc3, - 0x2c1183, - 0x21df43, - 0x215f83, - 0x3c7985, - 0x1ba6c3, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x210043, - 0x230743, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x2191c3, - 0x217fc3, - 0x2878c4, - 0x1c0443, - 0x23e083, - 0x25d244, - 0x146bc5, - 0x2ce8c5, - 0x178d87, - 0x212402, + 0x25afc6, + 0x1519c4, + 0x3bd047, + 0x22820a, + 0x22dc09, + 0x3c9ec7, + 0x3cc38a, + 0x253c43, + 0x368b8b, + 0x20c389, + 0x31f4c5, + 0x20cd87, + 0x16542, + 0x216543, + 0x226f07, + 0x2224c5, + 0x2d8e09, + 0x222bc3, + 0x34bc46, + 0x32a4c3, + 0xd2b03, + 0x11bc06, + 0x17a2c6, + 0x20dc7, + 0x229a46, + 0x231f45, + 0x20a307, + 0x319507, + 0x78f43b43, + 0x34e407, + 0x3b29c3, + 0x2712c5, + 0x2b1b84, + 0x2c2188, + 0x3db94c, + 0x2c1305, + 0x2b01c6, + 0x226dc7, + 0x35b907, + 0x2678c7, + 0x26c148, + 0x31ae8f, + 0x27b905, + 0x24a007, + 0x2151c7, + 0x28974a, + 0x37f609, + 0x330145, + 0x34da0a, + 0x101546, + 0xcc787, + 0x2d7e45, + 0x2f5744, + 0x340486, + 0xcb946, + 0x256ec7, + 0x25acc7, + 0x3b5b48, + 0x3d07c5, + 0x2223c6, + 0x2f048, + 0x228c85, + 0x28e46, + 0x240305, + 0x288284, + 0x21ef87, + 0x24b80a, + 0x2aab88, + 0x3e3cc6, + 0x33243, + 0x2efe85, + 0x3d8586, + 0x3cbb06, + 0x30f6c6, + 0x216443, + 0x3ad047, + 0x215145, + 0x2296c3, + 0x2ee08d, + 0x20d903, + 0x3b5c48, + 0x243444, + 0x281d05, + 0x2b2506, + 0x32e106, + 0x259287, + 0x268bc7, + 0x27c805, + 0x20cb83, + 0x3a20c7, + 0x24b489, + 0x36a249, + 0x382d0a, + 0x23d7c2, + 0x271284, + 0x3211c4, + 0x2fda07, + 0x2fe088, + 0x300709, + 0x3e8289, + 0x301107, + 0x10a949, + 0x2132c6, + 0x103e46, + 0x305504, + 0x3b4e4a, + 0x307e08, + 0x308f89, + 0x309246, + 0x2c7245, + 0x2aaa48, + 0x2dcb8a, + 0x27d683, + 0x202486, + 0x301207, + 0x2c8885, + 0x3c10c5, + 0x24da03, + 0x2d1984, + 0x22f685, + 0x291587, + 0x306145, + 0x2f2cc6, + 0x166105, + 0x2c79c3, + 0x2c79c9, + 0x281acc, + 0x2d06cc, + 0x3416c8, + 0x2a3e47, + 0x3101c8, + 0x110e47, + 0x3111ca, + 0x31188b, + 0x20c4c8, + 0x32e208, + 0x25d306, + 0x272145, + 0x33b5ca, + 0x2ecbc5, + 0x213402, + 0x2db6c7, + 0x27d046, + 0x377045, + 0x313149, + 0x27b485, + 0x1dea48, + 0x29d645, + 0x270e89, + 0x3d84c6, + 0x3407c8, + 0x31dd83, + 0x212c46, + 0x3b7086, + 0x31d845, + 0x31d849, + 0x2cee49, + 0x271ec7, + 0x120d84, + 0x320d87, + 0x3e8189, + 0x228405, + 0x418c8, + 0x379cc5, + 0x3a14c5, + 0x36bc09, + 0x202cc2, + 0x35a344, 0x204542, - 0x200382, - 0x203182, - 0x5803, - 0x2003c2, - 0x157c44, - 0x22ea43, - 0x236704, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x21e484, - 0x217fc3, - 0x5803, - 0x23e083, - 0x208503, - 0x24cd44, - 0xae888, - 0x22ea43, - 0x205803, - 0x10103, - 0x126d84, - 0x241ec4, - 0xae888, - 0x22ea43, - 0x24d704, - 0x20e704, - 0x205803, - 0x209282, - 0x1c0443, - 0x23e083, - 0x235403, - 0xddf84, - 0x37b845, - 0x22dc42, - 0x32a143, - 0x2149, - 0xe7546, - 0x17e348, + 0x202642, + 0x2ffc05, + 0x351748, + 0x2cc145, + 0x2da043, + 0x2da045, + 0x2e5d83, + 0x212202, + 0x333544, + 0x36a603, + 0x200a82, + 0x2c4d84, + 0x318f43, + 0x203482, + 0x269503, + 0x2307c4, + 0x3093c3, + 0x25be04, + 0x201ec2, + 0x21f5c3, + 0x214a83, + 0x202d82, + 0x352902, + 0x2cec89, + 0x204942, + 0x296884, + 0x21ef42, + 0x2603c4, + 0x213284, + 0x2d7284, + 0x204a42, + 0x247e02, + 0x35d143, + 0x2a2683, + 0x291704, + 0x2e1184, + 0x307fc4, + 0x31fe44, + 0x31d303, + 0x208f03, + 0x3014c4, + 0x322cc4, + 0x322e06, + 0x229782, + 0x16542, + 0x4ab43, + 0x216542, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x14c45, 0x2000c2, - 0xae888, - 0x212402, - 0x233fc3, - 0x266a83, + 0x253c43, + 0x216543, + 0x222bc3, + 0x206203, + 0x343b43, + 0x2b1b84, + 0x2cef44, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x21f6c3, + 0x305b04, + 0x20bc43, + 0x21bcc3, + 0x37dc04, + 0x379ac6, + 0x2079c3, + 0x146c05, + 0xb46c7, + 0x203643, + 0x7aa176c8, + 0x209a43, + 0x2c45c3, + 0x24c243, + 0x233243, + 0x3c2545, + 0xcd43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x212343, + 0x203e43, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x243543, + 0x2296c3, + 0x28ea04, + 0x7ca83, + 0x20cb83, + 0x2cce44, + 0x146c05, + 0x2d3605, + 0xb46c7, + 0x216542, + 0x2104c2, + 0x200382, + 0x204cc2, + 0xd903, + 0x2003c2, + 0x12dc04, + 0x216543, + 0x23ec84, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x21b544, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x202b03, + 0x25dd04, + 0x793c8, + 0x216543, + 0x20d903, + 0x1a143, + 0x11a5c4, + 0x21d684, + 0x793c8, + 0x16542, + 0x216543, + 0x256d44, + 0x2b1b84, + 0x20d903, + 0x203c82, + 0x7ca83, + 0x20cb83, + 0x24c343, + 0xd1984, + 0x355b45, + 0x213402, + 0x323543, + 0x10e689, + 0xebd86, + 0x1c4688, + 0x2000c2, + 0x793c8, + 0x216542, + 0x222bc3, + 0x343b43, 0x2005c2, - 0x5803, - 0x23e083, - 0xa882, + 0xd903, + 0x20cb83, + 0xfe02, 0x82, 0xc2, - 0x1c9e47, - 0x14b509, - 0x3043, - 0xae888, - 0x10bec3, - 0x72727c47, - 0x2ea43, - 0xaf88, - 0x33fc3, - 0x66a83, - 0x3fec6, - 0x191c3, - 0x56288, - 0xd0ac8, - 0x7dec6, - 0x729a7285, - 0x3cb03, - 0xdb008, - 0x3fa83, - 0x72cedbc6, - 0xf2ec5, - 0x124d04, - 0x341c7, - 0x17fc3, - 0x3443, - 0x3e083, - 0x1b02, - 0x182c8a, - 0x9c43, - 0x732c3f4c, - 0x120303, - 0x5d884, - 0x11af8b, - 0x11b548, - 0x95f42, - 0x17ff03, - 0x1454747, - 0x15b4247, - 0x14d5248, - 0x157ff03, - 0x18b7c8, - 0x156ecb, - 0x10382, - 0x131247, - 0x181584, + 0x1cc547, + 0x14a709, + 0x3a43, + 0x793c8, + 0x17d0c3, + 0x7e3e71c7, + 0x16543, + 0x10508, + 0x22bc3, + 0x143b43, + 0x432c6, + 0x43543, + 0x15d8c8, + 0xd5c08, + 0x1c1ac3, + 0x83646, + 0x7e5a9d85, + 0x16443, + 0x98e48, + 0xdfc08, + 0x103d03, + 0x7e8ef3c6, + 0xf3585, + 0x1a1dc4, + 0x3c787, + 0x296c3, + 0x4f83, + 0xcb83, + 0x4642, + 0x15b0ca, + 0xc205, + 0x7303, + 0x7eed308c, + 0xffcc3, + 0x10ba84, + 0x11ac8b, + 0x11b248, + 0x15d184, + 0x9a402, + 0x4b343, + 0x145fdc7, + 0x157a147, + 0x14da108, + 0x144b343, + 0x1c4b88, + 0x1ad30b, + 0x14182, + 0x132747, + 0x114bc4, 0x2000c2, - 0x212402, - 0x236704, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x215f83, - 0x217fc3, - 0x23e083, - 0x20d403, - 0x208503, - 0xe783, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, + 0x216542, + 0x23ec84, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x233243, + 0x2296c3, + 0x20cb83, + 0x204683, + 0x202b03, + 0x39fc3, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, 0x602, - 0x10103, - 0x66a83, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x215f83, - 0x217fc3, - 0x23e083, - 0x21fcc2, + 0x1a143, + 0x143b43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x233243, + 0x2296c3, + 0x20cb83, + 0x22a042, 0x2000c1, 0x2000c2, 0x200201, - 0x337f82, - 0xae888, - 0x21aa05, + 0x338b82, + 0x793c8, + 0x224545, 0x200101, - 0x2ea43, - 0x319c4, + 0x16543, + 0x3a304, 0x201381, 0x200501, 0x201281, - 0x248442, - 0x38e084, - 0x248443, + 0x251242, + 0x251244, + 0x251943, 0x200041, 0x200801, 0x200181, + 0x18ab06, 0x200701, - 0x35c3c7, - 0x30fccf, - 0x39af46, + 0x30d307, + 0x312d8f, + 0x399086, 0x2004c1, - 0x326dc6, + 0x31a606, 0x200bc1, 0x200581, - 0x3de50e, + 0x3e61ce, 0x2003c1, - 0x23e083, + 0x20cb83, 0x200a81, - 0x32b305, - 0x201b02, - 0x243bc5, + 0x3a8d85, + 0x204642, + 0x24d905, 0x200401, 0x200741, 0x2007c1, - 0x22dc42, + 0x213402, 0x200081, - 0x207d01, - 0x20a8c1, - 0x202341, - 0x201c41, - 0x51709, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x217c83, - 0x22ea43, - 0x266a83, - 0x95e88, - 0x23cb03, - 0x217fc3, - 0x91043, - 0x23e083, - 0x76ef8008, - 0x1e0f83, - 0xff48, - 0x10402, - 0xb9c3, - 0x293c2, - 0x72c2, - 0x146bc5, - 0xae888, - 0x11fe87, - 0x5803, - 0x146bc5, - 0x175d84, - 0x7f448, - 0x46d04, - 0x17fe07, - 0x1c4104, - 0xd5e45, - 0x51709, - 0x1424c7, - 0x5aa4a, - 0x14f800a, - 0xae888, - 0x1c0443, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x233f03, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x2e5904, - 0x23e083, - 0x24a845, - 0x27e1c4, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20b982, - 0x217fc3, - 0x23e083, - 0x8503, - 0xaefca, - 0xea706, - 0x11fa04, - 0x1268c6, - 0x24ac43, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x217fc3, - 0x23e083, - 0x212402, - 0x22ea43, - 0x231f49, - 0x233fc3, - 0x2ac549, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x81004, - 0x5803, - 0x23e083, - 0x3008c8, - 0x239307, - 0x37b845, - 0xde248, - 0x1d6e08, - 0x1c9e47, - 0xf9cca, - 0x7650b, - 0x127007, - 0x40488, - 0x7f70a, - 0x25e48, - 0x14b509, - 0x25887, - 0x14dcc7, - 0x1b5208, - 0xaf88, - 0x4164f, - 0xa6845, - 0x148647, - 0x3fec6, - 0x36487, - 0x12ea86, - 0x56288, - 0x9a346, - 0x17dc87, - 0x1c1989, - 0x1cd6c7, - 0x19c009, - 0xc9049, - 0xce646, - 0xd0ac8, - 0xde505, - 0x8350a, - 0xdb008, - 0x3fa83, - 0xe2988, - 0x341c7, - 0x156b05, - 0x61950, - 0x3443, - 0x1c0443, - 0x17db07, - 0x2cd05, - 0xfb388, - 0x6db85, - 0x120303, - 0x1d1048, - 0xb2c06, - 0x33249, - 0xb6f47, - 0x240b, - 0x72344, - 0x113c44, - 0x11af8b, - 0x11b548, - 0x11be07, - 0x146bc5, - 0x22ea43, - 0x233fc3, - 0x280203, - 0x23e083, - 0x23e883, - 0x266a83, - 0x1c0443, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x1b1e8b, + 0x201641, + 0x207281, + 0x2024c1, + 0x208481, + 0x5c549, + 0x793c8, + 0x216543, + 0x222bc3, + 0xac1c8, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x2203c3, + 0x2f43, + 0x216543, + 0x343b43, + 0x9a348, + 0x216443, + 0x2296c3, + 0x91c43, + 0x20cb83, + 0x82a99048, + 0x1e9343, + 0x12248, + 0xcd42, + 0x3c43, + 0x13242, + 0x4a42, + 0x146c05, + 0x793c8, + 0x9fb06, + 0x15edc7, + 0xd903, + 0x146c05, + 0x171684, + 0x1cdf88, + 0x4f344, + 0x106a47, + 0x60244, + 0xb1c0c, + 0x1db944, + 0xdaf45, + 0x5c549, + 0x16e507, + 0x28846, + 0x191ca, + 0x14f990a, + 0x793c8, + 0x7ca83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x203b43, + 0x793c8, + 0x216543, + 0x222bc3, + 0x2e8fc4, + 0x20cb83, + 0x2655c5, + 0x2484c4, + 0x216543, + 0x222bc3, + 0x343b43, + 0x201582, + 0x2296c3, + 0x20cb83, + 0x2b03, + 0xedac6, + 0x12f6c4, + 0x124c46, + 0x253c43, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2296c3, + 0x20cb83, + 0x216542, + 0x216543, + 0x23a889, + 0x222bc3, + 0x2b79c9, + 0x343b43, + 0x216443, + 0x2296c3, + 0x84e04, + 0xd903, + 0x20cb83, + 0x305308, + 0x3e2687, + 0x355b45, + 0xd3a48, + 0x1db108, + 0x1cc547, + 0xfe30a, + 0x1c790b, + 0x11a847, + 0x48f08, + 0xf4a0a, + 0x26888, + 0x14a709, + 0x2f547, + 0x1ed87, + 0x10efc8, + 0x10508, + 0x4a2cf, + 0xaad45, + 0x1fc47, + 0x432c6, + 0x14cd47, + 0x130286, + 0x15d8c8, + 0xa3706, + 0x1405c7, + 0x1798c9, + 0x1df3c7, + 0xc6d09, + 0xcd749, + 0xd3386, + 0xd5c08, + 0xd3d05, + 0x86f4a, + 0xdfc08, + 0x103d03, + 0xe6008, + 0x3c787, + 0x133485, + 0x649d0, + 0x4f83, + 0x7ca83, + 0x179747, + 0x2d445, + 0xffa48, + 0x74505, + 0xffcc3, + 0x1a3108, + 0x1a1386, + 0x9ec09, + 0xba247, + 0x10e94b, + 0x77a04, + 0x113b84, + 0x11ac8b, + 0x11b248, + 0x11bb07, + 0x146c05, + 0x216543, + 0x222bc3, + 0x2f5503, + 0x20cb83, + 0x248783, + 0x343b43, + 0x7ca83, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x9c1cb, 0x2000c2, - 0x212402, - 0x23e083, + 0x216542, + 0x20cb83, 0xd42, - 0xb982, - 0x83c2, - 0xae888, - 0x1357c9, - 0x18b7c8, - 0x12402, + 0x1582, + 0x1642, + 0x793c8, + 0x1b7409, + 0x1c4b88, + 0x16542, 0x2000c2, - 0x212402, + 0x216542, 0x200382, 0x2005c2, - 0x204482, - 0x217fc3, - 0x14a9c6, + 0x202042, + 0x2296c3, + 0x148ec6, 0x2003c2, - 0xddf84, + 0xd1984, 0x2000c2, - 0x24ac43, - 0x212402, - 0x22ea43, - 0x233fc3, + 0x253c43, + 0x216542, + 0x216543, + 0x222bc3, 0x200382, - 0x266a83, - 0x2191c3, - 0x23cb03, - 0x21e484, - 0x217fc3, - 0x213cc3, - 0x5803, - 0x23e083, - 0x25d884, - 0x20aa43, - 0x266a83, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x205803, - 0x23e083, - 0x3c48c7, - 0x22ea43, - 0x282e87, - 0x394e06, - 0x208483, - 0x20fa03, - 0x266a83, - 0x204903, - 0x20e704, - 0x28f784, - 0x32bac6, - 0x208243, - 0x217fc3, - 0x23e083, - 0x24a845, - 0x2b21c4, - 0x3283c3, - 0x356703, - 0x2d6807, - 0x355f05, - 0x1d03, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x23cb03, - 0x217fc3, - 0x75504, - 0x23e083, - 0x16d43, - 0x7e308dcc, - 0x4e803, - 0x192c07, - 0xe6946, - 0x19dfc7, - 0x157585, - 0x222b02, - 0x23de83, - 0x20c5c3, - 0x24ac43, - 0x7ee2ea43, - 0x204302, - 0x233fc3, - 0x2033c3, - 0x266a83, - 0x20e704, - 0x3433c3, - 0x22d703, - 0x23cb03, - 0x21e484, - 0x7f216102, - 0x217fc3, - 0x23e083, - 0x204ac3, - 0x219243, - 0x218043, - 0x21fcc2, - 0x20aa43, - 0xae888, - 0x266a83, - 0x10103, - 0x215d84, - 0x24ac43, - 0x212402, - 0x22ea43, - 0x236704, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x2191c3, - 0x33f584, - 0x217544, - 0x2e4806, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x216983, - 0x269f86, - 0x3a9cb, - 0x36fc6, - 0xbd84a, - 0x11f48a, - 0xae888, - 0x215e84, - 0x8062ea43, - 0x37e504, - 0x233fc3, - 0x296d84, - 0x266a83, - 0x2f4c43, - 0x23cb03, - 0x217fc3, - 0x1c0443, - 0x23e083, - 0x54543, - 0x34a60b, - 0x3cf9ca, - 0x3e0a8c, - 0xee488, + 0x343b43, + 0x243543, + 0x216443, + 0x21b544, + 0x2296c3, + 0x20b243, + 0xd903, + 0x20cb83, + 0x30ba84, + 0x201643, + 0x343b43, + 0x216542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x20d903, + 0x20cb83, + 0x3c5747, + 0x216543, + 0x2868c7, + 0x3823c6, + 0x209843, + 0x21a003, + 0x343b43, + 0x20e443, + 0x2b1b84, + 0x243544, + 0x3d66c6, + 0x202803, + 0x2296c3, + 0x127f0b, + 0x20cb83, + 0x2655c5, + 0x2f7184, + 0x3b6703, + 0x343483, + 0x2db6c7, + 0x2f6985, + 0x1a1003, + 0x216543, + 0x222bc3, + 0x343b43, + 0x216443, + 0x2296c3, + 0x1c1184, + 0x20cb83, + 0x1fa83, + 0x89f0b24c, + 0x58083, + 0x4bc47, + 0x80dc6, + 0x120047, + 0x133d85, + 0x205242, + 0x246dc3, + 0x211d43, + 0x253c43, + 0x8aa16543, + 0x2080c2, + 0x222bc3, + 0x204f03, + 0x343b43, + 0x2b1b84, + 0x34b203, + 0x27b903, + 0x216443, + 0x21b544, + 0x8ae06c02, + 0x2296c3, + 0x20cb83, + 0x20e603, + 0x209203, + 0x2883c3, + 0x22a042, + 0x201643, + 0x793c8, + 0x343b43, + 0x1a143, + 0x258bc4, + 0x253c43, + 0x216542, + 0x216543, + 0x23ec84, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x243543, + 0x239104, + 0x28d4c4, + 0x2e8306, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x21f6c3, + 0x27d046, + 0x4290b, + 0x32f46, + 0xb6c0a, + 0x11faca, + 0x793c8, + 0x22f004, + 0x8c216543, + 0x32c744, + 0x222bc3, + 0x219a44, + 0x343b43, + 0x284103, + 0x216443, + 0x2296c3, + 0x7ca83, + 0x20cb83, + 0x31c03, + 0x348b0b, + 0x3d368a, + 0x3e8e4c, + 0xefc08, 0x2000c2, - 0x212402, + 0x216542, 0x200382, - 0x22f845, - 0x20e704, - 0x20b982, - 0x23cb03, - 0x217544, - 0x203182, + 0x2b96c5, + 0x2b1b84, + 0x201582, + 0x216443, + 0x28d4c4, + 0x204cc2, 0x2003c2, - 0x208502, - 0x21fcc2, - 0x4ac43, - 0xcdc2, - 0x2d0e89, - 0x36c648, - 0x266909, - 0x213d49, - 0x2184ca, - 0x30aaca, - 0x209482, - 0x361e82, - 0x12402, - 0x22ea43, - 0x22c982, - 0x241546, - 0x37c682, - 0x2013c2, - 0x27688e, - 0x2168ce, - 0x217f47, - 0x211c42, - 0x233fc3, - 0x266a83, - 0x20f342, + 0x202b02, + 0x22a042, + 0x53c43, + 0x4042, + 0x2d5fc9, + 0x278a08, + 0x3d8a09, + 0x39d3c9, + 0x2116ca, + 0x21424a, + 0x208d02, + 0x22e702, + 0x16542, + 0x216543, + 0x213b02, + 0x24a1c6, + 0x378742, + 0x47402, + 0x201442, + 0x3c7c8e, + 0x21f60e, + 0x3d1b47, + 0x219cc2, + 0x222bc3, + 0x343b43, + 0x20bac2, 0x2005c2, - 0xe703, - 0x23690f, - 0x241882, - 0x2c3587, - 0x2ec3c7, - 0x2de787, - 0x2e2b4c, - 0x2f024c, - 0x21f844, - 0x39334a, - 0x216802, - 0x206902, - 0x2cac84, + 0x6a7c3, + 0x23ee8f, + 0x21ee02, + 0x2eae47, + 0x2e2587, + 0x2e61c7, + 0x2f0e4c, + 0x2f2e0c, + 0x258884, + 0x28c28a, + 0x21f542, + 0x207bc2, + 0x2cf304, 0x200702, - 0x2c23c2, - 0x2f0484, - 0x214882, - 0x202702, - 0x1e1c3, - 0x29a3c7, - 0x30eac5, - 0x204202, - 0x236404, - 0x393b42, - 0x2edd48, - 0x217fc3, - 0x37b588, - 0x203242, - 0x21fa05, - 0x39da86, - 0x23e083, - 0x204fc2, - 0x2fc207, - 0x1b02, - 0x34bbc5, - 0x3dce85, - 0x20b502, - 0x206c82, - 0x34754a, - 0x28de4a, - 0x23cac2, - 0x2a39c4, + 0x2d8882, + 0x2f3044, + 0x21ab82, + 0x209d42, + 0x1b283, + 0x2a3787, + 0x288345, + 0x2205c2, + 0x319f04, + 0x30f082, + 0x2ef548, + 0x2296c3, + 0x3773c8, + 0x204d82, + 0x258a45, + 0x39b086, + 0x20cb83, + 0x2059c2, + 0x300947, + 0x4642, + 0x2504c5, + 0x203505, + 0x201782, + 0x207f02, + 0x3cfd8a, + 0x27c68a, + 0x279c42, + 0x2a94c4, 0x200f02, - 0x21dd88, - 0x207ac2, - 0x31c248, - 0x1501, - 0x316b47, - 0x3175c9, - 0x2bb102, - 0x31d505, - 0x36ed45, - 0x212acb, - 0x32c04c, - 0x22c488, - 0x331088, - 0x226642, - 0x2af242, + 0x271148, + 0x20e002, + 0x2b4bc8, + 0x17c1, + 0x316887, + 0x3174c9, + 0x203582, + 0x31c385, + 0x372b05, + 0x3d088b, + 0x3d6c4c, + 0x237288, + 0x332588, + 0x229782, + 0x259342, 0x2000c2, - 0xae888, - 0x212402, - 0x22ea43, + 0x793c8, + 0x216542, + 0x216543, 0x200382, - 0x203182, - 0x5803, + 0x204cc2, + 0xd903, 0x2003c2, - 0x23e083, - 0x208502, + 0x20cb83, + 0x202b02, 0x2000c2, - 0x146bc5, - 0x81a12402, - 0x108f04, - 0x37e05, - 0x82a66a83, - 0x21e1c3, - 0x20b982, - 0x217fc3, - 0x3d6203, - 0x82e3e083, - 0x2f8e43, - 0x27a906, - 0x1608503, - 0x146bc5, - 0x14a88b, - 0xae888, - 0x81f64008, - 0x68f47, - 0x822c6aca, - 0x74d87, - 0x1b5a05, - 0x82600f89, - 0x2c10d, - 0x3fcc2, - 0x11bb42, + 0x146c05, + 0x8d616542, + 0x10b384, + 0x405c5, + 0x8e743b43, + 0x21b283, + 0x201582, + 0x2296c3, + 0x3e8603, + 0x8ea0cb83, + 0x2faf43, + 0x2dc2c6, + 0xf57c5, + 0x1602b03, + 0x146c05, + 0x148d8b, + 0x793c8, + 0x8dbb6d08, + 0x6be87, + 0x8deca7ca, + 0x791c7, + 0x10f7c5, + 0x8e200f89, + 0x2f20d, + 0x430c2, + 0x11b842, 0xe01, - 0x107784, - 0xb018a, - 0x8dc87, - 0x10bb84, - 0x3ca03, - 0x3ca04, - 0x83603d82, - 0x83a00ac2, - 0x83e03502, - 0x84202e42, - 0x846074c2, - 0x84a0cf02, - 0x178d87, - 0x84e12402, - 0x85211d02, - 0x8561c782, - 0x85a0f982, - 0x2168c3, - 0x1ff44, - 0x28c543, - 0x85e12882, - 0x5a388, - 0x86207c82, - 0x4e007, - 0x1b77c7, - 0x86600042, - 0x86a00d82, - 0x86e00182, - 0x87209582, - 0x8760f782, - 0x87a005c2, - 0xfdd45, - 0x24dc03, - 0x3612c4, - 0x87e00702, - 0x8820a342, - 0x88601582, - 0x8d64b, - 0x88a00c42, - 0x89206a02, - 0x8960b982, - 0x89a04482, - 0x89e15782, - 0x8a200bc2, - 0x8a60a942, - 0x8aa720c2, - 0x8ae16102, - 0x8b201602, - 0x8b603182, - 0x8ba37282, - 0x8be05402, - 0x8c209ec2, - 0x1583c4, - 0x3169c3, - 0x8c634e42, - 0x8ca0f442, - 0x8ce03742, - 0x8d2006c2, - 0x8d6003c2, - 0x8da00a82, - 0xf8908, - 0x1b2007, - 0x8de16982, - 0x8e205302, - 0x8e608502, - 0x8ea0a1c2, - 0x1b800c, - 0x8ee03d02, - 0x8f224e42, - 0x8f601942, - 0x8fa034c2, - 0x8fe0e482, - 0x90203b02, - 0x90607d02, - 0x90a16382, - 0x90e7bcc2, - 0x9127c2c2, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x88f433c3, - 0x2220c3, - 0x3c7a04, - 0x266806, - 0x307183, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x26e9c9, - 0x20cdc2, - 0x3b3843, - 0x2c9343, - 0x260045, - 0x2033c3, - 0x3433c3, - 0x2220c3, - 0x2b8a83, - 0x20de03, - 0x3679c9, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x20cdc2, - 0x20cdc2, - 0x3433c3, - 0x2220c3, - 0x91a2ea43, - 0x233fc3, - 0x213f83, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, - 0xae888, - 0x212402, - 0x22ea43, - 0x217fc3, - 0x23e083, - 0x6e842, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x924f6e82, - 0x23cb03, - 0x217fc3, - 0x5803, - 0x23e083, + 0xe91c4, + 0xb530a, + 0x7c4c7, + 0x30044, + 0x30083, + 0x30084, + 0x8f201f02, + 0x8f600ac2, + 0x8fa03b42, + 0x8fe030c2, + 0x90208742, + 0x90604182, + 0xb46c7, + 0x90a16542, + 0x90e19d82, + 0x9121d802, + 0x91603242, + 0x21f603, + 0x2a2c4, + 0x91aac1c8, + 0x213643, + 0x91e18902, + 0x68508, + 0x92204982, + 0x63187, + 0x1b88c7, + 0x92600042, + 0x92a00d82, + 0x92e00182, + 0x932042c2, + 0x93605502, + 0x93a005c2, + 0x11f405, + 0x20af03, + 0x2f44c4, + 0x93e00702, + 0x94211b82, + 0x94605542, + 0x92b8b, + 0x94a00c42, + 0x95256e02, + 0x95601582, + 0x95a02042, + 0x98e48, + 0x95e28882, + 0x96200bc2, + 0x96603742, + 0x96a77782, + 0x96e06c02, + 0x97205782, + 0x97604cc2, + 0x97a18f02, + 0x97e0d502, + 0x9820f502, + 0xac8c4, + 0x332ec3, + 0x9863d1c2, + 0x98a0bbc2, + 0x98e0cfc2, + 0x992006c2, + 0x996003c2, + 0x99a00a82, + 0xfa6c8, + 0x9c347, + 0x99e037c2, + 0x9a202a82, + 0x9a602b02, + 0x9aa0a0c2, + 0x176a8c, + 0x9ae2bdc2, + 0x9b22ce82, + 0x9b602e02, + 0x9ba05002, + 0x9be08e42, + 0x9c211842, + 0x9c6089c2, + 0x9ca13342, + 0x9ce81202, + 0x9d281742, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x207c3, + 0xd2443, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x94f4b203, + 0x2207c3, + 0x3c25c4, + 0x3d8906, + 0x309a43, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x35c349, + 0x204042, + 0x271c43, + 0x2cda43, + 0x3b6945, + 0x204f03, + 0x34b203, + 0x2207c3, + 0x2e69c3, + 0x22e683, + 0x3ca009, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x34b203, + 0x2207c3, + 0x204042, + 0x204042, + 0x34b203, + 0x2207c3, + 0x9da16543, + 0x222bc3, + 0x39d603, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, + 0x793c8, + 0x216542, + 0x216543, + 0x2296c3, + 0x20cb83, + 0x145842, + 0x216543, + 0x222bc3, + 0x343b43, + 0x9e51d0c2, + 0x216443, + 0x2296c3, + 0xd903, + 0x20cb83, 0x1381, - 0x241ec4, - 0x212402, - 0x22ea43, + 0x21d684, + 0x216542, + 0x216543, 0x200983, - 0x233fc3, - 0x24d704, - 0x280203, - 0x266a83, - 0x20e704, - 0x2191c3, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x235403, - 0x37b845, - 0x20de03, - 0x20aa43, + 0x222bc3, + 0x256d44, + 0x2f5503, + 0x343b43, + 0x2b1b84, + 0x243543, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x24c343, + 0x355b45, + 0x22e683, + 0x201643, 0x882, - 0x5803, - 0x212402, - 0x22ea43, - 0x3433c3, - 0x217fc3, - 0x23e083, + 0xd903, + 0x216542, + 0x216543, + 0x34b203, + 0x2296c3, + 0x20cb83, 0x2000c2, - 0x24ac43, - 0xae888, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x231346, - 0x20e704, - 0x2191c3, - 0x21e484, - 0x217fc3, - 0x23e083, - 0x216983, - 0x4cc4, - 0x161e82, - 0x22ea43, - 0x22383, - 0x233fc3, - 0xb982, - 0x217fc3, - 0x23e083, - 0x30242, - 0x2a82, - 0x1481bc7, - 0x8cc7, - 0x22ea43, - 0x36fc6, - 0x233fc3, - 0x266a83, - 0xf07c6, - 0x217fc3, - 0x23e083, - 0x32d948, - 0x330ec9, - 0x341dc9, - 0x34cfc8, - 0x3a01c8, - 0x3a01c9, - 0x32748a, - 0x3657ca, - 0x399a4a, - 0x3a124a, - 0x3cf9ca, - 0x3db28b, - 0x26604d, - 0x230b0f, - 0x240950, - 0x3692cd, - 0x38384c, - 0x3a0f8b, - 0x74f88, - 0xf6cc8, - 0xbe1c5, - 0x148e8c7, - 0xd9785, + 0x253c43, + 0x793c8, + 0x216543, + 0x222bc3, + 0x343b43, + 0x239c86, + 0x2b1b84, + 0x243543, + 0x21b544, + 0x2296c3, + 0x20cb83, + 0x21f6c3, + 0xe804, + 0x2e702, + 0x216543, + 0x20a83, + 0x222bc3, + 0x1582, + 0x2296c3, + 0x20cb83, + 0x10e104, + 0x6ff44, + 0x2a02, + 0x148bb07, + 0x125887, + 0x216543, + 0x32f46, + 0x222bc3, + 0x343b43, + 0xf1386, + 0x2296c3, + 0x20cb83, + 0x32f188, + 0x3323c9, + 0x341cc9, + 0x34b688, + 0x39d208, + 0x39d209, + 0x325d0a, + 0x36084a, + 0x3979ca, + 0x39ecca, + 0x3d368a, + 0x3dfecb, + 0x2fc28d, + 0x2fcf4f, + 0x247450, + 0x3621cd, + 0x3813cc, + 0x39ea0b, + 0x16108, + 0x13ec08, + 0x18a0c5, + 0x190209, + 0x1495c87, + 0xde645, 0x2000c2, - 0x355d45, - 0x21e183, - 0x95a12402, - 0x233fc3, - 0x266a83, - 0x232b87, - 0x21df43, - 0x23cb03, - 0x217fc3, - 0x24dfc3, - 0x213cc3, - 0x210ec3, - 0x205803, - 0x23e083, - 0x2509c6, - 0x22dc42, - 0x20aa43, - 0xae888, + 0x2f67c5, + 0x209d03, + 0xa1e16542, + 0x222bc3, + 0x343b43, + 0x380b87, + 0x24c243, + 0x216443, + 0x2296c3, + 0x257743, + 0x20b243, + 0x20f1c3, + 0x20d903, + 0x20cb83, + 0x259186, + 0x213402, + 0x201643, + 0x793c8, 0x2000c2, - 0x24ac43, - 0x212402, - 0x22ea43, - 0x233fc3, - 0x266a83, - 0x20e704, - 0x23cb03, - 0x217fc3, - 0x23e083, - 0x208503, - 0x8cc7, - 0x10382, - 0x2144, - 0x1517446, + 0x253c43, + 0x216542, + 0x216543, + 0x222bc3, + 0x343b43, + 0x2b1b84, + 0x216443, + 0x2296c3, + 0x20cb83, + 0x202b03, + 0x125887, + 0x14182, + 0x10e684, + 0x1534746, 0x2000c2, - 0x212402, - 0x266a83, - 0x23cb03, - 0x23e083, + 0x216542, + 0x343b43, + 0x216443, + 0x20cb83, } // children is the list of nodes' children, the parent's wildcard bit and the @@ -9614,32 +9781,33 @@ var children = [...]uint32{ 0x40000000, 0x50000000, 0x60000000, - 0x17d05ee, - 0x17d45f4, - 0x17d85f5, - 0x17fc5f6, - 0x19545ff, - 0x196c655, - 0x198065b, - 0x1998660, - 0x19b8666, - 0x19d866e, - 0x19f0676, - 0x1a1067c, - 0x1a14684, - 0x1a3c685, - 0x1a4068f, - 0x1a58690, - 0x1a5c696, - 0x1a60697, - 0x1aa0698, - 0x1aa46a8, - 0x1aa86a9, - 0x21aac6aa, - 0x61ab46ab, - 0x21abc6ad, - 0x1b046af, - 0x1b086c1, + 0x17bc5e9, + 0x17c05ef, + 0x17c45f0, + 0x17e85f1, + 0x19405fa, + 0x1958650, + 0x196c656, + 0x198465b, + 0x19a4661, + 0x19c8669, + 0x19e0672, + 0x1a08678, + 0x1a0c682, + 0x1a34683, + 0x1a3868d, + 0x1a5068e, + 0x1a54694, + 0x1a58695, + 0x1a98696, + 0x1a9c6a6, + 0x1aa06a7, + 0x21aa46a8, + 0x61aac6a9, + 0x21ab46ab, + 0x1afc6ad, + 0x1b046bf, + 0x21b086c1, 0x1b2c6c2, 0x1b306cb, 0x1b446cc, @@ -9647,573 +9815,621 @@ var children = [...]uint32{ 0x1b686d2, 0x1b986da, 0x1bb46e6, - 0x1bdc6ed, - 0x1bec6f7, - 0x1bf06fb, - 0x1c886fc, - 0x1c9c722, - 0x1cb0727, - 0x1ce872c, - 0x1cf873a, - 0x1d0c73e, - 0x1d24743, - 0x1dc8749, - 0x1ffc772, - 0x20007ff, - 0x206c800, - 0x20d881b, - 0x20f0836, - 0x210483c, - 0x2108841, - 0x2110842, + 0x1bbc6ed, + 0x1be46ef, + 0x1bf86f9, + 0x21bfc6fe, + 0x1c006ff, + 0x1c98700, + 0x1cac726, + 0x1cc072b, + 0x1cfc730, + 0x1d0c73f, + 0x1d20743, + 0x1d38748, + 0x1ddc74e, + 0x2010777, + 0x2018804, + 0x2201c806, + 0x22020807, + 0x208c808, + 0x20f8823, + 0x211083e, 0x2124844, 0x2128849, - 0x214884a, - 0x2198852, - 0x219c866, - 0x221a0867, - 0x21c0868, + 0x213084a, + 0x214884c, + 0x214c852, + 0x2170853, + 0x21c085c, 0x21c4870, - 0x21c8871, - 0x21f0872, - 0x621f487c, - 0x223887d, - 0x223c88e, - 0x6224088f, - 0x225c890, - 0x228c897, - 0x229c8a3, - 0x22ac8a7, - 0x23608ab, - 0x23648d8, - 0x223748d9, - 0x223788dd, - 0x223808de, - 0x23d88e0, - 0x23dc8f6, - 0x23e08f7, - 0x29348f8, - 0x2938a4d, - 0x62940a4e, - 0x229e8a50, - 0x229eca7a, - 0x229f0a7b, - 0x229fca7c, - 0x22a00a7f, - 0x22a0ca80, - 0x22a10a83, - 0x22a14a84, - 0x22a18a85, - 0x22a1ca86, - 0x22a20a87, - 0x22a2ca88, - 0x22a30a8b, - 0x22a3ca8c, - 0x22a40a8f, - 0x22a44a90, - 0x22a48a91, - 0x22a54a92, - 0x22a58a95, - 0x22a64a96, - 0x22a68a99, - 0x22a6ca9a, - 0x22a70a9b, - 0x2a74a9c, - 0x22a78a9d, - 0x22a84a9e, - 0x22a88aa1, - 0x2a8caa2, - 0x2a94aa3, - 0x62aa0aa5, - 0x2ae4aa8, - 0x22b04ab9, + 0x221c8871, + 0x21e8872, + 0x21ec87a, + 0x21f087b, + 0x221c87c, + 0x62220887, + 0x22228888, + 0x2222c88a, + 0x227088b, + 0x227489c, + 0x6227889d, + 0x229489e, + 0x22e88a5, + 0x222ec8ba, + 0x222f08bb, + 0x222f88bc, + 0x222fc8be, + 0x223008bf, + 0x223048c0, + 0x230c8c1, + 0x23108c3, + 0x2231c8c4, + 0x223248c7, + 0x23348c9, + 0x23448cd, + 0x23f88d1, + 0x23fc8fe, + 0x2240c8ff, + 0x22410903, + 0x22418904, + 0x2470906, + 0x247491c, + 0x247891d, + 0x29ec91e, + 0x29f0a7b, + 0x22a98a7c, + 0x22a9caa6, + 0x22aa0aa7, + 0x22aacaa8, + 0x22ab0aab, + 0x22abcaac, + 0x22ac0aaf, + 0x22ac4ab0, + 0x22ac8ab1, + 0x22accab2, + 0x22ad0ab3, + 0x22adcab4, + 0x22ae0ab7, + 0x22aecab8, + 0x22af0abb, + 0x22af4abc, + 0x22af8abd, + 0x22b04abe, 0x22b08ac1, - 0x22b0cac2, - 0x22b10ac3, - 0x22b14ac4, - 0x22b1cac5, + 0x22b14ac2, + 0x22b18ac5, + 0x22b1cac6, 0x22b20ac7, 0x2b24ac8, - 0x22b44ac9, - 0x22b48ad1, - 0x22b4cad2, - 0x22b50ad3, - 0x22b54ad4, - 0x22b58ad5, - 0x2b60ad6, - 0x2b68ad8, - 0x2b6cada, - 0x2b88adb, - 0x2ba0ae2, + 0x22b28ac9, + 0x22b34aca, + 0x22b38acd, + 0x2b3cace, + 0x2b44acf, + 0x22b50ad1, + 0x62b5cad4, + 0x2ba0ad7, 0x2ba4ae8, - 0x2bb4ae9, - 0x2bc0aed, - 0x2bf4af0, - 0x2bfcafd, - 0x22c00aff, - 0x2c18b00, - 0x22c20b06, + 0x22bc4ae9, + 0x22bc8af1, + 0x22bccaf2, + 0x22bd4af3, + 0x22bdcaf5, + 0x22be0af7, + 0x22be4af8, + 0x22becaf9, + 0x22bf0afb, + 0x22bf4afc, + 0x2bf8afd, + 0x22c18afe, + 0x22c1cb06, + 0x22c20b07, 0x22c24b08, - 0x22c2cb09, - 0x2d28b0b, - 0x22d2cb4a, - 0x2d34b4b, - 0x2d38b4d, - 0x22d3cb4e, - 0x2d40b4f, - 0x2d68b50, - 0x2d6cb5a, - 0x2d70b5b, - 0x2d88b5c, - 0x2d9cb62, - 0x2dc4b67, - 0x2de4b71, - 0x2de8b79, - 0x62decb7a, - 0x2e20b7b, + 0x22c28b09, + 0x22c34b0a, + 0x22c38b0d, + 0x2c3cb0e, + 0x2c44b0f, + 0x2c4cb11, + 0x2c50b13, + 0x2c6cb14, + 0x2c84b1b, + 0x2c88b21, + 0x2c98b22, + 0x2ca4b26, + 0x2cd8b29, + 0x2ce0b36, + 0x22ce4b38, + 0x2cfcb39, + 0x22d04b3f, + 0x22d08b41, + 0x22d10b42, + 0x2e0cb44, + 0x22e10b83, + 0x2e18b84, + 0x2e1cb86, + 0x22e20b87, 0x2e24b88, - 0x22e28b89, - 0x2e2cb8a, - 0x2e54b8b, + 0x2e54b89, 0x2e58b95, - 0x2e7cb96, - 0x2e80b9f, - 0x2e94ba0, - 0x2e98ba5, - 0x2e9cba6, - 0x2ebcba7, - 0x2ed8baf, + 0x2e5cb96, + 0x2e74b97, + 0x2e88b9d, + 0x2eb0ba2, + 0x2ed8bac, 0x2edcbb6, - 0x22ee0bb7, - 0x2ee4bb8, - 0x2ee8bb9, - 0x2eecbba, - 0x2ef4bbb, - 0x2f08bbd, - 0x2f0cbc2, - 0x2f10bc3, - 0x2f38bc4, - 0x2f3cbce, - 0x2fb0bcf, - 0x2fb4bec, - 0x2fb8bed, - 0x2fd8bee, - 0x2ff0bf6, + 0x62ee0bb7, + 0x2f14bb8, + 0x2f18bc5, + 0x22f1cbc6, + 0x2f20bc7, + 0x2f48bc8, + 0x2f4cbd2, + 0x2f70bd3, + 0x2f74bdc, + 0x2f88bdd, + 0x2f8cbe2, + 0x2f90be3, + 0x2fb0be4, + 0x2fd4bec, + 0x22fd8bf5, + 0x22fdcbf6, + 0x2fe0bf7, + 0x22fe4bf8, + 0x2fe8bf9, + 0x2fecbfa, + 0x2ff0bfb, 0x2ff4bfc, - 0x3008bfd, - 0x3020c02, - 0x3040c08, - 0x3058c10, - 0x305cc16, - 0x3078c17, - 0x3094c1e, - 0x3098c25, - 0x30c4c26, - 0x30e4c31, - 0x3104c39, - 0x3168c41, - 0x3188c5a, - 0x31a8c62, - 0x31acc6a, - 0x31c4c6b, - 0x3208c71, - 0x3288c82, - 0x32b8ca2, - 0x32bccae, - 0x32c8caf, - 0x32e8cb2, - 0x32eccba, - 0x3310cbb, - 0x3318cc4, - 0x3354cc6, - 0x33a8cd5, - 0x33accea, - 0x33b0ceb, - 0x3494cec, - 0x2349cd25, - 0x234a0d27, - 0x234a4d28, - 0x34a8d29, - 0x234acd2a, - 0x234b0d2b, - 0x34b4d2c, - 0x234b8d2d, - 0x234c8d2e, - 0x234ccd32, - 0x234d0d33, - 0x234d4d34, - 0x234d8d35, - 0x234dcd36, - 0x34f4d37, - 0x3518d3d, - 0x3538d46, - 0x3ba4d4e, - 0x3bb0ee9, - 0x3bd0eec, - 0x3d90ef4, - 0x3e60f64, - 0x3ed0f98, - 0x3f28fb4, - 0x4010fca, - 0x4069004, - 0x40a501a, - 0x41a1029, - 0x426d068, - 0x430509b, - 0x43950c1, - 0x43f90e5, - 0x46310fe, - 0x46e918c, - 0x47b51ba, - 0x48011ed, - 0x4889200, - 0x48c5222, - 0x4915231, - 0x498d245, - 0x64991263, - 0x64995264, - 0x64999265, - 0x4a15266, - 0x4a71285, - 0x4aed29c, - 0x4b652bb, - 0x4be52d9, - 0x4c512f9, - 0x4d7d314, - 0x4dd535f, - 0x64dd9375, - 0x4e71376, - 0x4e7939c, - 0x24e7d39e, - 0x4f0539f, - 0x4f513c1, - 0x4fb93d4, - 0x50613ee, - 0x5129418, - 0x519144a, - 0x52a5464, - 0x652a94a9, - 0x652ad4aa, - 0x53094ab, - 0x53654c2, - 0x53f54d9, - 0x54714fd, - 0x54b551c, - 0x559952d, - 0x55cd566, - 0x562d573, - 0x56a158b, - 0x57295a8, - 0x57695ca, - 0x57d95da, - 0x657dd5f6, - 0x58055f7, - 0x5809601, - 0x5839602, - 0x585560e, - 0x5899615, - 0x58a9626, - 0x58c162a, - 0x5939630, - 0x594164e, - 0x595d650, - 0x5971657, - 0x598d65c, - 0x59b9663, - 0x59bd66e, - 0x59c566f, - 0x59d9671, - 0x59f9676, - 0x5a0967e, - 0x5a15682, - 0x5a51685, - 0x5a59694, - 0x5a6d696, - 0x5a9569b, - 0x5aa16a5, - 0x5aa96a8, - 0x5ad16aa, - 0x5af56b4, - 0x5b0d6bd, - 0x5b116c3, - 0x5b196c4, - 0x5b2d6c6, - 0x5bd56cb, - 0x5bd96f5, + 0x3010bfd, + 0x23014c04, + 0x2301cc05, + 0x3020c07, + 0x3048c08, + 0x305cc12, + 0x30d0c17, + 0x30dcc34, + 0x30e0c37, + 0x3100c38, + 0x3118c40, + 0x311cc46, + 0x3130c47, + 0x3148c4c, + 0x3168c52, + 0x3180c5a, + 0x3188c60, + 0x31a4c62, + 0x31c0c69, + 0x31c4c70, + 0x31f0c71, + 0x3210c7c, + 0x3230c84, + 0x3298c8c, + 0x32b8ca6, + 0x32d8cae, + 0x32dccb6, + 0x32f4cb7, + 0x3338cbd, + 0x33b8cce, + 0x33f4cee, + 0x33f8cfd, + 0x3404cfe, + 0x3424d01, + 0x3428d09, + 0x344cd0a, + 0x3454d13, + 0x3494d15, + 0x34e8d25, + 0x34ecd3a, + 0x34f0d3b, + 0x35e4d3c, + 0x235ecd79, + 0x235f0d7b, + 0x235f4d7c, + 0x35f8d7d, + 0x235fcd7e, + 0x23600d7f, + 0x23604d80, + 0x3608d81, + 0x2360cd82, + 0x2361cd83, + 0x23620d87, + 0x23624d88, + 0x23628d89, + 0x2362cd8a, + 0x23638d8b, + 0x2363cd8e, + 0x3654d8f, + 0x3678d95, + 0x3698d9e, + 0x3d0cda6, + 0x23d10f43, + 0x23d14f44, + 0x23d18f45, + 0x23d1cf46, + 0x3d2cf47, + 0x3d4cf4b, + 0x3f0cf53, + 0x3fdcfc3, + 0x404cff7, + 0x40a5013, + 0x418d029, + 0x41e5063, + 0x4221079, + 0x431d088, + 0x43e90c7, + 0x44810fa, + 0x4511120, + 0x4575144, + 0x47ad15d, + 0x48651eb, + 0x4931219, + 0x497d24c, + 0x4a0525f, + 0x4a41281, + 0x4a91290, + 0x4b092a4, + 0x64b0d2c2, + 0x64b112c3, + 0x64b152c4, + 0x4b912c5, + 0x4bed2e4, + 0x4c692fb, + 0x4ce131a, + 0x4d61338, + 0x4dcd358, + 0x4ef9373, + 0x4f513be, + 0x64f553d4, + 0x4fed3d5, + 0x4ff53fb, + 0x24ff93fd, + 0x50813fe, + 0x50cd420, + 0x5135433, + 0x51dd44d, + 0x52a5477, + 0x530d4a9, + 0x54214c3, + 0x65425508, + 0x65429509, + 0x548550a, + 0x54e1521, + 0x5571538, + 0x55ed55c, + 0x563157b, + 0x571558c, + 0x57495c5, + 0x57a95d2, + 0x581d5ea, + 0x58a5607, + 0x58e5629, + 0x5955639, + 0x65959655, + 0x5981656, + 0x5985660, + 0x59b5661, + 0x59d166d, + 0x5a15674, + 0x5a25685, + 0x5a3d689, + 0x5ab568f, + 0x5abd6ad, + 0x5ad96af, + 0x5aed6b6, + 0x5b116bb, + 0x25b156c4, + 0x5b416c5, + 0x5b456d0, + 0x5b4d6d1, + 0x5b616d3, + 0x5b816d8, + 0x5b916e0, + 0x5b9d6e4, + 0x5bd96e7, 0x5bdd6f6, - 0x5be16f7, - 0x5c056f8, - 0x5c29701, - 0x5c4570a, - 0x5c59711, - 0x5c6d716, - 0x5c7571b, - 0x5c7d71d, - 0x5c8571f, - 0x5c9d721, - 0x5cad727, - 0x5cb172b, - 0x5ccd72c, - 0x6555733, - 0x658d955, - 0x65b9963, - 0x65d596e, - 0x65f5975, - 0x661597d, - 0x6659985, - 0x6661996, - 0x26665998, - 0x26669999, - 0x667199a, - 0x687199c, - 0x26875a1c, - 0x6879a1d, - 0x2687da1e, - 0x2688da1f, - 0x26895a23, - 0x268a1a25, - 0x68a5a28, - 0x268a9a29, - 0x268b1a2a, - 0x68b9a2c, - 0x68c9a2e, - 0x68f1a32, - 0x692da3c, - 0x6931a4b, - 0x6969a4c, - 0x698da5a, - 0x74e5a63, - 0x74e9d39, - 0x74edd3a, - 0x274f1d3b, - 0x74f5d3c, - 0x274f9d3d, - 0x74fdd3e, - 0x27509d3f, - 0x750dd42, - 0x7511d43, - 0x27515d44, - 0x7519d45, - 0x27521d46, - 0x7525d48, - 0x7529d49, - 0x27539d4a, - 0x753dd4e, - 0x7541d4f, - 0x7545d50, - 0x7549d51, - 0x2754dd52, - 0x7551d53, - 0x7555d54, - 0x7559d55, - 0x755dd56, - 0x27565d57, - 0x7569d59, - 0x756dd5a, - 0x7571d5b, - 0x27575d5c, - 0x7579d5d, - 0x27581d5e, - 0x27585d60, - 0x75a1d61, - 0x75b9d68, - 0x75fdd6e, - 0x7601d7f, - 0x7625d80, - 0x7631d89, - 0x7635d8c, - 0x7639d8d, - 0x77fdd8e, - 0x27801dff, - 0x27809e00, - 0x2780de02, - 0x27811e03, - 0x7819e04, - 0x78f5e06, - 0x27901e3d, - 0x27905e40, - 0x27909e41, - 0x2790de42, - 0x7911e43, - 0x793de44, - 0x7949e4f, - 0x794de52, - 0x7971e53, - 0x797de5c, - 0x799de5f, - 0x79a1e67, - 0x79d9e68, - 0x7c89e76, - 0x7d45f22, - 0x7d49f51, - 0x7d4df52, - 0x7d61f53, - 0x7d65f58, - 0x7d99f59, - 0x7dd1f66, - 0x27dd5f74, - 0x7df1f75, - 0x7e19f7c, - 0x7e1df86, - 0x7e41f87, - 0x7e5df90, - 0x7e85f97, - 0x7e95fa1, - 0x7e99fa5, - 0x7e9dfa6, - 0x7ed5fa7, - 0x7ee1fb5, - 0x7f09fb8, - 0x7f95fc2, - 0x27f99fe5, - 0x7f9dfe6, - 0x7fadfe7, - 0x27fb1feb, - 0x7fc1fec, - 0x7fddff0, - 0x7ffdff7, - 0x8001fff, - 0x8016000, - 0x802a005, - 0x802e00a, - 0x803200b, - 0x803600c, - 0x805600d, - 0x80fe015, - 0x810203f, - 0x811e040, - 0x8146047, - 0x28156051, - 0x815a055, - 0x8166056, - 0x8192059, - 0x819a064, - 0x81ae066, - 0x81ce06b, - 0x81ea073, - 0x81fa07a, - 0x821207e, - 0x824a084, - 0x824e092, - 0x8322093, - 0x83260c8, - 0x833a0c9, - 0x83420ce, - 0x835a0d0, - 0x835e0d6, - 0x836a0d7, - 0x83760da, - 0x837a0dd, - 0x83820de, - 0x83860e0, - 0x83aa0e1, - 0x83ea0ea, - 0x83ee0fa, - 0x840e0fb, - 0x845e103, - 0x848e117, - 0x28492123, - 0x849a124, - 0x84f2126, - 0x84f613c, - 0x84fa13d, - 0x84fe13e, - 0x854213f, - 0x8552150, - 0x8592154, - 0x8596164, - 0x85c6165, - 0x870e171, - 0x87361c3, - 0x876e1cd, - 0x87961db, - 0x2879e1e5, - 0x287a21e7, - 0x287a61e8, - 0x87ae1e9, - 0x87ba1eb, - 0x88d61ee, - 0x88e2235, - 0x88ee238, - 0x88fa23b, - 0x890623e, - 0x8912241, - 0x891e244, - 0x892a247, - 0x893624a, - 0x894224d, - 0x894e250, - 0x895a253, - 0x8966256, - 0x8972259, - 0x897a25c, - 0x898625e, - 0x8992261, - 0x899e264, - 0x89aa267, - 0x89b626a, - 0x89c226d, - 0x89ce270, - 0x89da273, - 0x89e6276, - 0x89f2279, - 0x89fe27c, - 0x8a2a27f, - 0x8a3628a, - 0x8a4228d, - 0x8a4e290, - 0x8a5a293, - 0x8a66296, - 0x8a6e299, - 0x8a7a29b, - 0x8a8629e, - 0x8a922a1, - 0x8a9e2a4, - 0x8aaa2a7, - 0x8ab62aa, - 0x8ac22ad, - 0x8ace2b0, - 0x8ada2b3, - 0x8ae62b6, - 0x8af22b9, - 0x8afa2bc, - 0x8b062be, - 0x8b0e2c1, - 0x8b1a2c3, - 0x8b262c6, - 0x8b322c9, - 0x8b3e2cc, - 0x8b4a2cf, + 0x5be56f7, + 0x5bf96f9, + 0x5c216fe, + 0x5c2d708, + 0x5c3570b, + 0x5c5d70d, + 0x5c81717, + 0x5c99720, + 0x5c9d726, + 0x5ca5727, + 0x5cad729, + 0x5cc172b, + 0x5d71730, + 0x5d7575c, + 0x5d7d75d, + 0x5d8175f, + 0x5da5760, + 0x5dc9769, + 0x5de5772, + 0x5df9779, + 0x5e0d77e, + 0x5e15783, + 0x5e1d785, + 0x5e25787, + 0x5e3d789, + 0x5e4d78f, + 0x5e51793, + 0x5e6d794, + 0x66f579b, + 0x672d9bd, + 0x67599cb, + 0x67759d6, + 0x67799dd, + 0x2677d9de, + 0x679d9df, + 0x67bd9e7, + 0x68019ef, + 0x6809a00, + 0x2680da02, + 0x26811a03, + 0x6819a04, + 0x6a35a06, + 0x6a49a8d, + 0x26a4da92, + 0x6a51a93, + 0x6a59a94, + 0x26a5da96, + 0x26a61a97, + 0x26a6da98, + 0x26a7da9b, + 0x26a85a9f, + 0x26a91aa1, + 0x6a95aa4, + 0x26a99aa5, + 0x26ab1aa6, + 0x26ab9aac, + 0x26abdaae, + 0x26ac5aaf, + 0x26ac9ab1, + 0x26acdab2, + 0x26ad5ab3, + 0x6addab5, + 0x6af1ab7, + 0x6b19abc, + 0x6b55ac6, + 0x6b59ad5, + 0x6b91ad6, + 0x6bb5ae4, + 0x770daed, + 0x7711dc3, + 0x7715dc4, + 0x27719dc5, + 0x771ddc6, + 0x27721dc7, + 0x7725dc8, + 0x27731dc9, + 0x7735dcc, + 0x7739dcd, + 0x2773ddce, + 0x7741dcf, + 0x27749dd0, + 0x774ddd2, + 0x7751dd3, + 0x27761dd4, + 0x7765dd8, + 0x7769dd9, + 0x776ddda, + 0x7771ddb, + 0x27775ddc, + 0x7779ddd, + 0x777ddde, + 0x7781ddf, + 0x7785de0, + 0x2778dde1, + 0x7791de3, + 0x7795de4, + 0x7799de5, + 0x2779dde6, + 0x77a1de7, + 0x277a9de8, + 0x277addea, + 0x77c9deb, + 0x77e1df2, + 0x7825df8, + 0x7829e09, + 0x784de0a, + 0x7861e13, + 0x7865e18, + 0x7869e19, + 0x7a2de1a, + 0x27a31e8b, + 0x27a39e8c, + 0x27a3de8e, + 0x27a41e8f, + 0x7a49e90, + 0x7b25e92, + 0x27b31ec9, + 0x27b35ecc, + 0x27b39ecd, + 0x27b3dece, + 0x7b41ecf, + 0x7b6ded0, + 0x7b79edb, + 0x7b7dede, + 0x7ba1edf, + 0x7badee8, + 0x7bcdeeb, + 0x7bd1ef3, + 0x7c09ef4, + 0x7ebdf02, + 0x7f79faf, + 0x7f7dfde, + 0x7f81fdf, + 0x7f95fe0, + 0x7f99fe5, + 0x7fcdfe6, + 0x8005ff3, + 0x2800a001, + 0x8026002, + 0x804e009, + 0x8052013, + 0x8076014, + 0x809201d, + 0x80ba024, + 0x80ca02e, + 0x80ce032, + 0x80d2033, + 0x810e034, + 0x811a043, + 0x8142046, + 0x81de050, + 0x281e2077, + 0x81e6078, + 0x81f6079, + 0x281fa07d, + 0x820a07e, + 0x8226082, + 0x8246089, + 0x824a091, + 0x825e092, + 0x8272097, + 0x827609c, + 0x827a09d, + 0x827e09e, + 0x829e09f, + 0x834a0a7, + 0x834e0d2, + 0x836e0d3, + 0x839a0db, + 0x283aa0e6, + 0x83ae0ea, + 0x83be0eb, + 0x83f60ef, + 0x83fe0fd, + 0x84120ff, + 0x8432104, + 0x844e10c, + 0x845a113, + 0x8472116, + 0x84aa11c, + 0x84ae12a, + 0x858212b, + 0x8586160, + 0x859a161, + 0x85a2166, + 0x85ba168, + 0x85be16e, + 0x85ca16f, + 0x85d6172, + 0x85da175, + 0x85e2176, + 0x85e6178, + 0x860a179, + 0x864a182, + 0x864e192, + 0x866e193, + 0x86c219b, + 0x86f21b0, + 0x286f61bc, + 0x86fe1bd, + 0x87561bf, + 0x875a1d5, + 0x875e1d6, + 0x87621d7, + 0x87a61d8, + 0x87b61e9, + 0x87f61ed, + 0x87fa1fd, + 0x882a1fe, + 0x897620a, + 0x899e25d, + 0x89da267, + 0x8a02276, + 0x28a0a280, + 0x28a0e282, + 0x28a12283, + 0x8a1a284, + 0x8a26286, + 0x8b4a289, 0x8b562d2, 0x8b622d5, 0x8b6e2d8, - 0x8b722db, - 0x8b7e2dc, - 0x8b9a2df, - 0x8b9e2e6, - 0x8bae2e7, - 0x8bd22eb, - 0x8bd62f4, - 0x8c1a2f5, - 0x8c22306, - 0x8c36308, - 0x8c6a30d, - 0x8c8a31a, - 0x8c92322, - 0x8cb6324, - 0x8cce32d, - 0x8ce6333, - 0x8cfe339, - 0x8d1233f, - 0x28d5a344, - 0x8d5e356, - 0x8d8a357, - 0x8d9a362, - 0x8dae366, + 0x8b7a2db, + 0x8b862de, + 0x8b922e1, + 0x8b9e2e4, + 0x8baa2e7, + 0x8bb62ea, + 0x8bc22ed, + 0x28bc62f0, + 0x8bd22f1, + 0x8bde2f4, + 0x8bea2f7, + 0x8bf22fa, + 0x8bfe2fc, + 0x8c0a2ff, + 0x8c16302, + 0x8c22305, + 0x8c2e308, + 0x8c3a30b, + 0x8c4630e, + 0x8c52311, + 0x8c5e314, + 0x8c6a317, + 0x8c7631a, + 0x8ca231d, + 0x8cae328, + 0x8cba32b, + 0x8cc632e, + 0x8cd2331, + 0x8cde334, + 0x8ce6337, + 0x8cf2339, + 0x8cfe33c, + 0x8d0a33f, + 0x8d16342, + 0x8d22345, + 0x8d2e348, + 0x8d3a34b, + 0x8d4634e, + 0x8d52351, + 0x8d5e354, + 0x8d6a357, + 0x8d7235a, + 0x8d7e35c, + 0x8d8635f, + 0x8d92361, + 0x8d9e364, + 0x8daa367, + 0x8db636a, + 0x8dc236d, + 0x8dce370, + 0x8dda373, + 0x8de6376, + 0x8dea379, + 0x8df637a, + 0x8e1237d, + 0x8e16384, + 0x8e26385, + 0x8e4a389, + 0x8e4e392, + 0x8e92393, + 0x8e9a3a4, + 0x8eae3a6, + 0x8ee23ab, + 0x8f023b8, + 0x8f063c0, + 0x8f0e3c1, + 0x8f323c3, + 0x8f4a3cc, + 0x8f623d2, + 0x8f7a3d8, + 0x8f923de, + 0x28fda3e4, + 0x8fde3f6, + 0x900a3f7, + 0x901a402, + 0x902e406, } -// max children 601 (capacity 1023) -// max text offset 30901 (capacity 32767) +// max children 650 (capacity 1023) +// max text offset 31341 (capacity 32767) // max text length 36 (capacity 63) -// max hi 9067 (capacity 16383) -// max lo 9062 (capacity 16383) +// max hi 9227 (capacity 16383) +// max lo 9222 (capacity 16383) diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index c0f9f2d52..b8313e98a 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -204,6 +204,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -561,7 +562,9 @@ ccflags="$@" $2 ~ /^(HDIO|WIN|SMART)_/ || $2 ~ /^CRYPTO_/ || $2 ~ /^TIPC_/ || + $2 !~ "DEVLINK_RELOAD_LIMITS_VALID_MASK" && $2 ~ /^DEVLINK_/ || + $2 ~ /^ETHTOOL_/ || $2 ~ /^LWTUNNEL_IP/ || $2 !~ "WMESGLEN" && $2 ~ /^W[A-Z0-9]+$/ || diff --git a/vendor/golang.org/x/sys/unix/ptrace_darwin.go b/vendor/golang.org/x/sys/unix/ptrace_darwin.go new file mode 100644 index 000000000..fc568b540 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ptrace_darwin.go @@ -0,0 +1,11 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin,!ios + +package unix + +func ptrace(request int, pid int, addr uintptr, data uintptr) error { + return ptrace1(request, pid, addr, data) +} diff --git a/vendor/golang.org/x/sys/unix/ptrace_ios.go b/vendor/golang.org/x/sys/unix/ptrace_ios.go new file mode 100644 index 000000000..183441c9a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ptrace_ios.go @@ -0,0 +1,11 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ios + +package unix + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + return ENOTSUP +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go index dc0befee3..ee852f1ab 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go @@ -26,7 +26,6 @@ func fdopendir(fd int) (dir uintptr, err error) { func libc_fdopendir_trampoline() -//go:linkname libc_fdopendir libc_fdopendir //go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib" func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index b62573890..16f9c226b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -119,13 +119,16 @@ type attrList struct { Forkattr uint32 } -//sysnb pipe() (r int, w int, err error) +//sysnb pipe(p *[2]int32) (err error) func Pipe(p []int) (err error) { if len(p) != 2 { return EINVAL } - p[0], p[1], err = pipe() + var x [2]int32 + err = pipe(&x) + p[0] = int(x[0]) + p[1] = int(x[1]) return } diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go index 6c1f4ab95..ee065fcf2 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go @@ -45,6 +45,6 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 //sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64 //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) +//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go index 0582ae256..7a1f64a7b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go @@ -45,6 +45,6 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 //sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64 //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) +//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go index c6a9733b4..d30735c5d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go @@ -6,7 +6,7 @@ package unix import "syscall" -func ptrace(request int, pid int, addr uintptr, data uintptr) error { +func ptrace1(request int, pid int, addr uintptr, data uintptr) error { return ENOTSUP } diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go index 253afa4de..9f85fd404 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go @@ -45,6 +45,6 @@ func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys Fstatfs(fd int, stat *Statfs_t) (err error) //sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT //sys Lstat(path string, stat *Stat_t) (err error) -//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) +//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace //sys Stat(path string, stat *Stat_t) (err error) //sys Statfs(path string, stat *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_illumos.go b/vendor/golang.org/x/sys/unix/syscall_illumos.go index bbc4f3ea5..7a2d4120f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_illumos.go +++ b/vendor/golang.org/x/sys/unix/syscall_illumos.go @@ -75,16 +75,3 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { } return } - -//sysnb pipe2(p *[2]_C_int, flags int) (err error) - -func Pipe2(p []int, flags int) error { - if len(p) != 2 { - return EINVAL - } - var pp [2]_C_int - err := pipe2(&pp, flags) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return err -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 84a9e5277..28be1306e 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -641,6 +641,36 @@ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil } +// SockaddrCANJ1939 implements the Sockaddr interface for AF_CAN using J1939 +// protocol (https://en.wikipedia.org/wiki/SAE_J1939). For more information +// on the purposes of the fields, check the official linux kernel documentation +// available here: https://www.kernel.org/doc/Documentation/networking/j1939.rst +type SockaddrCANJ1939 struct { + Ifindex int + Name uint64 + PGN uint32 + Addr uint8 + raw RawSockaddrCAN +} + +func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_CAN + sa.raw.Ifindex = int32(sa.Ifindex) + n := (*[8]byte)(unsafe.Pointer(&sa.Name)) + for i := 0; i < 8; i++ { + sa.raw.Addr[i] = n[i] + } + p := (*[4]byte)(unsafe.Pointer(&sa.PGN)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i+8] = p[i] + } + sa.raw.Addr[12] = sa.Addr + return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil +} + // SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. // SockaddrALG enables userspace access to the Linux kernel's cryptography // subsystem. The Type and Name fields specify which type of hash or cipher @@ -952,6 +982,10 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil } +var socketProtocol = func(fd int) (int, error) { + return GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) +} + func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { switch rsa.Addr.Family { case AF_NETLINK: @@ -1002,7 +1036,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { return sa, nil case AF_INET: - proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) + proto, err := socketProtocol(fd) if err != nil { return nil, err } @@ -1028,7 +1062,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { } case AF_INET6: - proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) + proto, err := socketProtocol(fd) if err != nil { return nil, err } @@ -1063,7 +1097,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { } return sa, nil case AF_BLUETOOTH: - proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) + proto, err := socketProtocol(fd) if err != nil { return nil, err } @@ -1150,20 +1184,43 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { return sa, nil case AF_CAN: - pp := (*RawSockaddrCAN)(unsafe.Pointer(rsa)) - sa := &SockaddrCAN{ - Ifindex: int(pp.Ifindex), + proto, err := socketProtocol(fd) + if err != nil { + return nil, err } - rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { - rx[i] = pp.Addr[i] - } - tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { - tx[i] = pp.Addr[i+4] - } - return sa, nil + pp := (*RawSockaddrCAN)(unsafe.Pointer(rsa)) + + switch proto { + case CAN_J1939: + sa := &SockaddrCANJ1939{ + Ifindex: int(pp.Ifindex), + } + name := (*[8]byte)(unsafe.Pointer(&sa.Name)) + for i := 0; i < 8; i++ { + name[i] = pp.Addr[i] + } + pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN)) + for i := 0; i < 4; i++ { + pgn[i] = pp.Addr[i+8] + } + addr := (*[1]byte)(unsafe.Pointer(&sa.Addr)) + addr[0] = pp.Addr[12] + return sa, nil + default: + sa := &SockaddrCAN{ + Ifindex: int(pp.Ifindex), + } + rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) + for i := 0; i < 4; i++ { + rx[i] = pp.Addr[i] + } + tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) + for i := 0; i < 4; i++ { + tx[i] = pp.Addr[i+4] + } + return sa, nil + } } return nil, EAFNOSUPPORT } diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index fee6e9952..184786ed9 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -68,6 +68,19 @@ func Pipe(p []int) (err error) { return nil } +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return err +} + func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { if sa.Port < 0 || sa.Port > 0xFFFF { return nil, 0, EINVAL diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go index 4a672f569..103604299 100644 --- a/vendor/golang.org/x/sys/unix/timestruct.go +++ b/vendor/golang.org/x/sys/unix/timestruct.go @@ -8,12 +8,10 @@ package unix import "time" -// TimespecToNsec converts a Timespec value into a number of -// nanoseconds since the Unix epoch. -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } +// TimespecToNSec returns the time stored in ts as nanoseconds. +func TimespecToNsec(ts Timespec) int64 { return ts.Nano() } -// NsecToTimespec takes a number of nanoseconds since the Unix epoch -// and returns the corresponding Timespec value. +// NsecToTimespec converts a number of nanoseconds into a Timespec. func NsecToTimespec(nsec int64) Timespec { sec := nsec / 1e9 nsec = nsec % 1e9 @@ -42,12 +40,10 @@ func TimeToTimespec(t time.Time) (Timespec, error) { return ts, nil } -// TimevalToNsec converts a Timeval value into a number of nanoseconds -// since the Unix epoch. -func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 } +// TimevalToNsec returns the time stored in tv as nanoseconds. +func TimevalToNsec(tv Timeval) int64 { return tv.Nano() } -// NsecToTimeval takes a number of nanoseconds since the Unix epoch -// and returns the corresponding Timeval value. +// NsecToTimeval converts a number of nanoseconds into a Timeval. func NsecToTimeval(nsec int64) Timeval { nsec += 999 // round up to microsecond usec := nsec % 1e9 / 1e3 @@ -59,24 +55,22 @@ func NsecToTimeval(nsec int64) Timeval { return setTimeval(sec, usec) } -// Unix returns ts as the number of seconds and nanoseconds elapsed since the -// Unix epoch. +// Unix returns the time stored in ts as seconds plus nanoseconds. func (ts *Timespec) Unix() (sec int64, nsec int64) { return int64(ts.Sec), int64(ts.Nsec) } -// Unix returns tv as the number of seconds and nanoseconds elapsed since the -// Unix epoch. +// Unix returns the time stored in tv as seconds plus nanoseconds. func (tv *Timeval) Unix() (sec int64, nsec int64) { return int64(tv.Sec), int64(tv.Usec) * 1000 } -// Nano returns ts as the number of nanoseconds elapsed since the Unix epoch. +// Nano returns the time stored in ts as nanoseconds. func (ts *Timespec) Nano() int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } -// Nano returns tv as the number of nanoseconds elapsed since the Unix epoch. +// Nano returns the time stored in tv as nanoseconds. func (tv *Timeval) Nano() int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 } diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index b46110354..b3463a8b5 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -65,6 +65,7 @@ const ( ALG_OP_ENCRYPT = 0x1 ALG_SET_AEAD_ASSOCLEN = 0x4 ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_DRBG_ENTROPY = 0x6 ALG_SET_IV = 0x2 ALG_SET_KEY = 0x1 ALG_SET_OP = 0x3 @@ -179,8 +180,10 @@ const ( BPF_F_ANY_ALIGNMENT = 0x2 BPF_F_QUERY_EFFECTIVE = 0x1 BPF_F_REPLACE = 0x4 + BPF_F_SLEEPABLE = 0x10 BPF_F_STRICT_ALIGNMENT = 0x1 BPF_F_TEST_RND_HI32 = 0x4 + BPF_F_TEST_RUN_ON_CPU = 0x1 BPF_F_TEST_STATE_FREQ = 0x8 BPF_H = 0x8 BPF_IMM = 0x0 @@ -219,6 +222,7 @@ const ( BPF_NET_OFF = -0x100000 BPF_OBJ_NAME_LEN = 0x10 BPF_OR = 0x40 + BPF_PSEUDO_BTF_ID = 0x3 BPF_PSEUDO_CALL = 0x1 BPF_PSEUDO_MAP_FD = 0x1 BPF_PSEUDO_MAP_VALUE = 0x2 @@ -429,10 +433,13 @@ const ( DEBUGFS_MAGIC = 0x64626720 DEVLINK_CMD_ESWITCH_MODE_GET = 0x1d DEVLINK_CMD_ESWITCH_MODE_SET = 0x1e + DEVLINK_FLASH_OVERWRITE_IDENTIFIERS = 0x2 + DEVLINK_FLASH_OVERWRITE_SETTINGS = 0x1 DEVLINK_GENL_MCGRP_CONFIG_NAME = "config" DEVLINK_GENL_NAME = "devlink" DEVLINK_GENL_VERSION = 0x1 DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 + DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3 DEVMEM_MAGIC = 0x454d444d DEVPTS_SUPER_MAGIC = 0x1cd1 DMA_BUF_MAGIC = 0x444d4142 @@ -477,9 +484,9 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2020-02-27)" + DM_VERSION_EXTRA = "-ioctl (2020-10-01)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x2a + DM_VERSION_MINOR = 0x2b DM_VERSION_PATCHLEVEL = 0x0 DT_BLK = 0x6 DT_CHR = 0x2 @@ -520,6 +527,119 @@ const ( EPOLL_CTL_DEL = 0x2 EPOLL_CTL_MOD = 0x3 EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2 + ESP_V4_FLOW = 0xa + ESP_V6_FLOW = 0xc + ETHER_FLOW = 0x12 + ETHTOOL_BUSINFO_LEN = 0x20 + ETHTOOL_EROMVERS_LEN = 0x20 + ETHTOOL_FEC_AUTO = 0x2 + ETHTOOL_FEC_BASER = 0x10 + ETHTOOL_FEC_LLRS = 0x20 + ETHTOOL_FEC_NONE = 0x1 + ETHTOOL_FEC_OFF = 0x4 + ETHTOOL_FEC_RS = 0x8 + ETHTOOL_FLAG_ALL = 0x7 + ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 + ETHTOOL_FLAG_OMIT_REPLY = 0x2 + ETHTOOL_FLAG_STATS = 0x4 + ETHTOOL_FLASHDEV = 0x33 + ETHTOOL_FLASH_MAX_FILENAME = 0x80 + ETHTOOL_FWVERS_LEN = 0x20 + ETHTOOL_F_COMPAT = 0x4 + ETHTOOL_F_UNSUPPORTED = 0x1 + ETHTOOL_F_WISH = 0x2 + ETHTOOL_GCHANNELS = 0x3c + ETHTOOL_GCOALESCE = 0xe + ETHTOOL_GDRVINFO = 0x3 + ETHTOOL_GEEE = 0x44 + ETHTOOL_GEEPROM = 0xb + ETHTOOL_GENL_NAME = "ethtool" + ETHTOOL_GENL_VERSION = 0x1 + ETHTOOL_GET_DUMP_DATA = 0x40 + ETHTOOL_GET_DUMP_FLAG = 0x3f + ETHTOOL_GET_TS_INFO = 0x41 + ETHTOOL_GFEATURES = 0x3a + ETHTOOL_GFECPARAM = 0x50 + ETHTOOL_GFLAGS = 0x25 + ETHTOOL_GGRO = 0x2b + ETHTOOL_GGSO = 0x23 + ETHTOOL_GLINK = 0xa + ETHTOOL_GLINKSETTINGS = 0x4c + ETHTOOL_GMODULEEEPROM = 0x43 + ETHTOOL_GMODULEINFO = 0x42 + ETHTOOL_GMSGLVL = 0x7 + ETHTOOL_GPAUSEPARAM = 0x12 + ETHTOOL_GPERMADDR = 0x20 + ETHTOOL_GPFLAGS = 0x27 + ETHTOOL_GPHYSTATS = 0x4a + ETHTOOL_GREGS = 0x4 + ETHTOOL_GRINGPARAM = 0x10 + ETHTOOL_GRSSH = 0x46 + ETHTOOL_GRXCLSRLALL = 0x30 + ETHTOOL_GRXCLSRLCNT = 0x2e + ETHTOOL_GRXCLSRULE = 0x2f + ETHTOOL_GRXCSUM = 0x14 + ETHTOOL_GRXFH = 0x29 + ETHTOOL_GRXFHINDIR = 0x38 + ETHTOOL_GRXNTUPLE = 0x36 + ETHTOOL_GRXRINGS = 0x2d + ETHTOOL_GSET = 0x1 + ETHTOOL_GSG = 0x18 + ETHTOOL_GSSET_INFO = 0x37 + ETHTOOL_GSTATS = 0x1d + ETHTOOL_GSTRINGS = 0x1b + ETHTOOL_GTSO = 0x1e + ETHTOOL_GTUNABLE = 0x48 + ETHTOOL_GTXCSUM = 0x16 + ETHTOOL_GUFO = 0x21 + ETHTOOL_GWOL = 0x5 + ETHTOOL_MCGRP_MONITOR_NAME = "monitor" + ETHTOOL_NWAY_RST = 0x9 + ETHTOOL_PERQUEUE = 0x4b + ETHTOOL_PHYS_ID = 0x1c + ETHTOOL_PHY_EDPD_DFLT_TX_MSECS = 0xffff + ETHTOOL_PHY_EDPD_DISABLE = 0x0 + ETHTOOL_PHY_EDPD_NO_TX = 0xfffe + ETHTOOL_PHY_FAST_LINK_DOWN_OFF = 0xff + ETHTOOL_PHY_FAST_LINK_DOWN_ON = 0x0 + ETHTOOL_PHY_GTUNABLE = 0x4e + ETHTOOL_PHY_STUNABLE = 0x4f + ETHTOOL_RESET = 0x34 + ETHTOOL_RXNTUPLE_ACTION_CLEAR = -0x2 + ETHTOOL_RXNTUPLE_ACTION_DROP = -0x1 + ETHTOOL_RX_FLOW_SPEC_RING = 0xffffffff + ETHTOOL_RX_FLOW_SPEC_RING_VF = 0xff00000000 + ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF = 0x20 + ETHTOOL_SCHANNELS = 0x3d + ETHTOOL_SCOALESCE = 0xf + ETHTOOL_SEEE = 0x45 + ETHTOOL_SEEPROM = 0xc + ETHTOOL_SET_DUMP = 0x3e + ETHTOOL_SFEATURES = 0x3b + ETHTOOL_SFECPARAM = 0x51 + ETHTOOL_SFLAGS = 0x26 + ETHTOOL_SGRO = 0x2c + ETHTOOL_SGSO = 0x24 + ETHTOOL_SLINKSETTINGS = 0x4d + ETHTOOL_SMSGLVL = 0x8 + ETHTOOL_SPAUSEPARAM = 0x13 + ETHTOOL_SPFLAGS = 0x28 + ETHTOOL_SRINGPARAM = 0x11 + ETHTOOL_SRSSH = 0x47 + ETHTOOL_SRXCLSRLDEL = 0x31 + ETHTOOL_SRXCLSRLINS = 0x32 + ETHTOOL_SRXCSUM = 0x15 + ETHTOOL_SRXFH = 0x2a + ETHTOOL_SRXFHINDIR = 0x39 + ETHTOOL_SRXNTUPLE = 0x35 + ETHTOOL_SSET = 0x2 + ETHTOOL_SSG = 0x19 + ETHTOOL_STSO = 0x1f + ETHTOOL_STUNABLE = 0x49 + ETHTOOL_STXCSUM = 0x17 + ETHTOOL_SUFO = 0x22 + ETHTOOL_SWOL = 0x6 + ETHTOOL_TEST = 0x1a ETH_P_1588 = 0x88f7 ETH_P_8021AD = 0x88a8 ETH_P_8021AH = 0x88e7 @@ -989,6 +1109,7 @@ const ( IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 IPV6_DSTOPTS = 0x3b + IPV6_FLOW = 0x11 IPV6_FREEBIND = 0x4e IPV6_HDRINCL = 0x24 IPV6_HOPLIMIT = 0x34 @@ -1038,6 +1159,7 @@ const ( IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 IPV6_UNICAST_IF = 0x4c + IPV6_USER_FLOW = 0xe IPV6_V6ONLY = 0x1a IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 @@ -1094,6 +1216,7 @@ const ( IP_TTL = 0x2 IP_UNBLOCK_SOURCE = 0x25 IP_UNICAST_IF = 0x32 + IP_USER_FLOW = 0xd IP_XFRM_POLICY = 0x11 ISOFS_SUPER_MAGIC = 0x9660 ISTRIP = 0x20 @@ -1331,6 +1454,7 @@ const ( MS_NOREMOTELOCK = 0x8000000 MS_NOSEC = 0x10000000 MS_NOSUID = 0x2 + MS_NOSYMFOLLOW = 0x100 MS_NOUSER = -0x80000000 MS_POSIXACL = 0x10000 MS_PRIVATE = 0x40000 @@ -1572,7 +1696,7 @@ const ( PERF_MEM_REMOTE_REMOTE = 0x1 PERF_MEM_REMOTE_SHIFT = 0x25 PERF_MEM_SNOOPX_FWD = 0x1 - PERF_MEM_SNOOPX_SHIFT = 0x25 + PERF_MEM_SNOOPX_SHIFT = 0x26 PERF_MEM_SNOOP_HIT = 0x4 PERF_MEM_SNOOP_HITM = 0x10 PERF_MEM_SNOOP_MISS = 0x8 @@ -1672,6 +1796,13 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_MTE_TAG_MASK = 0x7fff8 + PR_MTE_TAG_SHIFT = 0x3 + PR_MTE_TCF_ASYNC = 0x4 + PR_MTE_TCF_MASK = 0x6 + PR_MTE_TCF_NONE = 0x0 + PR_MTE_TCF_SHIFT = 0x1 + PR_MTE_TCF_SYNC = 0x2 PR_PAC_APDAKEY = 0x4 PR_PAC_APDBKEY = 0x8 PR_PAC_APGAKEY = 0x10 @@ -2206,7 +2337,7 @@ const ( STATX_ATTR_APPEND = 0x20 STATX_ATTR_AUTOMOUNT = 0x1000 STATX_ATTR_COMPRESSED = 0x4 - STATX_ATTR_DAX = 0x2000 + STATX_ATTR_DAX = 0x200000 STATX_ATTR_ENCRYPTED = 0x800 STATX_ATTR_IMMUTABLE = 0x10 STATX_ATTR_MOUNT_ROOT = 0x2000 @@ -2325,6 +2456,8 @@ const ( TCP_TX_DELAY = 0x25 TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 + TCP_V4_FLOW = 0x1 + TCP_V6_FLOW = 0x5 TCP_WINDOW_CLAMP = 0xa TCP_ZEROCOPY_RECEIVE = 0x23 TFD_TIMER_ABSTIME = 0x1 @@ -2390,6 +2523,7 @@ const ( TIPC_NODE_STATE = 0x0 TIPC_OK = 0x0 TIPC_PUBLISHED = 0x1 + TIPC_REKEYING_NOW = 0xffffffff TIPC_RESERVED_TYPES = 0x40 TIPC_RETDATA = 0x2 TIPC_SERVICE_ADDR = 0x2 @@ -2450,6 +2584,7 @@ const ( VM_SOCKETS_INVALID_VERSION = 0xffffffff VQUIT = 0x1 VT0 = 0x0 + WAKE_MAGIC = 0x20 WALL = 0x40000000 WCLONE = 0x80000000 WCONTINUED = 0x8 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index dd282c08b..336e0b326 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -4,7 +4,7 @@ // +build 386,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 82fc93c7b..961507e93 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -4,7 +4,7 @@ // +build amd64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index fe7094f27..a65576db7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -4,7 +4,7 @@ // +build arm,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 3b6cc5880..cf075caa8 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -4,7 +4,7 @@ // +build arm64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/_const.go package unix @@ -196,6 +196,8 @@ const ( PPPIOCXFERUNIT = 0x744e PROT_BTI = 0x10 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_PEEKMTETAGS = 0x21 + PTRACE_POKEMTETAGS = 0x22 PTRACE_SYSEMU = 0x1f PTRACE_SYSEMU_SINGLESTEP = 0x20 RLIMIT_AS = 0x9 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index ce3d9ae15..efe90deea 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -4,7 +4,7 @@ // +build mips,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 7a85215ce..8b0e8911d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -4,7 +4,7 @@ // +build mips64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 07d4cc1bd..e9430cd1a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -4,7 +4,7 @@ // +build mips64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index d4842ba1c..61e4f5db6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -4,7 +4,7 @@ // +build mipsle,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 941e20dac..973ad9346 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -4,7 +4,7 @@ // +build ppc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 63d3bc566..70a7406ba 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -4,7 +4,7 @@ // +build ppc64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 490bee1ab..b1bf7997c 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -4,7 +4,7 @@ // +build riscv64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 467b8218e..7053d10ba 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -4,7 +4,7 @@ // +build s390x,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 79fbafbcf..137cfe796 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -4,7 +4,7 @@ // +build sparc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/_const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go index e263fbdb8..c8c142c59 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go @@ -24,7 +24,6 @@ func closedir(dir uintptr) (err error) { func libc_closedir_trampoline() -//go:linkname libc_closedir libc_closedir //go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -37,5 +36,4 @@ func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { func libc_readdir_r_trampoline() -//go:linkname libc_readdir_r libc_readdir_r //go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go index 6eb457983..387718348 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go @@ -25,7 +25,6 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { func libc_getgroups_trampoline() -//go:linkname libc_getgroups libc_getgroups //go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -40,7 +39,6 @@ func setgroups(ngid int, gid *_Gid_t) (err error) { func libc_setgroups_trampoline() -//go:linkname libc_setgroups libc_setgroups //go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -56,7 +54,6 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err func libc_wait4_trampoline() -//go:linkname libc_wait4 libc_wait4 //go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -72,7 +69,6 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { func libc_accept_trampoline() -//go:linkname libc_accept libc_accept //go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -87,7 +83,6 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_bind_trampoline() -//go:linkname libc_bind libc_bind //go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -102,7 +97,6 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_connect_trampoline() -//go:linkname libc_connect libc_connect //go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -118,7 +112,6 @@ func socket(domain int, typ int, proto int) (fd int, err error) { func libc_socket_trampoline() -//go:linkname libc_socket libc_socket //go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -133,7 +126,6 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen func libc_getsockopt_trampoline() -//go:linkname libc_getsockopt libc_getsockopt //go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -148,7 +140,6 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) func libc_setsockopt_trampoline() -//go:linkname libc_setsockopt libc_setsockopt //go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -163,7 +154,6 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getpeername_trampoline() -//go:linkname libc_getpeername libc_getpeername //go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -178,7 +168,6 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getsockname_trampoline() -//go:linkname libc_getsockname libc_getsockname //go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -193,7 +182,6 @@ func Shutdown(s int, how int) (err error) { func libc_shutdown_trampoline() -//go:linkname libc_shutdown libc_shutdown //go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -208,7 +196,6 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { func libc_socketpair_trampoline() -//go:linkname libc_socketpair libc_socketpair //go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -230,7 +217,6 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl func libc_recvfrom_trampoline() -//go:linkname libc_recvfrom libc_recvfrom //go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -251,7 +237,6 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( func libc_sendto_trampoline() -//go:linkname libc_sendto libc_sendto //go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -267,7 +252,6 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_recvmsg_trampoline() -//go:linkname libc_recvmsg libc_recvmsg //go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -283,7 +267,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_sendmsg_trampoline() -//go:linkname libc_sendmsg libc_sendmsg //go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -299,7 +282,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne func libc_kevent_trampoline() -//go:linkname libc_kevent libc_kevent //go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -319,7 +301,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) { func libc_utimes_trampoline() -//go:linkname libc_utimes libc_utimes //go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -334,7 +315,6 @@ func futimes(fd int, timeval *[2]Timeval) (err error) { func libc_futimes_trampoline() -//go:linkname libc_futimes libc_futimes //go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -350,7 +330,6 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { func libc_poll_trampoline() -//go:linkname libc_poll libc_poll //go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -371,7 +350,6 @@ func Madvise(b []byte, behav int) (err error) { func libc_madvise_trampoline() -//go:linkname libc_madvise libc_madvise //go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -392,7 +370,6 @@ func Mlock(b []byte) (err error) { func libc_mlock_trampoline() -//go:linkname libc_mlock libc_mlock //go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -407,7 +384,6 @@ func Mlockall(flags int) (err error) { func libc_mlockall_trampoline() -//go:linkname libc_mlockall libc_mlockall //go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -428,7 +404,6 @@ func Mprotect(b []byte, prot int) (err error) { func libc_mprotect_trampoline() -//go:linkname libc_mprotect libc_mprotect //go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -449,7 +424,6 @@ func Msync(b []byte, flags int) (err error) { func libc_msync_trampoline() -//go:linkname libc_msync libc_msync //go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -470,7 +444,6 @@ func Munlock(b []byte) (err error) { func libc_munlock_trampoline() -//go:linkname libc_munlock libc_munlock //go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -485,15 +458,12 @@ func Munlockall() (err error) { func libc_munlockall_trampoline() -//go:linkname libc_munlockall libc_munlockall //go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe() (r int, w int, err error) { - r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0) - r = int(r0) - w = int(r1) +func pipe(p *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { err = errnoErr(e1) } @@ -502,7 +472,6 @@ func pipe() (r int, w int, err error) { func libc_pipe_trampoline() -//go:linkname libc_pipe libc_pipe //go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -528,7 +497,6 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o func libc_getxattr_trampoline() -//go:linkname libc_getxattr libc_getxattr //go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -549,7 +517,6 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio func libc_fgetxattr_trampoline() -//go:linkname libc_fgetxattr libc_fgetxattr //go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -574,7 +541,6 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o func libc_setxattr_trampoline() -//go:linkname libc_setxattr libc_setxattr //go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -594,7 +560,6 @@ func fsetxattr(fd int, attr string, data *byte, size int, position uint32, optio func libc_fsetxattr_trampoline() -//go:linkname libc_fsetxattr libc_fsetxattr //go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -619,7 +584,6 @@ func removexattr(path string, attr string, options int) (err error) { func libc_removexattr_trampoline() -//go:linkname libc_removexattr libc_removexattr //go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -639,7 +603,6 @@ func fremovexattr(fd int, attr string, options int) (err error) { func libc_fremovexattr_trampoline() -//go:linkname libc_fremovexattr libc_fremovexattr //go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -660,7 +623,6 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro func libc_listxattr_trampoline() -//go:linkname libc_listxattr libc_listxattr //go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -676,7 +638,6 @@ func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { func libc_flistxattr_trampoline() -//go:linkname libc_flistxattr libc_flistxattr //go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -691,7 +652,6 @@ func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintp func libc_setattrlist_trampoline() -//go:linkname libc_setattrlist libc_setattrlist //go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -707,7 +667,6 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { func libc_fcntl_trampoline() -//go:linkname libc_fcntl libc_fcntl //go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -722,7 +681,6 @@ func kill(pid int, signum int, posix int) (err error) { func libc_kill_trampoline() -//go:linkname libc_kill libc_kill //go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -737,7 +695,6 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { func libc_ioctl_trampoline() -//go:linkname libc_ioctl libc_ioctl //go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -758,7 +715,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) func libc_sysctl_trampoline() -//go:linkname libc_sysctl libc_sysctl //go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -773,7 +729,6 @@ func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer func libc_sendfile_trampoline() -//go:linkname libc_sendfile libc_sendfile //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -793,7 +748,6 @@ func Access(path string, mode uint32) (err error) { func libc_access_trampoline() -//go:linkname libc_access libc_access //go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -808,7 +762,6 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { func libc_adjtime_trampoline() -//go:linkname libc_adjtime libc_adjtime //go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -828,7 +781,6 @@ func Chdir(path string) (err error) { func libc_chdir_trampoline() -//go:linkname libc_chdir libc_chdir //go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -848,7 +800,6 @@ func Chflags(path string, flags int) (err error) { func libc_chflags_trampoline() -//go:linkname libc_chflags libc_chflags //go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -868,7 +819,6 @@ func Chmod(path string, mode uint32) (err error) { func libc_chmod_trampoline() -//go:linkname libc_chmod libc_chmod //go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -888,7 +838,6 @@ func Chown(path string, uid int, gid int) (err error) { func libc_chown_trampoline() -//go:linkname libc_chown libc_chown //go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -908,7 +857,6 @@ func Chroot(path string) (err error) { func libc_chroot_trampoline() -//go:linkname libc_chroot libc_chroot //go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -923,7 +871,6 @@ func ClockGettime(clockid int32, time *Timespec) (err error) { func libc_clock_gettime_trampoline() -//go:linkname libc_clock_gettime libc_clock_gettime //go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -938,7 +885,6 @@ func Close(fd int) (err error) { func libc_close_trampoline() -//go:linkname libc_close libc_close //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -963,7 +909,6 @@ func Clonefile(src string, dst string, flags int) (err error) { func libc_clonefile_trampoline() -//go:linkname libc_clonefile libc_clonefile //go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -988,7 +933,6 @@ func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) func libc_clonefileat_trampoline() -//go:linkname libc_clonefileat libc_clonefileat //go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1004,7 +948,6 @@ func Dup(fd int) (nfd int, err error) { func libc_dup_trampoline() -//go:linkname libc_dup libc_dup //go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1019,7 +962,6 @@ func Dup2(from int, to int) (err error) { func libc_dup2_trampoline() -//go:linkname libc_dup2 libc_dup2 //go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1044,7 +986,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) { func libc_exchangedata_trampoline() -//go:linkname libc_exchangedata libc_exchangedata //go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1056,7 +997,6 @@ func Exit(code int) { func libc_exit_trampoline() -//go:linkname libc_exit libc_exit //go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1076,7 +1016,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_faccessat_trampoline() -//go:linkname libc_faccessat libc_faccessat //go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1091,7 +1030,6 @@ func Fchdir(fd int) (err error) { func libc_fchdir_trampoline() -//go:linkname libc_fchdir libc_fchdir //go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1106,7 +1044,6 @@ func Fchflags(fd int, flags int) (err error) { func libc_fchflags_trampoline() -//go:linkname libc_fchflags libc_fchflags //go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1121,7 +1058,6 @@ func Fchmod(fd int, mode uint32) (err error) { func libc_fchmod_trampoline() -//go:linkname libc_fchmod libc_fchmod //go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1141,7 +1077,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_fchmodat_trampoline() -//go:linkname libc_fchmodat libc_fchmodat //go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1156,7 +1091,6 @@ func Fchown(fd int, uid int, gid int) (err error) { func libc_fchown_trampoline() -//go:linkname libc_fchown libc_fchown //go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1176,7 +1110,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { func libc_fchownat_trampoline() -//go:linkname libc_fchownat libc_fchownat //go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1196,7 +1129,6 @@ func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) func libc_fclonefileat_trampoline() -//go:linkname libc_fclonefileat libc_fclonefileat //go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1211,7 +1143,6 @@ func Flock(fd int, how int) (err error) { func libc_flock_trampoline() -//go:linkname libc_flock libc_flock //go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1227,7 +1158,6 @@ func Fpathconf(fd int, name int) (val int, err error) { func libc_fpathconf_trampoline() -//go:linkname libc_fpathconf libc_fpathconf //go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1242,7 +1172,6 @@ func Fsync(fd int) (err error) { func libc_fsync_trampoline() -//go:linkname libc_fsync libc_fsync //go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1257,7 +1186,6 @@ func Ftruncate(fd int, length int64) (err error) { func libc_ftruncate_trampoline() -//go:linkname libc_ftruncate libc_ftruncate //go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1279,7 +1207,6 @@ func Getcwd(buf []byte) (n int, err error) { func libc_getcwd_trampoline() -//go:linkname libc_getcwd libc_getcwd //go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1292,7 +1219,6 @@ func Getdtablesize() (size int) { func libc_getdtablesize_trampoline() -//go:linkname libc_getdtablesize libc_getdtablesize //go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1305,7 +1231,6 @@ func Getegid() (egid int) { func libc_getegid_trampoline() -//go:linkname libc_getegid libc_getegid //go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1318,7 +1243,6 @@ func Geteuid() (uid int) { func libc_geteuid_trampoline() -//go:linkname libc_geteuid libc_geteuid //go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1331,7 +1255,6 @@ func Getgid() (gid int) { func libc_getgid_trampoline() -//go:linkname libc_getgid libc_getgid //go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1347,7 +1270,6 @@ func Getpgid(pid int) (pgid int, err error) { func libc_getpgid_trampoline() -//go:linkname libc_getpgid libc_getpgid //go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1360,7 +1282,6 @@ func Getpgrp() (pgrp int) { func libc_getpgrp_trampoline() -//go:linkname libc_getpgrp libc_getpgrp //go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1373,7 +1294,6 @@ func Getpid() (pid int) { func libc_getpid_trampoline() -//go:linkname libc_getpid libc_getpid //go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1386,7 +1306,6 @@ func Getppid() (ppid int) { func libc_getppid_trampoline() -//go:linkname libc_getppid libc_getppid //go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1402,7 +1321,6 @@ func Getpriority(which int, who int) (prio int, err error) { func libc_getpriority_trampoline() -//go:linkname libc_getpriority libc_getpriority //go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1417,7 +1335,6 @@ func Getrlimit(which int, lim *Rlimit) (err error) { func libc_getrlimit_trampoline() -//go:linkname libc_getrlimit libc_getrlimit //go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1432,7 +1349,6 @@ func Getrusage(who int, rusage *Rusage) (err error) { func libc_getrusage_trampoline() -//go:linkname libc_getrusage libc_getrusage //go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1448,7 +1364,6 @@ func Getsid(pid int) (sid int, err error) { func libc_getsid_trampoline() -//go:linkname libc_getsid libc_getsid //go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1463,7 +1378,6 @@ func Gettimeofday(tp *Timeval) (err error) { func libc_gettimeofday_trampoline() -//go:linkname libc_gettimeofday libc_gettimeofday //go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1476,7 +1390,6 @@ func Getuid() (uid int) { func libc_getuid_trampoline() -//go:linkname libc_getuid libc_getuid //go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1489,7 +1402,6 @@ func Issetugid() (tainted bool) { func libc_issetugid_trampoline() -//go:linkname libc_issetugid libc_issetugid //go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1505,7 +1417,6 @@ func Kqueue() (fd int, err error) { func libc_kqueue_trampoline() -//go:linkname libc_kqueue libc_kqueue //go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1525,7 +1436,6 @@ func Lchown(path string, uid int, gid int) (err error) { func libc_lchown_trampoline() -//go:linkname libc_lchown libc_lchown //go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1550,7 +1460,6 @@ func Link(path string, link string) (err error) { func libc_link_trampoline() -//go:linkname libc_link libc_link //go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1575,7 +1484,6 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er func libc_linkat_trampoline() -//go:linkname libc_linkat libc_linkat //go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1590,7 +1498,6 @@ func Listen(s int, backlog int) (err error) { func libc_listen_trampoline() -//go:linkname libc_listen libc_listen //go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1610,7 +1517,6 @@ func Mkdir(path string, mode uint32) (err error) { func libc_mkdir_trampoline() -//go:linkname libc_mkdir libc_mkdir //go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1630,7 +1536,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { func libc_mkdirat_trampoline() -//go:linkname libc_mkdirat libc_mkdirat //go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1650,7 +1555,6 @@ func Mkfifo(path string, mode uint32) (err error) { func libc_mkfifo_trampoline() -//go:linkname libc_mkfifo libc_mkfifo //go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1670,7 +1574,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { func libc_mknod_trampoline() -//go:linkname libc_mknod libc_mknod //go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1691,7 +1594,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { func libc_open_trampoline() -//go:linkname libc_open libc_open //go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1712,7 +1614,6 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { func libc_openat_trampoline() -//go:linkname libc_openat libc_openat //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1733,7 +1634,6 @@ func Pathconf(path string, name int) (val int, err error) { func libc_pathconf_trampoline() -//go:linkname libc_pathconf libc_pathconf //go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1755,7 +1655,6 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { func libc_pread_trampoline() -//go:linkname libc_pread libc_pread //go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1777,7 +1676,6 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { func libc_pwrite_trampoline() -//go:linkname libc_pwrite libc_pwrite //go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1799,7 +1697,6 @@ func read(fd int, p []byte) (n int, err error) { func libc_read_trampoline() -//go:linkname libc_read libc_read //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1826,7 +1723,6 @@ func Readlink(path string, buf []byte) (n int, err error) { func libc_readlink_trampoline() -//go:linkname libc_readlink libc_readlink //go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1853,7 +1749,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { func libc_readlinkat_trampoline() -//go:linkname libc_readlinkat libc_readlinkat //go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1878,7 +1773,6 @@ func Rename(from string, to string) (err error) { func libc_rename_trampoline() -//go:linkname libc_rename libc_rename //go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1903,7 +1797,6 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { func libc_renameat_trampoline() -//go:linkname libc_renameat libc_renameat //go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1923,7 +1816,6 @@ func Revoke(path string) (err error) { func libc_revoke_trampoline() -//go:linkname libc_revoke libc_revoke //go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1943,7 +1835,6 @@ func Rmdir(path string) (err error) { func libc_rmdir_trampoline() -//go:linkname libc_rmdir libc_rmdir //go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1959,7 +1850,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { func libc_lseek_trampoline() -//go:linkname libc_lseek libc_lseek //go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1975,7 +1865,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err func libc_select_trampoline() -//go:linkname libc_select libc_select //go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1990,7 +1879,6 @@ func Setegid(egid int) (err error) { func libc_setegid_trampoline() -//go:linkname libc_setegid libc_setegid //go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2005,7 +1893,6 @@ func Seteuid(euid int) (err error) { func libc_seteuid_trampoline() -//go:linkname libc_seteuid libc_seteuid //go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2020,7 +1907,6 @@ func Setgid(gid int) (err error) { func libc_setgid_trampoline() -//go:linkname libc_setgid libc_setgid //go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2040,7 +1926,6 @@ func Setlogin(name string) (err error) { func libc_setlogin_trampoline() -//go:linkname libc_setlogin libc_setlogin //go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2055,7 +1940,6 @@ func Setpgid(pid int, pgid int) (err error) { func libc_setpgid_trampoline() -//go:linkname libc_setpgid libc_setpgid //go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2070,7 +1954,6 @@ func Setpriority(which int, who int, prio int) (err error) { func libc_setpriority_trampoline() -//go:linkname libc_setpriority libc_setpriority //go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2085,7 +1968,6 @@ func Setprivexec(flag int) (err error) { func libc_setprivexec_trampoline() -//go:linkname libc_setprivexec libc_setprivexec //go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2100,7 +1982,6 @@ func Setregid(rgid int, egid int) (err error) { func libc_setregid_trampoline() -//go:linkname libc_setregid libc_setregid //go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2115,7 +1996,6 @@ func Setreuid(ruid int, euid int) (err error) { func libc_setreuid_trampoline() -//go:linkname libc_setreuid libc_setreuid //go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2130,7 +2010,6 @@ func Setrlimit(which int, lim *Rlimit) (err error) { func libc_setrlimit_trampoline() -//go:linkname libc_setrlimit libc_setrlimit //go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2146,7 +2025,6 @@ func Setsid() (pid int, err error) { func libc_setsid_trampoline() -//go:linkname libc_setsid libc_setsid //go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2161,7 +2039,6 @@ func Settimeofday(tp *Timeval) (err error) { func libc_settimeofday_trampoline() -//go:linkname libc_settimeofday libc_settimeofday //go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2176,7 +2053,6 @@ func Setuid(uid int) (err error) { func libc_setuid_trampoline() -//go:linkname libc_setuid libc_setuid //go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2201,7 +2077,6 @@ func Symlink(path string, link string) (err error) { func libc_symlink_trampoline() -//go:linkname libc_symlink libc_symlink //go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2226,7 +2101,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { func libc_symlinkat_trampoline() -//go:linkname libc_symlinkat libc_symlinkat //go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2241,7 +2115,6 @@ func Sync() (err error) { func libc_sync_trampoline() -//go:linkname libc_sync libc_sync //go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2261,7 +2134,6 @@ func Truncate(path string, length int64) (err error) { func libc_truncate_trampoline() -//go:linkname libc_truncate libc_truncate //go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2274,7 +2146,6 @@ func Umask(newmask int) (oldmask int) { func libc_umask_trampoline() -//go:linkname libc_umask libc_umask //go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2294,7 +2165,6 @@ func Undelete(path string) (err error) { func libc_undelete_trampoline() -//go:linkname libc_undelete libc_undelete //go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2314,7 +2184,6 @@ func Unlink(path string) (err error) { func libc_unlink_trampoline() -//go:linkname libc_unlink libc_unlink //go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2334,7 +2203,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { func libc_unlinkat_trampoline() -//go:linkname libc_unlinkat libc_unlinkat //go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2354,7 +2222,6 @@ func Unmount(path string, flags int) (err error) { func libc_unmount_trampoline() -//go:linkname libc_unmount libc_unmount //go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2376,7 +2243,6 @@ func write(fd int, p []byte) (n int, err error) { func libc_write_trampoline() -//go:linkname libc_write libc_write //go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2392,7 +2258,6 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( func libc_mmap_trampoline() -//go:linkname libc_mmap libc_mmap //go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2407,7 +2272,6 @@ func munmap(addr uintptr, length uintptr) (err error) { func libc_munmap_trampoline() -//go:linkname libc_munmap libc_munmap //go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2444,7 +2308,6 @@ func Fstat(fd int, stat *Stat_t) (err error) { func libc_fstat64_trampoline() -//go:linkname libc_fstat64 libc_fstat64 //go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2464,7 +2327,6 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { func libc_fstatat64_trampoline() -//go:linkname libc_fstatat64 libc_fstatat64 //go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2479,7 +2341,6 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) { func libc_fstatfs64_trampoline() -//go:linkname libc_fstatfs64 libc_fstatfs64 //go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2495,7 +2356,6 @@ func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { func libc_getfsstat64_trampoline() -//go:linkname libc_getfsstat64 libc_getfsstat64 //go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2515,12 +2375,11 @@ func Lstat(path string, stat *Stat_t) (err error) { func libc_lstat64_trampoline() -//go:linkname libc_lstat64 libc_lstat64 //go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { +func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { err = errnoErr(e1) @@ -2530,7 +2389,6 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { func libc_ptrace_trampoline() -//go:linkname libc_ptrace libc_ptrace //go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2550,7 +2408,6 @@ func Stat(path string, stat *Stat_t) (err error) { func libc_stat64_trampoline() -//go:linkname libc_stat64 libc_stat64 //go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2570,5 +2427,4 @@ func Statfs(path string, stat *Statfs_t) (err error) { func libc_statfs64_trampoline() -//go:linkname libc_statfs64 libc_statfs64 //go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go index 314042a9d..888262361 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go @@ -24,7 +24,6 @@ func closedir(dir uintptr) (err error) { func libc_closedir_trampoline() -//go:linkname libc_closedir libc_closedir //go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -37,5 +36,4 @@ func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { func libc_readdir_r_trampoline() -//go:linkname libc_readdir_r libc_readdir_r //go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 889c14059..508e5639b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -25,7 +25,6 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { func libc_getgroups_trampoline() -//go:linkname libc_getgroups libc_getgroups //go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -40,7 +39,6 @@ func setgroups(ngid int, gid *_Gid_t) (err error) { func libc_setgroups_trampoline() -//go:linkname libc_setgroups libc_setgroups //go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -56,7 +54,6 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err func libc_wait4_trampoline() -//go:linkname libc_wait4 libc_wait4 //go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -72,7 +69,6 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { func libc_accept_trampoline() -//go:linkname libc_accept libc_accept //go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -87,7 +83,6 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_bind_trampoline() -//go:linkname libc_bind libc_bind //go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -102,7 +97,6 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_connect_trampoline() -//go:linkname libc_connect libc_connect //go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -118,7 +112,6 @@ func socket(domain int, typ int, proto int) (fd int, err error) { func libc_socket_trampoline() -//go:linkname libc_socket libc_socket //go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -133,7 +126,6 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen func libc_getsockopt_trampoline() -//go:linkname libc_getsockopt libc_getsockopt //go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -148,7 +140,6 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) func libc_setsockopt_trampoline() -//go:linkname libc_setsockopt libc_setsockopt //go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -163,7 +154,6 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getpeername_trampoline() -//go:linkname libc_getpeername libc_getpeername //go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -178,7 +168,6 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getsockname_trampoline() -//go:linkname libc_getsockname libc_getsockname //go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -193,7 +182,6 @@ func Shutdown(s int, how int) (err error) { func libc_shutdown_trampoline() -//go:linkname libc_shutdown libc_shutdown //go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -208,7 +196,6 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { func libc_socketpair_trampoline() -//go:linkname libc_socketpair libc_socketpair //go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -230,7 +217,6 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl func libc_recvfrom_trampoline() -//go:linkname libc_recvfrom libc_recvfrom //go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -251,7 +237,6 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( func libc_sendto_trampoline() -//go:linkname libc_sendto libc_sendto //go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -267,7 +252,6 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_recvmsg_trampoline() -//go:linkname libc_recvmsg libc_recvmsg //go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -283,7 +267,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_sendmsg_trampoline() -//go:linkname libc_sendmsg libc_sendmsg //go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -299,7 +282,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne func libc_kevent_trampoline() -//go:linkname libc_kevent libc_kevent //go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -319,7 +301,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) { func libc_utimes_trampoline() -//go:linkname libc_utimes libc_utimes //go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -334,7 +315,6 @@ func futimes(fd int, timeval *[2]Timeval) (err error) { func libc_futimes_trampoline() -//go:linkname libc_futimes libc_futimes //go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -350,7 +330,6 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { func libc_poll_trampoline() -//go:linkname libc_poll libc_poll //go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -371,7 +350,6 @@ func Madvise(b []byte, behav int) (err error) { func libc_madvise_trampoline() -//go:linkname libc_madvise libc_madvise //go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -392,7 +370,6 @@ func Mlock(b []byte) (err error) { func libc_mlock_trampoline() -//go:linkname libc_mlock libc_mlock //go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -407,7 +384,6 @@ func Mlockall(flags int) (err error) { func libc_mlockall_trampoline() -//go:linkname libc_mlockall libc_mlockall //go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -428,7 +404,6 @@ func Mprotect(b []byte, prot int) (err error) { func libc_mprotect_trampoline() -//go:linkname libc_mprotect libc_mprotect //go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -449,7 +424,6 @@ func Msync(b []byte, flags int) (err error) { func libc_msync_trampoline() -//go:linkname libc_msync libc_msync //go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -470,7 +444,6 @@ func Munlock(b []byte) (err error) { func libc_munlock_trampoline() -//go:linkname libc_munlock libc_munlock //go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -485,15 +458,12 @@ func Munlockall() (err error) { func libc_munlockall_trampoline() -//go:linkname libc_munlockall libc_munlockall //go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe() (r int, w int, err error) { - r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0) - r = int(r0) - w = int(r1) +func pipe(p *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { err = errnoErr(e1) } @@ -502,7 +472,6 @@ func pipe() (r int, w int, err error) { func libc_pipe_trampoline() -//go:linkname libc_pipe libc_pipe //go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -528,7 +497,6 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o func libc_getxattr_trampoline() -//go:linkname libc_getxattr libc_getxattr //go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -549,7 +517,6 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio func libc_fgetxattr_trampoline() -//go:linkname libc_fgetxattr libc_fgetxattr //go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -574,7 +541,6 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o func libc_setxattr_trampoline() -//go:linkname libc_setxattr libc_setxattr //go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -594,7 +560,6 @@ func fsetxattr(fd int, attr string, data *byte, size int, position uint32, optio func libc_fsetxattr_trampoline() -//go:linkname libc_fsetxattr libc_fsetxattr //go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -619,7 +584,6 @@ func removexattr(path string, attr string, options int) (err error) { func libc_removexattr_trampoline() -//go:linkname libc_removexattr libc_removexattr //go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -639,7 +603,6 @@ func fremovexattr(fd int, attr string, options int) (err error) { func libc_fremovexattr_trampoline() -//go:linkname libc_fremovexattr libc_fremovexattr //go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -660,7 +623,6 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro func libc_listxattr_trampoline() -//go:linkname libc_listxattr libc_listxattr //go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -676,7 +638,6 @@ func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { func libc_flistxattr_trampoline() -//go:linkname libc_flistxattr libc_flistxattr //go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -691,7 +652,6 @@ func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintp func libc_setattrlist_trampoline() -//go:linkname libc_setattrlist libc_setattrlist //go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -707,7 +667,6 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { func libc_fcntl_trampoline() -//go:linkname libc_fcntl libc_fcntl //go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -722,7 +681,6 @@ func kill(pid int, signum int, posix int) (err error) { func libc_kill_trampoline() -//go:linkname libc_kill libc_kill //go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -737,7 +695,6 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { func libc_ioctl_trampoline() -//go:linkname libc_ioctl libc_ioctl //go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -758,7 +715,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) func libc_sysctl_trampoline() -//go:linkname libc_sysctl libc_sysctl //go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -773,7 +729,6 @@ func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer func libc_sendfile_trampoline() -//go:linkname libc_sendfile libc_sendfile //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -793,7 +748,6 @@ func Access(path string, mode uint32) (err error) { func libc_access_trampoline() -//go:linkname libc_access libc_access //go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -808,7 +762,6 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { func libc_adjtime_trampoline() -//go:linkname libc_adjtime libc_adjtime //go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -828,7 +781,6 @@ func Chdir(path string) (err error) { func libc_chdir_trampoline() -//go:linkname libc_chdir libc_chdir //go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -848,7 +800,6 @@ func Chflags(path string, flags int) (err error) { func libc_chflags_trampoline() -//go:linkname libc_chflags libc_chflags //go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -868,7 +819,6 @@ func Chmod(path string, mode uint32) (err error) { func libc_chmod_trampoline() -//go:linkname libc_chmod libc_chmod //go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -888,7 +838,6 @@ func Chown(path string, uid int, gid int) (err error) { func libc_chown_trampoline() -//go:linkname libc_chown libc_chown //go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -908,7 +857,6 @@ func Chroot(path string) (err error) { func libc_chroot_trampoline() -//go:linkname libc_chroot libc_chroot //go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -923,7 +871,6 @@ func ClockGettime(clockid int32, time *Timespec) (err error) { func libc_clock_gettime_trampoline() -//go:linkname libc_clock_gettime libc_clock_gettime //go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -938,7 +885,6 @@ func Close(fd int) (err error) { func libc_close_trampoline() -//go:linkname libc_close libc_close //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -963,7 +909,6 @@ func Clonefile(src string, dst string, flags int) (err error) { func libc_clonefile_trampoline() -//go:linkname libc_clonefile libc_clonefile //go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -988,7 +933,6 @@ func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) func libc_clonefileat_trampoline() -//go:linkname libc_clonefileat libc_clonefileat //go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1004,7 +948,6 @@ func Dup(fd int) (nfd int, err error) { func libc_dup_trampoline() -//go:linkname libc_dup libc_dup //go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1019,7 +962,6 @@ func Dup2(from int, to int) (err error) { func libc_dup2_trampoline() -//go:linkname libc_dup2 libc_dup2 //go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1044,7 +986,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) { func libc_exchangedata_trampoline() -//go:linkname libc_exchangedata libc_exchangedata //go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1056,7 +997,6 @@ func Exit(code int) { func libc_exit_trampoline() -//go:linkname libc_exit libc_exit //go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1076,7 +1016,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_faccessat_trampoline() -//go:linkname libc_faccessat libc_faccessat //go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1091,7 +1030,6 @@ func Fchdir(fd int) (err error) { func libc_fchdir_trampoline() -//go:linkname libc_fchdir libc_fchdir //go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1106,7 +1044,6 @@ func Fchflags(fd int, flags int) (err error) { func libc_fchflags_trampoline() -//go:linkname libc_fchflags libc_fchflags //go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1121,7 +1058,6 @@ func Fchmod(fd int, mode uint32) (err error) { func libc_fchmod_trampoline() -//go:linkname libc_fchmod libc_fchmod //go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1141,7 +1077,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_fchmodat_trampoline() -//go:linkname libc_fchmodat libc_fchmodat //go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1156,7 +1091,6 @@ func Fchown(fd int, uid int, gid int) (err error) { func libc_fchown_trampoline() -//go:linkname libc_fchown libc_fchown //go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1176,7 +1110,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { func libc_fchownat_trampoline() -//go:linkname libc_fchownat libc_fchownat //go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1196,7 +1129,6 @@ func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) func libc_fclonefileat_trampoline() -//go:linkname libc_fclonefileat libc_fclonefileat //go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1211,7 +1143,6 @@ func Flock(fd int, how int) (err error) { func libc_flock_trampoline() -//go:linkname libc_flock libc_flock //go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1227,7 +1158,6 @@ func Fpathconf(fd int, name int) (val int, err error) { func libc_fpathconf_trampoline() -//go:linkname libc_fpathconf libc_fpathconf //go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1242,7 +1172,6 @@ func Fsync(fd int) (err error) { func libc_fsync_trampoline() -//go:linkname libc_fsync libc_fsync //go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1257,7 +1186,6 @@ func Ftruncate(fd int, length int64) (err error) { func libc_ftruncate_trampoline() -//go:linkname libc_ftruncate libc_ftruncate //go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1279,7 +1207,6 @@ func Getcwd(buf []byte) (n int, err error) { func libc_getcwd_trampoline() -//go:linkname libc_getcwd libc_getcwd //go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1292,7 +1219,6 @@ func Getdtablesize() (size int) { func libc_getdtablesize_trampoline() -//go:linkname libc_getdtablesize libc_getdtablesize //go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1305,7 +1231,6 @@ func Getegid() (egid int) { func libc_getegid_trampoline() -//go:linkname libc_getegid libc_getegid //go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1318,7 +1243,6 @@ func Geteuid() (uid int) { func libc_geteuid_trampoline() -//go:linkname libc_geteuid libc_geteuid //go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1331,7 +1255,6 @@ func Getgid() (gid int) { func libc_getgid_trampoline() -//go:linkname libc_getgid libc_getgid //go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1347,7 +1270,6 @@ func Getpgid(pid int) (pgid int, err error) { func libc_getpgid_trampoline() -//go:linkname libc_getpgid libc_getpgid //go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1360,7 +1282,6 @@ func Getpgrp() (pgrp int) { func libc_getpgrp_trampoline() -//go:linkname libc_getpgrp libc_getpgrp //go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1373,7 +1294,6 @@ func Getpid() (pid int) { func libc_getpid_trampoline() -//go:linkname libc_getpid libc_getpid //go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1386,7 +1306,6 @@ func Getppid() (ppid int) { func libc_getppid_trampoline() -//go:linkname libc_getppid libc_getppid //go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1402,7 +1321,6 @@ func Getpriority(which int, who int) (prio int, err error) { func libc_getpriority_trampoline() -//go:linkname libc_getpriority libc_getpriority //go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1417,7 +1335,6 @@ func Getrlimit(which int, lim *Rlimit) (err error) { func libc_getrlimit_trampoline() -//go:linkname libc_getrlimit libc_getrlimit //go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1432,7 +1349,6 @@ func Getrusage(who int, rusage *Rusage) (err error) { func libc_getrusage_trampoline() -//go:linkname libc_getrusage libc_getrusage //go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1448,7 +1364,6 @@ func Getsid(pid int) (sid int, err error) { func libc_getsid_trampoline() -//go:linkname libc_getsid libc_getsid //go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1463,7 +1378,6 @@ func Gettimeofday(tp *Timeval) (err error) { func libc_gettimeofday_trampoline() -//go:linkname libc_gettimeofday libc_gettimeofday //go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1476,7 +1390,6 @@ func Getuid() (uid int) { func libc_getuid_trampoline() -//go:linkname libc_getuid libc_getuid //go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1489,7 +1402,6 @@ func Issetugid() (tainted bool) { func libc_issetugid_trampoline() -//go:linkname libc_issetugid libc_issetugid //go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1505,7 +1417,6 @@ func Kqueue() (fd int, err error) { func libc_kqueue_trampoline() -//go:linkname libc_kqueue libc_kqueue //go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1525,7 +1436,6 @@ func Lchown(path string, uid int, gid int) (err error) { func libc_lchown_trampoline() -//go:linkname libc_lchown libc_lchown //go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1550,7 +1460,6 @@ func Link(path string, link string) (err error) { func libc_link_trampoline() -//go:linkname libc_link libc_link //go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1575,7 +1484,6 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er func libc_linkat_trampoline() -//go:linkname libc_linkat libc_linkat //go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1590,7 +1498,6 @@ func Listen(s int, backlog int) (err error) { func libc_listen_trampoline() -//go:linkname libc_listen libc_listen //go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1610,7 +1517,6 @@ func Mkdir(path string, mode uint32) (err error) { func libc_mkdir_trampoline() -//go:linkname libc_mkdir libc_mkdir //go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1630,7 +1536,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { func libc_mkdirat_trampoline() -//go:linkname libc_mkdirat libc_mkdirat //go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1650,7 +1555,6 @@ func Mkfifo(path string, mode uint32) (err error) { func libc_mkfifo_trampoline() -//go:linkname libc_mkfifo libc_mkfifo //go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1670,7 +1574,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { func libc_mknod_trampoline() -//go:linkname libc_mknod libc_mknod //go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1691,7 +1594,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { func libc_open_trampoline() -//go:linkname libc_open libc_open //go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1712,7 +1614,6 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { func libc_openat_trampoline() -//go:linkname libc_openat libc_openat //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1733,7 +1634,6 @@ func Pathconf(path string, name int) (val int, err error) { func libc_pathconf_trampoline() -//go:linkname libc_pathconf libc_pathconf //go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1755,7 +1655,6 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { func libc_pread_trampoline() -//go:linkname libc_pread libc_pread //go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1777,7 +1676,6 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { func libc_pwrite_trampoline() -//go:linkname libc_pwrite libc_pwrite //go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1799,7 +1697,6 @@ func read(fd int, p []byte) (n int, err error) { func libc_read_trampoline() -//go:linkname libc_read libc_read //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1826,7 +1723,6 @@ func Readlink(path string, buf []byte) (n int, err error) { func libc_readlink_trampoline() -//go:linkname libc_readlink libc_readlink //go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1853,7 +1749,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { func libc_readlinkat_trampoline() -//go:linkname libc_readlinkat libc_readlinkat //go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1878,7 +1773,6 @@ func Rename(from string, to string) (err error) { func libc_rename_trampoline() -//go:linkname libc_rename libc_rename //go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1903,7 +1797,6 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { func libc_renameat_trampoline() -//go:linkname libc_renameat libc_renameat //go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1923,7 +1816,6 @@ func Revoke(path string) (err error) { func libc_revoke_trampoline() -//go:linkname libc_revoke libc_revoke //go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1943,7 +1835,6 @@ func Rmdir(path string) (err error) { func libc_rmdir_trampoline() -//go:linkname libc_rmdir libc_rmdir //go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1959,7 +1850,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { func libc_lseek_trampoline() -//go:linkname libc_lseek libc_lseek //go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1975,7 +1865,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err func libc_select_trampoline() -//go:linkname libc_select libc_select //go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1990,7 +1879,6 @@ func Setegid(egid int) (err error) { func libc_setegid_trampoline() -//go:linkname libc_setegid libc_setegid //go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2005,7 +1893,6 @@ func Seteuid(euid int) (err error) { func libc_seteuid_trampoline() -//go:linkname libc_seteuid libc_seteuid //go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2020,7 +1907,6 @@ func Setgid(gid int) (err error) { func libc_setgid_trampoline() -//go:linkname libc_setgid libc_setgid //go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2040,7 +1926,6 @@ func Setlogin(name string) (err error) { func libc_setlogin_trampoline() -//go:linkname libc_setlogin libc_setlogin //go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2055,7 +1940,6 @@ func Setpgid(pid int, pgid int) (err error) { func libc_setpgid_trampoline() -//go:linkname libc_setpgid libc_setpgid //go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2070,7 +1954,6 @@ func Setpriority(which int, who int, prio int) (err error) { func libc_setpriority_trampoline() -//go:linkname libc_setpriority libc_setpriority //go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2085,7 +1968,6 @@ func Setprivexec(flag int) (err error) { func libc_setprivexec_trampoline() -//go:linkname libc_setprivexec libc_setprivexec //go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2100,7 +1982,6 @@ func Setregid(rgid int, egid int) (err error) { func libc_setregid_trampoline() -//go:linkname libc_setregid libc_setregid //go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2115,7 +1996,6 @@ func Setreuid(ruid int, euid int) (err error) { func libc_setreuid_trampoline() -//go:linkname libc_setreuid libc_setreuid //go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2130,7 +2010,6 @@ func Setrlimit(which int, lim *Rlimit) (err error) { func libc_setrlimit_trampoline() -//go:linkname libc_setrlimit libc_setrlimit //go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2146,7 +2025,6 @@ func Setsid() (pid int, err error) { func libc_setsid_trampoline() -//go:linkname libc_setsid libc_setsid //go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2161,7 +2039,6 @@ func Settimeofday(tp *Timeval) (err error) { func libc_settimeofday_trampoline() -//go:linkname libc_settimeofday libc_settimeofday //go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2176,7 +2053,6 @@ func Setuid(uid int) (err error) { func libc_setuid_trampoline() -//go:linkname libc_setuid libc_setuid //go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2201,7 +2077,6 @@ func Symlink(path string, link string) (err error) { func libc_symlink_trampoline() -//go:linkname libc_symlink libc_symlink //go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2226,7 +2101,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { func libc_symlinkat_trampoline() -//go:linkname libc_symlinkat libc_symlinkat //go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2241,7 +2115,6 @@ func Sync() (err error) { func libc_sync_trampoline() -//go:linkname libc_sync libc_sync //go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2261,7 +2134,6 @@ func Truncate(path string, length int64) (err error) { func libc_truncate_trampoline() -//go:linkname libc_truncate libc_truncate //go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2274,7 +2146,6 @@ func Umask(newmask int) (oldmask int) { func libc_umask_trampoline() -//go:linkname libc_umask libc_umask //go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2294,7 +2165,6 @@ func Undelete(path string) (err error) { func libc_undelete_trampoline() -//go:linkname libc_undelete libc_undelete //go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2314,7 +2184,6 @@ func Unlink(path string) (err error) { func libc_unlink_trampoline() -//go:linkname libc_unlink libc_unlink //go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2334,7 +2203,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { func libc_unlinkat_trampoline() -//go:linkname libc_unlinkat libc_unlinkat //go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2354,7 +2222,6 @@ func Unmount(path string, flags int) (err error) { func libc_unmount_trampoline() -//go:linkname libc_unmount libc_unmount //go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2376,7 +2243,6 @@ func write(fd int, p []byte) (n int, err error) { func libc_write_trampoline() -//go:linkname libc_write libc_write //go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2392,7 +2258,6 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( func libc_mmap_trampoline() -//go:linkname libc_mmap libc_mmap //go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2407,7 +2272,6 @@ func munmap(addr uintptr, length uintptr) (err error) { func libc_munmap_trampoline() -//go:linkname libc_munmap libc_munmap //go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2444,7 +2308,6 @@ func Fstat(fd int, stat *Stat_t) (err error) { func libc_fstat64_trampoline() -//go:linkname libc_fstat64 libc_fstat64 //go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2464,7 +2327,6 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { func libc_fstatat64_trampoline() -//go:linkname libc_fstatat64 libc_fstatat64 //go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2479,7 +2341,6 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) { func libc_fstatfs64_trampoline() -//go:linkname libc_fstatfs64 libc_fstatfs64 //go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2495,7 +2356,6 @@ func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { func libc_getfsstat64_trampoline() -//go:linkname libc_getfsstat64 libc_getfsstat64 //go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2515,12 +2375,11 @@ func Lstat(path string, stat *Stat_t) (err error) { func libc_lstat64_trampoline() -//go:linkname libc_lstat64 libc_lstat64 //go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { +func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { err = errnoErr(e1) @@ -2530,7 +2389,6 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { func libc_ptrace_trampoline() -//go:linkname libc_ptrace libc_ptrace //go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2550,7 +2408,6 @@ func Stat(path string, stat *Stat_t) (err error) { func libc_stat64_trampoline() -//go:linkname libc_stat64 libc_stat64 //go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2570,5 +2427,4 @@ func Statfs(path string, stat *Statfs_t) (err error) { func libc_statfs64_trampoline() -//go:linkname libc_statfs64 libc_statfs64 //go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go index f519ce9af..de4738fff 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go @@ -24,7 +24,6 @@ func closedir(dir uintptr) (err error) { func libc_closedir_trampoline() -//go:linkname libc_closedir libc_closedir //go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -37,5 +36,4 @@ func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { func libc_readdir_r_trampoline() -//go:linkname libc_readdir_r libc_readdir_r //go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go index d6b5249c2..c0c771f40 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go @@ -25,7 +25,6 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { func libc_getgroups_trampoline() -//go:linkname libc_getgroups libc_getgroups //go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -40,7 +39,6 @@ func setgroups(ngid int, gid *_Gid_t) (err error) { func libc_setgroups_trampoline() -//go:linkname libc_setgroups libc_setgroups //go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -56,7 +54,6 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err func libc_wait4_trampoline() -//go:linkname libc_wait4 libc_wait4 //go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -72,7 +69,6 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { func libc_accept_trampoline() -//go:linkname libc_accept libc_accept //go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -87,7 +83,6 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_bind_trampoline() -//go:linkname libc_bind libc_bind //go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -102,7 +97,6 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_connect_trampoline() -//go:linkname libc_connect libc_connect //go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -118,7 +112,6 @@ func socket(domain int, typ int, proto int) (fd int, err error) { func libc_socket_trampoline() -//go:linkname libc_socket libc_socket //go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -133,7 +126,6 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen func libc_getsockopt_trampoline() -//go:linkname libc_getsockopt libc_getsockopt //go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -148,7 +140,6 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) func libc_setsockopt_trampoline() -//go:linkname libc_setsockopt libc_setsockopt //go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -163,7 +154,6 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getpeername_trampoline() -//go:linkname libc_getpeername libc_getpeername //go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -178,7 +168,6 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getsockname_trampoline() -//go:linkname libc_getsockname libc_getsockname //go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -193,7 +182,6 @@ func Shutdown(s int, how int) (err error) { func libc_shutdown_trampoline() -//go:linkname libc_shutdown libc_shutdown //go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -208,7 +196,6 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { func libc_socketpair_trampoline() -//go:linkname libc_socketpair libc_socketpair //go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -230,7 +217,6 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl func libc_recvfrom_trampoline() -//go:linkname libc_recvfrom libc_recvfrom //go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -251,7 +237,6 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( func libc_sendto_trampoline() -//go:linkname libc_sendto libc_sendto //go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -267,7 +252,6 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_recvmsg_trampoline() -//go:linkname libc_recvmsg libc_recvmsg //go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -283,7 +267,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_sendmsg_trampoline() -//go:linkname libc_sendmsg libc_sendmsg //go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -299,7 +282,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne func libc_kevent_trampoline() -//go:linkname libc_kevent libc_kevent //go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -319,7 +301,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) { func libc_utimes_trampoline() -//go:linkname libc_utimes libc_utimes //go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -334,7 +315,6 @@ func futimes(fd int, timeval *[2]Timeval) (err error) { func libc_futimes_trampoline() -//go:linkname libc_futimes libc_futimes //go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -350,7 +330,6 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { func libc_poll_trampoline() -//go:linkname libc_poll libc_poll //go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -371,7 +350,6 @@ func Madvise(b []byte, behav int) (err error) { func libc_madvise_trampoline() -//go:linkname libc_madvise libc_madvise //go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -392,7 +370,6 @@ func Mlock(b []byte) (err error) { func libc_mlock_trampoline() -//go:linkname libc_mlock libc_mlock //go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -407,7 +384,6 @@ func Mlockall(flags int) (err error) { func libc_mlockall_trampoline() -//go:linkname libc_mlockall libc_mlockall //go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -428,7 +404,6 @@ func Mprotect(b []byte, prot int) (err error) { func libc_mprotect_trampoline() -//go:linkname libc_mprotect libc_mprotect //go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -449,7 +424,6 @@ func Msync(b []byte, flags int) (err error) { func libc_msync_trampoline() -//go:linkname libc_msync libc_msync //go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -470,7 +444,6 @@ func Munlock(b []byte) (err error) { func libc_munlock_trampoline() -//go:linkname libc_munlock libc_munlock //go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -485,15 +458,12 @@ func Munlockall() (err error) { func libc_munlockall_trampoline() -//go:linkname libc_munlockall libc_munlockall //go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe() (r int, w int, err error) { - r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0) - r = int(r0) - w = int(r1) +func pipe(p *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { err = errnoErr(e1) } @@ -502,7 +472,6 @@ func pipe() (r int, w int, err error) { func libc_pipe_trampoline() -//go:linkname libc_pipe libc_pipe //go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -528,7 +497,6 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o func libc_getxattr_trampoline() -//go:linkname libc_getxattr libc_getxattr //go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -549,7 +517,6 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio func libc_fgetxattr_trampoline() -//go:linkname libc_fgetxattr libc_fgetxattr //go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -574,7 +541,6 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o func libc_setxattr_trampoline() -//go:linkname libc_setxattr libc_setxattr //go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -594,7 +560,6 @@ func fsetxattr(fd int, attr string, data *byte, size int, position uint32, optio func libc_fsetxattr_trampoline() -//go:linkname libc_fsetxattr libc_fsetxattr //go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -619,7 +584,6 @@ func removexattr(path string, attr string, options int) (err error) { func libc_removexattr_trampoline() -//go:linkname libc_removexattr libc_removexattr //go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -639,7 +603,6 @@ func fremovexattr(fd int, attr string, options int) (err error) { func libc_fremovexattr_trampoline() -//go:linkname libc_fremovexattr libc_fremovexattr //go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -660,7 +623,6 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro func libc_listxattr_trampoline() -//go:linkname libc_listxattr libc_listxattr //go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -676,7 +638,6 @@ func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { func libc_flistxattr_trampoline() -//go:linkname libc_flistxattr libc_flistxattr //go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -691,7 +652,6 @@ func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintp func libc_setattrlist_trampoline() -//go:linkname libc_setattrlist libc_setattrlist //go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -707,7 +667,6 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { func libc_fcntl_trampoline() -//go:linkname libc_fcntl libc_fcntl //go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -722,7 +681,6 @@ func kill(pid int, signum int, posix int) (err error) { func libc_kill_trampoline() -//go:linkname libc_kill libc_kill //go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -737,7 +695,6 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { func libc_ioctl_trampoline() -//go:linkname libc_ioctl libc_ioctl //go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -758,7 +715,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) func libc_sysctl_trampoline() -//go:linkname libc_sysctl libc_sysctl //go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -773,7 +729,6 @@ func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer func libc_sendfile_trampoline() -//go:linkname libc_sendfile libc_sendfile //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -793,7 +748,6 @@ func Access(path string, mode uint32) (err error) { func libc_access_trampoline() -//go:linkname libc_access libc_access //go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -808,7 +762,6 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { func libc_adjtime_trampoline() -//go:linkname libc_adjtime libc_adjtime //go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -828,7 +781,6 @@ func Chdir(path string) (err error) { func libc_chdir_trampoline() -//go:linkname libc_chdir libc_chdir //go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -848,7 +800,6 @@ func Chflags(path string, flags int) (err error) { func libc_chflags_trampoline() -//go:linkname libc_chflags libc_chflags //go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -868,7 +819,6 @@ func Chmod(path string, mode uint32) (err error) { func libc_chmod_trampoline() -//go:linkname libc_chmod libc_chmod //go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -888,7 +838,6 @@ func Chown(path string, uid int, gid int) (err error) { func libc_chown_trampoline() -//go:linkname libc_chown libc_chown //go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -908,7 +857,6 @@ func Chroot(path string) (err error) { func libc_chroot_trampoline() -//go:linkname libc_chroot libc_chroot //go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -923,7 +871,6 @@ func ClockGettime(clockid int32, time *Timespec) (err error) { func libc_clock_gettime_trampoline() -//go:linkname libc_clock_gettime libc_clock_gettime //go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -938,7 +885,6 @@ func Close(fd int) (err error) { func libc_close_trampoline() -//go:linkname libc_close libc_close //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -963,7 +909,6 @@ func Clonefile(src string, dst string, flags int) (err error) { func libc_clonefile_trampoline() -//go:linkname libc_clonefile libc_clonefile //go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -988,7 +933,6 @@ func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) func libc_clonefileat_trampoline() -//go:linkname libc_clonefileat libc_clonefileat //go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1004,7 +948,6 @@ func Dup(fd int) (nfd int, err error) { func libc_dup_trampoline() -//go:linkname libc_dup libc_dup //go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1019,7 +962,6 @@ func Dup2(from int, to int) (err error) { func libc_dup2_trampoline() -//go:linkname libc_dup2 libc_dup2 //go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1044,7 +986,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) { func libc_exchangedata_trampoline() -//go:linkname libc_exchangedata libc_exchangedata //go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1056,7 +997,6 @@ func Exit(code int) { func libc_exit_trampoline() -//go:linkname libc_exit libc_exit //go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1076,7 +1016,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_faccessat_trampoline() -//go:linkname libc_faccessat libc_faccessat //go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1091,7 +1030,6 @@ func Fchdir(fd int) (err error) { func libc_fchdir_trampoline() -//go:linkname libc_fchdir libc_fchdir //go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1106,7 +1044,6 @@ func Fchflags(fd int, flags int) (err error) { func libc_fchflags_trampoline() -//go:linkname libc_fchflags libc_fchflags //go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1121,7 +1058,6 @@ func Fchmod(fd int, mode uint32) (err error) { func libc_fchmod_trampoline() -//go:linkname libc_fchmod libc_fchmod //go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1141,7 +1077,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_fchmodat_trampoline() -//go:linkname libc_fchmodat libc_fchmodat //go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1156,7 +1091,6 @@ func Fchown(fd int, uid int, gid int) (err error) { func libc_fchown_trampoline() -//go:linkname libc_fchown libc_fchown //go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1176,7 +1110,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { func libc_fchownat_trampoline() -//go:linkname libc_fchownat libc_fchownat //go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1196,7 +1129,6 @@ func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) func libc_fclonefileat_trampoline() -//go:linkname libc_fclonefileat libc_fclonefileat //go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1211,7 +1143,6 @@ func Flock(fd int, how int) (err error) { func libc_flock_trampoline() -//go:linkname libc_flock libc_flock //go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1227,7 +1158,6 @@ func Fpathconf(fd int, name int) (val int, err error) { func libc_fpathconf_trampoline() -//go:linkname libc_fpathconf libc_fpathconf //go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1242,7 +1172,6 @@ func Fsync(fd int) (err error) { func libc_fsync_trampoline() -//go:linkname libc_fsync libc_fsync //go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1257,7 +1186,6 @@ func Ftruncate(fd int, length int64) (err error) { func libc_ftruncate_trampoline() -//go:linkname libc_ftruncate libc_ftruncate //go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1279,7 +1207,6 @@ func Getcwd(buf []byte) (n int, err error) { func libc_getcwd_trampoline() -//go:linkname libc_getcwd libc_getcwd //go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1292,7 +1219,6 @@ func Getdtablesize() (size int) { func libc_getdtablesize_trampoline() -//go:linkname libc_getdtablesize libc_getdtablesize //go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1305,7 +1231,6 @@ func Getegid() (egid int) { func libc_getegid_trampoline() -//go:linkname libc_getegid libc_getegid //go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1318,7 +1243,6 @@ func Geteuid() (uid int) { func libc_geteuid_trampoline() -//go:linkname libc_geteuid libc_geteuid //go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1331,7 +1255,6 @@ func Getgid() (gid int) { func libc_getgid_trampoline() -//go:linkname libc_getgid libc_getgid //go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1347,7 +1270,6 @@ func Getpgid(pid int) (pgid int, err error) { func libc_getpgid_trampoline() -//go:linkname libc_getpgid libc_getpgid //go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1360,7 +1282,6 @@ func Getpgrp() (pgrp int) { func libc_getpgrp_trampoline() -//go:linkname libc_getpgrp libc_getpgrp //go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1373,7 +1294,6 @@ func Getpid() (pid int) { func libc_getpid_trampoline() -//go:linkname libc_getpid libc_getpid //go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1386,7 +1306,6 @@ func Getppid() (ppid int) { func libc_getppid_trampoline() -//go:linkname libc_getppid libc_getppid //go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1402,7 +1321,6 @@ func Getpriority(which int, who int) (prio int, err error) { func libc_getpriority_trampoline() -//go:linkname libc_getpriority libc_getpriority //go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1417,7 +1335,6 @@ func Getrlimit(which int, lim *Rlimit) (err error) { func libc_getrlimit_trampoline() -//go:linkname libc_getrlimit libc_getrlimit //go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1432,7 +1349,6 @@ func Getrusage(who int, rusage *Rusage) (err error) { func libc_getrusage_trampoline() -//go:linkname libc_getrusage libc_getrusage //go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1448,7 +1364,6 @@ func Getsid(pid int) (sid int, err error) { func libc_getsid_trampoline() -//go:linkname libc_getsid libc_getsid //go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1463,7 +1378,6 @@ func Gettimeofday(tp *Timeval) (err error) { func libc_gettimeofday_trampoline() -//go:linkname libc_gettimeofday libc_gettimeofday //go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1476,7 +1390,6 @@ func Getuid() (uid int) { func libc_getuid_trampoline() -//go:linkname libc_getuid libc_getuid //go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1489,7 +1402,6 @@ func Issetugid() (tainted bool) { func libc_issetugid_trampoline() -//go:linkname libc_issetugid libc_issetugid //go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1505,7 +1417,6 @@ func Kqueue() (fd int, err error) { func libc_kqueue_trampoline() -//go:linkname libc_kqueue libc_kqueue //go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1525,7 +1436,6 @@ func Lchown(path string, uid int, gid int) (err error) { func libc_lchown_trampoline() -//go:linkname libc_lchown libc_lchown //go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1550,7 +1460,6 @@ func Link(path string, link string) (err error) { func libc_link_trampoline() -//go:linkname libc_link libc_link //go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1575,7 +1484,6 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er func libc_linkat_trampoline() -//go:linkname libc_linkat libc_linkat //go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1590,7 +1498,6 @@ func Listen(s int, backlog int) (err error) { func libc_listen_trampoline() -//go:linkname libc_listen libc_listen //go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1610,7 +1517,6 @@ func Mkdir(path string, mode uint32) (err error) { func libc_mkdir_trampoline() -//go:linkname libc_mkdir libc_mkdir //go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1630,7 +1536,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { func libc_mkdirat_trampoline() -//go:linkname libc_mkdirat libc_mkdirat //go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1650,7 +1555,6 @@ func Mkfifo(path string, mode uint32) (err error) { func libc_mkfifo_trampoline() -//go:linkname libc_mkfifo libc_mkfifo //go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1670,7 +1574,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { func libc_mknod_trampoline() -//go:linkname libc_mknod libc_mknod //go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1691,7 +1594,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { func libc_open_trampoline() -//go:linkname libc_open libc_open //go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1712,7 +1614,6 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { func libc_openat_trampoline() -//go:linkname libc_openat libc_openat //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1733,7 +1634,6 @@ func Pathconf(path string, name int) (val int, err error) { func libc_pathconf_trampoline() -//go:linkname libc_pathconf libc_pathconf //go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1755,7 +1655,6 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { func libc_pread_trampoline() -//go:linkname libc_pread libc_pread //go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1777,7 +1676,6 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { func libc_pwrite_trampoline() -//go:linkname libc_pwrite libc_pwrite //go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1799,7 +1697,6 @@ func read(fd int, p []byte) (n int, err error) { func libc_read_trampoline() -//go:linkname libc_read libc_read //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1826,7 +1723,6 @@ func Readlink(path string, buf []byte) (n int, err error) { func libc_readlink_trampoline() -//go:linkname libc_readlink libc_readlink //go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1853,7 +1749,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { func libc_readlinkat_trampoline() -//go:linkname libc_readlinkat libc_readlinkat //go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1878,7 +1773,6 @@ func Rename(from string, to string) (err error) { func libc_rename_trampoline() -//go:linkname libc_rename libc_rename //go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1903,7 +1797,6 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { func libc_renameat_trampoline() -//go:linkname libc_renameat libc_renameat //go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1923,7 +1816,6 @@ func Revoke(path string) (err error) { func libc_revoke_trampoline() -//go:linkname libc_revoke libc_revoke //go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1943,7 +1835,6 @@ func Rmdir(path string) (err error) { func libc_rmdir_trampoline() -//go:linkname libc_rmdir libc_rmdir //go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1959,7 +1850,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { func libc_lseek_trampoline() -//go:linkname libc_lseek libc_lseek //go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1975,7 +1865,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err func libc_select_trampoline() -//go:linkname libc_select libc_select //go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1990,7 +1879,6 @@ func Setegid(egid int) (err error) { func libc_setegid_trampoline() -//go:linkname libc_setegid libc_setegid //go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2005,7 +1893,6 @@ func Seteuid(euid int) (err error) { func libc_seteuid_trampoline() -//go:linkname libc_seteuid libc_seteuid //go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2020,7 +1907,6 @@ func Setgid(gid int) (err error) { func libc_setgid_trampoline() -//go:linkname libc_setgid libc_setgid //go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2040,7 +1926,6 @@ func Setlogin(name string) (err error) { func libc_setlogin_trampoline() -//go:linkname libc_setlogin libc_setlogin //go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2055,7 +1940,6 @@ func Setpgid(pid int, pgid int) (err error) { func libc_setpgid_trampoline() -//go:linkname libc_setpgid libc_setpgid //go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2070,7 +1954,6 @@ func Setpriority(which int, who int, prio int) (err error) { func libc_setpriority_trampoline() -//go:linkname libc_setpriority libc_setpriority //go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2085,7 +1968,6 @@ func Setprivexec(flag int) (err error) { func libc_setprivexec_trampoline() -//go:linkname libc_setprivexec libc_setprivexec //go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2100,7 +1982,6 @@ func Setregid(rgid int, egid int) (err error) { func libc_setregid_trampoline() -//go:linkname libc_setregid libc_setregid //go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2115,7 +1996,6 @@ func Setreuid(ruid int, euid int) (err error) { func libc_setreuid_trampoline() -//go:linkname libc_setreuid libc_setreuid //go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2130,7 +2010,6 @@ func Setrlimit(which int, lim *Rlimit) (err error) { func libc_setrlimit_trampoline() -//go:linkname libc_setrlimit libc_setrlimit //go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2146,7 +2025,6 @@ func Setsid() (pid int, err error) { func libc_setsid_trampoline() -//go:linkname libc_setsid libc_setsid //go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2161,7 +2039,6 @@ func Settimeofday(tp *Timeval) (err error) { func libc_settimeofday_trampoline() -//go:linkname libc_settimeofday libc_settimeofday //go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2176,7 +2053,6 @@ func Setuid(uid int) (err error) { func libc_setuid_trampoline() -//go:linkname libc_setuid libc_setuid //go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2201,7 +2077,6 @@ func Symlink(path string, link string) (err error) { func libc_symlink_trampoline() -//go:linkname libc_symlink libc_symlink //go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2226,7 +2101,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { func libc_symlinkat_trampoline() -//go:linkname libc_symlinkat libc_symlinkat //go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2241,7 +2115,6 @@ func Sync() (err error) { func libc_sync_trampoline() -//go:linkname libc_sync libc_sync //go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2261,7 +2134,6 @@ func Truncate(path string, length int64) (err error) { func libc_truncate_trampoline() -//go:linkname libc_truncate libc_truncate //go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2274,7 +2146,6 @@ func Umask(newmask int) (oldmask int) { func libc_umask_trampoline() -//go:linkname libc_umask libc_umask //go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2294,7 +2165,6 @@ func Undelete(path string) (err error) { func libc_undelete_trampoline() -//go:linkname libc_undelete libc_undelete //go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2314,7 +2184,6 @@ func Unlink(path string) (err error) { func libc_unlink_trampoline() -//go:linkname libc_unlink libc_unlink //go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2334,7 +2203,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { func libc_unlinkat_trampoline() -//go:linkname libc_unlinkat libc_unlinkat //go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2354,7 +2222,6 @@ func Unmount(path string, flags int) (err error) { func libc_unmount_trampoline() -//go:linkname libc_unmount libc_unmount //go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2376,7 +2243,6 @@ func write(fd int, p []byte) (n int, err error) { func libc_write_trampoline() -//go:linkname libc_write libc_write //go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2392,7 +2258,6 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( func libc_mmap_trampoline() -//go:linkname libc_mmap libc_mmap //go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2407,7 +2272,6 @@ func munmap(addr uintptr, length uintptr) (err error) { func libc_munmap_trampoline() -//go:linkname libc_munmap libc_munmap //go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2444,7 +2308,6 @@ func Fstat(fd int, stat *Stat_t) (err error) { func libc_fstat_trampoline() -//go:linkname libc_fstat libc_fstat //go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2464,7 +2327,6 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { func libc_fstatat_trampoline() -//go:linkname libc_fstatat libc_fstatat //go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2479,7 +2341,6 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) { func libc_fstatfs_trampoline() -//go:linkname libc_fstatfs libc_fstatfs //go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2495,7 +2356,6 @@ func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { func libc_getfsstat_trampoline() -//go:linkname libc_getfsstat libc_getfsstat //go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2515,7 +2375,6 @@ func Lstat(path string, stat *Stat_t) (err error) { func libc_lstat_trampoline() -//go:linkname libc_lstat libc_lstat //go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2535,7 +2394,6 @@ func Stat(path string, stat *Stat_t) (err error) { func libc_stat_trampoline() -//go:linkname libc_stat libc_stat //go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2555,5 +2413,4 @@ func Statfs(path string, stat *Statfs_t) (err error) { func libc_statfs_trampoline() -//go:linkname libc_statfs libc_statfs //go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go index d64e6c806..870eb37ab 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go @@ -24,7 +24,6 @@ func closedir(dir uintptr) (err error) { func libc_closedir_trampoline() -//go:linkname libc_closedir libc_closedir //go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -37,5 +36,4 @@ func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { func libc_readdir_r_trampoline() -//go:linkname libc_readdir_r libc_readdir_r //go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 23b65a530..9b01a79c4 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -25,7 +25,6 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { func libc_getgroups_trampoline() -//go:linkname libc_getgroups libc_getgroups //go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -40,7 +39,6 @@ func setgroups(ngid int, gid *_Gid_t) (err error) { func libc_setgroups_trampoline() -//go:linkname libc_setgroups libc_setgroups //go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -56,7 +54,6 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err func libc_wait4_trampoline() -//go:linkname libc_wait4 libc_wait4 //go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -72,7 +69,6 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { func libc_accept_trampoline() -//go:linkname libc_accept libc_accept //go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -87,7 +83,6 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_bind_trampoline() -//go:linkname libc_bind libc_bind //go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -102,7 +97,6 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { func libc_connect_trampoline() -//go:linkname libc_connect libc_connect //go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -118,7 +112,6 @@ func socket(domain int, typ int, proto int) (fd int, err error) { func libc_socket_trampoline() -//go:linkname libc_socket libc_socket //go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -133,7 +126,6 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen func libc_getsockopt_trampoline() -//go:linkname libc_getsockopt libc_getsockopt //go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -148,7 +140,6 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) func libc_setsockopt_trampoline() -//go:linkname libc_setsockopt libc_setsockopt //go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -163,7 +154,6 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getpeername_trampoline() -//go:linkname libc_getpeername libc_getpeername //go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -178,7 +168,6 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { func libc_getsockname_trampoline() -//go:linkname libc_getsockname libc_getsockname //go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -193,7 +182,6 @@ func Shutdown(s int, how int) (err error) { func libc_shutdown_trampoline() -//go:linkname libc_shutdown libc_shutdown //go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -208,7 +196,6 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { func libc_socketpair_trampoline() -//go:linkname libc_socketpair libc_socketpair //go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -230,7 +217,6 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl func libc_recvfrom_trampoline() -//go:linkname libc_recvfrom libc_recvfrom //go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -251,7 +237,6 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( func libc_sendto_trampoline() -//go:linkname libc_sendto libc_sendto //go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -267,7 +252,6 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_recvmsg_trampoline() -//go:linkname libc_recvmsg libc_recvmsg //go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -283,7 +267,6 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { func libc_sendmsg_trampoline() -//go:linkname libc_sendmsg libc_sendmsg //go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -299,7 +282,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne func libc_kevent_trampoline() -//go:linkname libc_kevent libc_kevent //go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -319,7 +301,6 @@ func utimes(path string, timeval *[2]Timeval) (err error) { func libc_utimes_trampoline() -//go:linkname libc_utimes libc_utimes //go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -334,7 +315,6 @@ func futimes(fd int, timeval *[2]Timeval) (err error) { func libc_futimes_trampoline() -//go:linkname libc_futimes libc_futimes //go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -350,7 +330,6 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { func libc_poll_trampoline() -//go:linkname libc_poll libc_poll //go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -371,7 +350,6 @@ func Madvise(b []byte, behav int) (err error) { func libc_madvise_trampoline() -//go:linkname libc_madvise libc_madvise //go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -392,7 +370,6 @@ func Mlock(b []byte) (err error) { func libc_mlock_trampoline() -//go:linkname libc_mlock libc_mlock //go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -407,7 +384,6 @@ func Mlockall(flags int) (err error) { func libc_mlockall_trampoline() -//go:linkname libc_mlockall libc_mlockall //go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -428,7 +404,6 @@ func Mprotect(b []byte, prot int) (err error) { func libc_mprotect_trampoline() -//go:linkname libc_mprotect libc_mprotect //go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -449,7 +424,6 @@ func Msync(b []byte, flags int) (err error) { func libc_msync_trampoline() -//go:linkname libc_msync libc_msync //go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -470,7 +444,6 @@ func Munlock(b []byte) (err error) { func libc_munlock_trampoline() -//go:linkname libc_munlock libc_munlock //go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -485,15 +458,12 @@ func Munlockall() (err error) { func libc_munlockall_trampoline() -//go:linkname libc_munlockall libc_munlockall //go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pipe() (r int, w int, err error) { - r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0) - r = int(r0) - w = int(r1) +func pipe(p *[2]int32) (err error) { + _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { err = errnoErr(e1) } @@ -502,7 +472,6 @@ func pipe() (r int, w int, err error) { func libc_pipe_trampoline() -//go:linkname libc_pipe libc_pipe //go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -528,7 +497,6 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o func libc_getxattr_trampoline() -//go:linkname libc_getxattr libc_getxattr //go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -549,7 +517,6 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio func libc_fgetxattr_trampoline() -//go:linkname libc_fgetxattr libc_fgetxattr //go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -574,7 +541,6 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o func libc_setxattr_trampoline() -//go:linkname libc_setxattr libc_setxattr //go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -594,7 +560,6 @@ func fsetxattr(fd int, attr string, data *byte, size int, position uint32, optio func libc_fsetxattr_trampoline() -//go:linkname libc_fsetxattr libc_fsetxattr //go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -619,7 +584,6 @@ func removexattr(path string, attr string, options int) (err error) { func libc_removexattr_trampoline() -//go:linkname libc_removexattr libc_removexattr //go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -639,7 +603,6 @@ func fremovexattr(fd int, attr string, options int) (err error) { func libc_fremovexattr_trampoline() -//go:linkname libc_fremovexattr libc_fremovexattr //go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -660,7 +623,6 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro func libc_listxattr_trampoline() -//go:linkname libc_listxattr libc_listxattr //go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -676,7 +638,6 @@ func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { func libc_flistxattr_trampoline() -//go:linkname libc_flistxattr libc_flistxattr //go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -691,7 +652,6 @@ func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintp func libc_setattrlist_trampoline() -//go:linkname libc_setattrlist libc_setattrlist //go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -707,7 +667,6 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { func libc_fcntl_trampoline() -//go:linkname libc_fcntl libc_fcntl //go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -722,7 +681,6 @@ func kill(pid int, signum int, posix int) (err error) { func libc_kill_trampoline() -//go:linkname libc_kill libc_kill //go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -737,7 +695,6 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { func libc_ioctl_trampoline() -//go:linkname libc_ioctl libc_ioctl //go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -758,7 +715,6 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) func libc_sysctl_trampoline() -//go:linkname libc_sysctl libc_sysctl //go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -773,7 +729,6 @@ func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer func libc_sendfile_trampoline() -//go:linkname libc_sendfile libc_sendfile //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -793,7 +748,6 @@ func Access(path string, mode uint32) (err error) { func libc_access_trampoline() -//go:linkname libc_access libc_access //go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -808,7 +762,6 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { func libc_adjtime_trampoline() -//go:linkname libc_adjtime libc_adjtime //go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -828,7 +781,6 @@ func Chdir(path string) (err error) { func libc_chdir_trampoline() -//go:linkname libc_chdir libc_chdir //go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -848,7 +800,6 @@ func Chflags(path string, flags int) (err error) { func libc_chflags_trampoline() -//go:linkname libc_chflags libc_chflags //go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -868,7 +819,6 @@ func Chmod(path string, mode uint32) (err error) { func libc_chmod_trampoline() -//go:linkname libc_chmod libc_chmod //go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -888,7 +838,6 @@ func Chown(path string, uid int, gid int) (err error) { func libc_chown_trampoline() -//go:linkname libc_chown libc_chown //go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -908,7 +857,6 @@ func Chroot(path string) (err error) { func libc_chroot_trampoline() -//go:linkname libc_chroot libc_chroot //go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -923,7 +871,6 @@ func ClockGettime(clockid int32, time *Timespec) (err error) { func libc_clock_gettime_trampoline() -//go:linkname libc_clock_gettime libc_clock_gettime //go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -938,7 +885,6 @@ func Close(fd int) (err error) { func libc_close_trampoline() -//go:linkname libc_close libc_close //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -963,7 +909,6 @@ func Clonefile(src string, dst string, flags int) (err error) { func libc_clonefile_trampoline() -//go:linkname libc_clonefile libc_clonefile //go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -988,7 +933,6 @@ func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) func libc_clonefileat_trampoline() -//go:linkname libc_clonefileat libc_clonefileat //go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1004,7 +948,6 @@ func Dup(fd int) (nfd int, err error) { func libc_dup_trampoline() -//go:linkname libc_dup libc_dup //go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1019,7 +962,6 @@ func Dup2(from int, to int) (err error) { func libc_dup2_trampoline() -//go:linkname libc_dup2 libc_dup2 //go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1044,7 +986,6 @@ func Exchangedata(path1 string, path2 string, options int) (err error) { func libc_exchangedata_trampoline() -//go:linkname libc_exchangedata libc_exchangedata //go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1056,7 +997,6 @@ func Exit(code int) { func libc_exit_trampoline() -//go:linkname libc_exit libc_exit //go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1076,7 +1016,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_faccessat_trampoline() -//go:linkname libc_faccessat libc_faccessat //go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1091,7 +1030,6 @@ func Fchdir(fd int) (err error) { func libc_fchdir_trampoline() -//go:linkname libc_fchdir libc_fchdir //go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1106,7 +1044,6 @@ func Fchflags(fd int, flags int) (err error) { func libc_fchflags_trampoline() -//go:linkname libc_fchflags libc_fchflags //go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1121,7 +1058,6 @@ func Fchmod(fd int, mode uint32) (err error) { func libc_fchmod_trampoline() -//go:linkname libc_fchmod libc_fchmod //go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1141,7 +1077,6 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { func libc_fchmodat_trampoline() -//go:linkname libc_fchmodat libc_fchmodat //go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1156,7 +1091,6 @@ func Fchown(fd int, uid int, gid int) (err error) { func libc_fchown_trampoline() -//go:linkname libc_fchown libc_fchown //go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1176,7 +1110,6 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { func libc_fchownat_trampoline() -//go:linkname libc_fchownat libc_fchownat //go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1196,7 +1129,6 @@ func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) func libc_fclonefileat_trampoline() -//go:linkname libc_fclonefileat libc_fclonefileat //go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1211,7 +1143,6 @@ func Flock(fd int, how int) (err error) { func libc_flock_trampoline() -//go:linkname libc_flock libc_flock //go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1227,7 +1158,6 @@ func Fpathconf(fd int, name int) (val int, err error) { func libc_fpathconf_trampoline() -//go:linkname libc_fpathconf libc_fpathconf //go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1242,7 +1172,6 @@ func Fsync(fd int) (err error) { func libc_fsync_trampoline() -//go:linkname libc_fsync libc_fsync //go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1257,7 +1186,6 @@ func Ftruncate(fd int, length int64) (err error) { func libc_ftruncate_trampoline() -//go:linkname libc_ftruncate libc_ftruncate //go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1279,7 +1207,6 @@ func Getcwd(buf []byte) (n int, err error) { func libc_getcwd_trampoline() -//go:linkname libc_getcwd libc_getcwd //go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1292,7 +1219,6 @@ func Getdtablesize() (size int) { func libc_getdtablesize_trampoline() -//go:linkname libc_getdtablesize libc_getdtablesize //go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1305,7 +1231,6 @@ func Getegid() (egid int) { func libc_getegid_trampoline() -//go:linkname libc_getegid libc_getegid //go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1318,7 +1243,6 @@ func Geteuid() (uid int) { func libc_geteuid_trampoline() -//go:linkname libc_geteuid libc_geteuid //go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1331,7 +1255,6 @@ func Getgid() (gid int) { func libc_getgid_trampoline() -//go:linkname libc_getgid libc_getgid //go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1347,7 +1270,6 @@ func Getpgid(pid int) (pgid int, err error) { func libc_getpgid_trampoline() -//go:linkname libc_getpgid libc_getpgid //go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1360,7 +1282,6 @@ func Getpgrp() (pgrp int) { func libc_getpgrp_trampoline() -//go:linkname libc_getpgrp libc_getpgrp //go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1373,7 +1294,6 @@ func Getpid() (pid int) { func libc_getpid_trampoline() -//go:linkname libc_getpid libc_getpid //go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1386,7 +1306,6 @@ func Getppid() (ppid int) { func libc_getppid_trampoline() -//go:linkname libc_getppid libc_getppid //go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1402,7 +1321,6 @@ func Getpriority(which int, who int) (prio int, err error) { func libc_getpriority_trampoline() -//go:linkname libc_getpriority libc_getpriority //go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1417,7 +1335,6 @@ func Getrlimit(which int, lim *Rlimit) (err error) { func libc_getrlimit_trampoline() -//go:linkname libc_getrlimit libc_getrlimit //go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1432,7 +1349,6 @@ func Getrusage(who int, rusage *Rusage) (err error) { func libc_getrusage_trampoline() -//go:linkname libc_getrusage libc_getrusage //go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1448,7 +1364,6 @@ func Getsid(pid int) (sid int, err error) { func libc_getsid_trampoline() -//go:linkname libc_getsid libc_getsid //go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1463,7 +1378,6 @@ func Gettimeofday(tp *Timeval) (err error) { func libc_gettimeofday_trampoline() -//go:linkname libc_gettimeofday libc_gettimeofday //go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1476,7 +1390,6 @@ func Getuid() (uid int) { func libc_getuid_trampoline() -//go:linkname libc_getuid libc_getuid //go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1489,7 +1402,6 @@ func Issetugid() (tainted bool) { func libc_issetugid_trampoline() -//go:linkname libc_issetugid libc_issetugid //go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1505,7 +1417,6 @@ func Kqueue() (fd int, err error) { func libc_kqueue_trampoline() -//go:linkname libc_kqueue libc_kqueue //go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1525,7 +1436,6 @@ func Lchown(path string, uid int, gid int) (err error) { func libc_lchown_trampoline() -//go:linkname libc_lchown libc_lchown //go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1550,7 +1460,6 @@ func Link(path string, link string) (err error) { func libc_link_trampoline() -//go:linkname libc_link libc_link //go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1575,7 +1484,6 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er func libc_linkat_trampoline() -//go:linkname libc_linkat libc_linkat //go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1590,7 +1498,6 @@ func Listen(s int, backlog int) (err error) { func libc_listen_trampoline() -//go:linkname libc_listen libc_listen //go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1610,7 +1517,6 @@ func Mkdir(path string, mode uint32) (err error) { func libc_mkdir_trampoline() -//go:linkname libc_mkdir libc_mkdir //go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1630,7 +1536,6 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { func libc_mkdirat_trampoline() -//go:linkname libc_mkdirat libc_mkdirat //go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1650,7 +1555,6 @@ func Mkfifo(path string, mode uint32) (err error) { func libc_mkfifo_trampoline() -//go:linkname libc_mkfifo libc_mkfifo //go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1670,7 +1574,6 @@ func Mknod(path string, mode uint32, dev int) (err error) { func libc_mknod_trampoline() -//go:linkname libc_mknod libc_mknod //go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1691,7 +1594,6 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { func libc_open_trampoline() -//go:linkname libc_open libc_open //go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1712,7 +1614,6 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { func libc_openat_trampoline() -//go:linkname libc_openat libc_openat //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1733,7 +1634,6 @@ func Pathconf(path string, name int) (val int, err error) { func libc_pathconf_trampoline() -//go:linkname libc_pathconf libc_pathconf //go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1755,7 +1655,6 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { func libc_pread_trampoline() -//go:linkname libc_pread libc_pread //go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1777,7 +1676,6 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { func libc_pwrite_trampoline() -//go:linkname libc_pwrite libc_pwrite //go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1799,7 +1697,6 @@ func read(fd int, p []byte) (n int, err error) { func libc_read_trampoline() -//go:linkname libc_read libc_read //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1826,7 +1723,6 @@ func Readlink(path string, buf []byte) (n int, err error) { func libc_readlink_trampoline() -//go:linkname libc_readlink libc_readlink //go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1853,7 +1749,6 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { func libc_readlinkat_trampoline() -//go:linkname libc_readlinkat libc_readlinkat //go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1878,7 +1773,6 @@ func Rename(from string, to string) (err error) { func libc_rename_trampoline() -//go:linkname libc_rename libc_rename //go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1903,7 +1797,6 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { func libc_renameat_trampoline() -//go:linkname libc_renameat libc_renameat //go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1923,7 +1816,6 @@ func Revoke(path string) (err error) { func libc_revoke_trampoline() -//go:linkname libc_revoke libc_revoke //go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1943,7 +1835,6 @@ func Rmdir(path string) (err error) { func libc_rmdir_trampoline() -//go:linkname libc_rmdir libc_rmdir //go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1959,7 +1850,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { func libc_lseek_trampoline() -//go:linkname libc_lseek libc_lseek //go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1975,7 +1865,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err func libc_select_trampoline() -//go:linkname libc_select libc_select //go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1990,7 +1879,6 @@ func Setegid(egid int) (err error) { func libc_setegid_trampoline() -//go:linkname libc_setegid libc_setegid //go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2005,7 +1893,6 @@ func Seteuid(euid int) (err error) { func libc_seteuid_trampoline() -//go:linkname libc_seteuid libc_seteuid //go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2020,7 +1907,6 @@ func Setgid(gid int) (err error) { func libc_setgid_trampoline() -//go:linkname libc_setgid libc_setgid //go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2040,7 +1926,6 @@ func Setlogin(name string) (err error) { func libc_setlogin_trampoline() -//go:linkname libc_setlogin libc_setlogin //go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2055,7 +1940,6 @@ func Setpgid(pid int, pgid int) (err error) { func libc_setpgid_trampoline() -//go:linkname libc_setpgid libc_setpgid //go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2070,7 +1954,6 @@ func Setpriority(which int, who int, prio int) (err error) { func libc_setpriority_trampoline() -//go:linkname libc_setpriority libc_setpriority //go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2085,7 +1968,6 @@ func Setprivexec(flag int) (err error) { func libc_setprivexec_trampoline() -//go:linkname libc_setprivexec libc_setprivexec //go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2100,7 +1982,6 @@ func Setregid(rgid int, egid int) (err error) { func libc_setregid_trampoline() -//go:linkname libc_setregid libc_setregid //go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2115,7 +1996,6 @@ func Setreuid(ruid int, euid int) (err error) { func libc_setreuid_trampoline() -//go:linkname libc_setreuid libc_setreuid //go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2130,7 +2010,6 @@ func Setrlimit(which int, lim *Rlimit) (err error) { func libc_setrlimit_trampoline() -//go:linkname libc_setrlimit libc_setrlimit //go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2146,7 +2025,6 @@ func Setsid() (pid int, err error) { func libc_setsid_trampoline() -//go:linkname libc_setsid libc_setsid //go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2161,7 +2039,6 @@ func Settimeofday(tp *Timeval) (err error) { func libc_settimeofday_trampoline() -//go:linkname libc_settimeofday libc_settimeofday //go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2176,7 +2053,6 @@ func Setuid(uid int) (err error) { func libc_setuid_trampoline() -//go:linkname libc_setuid libc_setuid //go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2201,7 +2077,6 @@ func Symlink(path string, link string) (err error) { func libc_symlink_trampoline() -//go:linkname libc_symlink libc_symlink //go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2226,7 +2101,6 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { func libc_symlinkat_trampoline() -//go:linkname libc_symlinkat libc_symlinkat //go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2241,7 +2115,6 @@ func Sync() (err error) { func libc_sync_trampoline() -//go:linkname libc_sync libc_sync //go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2261,7 +2134,6 @@ func Truncate(path string, length int64) (err error) { func libc_truncate_trampoline() -//go:linkname libc_truncate libc_truncate //go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2274,7 +2146,6 @@ func Umask(newmask int) (oldmask int) { func libc_umask_trampoline() -//go:linkname libc_umask libc_umask //go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2294,7 +2165,6 @@ func Undelete(path string) (err error) { func libc_undelete_trampoline() -//go:linkname libc_undelete libc_undelete //go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2314,7 +2184,6 @@ func Unlink(path string) (err error) { func libc_unlink_trampoline() -//go:linkname libc_unlink libc_unlink //go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2334,7 +2203,6 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { func libc_unlinkat_trampoline() -//go:linkname libc_unlinkat libc_unlinkat //go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2354,7 +2222,6 @@ func Unmount(path string, flags int) (err error) { func libc_unmount_trampoline() -//go:linkname libc_unmount libc_unmount //go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2376,7 +2243,6 @@ func write(fd int, p []byte) (n int, err error) { func libc_write_trampoline() -//go:linkname libc_write libc_write //go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2392,7 +2258,6 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( func libc_mmap_trampoline() -//go:linkname libc_mmap libc_mmap //go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2407,7 +2272,6 @@ func munmap(addr uintptr, length uintptr) (err error) { func libc_munmap_trampoline() -//go:linkname libc_munmap libc_munmap //go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2444,7 +2308,6 @@ func Fstat(fd int, stat *Stat_t) (err error) { func libc_fstat_trampoline() -//go:linkname libc_fstat libc_fstat //go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2464,7 +2327,6 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { func libc_fstatat_trampoline() -//go:linkname libc_fstatat libc_fstatat //go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2479,7 +2341,6 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) { func libc_fstatfs_trampoline() -//go:linkname libc_fstatfs libc_fstatfs //go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2495,7 +2356,6 @@ func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { func libc_getfsstat_trampoline() -//go:linkname libc_getfsstat libc_getfsstat //go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2515,12 +2375,11 @@ func Lstat(path string, stat *Stat_t) (err error) { func libc_lstat_trampoline() -//go:linkname libc_lstat libc_lstat //go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { +func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { err = errnoErr(e1) @@ -2530,7 +2389,6 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { func libc_ptrace_trampoline() -//go:linkname libc_ptrace libc_ptrace //go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2550,7 +2408,6 @@ func Stat(path string, stat *Stat_t) (err error) { func libc_stat_trampoline() -//go:linkname libc_stat libc_stat //go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2570,5 +2427,4 @@ func Statfs(path string, stat *Statfs_t) (err error) { func libc_statfs_trampoline() -//go:linkname libc_statfs libc_statfs //go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib" diff --git a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go index d3af083f4..665dd9e4b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go @@ -14,22 +14,19 @@ import ( //go:cgo_import_dynamic libc_writev writev "libc.so" //go:cgo_import_dynamic libc_pwritev pwritev "libc.so" //go:cgo_import_dynamic libc_accept4 accept4 "libsocket.so" -//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" //go:linkname procreadv libc_readv //go:linkname procpreadv libc_preadv //go:linkname procwritev libc_writev //go:linkname procpwritev libc_pwritev //go:linkname procaccept4 libc_accept4 -//go:linkname procpipe2 libc_pipe2 var ( procreadv, procpreadv, procwritev, procpwritev, - procaccept4, - procpipe2 syscallFunc + procaccept4 syscallFunc ) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -102,13 +99,3 @@ func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe2(p *[2]_C_int, flags int) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index a96165d4b..6dbb83716 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -11,6 +11,7 @@ import ( ) //go:cgo_import_dynamic libc_pipe pipe "libc.so" +//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so" //go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so" //go:cgo_import_dynamic libc_getcwd getcwd "libc.so" //go:cgo_import_dynamic libc_getgroups getgroups "libc.so" @@ -140,6 +141,7 @@ import ( //go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" //go:linkname procpipe libc_pipe +//go:linkname procpipe2 libc_pipe2 //go:linkname procgetsockname libc_getsockname //go:linkname procGetcwd libc_getcwd //go:linkname procgetgroups libc_getgroups @@ -270,6 +272,7 @@ import ( var ( procpipe, + procpipe2, procgetsockname, procGetcwd, procgetgroups, @@ -412,6 +415,16 @@ func pipe(p *[2]_C_int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 0f5a3f697..f6742bdee 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -435,4 +435,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 36d5219ef..f7e525573 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -357,4 +357,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index 3622ba14b..3f60977da 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -399,4 +399,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 6193c3dc0..dbedf4cba 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -302,4 +302,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index 640b97434..eeff7e1dc 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -420,4 +420,5 @@ const ( SYS_OPENAT2 = 4437 SYS_PIDFD_GETFD = 4438 SYS_FACCESSAT2 = 4439 + SYS_PROCESS_MADVISE = 4440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 3467fbb5f..73cfa535c 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -350,4 +350,5 @@ const ( SYS_OPENAT2 = 5437 SYS_PIDFD_GETFD = 5438 SYS_FACCESSAT2 = 5439 + SYS_PROCESS_MADVISE = 5440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index 0fc38d5a7..be74729e0 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -350,4 +350,5 @@ const ( SYS_OPENAT2 = 5437 SYS_PIDFD_GETFD = 5438 SYS_FACCESSAT2 = 5439 + SYS_PROCESS_MADVISE = 5440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index 999fd55bc..2a1047c81 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -420,4 +420,5 @@ const ( SYS_OPENAT2 = 4437 SYS_PIDFD_GETFD = 4438 SYS_FACCESSAT2 = 4439 + SYS_PROCESS_MADVISE = 4440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 1df0d7993..32707428c 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -399,4 +399,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 4db39cca4..a58572f78 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -399,4 +399,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index e69274014..72a65b760 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -301,4 +301,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index a585aec4e..1fb9ae5d4 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -364,4 +364,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index d047e567a..57636e09e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -378,4 +378,5 @@ const ( SYS_OPENAT2 = 437 SYS_PIDFD_GETFD = 438 SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go index 2c1f815e6..295859c50 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go @@ -219,6 +219,7 @@ const ( SizeofSockaddrUnix = 0x401 SizeofSockaddrDatalink = 0x80 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofIPv6MTUInfo = 0x20 diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go index b4a069ecb..a9ee0ffd4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go @@ -223,6 +223,7 @@ const ( SizeofSockaddrUnix = 0x401 SizeofSockaddrDatalink = 0x80 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofIPv6MTUInfo = 0x20 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go index 830fbb35c..725b4bee2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go @@ -269,6 +269,7 @@ const ( SizeofSockaddrDatalink = 0x14 SizeofSockaddrCtl = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x1c diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index e53a7c49f..080ffce32 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -274,6 +274,7 @@ const ( SizeofSockaddrDatalink = 0x14 SizeofSockaddrCtl = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go index 98be973ef..f2a77bc4e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go @@ -269,6 +269,7 @@ const ( SizeofSockaddrDatalink = 0x14 SizeofSockaddrCtl = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x1c diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index ddae5afe1..c9492428b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -274,6 +274,7 @@ const ( SizeofSockaddrDatalink = 0x14 SizeofSockaddrCtl = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go index c4772df23..85506a05d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -234,6 +234,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x36 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go index 2a3ec615f..3e9dad33e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -313,6 +313,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x36 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go index e11e95499..e00e61554 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -309,6 +309,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x36 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go index b91c2ae0f..5da13c871 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -311,6 +311,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x36 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go index c6fe1d097..995ecf9d4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go @@ -309,6 +309,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x36 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPMreqn = 0xc SizeofIPv6Mreq = 0x14 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 504ef131f..9f3b1a4e5 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -1381,6 +1381,11 @@ const ( IFLA_PROP_LIST = 0x34 IFLA_ALT_IFNAME = 0x35 IFLA_PERM_ADDRESS = 0x36 + IFLA_PROTO_DOWN_REASON = 0x37 + IFLA_PROTO_DOWN_REASON_UNSPEC = 0x0 + IFLA_PROTO_DOWN_REASON_MASK = 0x1 + IFLA_PROTO_DOWN_REASON_VALUE = 0x2 + IFLA_PROTO_DOWN_REASON_MAX = 0x2 IFLA_INET_UNSPEC = 0x0 IFLA_INET_CONF = 0x1 IFLA_INET6_UNSPEC = 0x0 @@ -1475,6 +1480,7 @@ const ( IFLA_BRPORT_ISOLATED = 0x21 IFLA_BRPORT_BACKUP_PORT = 0x22 IFLA_BRPORT_MRP_RING_OPEN = 0x23 + IFLA_BRPORT_MRP_IN_OPEN = 0x24 IFLA_INFO_UNSPEC = 0x0 IFLA_INFO_KIND = 0x1 IFLA_INFO_DATA = 0x2 @@ -1673,6 +1679,7 @@ const ( IFLA_HSR_SUPERVISION_ADDR = 0x4 IFLA_HSR_SEQ_NR = 0x5 IFLA_HSR_VERSION = 0x6 + IFLA_HSR_PROTOCOL = 0x7 IFLA_STATS_UNSPEC = 0x0 IFLA_STATS_LINK_64 = 0x1 IFLA_STATS_LINK_XSTATS = 0x2 @@ -2217,10 +2224,12 @@ const ( ) const ( - NETNSA_NONE = 0x0 - NETNSA_NSID = 0x1 - NETNSA_PID = 0x2 - NETNSA_FD = 0x3 + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 + NETNSA_TARGET_NSID = 0x4 + NETNSA_CURRENT_NSID = 0x5 ) type XDPRingOffset struct { @@ -2370,281 +2379,309 @@ const ( ) const ( - BPF_REG_0 = 0x0 - BPF_REG_1 = 0x1 - BPF_REG_2 = 0x2 - BPF_REG_3 = 0x3 - BPF_REG_4 = 0x4 - BPF_REG_5 = 0x5 - BPF_REG_6 = 0x6 - BPF_REG_7 = 0x7 - BPF_REG_8 = 0x8 - BPF_REG_9 = 0x9 - BPF_REG_10 = 0xa - BPF_MAP_CREATE = 0x0 - BPF_MAP_LOOKUP_ELEM = 0x1 - BPF_MAP_UPDATE_ELEM = 0x2 - BPF_MAP_DELETE_ELEM = 0x3 - BPF_MAP_GET_NEXT_KEY = 0x4 - BPF_PROG_LOAD = 0x5 - BPF_OBJ_PIN = 0x6 - BPF_OBJ_GET = 0x7 - BPF_PROG_ATTACH = 0x8 - BPF_PROG_DETACH = 0x9 - BPF_PROG_TEST_RUN = 0xa - BPF_PROG_GET_NEXT_ID = 0xb - BPF_MAP_GET_NEXT_ID = 0xc - BPF_PROG_GET_FD_BY_ID = 0xd - BPF_MAP_GET_FD_BY_ID = 0xe - BPF_OBJ_GET_INFO_BY_FD = 0xf - BPF_PROG_QUERY = 0x10 - BPF_RAW_TRACEPOINT_OPEN = 0x11 - BPF_BTF_LOAD = 0x12 - BPF_BTF_GET_FD_BY_ID = 0x13 - BPF_TASK_FD_QUERY = 0x14 - BPF_MAP_LOOKUP_AND_DELETE_ELEM = 0x15 - BPF_MAP_FREEZE = 0x16 - BPF_BTF_GET_NEXT_ID = 0x17 - BPF_MAP_LOOKUP_BATCH = 0x18 - BPF_MAP_LOOKUP_AND_DELETE_BATCH = 0x19 - BPF_MAP_UPDATE_BATCH = 0x1a - BPF_MAP_DELETE_BATCH = 0x1b - BPF_LINK_CREATE = 0x1c - BPF_LINK_UPDATE = 0x1d - BPF_LINK_GET_FD_BY_ID = 0x1e - BPF_LINK_GET_NEXT_ID = 0x1f - BPF_ENABLE_STATS = 0x20 - BPF_ITER_CREATE = 0x21 - BPF_MAP_TYPE_UNSPEC = 0x0 - BPF_MAP_TYPE_HASH = 0x1 - BPF_MAP_TYPE_ARRAY = 0x2 - BPF_MAP_TYPE_PROG_ARRAY = 0x3 - BPF_MAP_TYPE_PERF_EVENT_ARRAY = 0x4 - BPF_MAP_TYPE_PERCPU_HASH = 0x5 - BPF_MAP_TYPE_PERCPU_ARRAY = 0x6 - BPF_MAP_TYPE_STACK_TRACE = 0x7 - BPF_MAP_TYPE_CGROUP_ARRAY = 0x8 - BPF_MAP_TYPE_LRU_HASH = 0x9 - BPF_MAP_TYPE_LRU_PERCPU_HASH = 0xa - BPF_MAP_TYPE_LPM_TRIE = 0xb - BPF_MAP_TYPE_ARRAY_OF_MAPS = 0xc - BPF_MAP_TYPE_HASH_OF_MAPS = 0xd - BPF_MAP_TYPE_DEVMAP = 0xe - BPF_MAP_TYPE_SOCKMAP = 0xf - BPF_MAP_TYPE_CPUMAP = 0x10 - BPF_MAP_TYPE_XSKMAP = 0x11 - BPF_MAP_TYPE_SOCKHASH = 0x12 - BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 - BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 - BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 - BPF_MAP_TYPE_QUEUE = 0x16 - BPF_MAP_TYPE_STACK = 0x17 - BPF_MAP_TYPE_SK_STORAGE = 0x18 - BPF_MAP_TYPE_DEVMAP_HASH = 0x19 - BPF_MAP_TYPE_STRUCT_OPS = 0x1a - BPF_MAP_TYPE_RINGBUF = 0x1b - BPF_PROG_TYPE_UNSPEC = 0x0 - BPF_PROG_TYPE_SOCKET_FILTER = 0x1 - BPF_PROG_TYPE_KPROBE = 0x2 - BPF_PROG_TYPE_SCHED_CLS = 0x3 - BPF_PROG_TYPE_SCHED_ACT = 0x4 - BPF_PROG_TYPE_TRACEPOINT = 0x5 - BPF_PROG_TYPE_XDP = 0x6 - BPF_PROG_TYPE_PERF_EVENT = 0x7 - BPF_PROG_TYPE_CGROUP_SKB = 0x8 - BPF_PROG_TYPE_CGROUP_SOCK = 0x9 - BPF_PROG_TYPE_LWT_IN = 0xa - BPF_PROG_TYPE_LWT_OUT = 0xb - BPF_PROG_TYPE_LWT_XMIT = 0xc - BPF_PROG_TYPE_SOCK_OPS = 0xd - BPF_PROG_TYPE_SK_SKB = 0xe - BPF_PROG_TYPE_CGROUP_DEVICE = 0xf - BPF_PROG_TYPE_SK_MSG = 0x10 - BPF_PROG_TYPE_RAW_TRACEPOINT = 0x11 - BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 0x12 - BPF_PROG_TYPE_LWT_SEG6LOCAL = 0x13 - BPF_PROG_TYPE_LIRC_MODE2 = 0x14 - BPF_PROG_TYPE_SK_REUSEPORT = 0x15 - BPF_PROG_TYPE_FLOW_DISSECTOR = 0x16 - BPF_PROG_TYPE_CGROUP_SYSCTL = 0x17 - BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 0x18 - BPF_PROG_TYPE_CGROUP_SOCKOPT = 0x19 - BPF_PROG_TYPE_TRACING = 0x1a - BPF_PROG_TYPE_STRUCT_OPS = 0x1b - BPF_PROG_TYPE_EXT = 0x1c - BPF_PROG_TYPE_LSM = 0x1d - BPF_CGROUP_INET_INGRESS = 0x0 - BPF_CGROUP_INET_EGRESS = 0x1 - BPF_CGROUP_INET_SOCK_CREATE = 0x2 - BPF_CGROUP_SOCK_OPS = 0x3 - BPF_SK_SKB_STREAM_PARSER = 0x4 - BPF_SK_SKB_STREAM_VERDICT = 0x5 - BPF_CGROUP_DEVICE = 0x6 - BPF_SK_MSG_VERDICT = 0x7 - BPF_CGROUP_INET4_BIND = 0x8 - BPF_CGROUP_INET6_BIND = 0x9 - BPF_CGROUP_INET4_CONNECT = 0xa - BPF_CGROUP_INET6_CONNECT = 0xb - BPF_CGROUP_INET4_POST_BIND = 0xc - BPF_CGROUP_INET6_POST_BIND = 0xd - BPF_CGROUP_UDP4_SENDMSG = 0xe - BPF_CGROUP_UDP6_SENDMSG = 0xf - BPF_LIRC_MODE2 = 0x10 - BPF_FLOW_DISSECTOR = 0x11 - BPF_CGROUP_SYSCTL = 0x12 - BPF_CGROUP_UDP4_RECVMSG = 0x13 - BPF_CGROUP_UDP6_RECVMSG = 0x14 - BPF_CGROUP_GETSOCKOPT = 0x15 - BPF_CGROUP_SETSOCKOPT = 0x16 - BPF_TRACE_RAW_TP = 0x17 - BPF_TRACE_FENTRY = 0x18 - BPF_TRACE_FEXIT = 0x19 - BPF_MODIFY_RETURN = 0x1a - BPF_LSM_MAC = 0x1b - BPF_TRACE_ITER = 0x1c - BPF_CGROUP_INET4_GETPEERNAME = 0x1d - BPF_CGROUP_INET6_GETPEERNAME = 0x1e - BPF_CGROUP_INET4_GETSOCKNAME = 0x1f - BPF_CGROUP_INET6_GETSOCKNAME = 0x20 - BPF_XDP_DEVMAP = 0x21 - BPF_LINK_TYPE_UNSPEC = 0x0 - BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1 - BPF_LINK_TYPE_TRACING = 0x2 - BPF_LINK_TYPE_CGROUP = 0x3 - BPF_LINK_TYPE_ITER = 0x4 - BPF_LINK_TYPE_NETNS = 0x5 - BPF_ANY = 0x0 - BPF_NOEXIST = 0x1 - BPF_EXIST = 0x2 - BPF_F_LOCK = 0x4 - BPF_F_NO_PREALLOC = 0x1 - BPF_F_NO_COMMON_LRU = 0x2 - BPF_F_NUMA_NODE = 0x4 - BPF_F_RDONLY = 0x8 - BPF_F_WRONLY = 0x10 - BPF_F_STACK_BUILD_ID = 0x20 - BPF_F_ZERO_SEED = 0x40 - BPF_F_RDONLY_PROG = 0x80 - BPF_F_WRONLY_PROG = 0x100 - BPF_F_CLONE = 0x200 - BPF_F_MMAPABLE = 0x400 - BPF_STATS_RUN_TIME = 0x0 - BPF_STACK_BUILD_ID_EMPTY = 0x0 - BPF_STACK_BUILD_ID_VALID = 0x1 - BPF_STACK_BUILD_ID_IP = 0x2 - BPF_F_RECOMPUTE_CSUM = 0x1 - BPF_F_INVALIDATE_HASH = 0x2 - BPF_F_HDR_FIELD_MASK = 0xf - BPF_F_PSEUDO_HDR = 0x10 - BPF_F_MARK_MANGLED_0 = 0x20 - BPF_F_MARK_ENFORCE = 0x40 - BPF_F_INGRESS = 0x1 - BPF_F_TUNINFO_IPV6 = 0x1 - BPF_F_SKIP_FIELD_MASK = 0xff - BPF_F_USER_STACK = 0x100 - BPF_F_FAST_STACK_CMP = 0x200 - BPF_F_REUSE_STACKID = 0x400 - BPF_F_USER_BUILD_ID = 0x800 - BPF_F_ZERO_CSUM_TX = 0x2 - BPF_F_DONT_FRAGMENT = 0x4 - BPF_F_SEQ_NUMBER = 0x8 - BPF_F_INDEX_MASK = 0xffffffff - BPF_F_CURRENT_CPU = 0xffffffff - BPF_F_CTXLEN_MASK = 0xfffff00000000 - BPF_F_CURRENT_NETNS = -0x1 - BPF_CSUM_LEVEL_QUERY = 0x0 - BPF_CSUM_LEVEL_INC = 0x1 - BPF_CSUM_LEVEL_DEC = 0x2 - BPF_CSUM_LEVEL_RESET = 0x3 - BPF_F_ADJ_ROOM_FIXED_GSO = 0x1 - BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2 - BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4 - BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 - BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 - BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20 - BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff - BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 - BPF_F_SYSCTL_BASE_NAME = 0x1 - BPF_SK_STORAGE_GET_F_CREATE = 0x1 - BPF_F_GET_BRANCH_RECORDS_SIZE = 0x1 - BPF_RB_NO_WAKEUP = 0x1 - BPF_RB_FORCE_WAKEUP = 0x2 - BPF_RB_AVAIL_DATA = 0x0 - BPF_RB_RING_SIZE = 0x1 - BPF_RB_CONS_POS = 0x2 - BPF_RB_PROD_POS = 0x3 - BPF_RINGBUF_BUSY_BIT = 0x80000000 - BPF_RINGBUF_DISCARD_BIT = 0x40000000 - BPF_RINGBUF_HDR_SZ = 0x8 - BPF_ADJ_ROOM_NET = 0x0 - BPF_ADJ_ROOM_MAC = 0x1 - BPF_HDR_START_MAC = 0x0 - BPF_HDR_START_NET = 0x1 - BPF_LWT_ENCAP_SEG6 = 0x0 - BPF_LWT_ENCAP_SEG6_INLINE = 0x1 - BPF_LWT_ENCAP_IP = 0x2 - BPF_OK = 0x0 - BPF_DROP = 0x2 - BPF_REDIRECT = 0x7 - BPF_LWT_REROUTE = 0x80 - BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 - BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 - BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 - BPF_SOCK_OPS_RTT_CB_FLAG = 0x8 - BPF_SOCK_OPS_ALL_CB_FLAGS = 0xf - BPF_SOCK_OPS_VOID = 0x0 - BPF_SOCK_OPS_TIMEOUT_INIT = 0x1 - BPF_SOCK_OPS_RWND_INIT = 0x2 - BPF_SOCK_OPS_TCP_CONNECT_CB = 0x3 - BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 0x4 - BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5 - BPF_SOCK_OPS_NEEDS_ECN = 0x6 - BPF_SOCK_OPS_BASE_RTT = 0x7 - BPF_SOCK_OPS_RTO_CB = 0x8 - BPF_SOCK_OPS_RETRANS_CB = 0x9 - BPF_SOCK_OPS_STATE_CB = 0xa - BPF_SOCK_OPS_TCP_LISTEN_CB = 0xb - BPF_SOCK_OPS_RTT_CB = 0xc - BPF_TCP_ESTABLISHED = 0x1 - BPF_TCP_SYN_SENT = 0x2 - BPF_TCP_SYN_RECV = 0x3 - BPF_TCP_FIN_WAIT1 = 0x4 - BPF_TCP_FIN_WAIT2 = 0x5 - BPF_TCP_TIME_WAIT = 0x6 - BPF_TCP_CLOSE = 0x7 - BPF_TCP_CLOSE_WAIT = 0x8 - BPF_TCP_LAST_ACK = 0x9 - BPF_TCP_LISTEN = 0xa - BPF_TCP_CLOSING = 0xb - BPF_TCP_NEW_SYN_RECV = 0xc - BPF_TCP_MAX_STATES = 0xd - TCP_BPF_IW = 0x3e9 - TCP_BPF_SNDCWND_CLAMP = 0x3ea - BPF_DEVCG_ACC_MKNOD = 0x1 - BPF_DEVCG_ACC_READ = 0x2 - BPF_DEVCG_ACC_WRITE = 0x4 - BPF_DEVCG_DEV_BLOCK = 0x1 - BPF_DEVCG_DEV_CHAR = 0x2 - BPF_FIB_LOOKUP_DIRECT = 0x1 - BPF_FIB_LOOKUP_OUTPUT = 0x2 - BPF_FIB_LKUP_RET_SUCCESS = 0x0 - BPF_FIB_LKUP_RET_BLACKHOLE = 0x1 - BPF_FIB_LKUP_RET_UNREACHABLE = 0x2 - BPF_FIB_LKUP_RET_PROHIBIT = 0x3 - BPF_FIB_LKUP_RET_NOT_FWDED = 0x4 - BPF_FIB_LKUP_RET_FWD_DISABLED = 0x5 - BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 - BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 - BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 - BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 - BPF_FD_TYPE_TRACEPOINT = 0x1 - BPF_FD_TYPE_KPROBE = 0x2 - BPF_FD_TYPE_KRETPROBE = 0x3 - BPF_FD_TYPE_UPROBE = 0x4 - BPF_FD_TYPE_URETPROBE = 0x5 - BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 - BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 - BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 + BPF_REG_0 = 0x0 + BPF_REG_1 = 0x1 + BPF_REG_2 = 0x2 + BPF_REG_3 = 0x3 + BPF_REG_4 = 0x4 + BPF_REG_5 = 0x5 + BPF_REG_6 = 0x6 + BPF_REG_7 = 0x7 + BPF_REG_8 = 0x8 + BPF_REG_9 = 0x9 + BPF_REG_10 = 0xa + BPF_MAP_CREATE = 0x0 + BPF_MAP_LOOKUP_ELEM = 0x1 + BPF_MAP_UPDATE_ELEM = 0x2 + BPF_MAP_DELETE_ELEM = 0x3 + BPF_MAP_GET_NEXT_KEY = 0x4 + BPF_PROG_LOAD = 0x5 + BPF_OBJ_PIN = 0x6 + BPF_OBJ_GET = 0x7 + BPF_PROG_ATTACH = 0x8 + BPF_PROG_DETACH = 0x9 + BPF_PROG_TEST_RUN = 0xa + BPF_PROG_GET_NEXT_ID = 0xb + BPF_MAP_GET_NEXT_ID = 0xc + BPF_PROG_GET_FD_BY_ID = 0xd + BPF_MAP_GET_FD_BY_ID = 0xe + BPF_OBJ_GET_INFO_BY_FD = 0xf + BPF_PROG_QUERY = 0x10 + BPF_RAW_TRACEPOINT_OPEN = 0x11 + BPF_BTF_LOAD = 0x12 + BPF_BTF_GET_FD_BY_ID = 0x13 + BPF_TASK_FD_QUERY = 0x14 + BPF_MAP_LOOKUP_AND_DELETE_ELEM = 0x15 + BPF_MAP_FREEZE = 0x16 + BPF_BTF_GET_NEXT_ID = 0x17 + BPF_MAP_LOOKUP_BATCH = 0x18 + BPF_MAP_LOOKUP_AND_DELETE_BATCH = 0x19 + BPF_MAP_UPDATE_BATCH = 0x1a + BPF_MAP_DELETE_BATCH = 0x1b + BPF_LINK_CREATE = 0x1c + BPF_LINK_UPDATE = 0x1d + BPF_LINK_GET_FD_BY_ID = 0x1e + BPF_LINK_GET_NEXT_ID = 0x1f + BPF_ENABLE_STATS = 0x20 + BPF_ITER_CREATE = 0x21 + BPF_LINK_DETACH = 0x22 + BPF_PROG_BIND_MAP = 0x23 + BPF_MAP_TYPE_UNSPEC = 0x0 + BPF_MAP_TYPE_HASH = 0x1 + BPF_MAP_TYPE_ARRAY = 0x2 + BPF_MAP_TYPE_PROG_ARRAY = 0x3 + BPF_MAP_TYPE_PERF_EVENT_ARRAY = 0x4 + BPF_MAP_TYPE_PERCPU_HASH = 0x5 + BPF_MAP_TYPE_PERCPU_ARRAY = 0x6 + BPF_MAP_TYPE_STACK_TRACE = 0x7 + BPF_MAP_TYPE_CGROUP_ARRAY = 0x8 + BPF_MAP_TYPE_LRU_HASH = 0x9 + BPF_MAP_TYPE_LRU_PERCPU_HASH = 0xa + BPF_MAP_TYPE_LPM_TRIE = 0xb + BPF_MAP_TYPE_ARRAY_OF_MAPS = 0xc + BPF_MAP_TYPE_HASH_OF_MAPS = 0xd + BPF_MAP_TYPE_DEVMAP = 0xe + BPF_MAP_TYPE_SOCKMAP = 0xf + BPF_MAP_TYPE_CPUMAP = 0x10 + BPF_MAP_TYPE_XSKMAP = 0x11 + BPF_MAP_TYPE_SOCKHASH = 0x12 + BPF_MAP_TYPE_CGROUP_STORAGE = 0x13 + BPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 0x14 + BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 0x15 + BPF_MAP_TYPE_QUEUE = 0x16 + BPF_MAP_TYPE_STACK = 0x17 + BPF_MAP_TYPE_SK_STORAGE = 0x18 + BPF_MAP_TYPE_DEVMAP_HASH = 0x19 + BPF_MAP_TYPE_STRUCT_OPS = 0x1a + BPF_MAP_TYPE_RINGBUF = 0x1b + BPF_MAP_TYPE_INODE_STORAGE = 0x1c + BPF_PROG_TYPE_UNSPEC = 0x0 + BPF_PROG_TYPE_SOCKET_FILTER = 0x1 + BPF_PROG_TYPE_KPROBE = 0x2 + BPF_PROG_TYPE_SCHED_CLS = 0x3 + BPF_PROG_TYPE_SCHED_ACT = 0x4 + BPF_PROG_TYPE_TRACEPOINT = 0x5 + BPF_PROG_TYPE_XDP = 0x6 + BPF_PROG_TYPE_PERF_EVENT = 0x7 + BPF_PROG_TYPE_CGROUP_SKB = 0x8 + BPF_PROG_TYPE_CGROUP_SOCK = 0x9 + BPF_PROG_TYPE_LWT_IN = 0xa + BPF_PROG_TYPE_LWT_OUT = 0xb + BPF_PROG_TYPE_LWT_XMIT = 0xc + BPF_PROG_TYPE_SOCK_OPS = 0xd + BPF_PROG_TYPE_SK_SKB = 0xe + BPF_PROG_TYPE_CGROUP_DEVICE = 0xf + BPF_PROG_TYPE_SK_MSG = 0x10 + BPF_PROG_TYPE_RAW_TRACEPOINT = 0x11 + BPF_PROG_TYPE_CGROUP_SOCK_ADDR = 0x12 + BPF_PROG_TYPE_LWT_SEG6LOCAL = 0x13 + BPF_PROG_TYPE_LIRC_MODE2 = 0x14 + BPF_PROG_TYPE_SK_REUSEPORT = 0x15 + BPF_PROG_TYPE_FLOW_DISSECTOR = 0x16 + BPF_PROG_TYPE_CGROUP_SYSCTL = 0x17 + BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 0x18 + BPF_PROG_TYPE_CGROUP_SOCKOPT = 0x19 + BPF_PROG_TYPE_TRACING = 0x1a + BPF_PROG_TYPE_STRUCT_OPS = 0x1b + BPF_PROG_TYPE_EXT = 0x1c + BPF_PROG_TYPE_LSM = 0x1d + BPF_PROG_TYPE_SK_LOOKUP = 0x1e + BPF_CGROUP_INET_INGRESS = 0x0 + BPF_CGROUP_INET_EGRESS = 0x1 + BPF_CGROUP_INET_SOCK_CREATE = 0x2 + BPF_CGROUP_SOCK_OPS = 0x3 + BPF_SK_SKB_STREAM_PARSER = 0x4 + BPF_SK_SKB_STREAM_VERDICT = 0x5 + BPF_CGROUP_DEVICE = 0x6 + BPF_SK_MSG_VERDICT = 0x7 + BPF_CGROUP_INET4_BIND = 0x8 + BPF_CGROUP_INET6_BIND = 0x9 + BPF_CGROUP_INET4_CONNECT = 0xa + BPF_CGROUP_INET6_CONNECT = 0xb + BPF_CGROUP_INET4_POST_BIND = 0xc + BPF_CGROUP_INET6_POST_BIND = 0xd + BPF_CGROUP_UDP4_SENDMSG = 0xe + BPF_CGROUP_UDP6_SENDMSG = 0xf + BPF_LIRC_MODE2 = 0x10 + BPF_FLOW_DISSECTOR = 0x11 + BPF_CGROUP_SYSCTL = 0x12 + BPF_CGROUP_UDP4_RECVMSG = 0x13 + BPF_CGROUP_UDP6_RECVMSG = 0x14 + BPF_CGROUP_GETSOCKOPT = 0x15 + BPF_CGROUP_SETSOCKOPT = 0x16 + BPF_TRACE_RAW_TP = 0x17 + BPF_TRACE_FENTRY = 0x18 + BPF_TRACE_FEXIT = 0x19 + BPF_MODIFY_RETURN = 0x1a + BPF_LSM_MAC = 0x1b + BPF_TRACE_ITER = 0x1c + BPF_CGROUP_INET4_GETPEERNAME = 0x1d + BPF_CGROUP_INET6_GETPEERNAME = 0x1e + BPF_CGROUP_INET4_GETSOCKNAME = 0x1f + BPF_CGROUP_INET6_GETSOCKNAME = 0x20 + BPF_XDP_DEVMAP = 0x21 + BPF_CGROUP_INET_SOCK_RELEASE = 0x22 + BPF_XDP_CPUMAP = 0x23 + BPF_SK_LOOKUP = 0x24 + BPF_XDP = 0x25 + BPF_LINK_TYPE_UNSPEC = 0x0 + BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1 + BPF_LINK_TYPE_TRACING = 0x2 + BPF_LINK_TYPE_CGROUP = 0x3 + BPF_LINK_TYPE_ITER = 0x4 + BPF_LINK_TYPE_NETNS = 0x5 + BPF_LINK_TYPE_XDP = 0x6 + BPF_ANY = 0x0 + BPF_NOEXIST = 0x1 + BPF_EXIST = 0x2 + BPF_F_LOCK = 0x4 + BPF_F_NO_PREALLOC = 0x1 + BPF_F_NO_COMMON_LRU = 0x2 + BPF_F_NUMA_NODE = 0x4 + BPF_F_RDONLY = 0x8 + BPF_F_WRONLY = 0x10 + BPF_F_STACK_BUILD_ID = 0x20 + BPF_F_ZERO_SEED = 0x40 + BPF_F_RDONLY_PROG = 0x80 + BPF_F_WRONLY_PROG = 0x100 + BPF_F_CLONE = 0x200 + BPF_F_MMAPABLE = 0x400 + BPF_F_PRESERVE_ELEMS = 0x800 + BPF_F_INNER_MAP = 0x1000 + BPF_STATS_RUN_TIME = 0x0 + BPF_STACK_BUILD_ID_EMPTY = 0x0 + BPF_STACK_BUILD_ID_VALID = 0x1 + BPF_STACK_BUILD_ID_IP = 0x2 + BPF_F_RECOMPUTE_CSUM = 0x1 + BPF_F_INVALIDATE_HASH = 0x2 + BPF_F_HDR_FIELD_MASK = 0xf + BPF_F_PSEUDO_HDR = 0x10 + BPF_F_MARK_MANGLED_0 = 0x20 + BPF_F_MARK_ENFORCE = 0x40 + BPF_F_INGRESS = 0x1 + BPF_F_TUNINFO_IPV6 = 0x1 + BPF_F_SKIP_FIELD_MASK = 0xff + BPF_F_USER_STACK = 0x100 + BPF_F_FAST_STACK_CMP = 0x200 + BPF_F_REUSE_STACKID = 0x400 + BPF_F_USER_BUILD_ID = 0x800 + BPF_F_ZERO_CSUM_TX = 0x2 + BPF_F_DONT_FRAGMENT = 0x4 + BPF_F_SEQ_NUMBER = 0x8 + BPF_F_INDEX_MASK = 0xffffffff + BPF_F_CURRENT_CPU = 0xffffffff + BPF_F_CTXLEN_MASK = 0xfffff00000000 + BPF_F_CURRENT_NETNS = -0x1 + BPF_CSUM_LEVEL_QUERY = 0x0 + BPF_CSUM_LEVEL_INC = 0x1 + BPF_CSUM_LEVEL_DEC = 0x2 + BPF_CSUM_LEVEL_RESET = 0x3 + BPF_F_ADJ_ROOM_FIXED_GSO = 0x1 + BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 0x2 + BPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 0x4 + BPF_F_ADJ_ROOM_ENCAP_L4_GRE = 0x8 + BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 + BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20 + BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff + BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 + BPF_F_SYSCTL_BASE_NAME = 0x1 + BPF_LOCAL_STORAGE_GET_F_CREATE = 0x1 + BPF_SK_STORAGE_GET_F_CREATE = 0x1 + BPF_F_GET_BRANCH_RECORDS_SIZE = 0x1 + BPF_RB_NO_WAKEUP = 0x1 + BPF_RB_FORCE_WAKEUP = 0x2 + BPF_RB_AVAIL_DATA = 0x0 + BPF_RB_RING_SIZE = 0x1 + BPF_RB_CONS_POS = 0x2 + BPF_RB_PROD_POS = 0x3 + BPF_RINGBUF_BUSY_BIT = 0x80000000 + BPF_RINGBUF_DISCARD_BIT = 0x40000000 + BPF_RINGBUF_HDR_SZ = 0x8 + BPF_SK_LOOKUP_F_REPLACE = 0x1 + BPF_SK_LOOKUP_F_NO_REUSEPORT = 0x2 + BPF_ADJ_ROOM_NET = 0x0 + BPF_ADJ_ROOM_MAC = 0x1 + BPF_HDR_START_MAC = 0x0 + BPF_HDR_START_NET = 0x1 + BPF_LWT_ENCAP_SEG6 = 0x0 + BPF_LWT_ENCAP_SEG6_INLINE = 0x1 + BPF_LWT_ENCAP_IP = 0x2 + BPF_OK = 0x0 + BPF_DROP = 0x2 + BPF_REDIRECT = 0x7 + BPF_LWT_REROUTE = 0x80 + BPF_SOCK_OPS_RTO_CB_FLAG = 0x1 + BPF_SOCK_OPS_RETRANS_CB_FLAG = 0x2 + BPF_SOCK_OPS_STATE_CB_FLAG = 0x4 + BPF_SOCK_OPS_RTT_CB_FLAG = 0x8 + BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 0x10 + BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 0x20 + BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 0x40 + BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7f + BPF_SOCK_OPS_VOID = 0x0 + BPF_SOCK_OPS_TIMEOUT_INIT = 0x1 + BPF_SOCK_OPS_RWND_INIT = 0x2 + BPF_SOCK_OPS_TCP_CONNECT_CB = 0x3 + BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 0x4 + BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5 + BPF_SOCK_OPS_NEEDS_ECN = 0x6 + BPF_SOCK_OPS_BASE_RTT = 0x7 + BPF_SOCK_OPS_RTO_CB = 0x8 + BPF_SOCK_OPS_RETRANS_CB = 0x9 + BPF_SOCK_OPS_STATE_CB = 0xa + BPF_SOCK_OPS_TCP_LISTEN_CB = 0xb + BPF_SOCK_OPS_RTT_CB = 0xc + BPF_SOCK_OPS_PARSE_HDR_OPT_CB = 0xd + BPF_SOCK_OPS_HDR_OPT_LEN_CB = 0xe + BPF_SOCK_OPS_WRITE_HDR_OPT_CB = 0xf + BPF_TCP_ESTABLISHED = 0x1 + BPF_TCP_SYN_SENT = 0x2 + BPF_TCP_SYN_RECV = 0x3 + BPF_TCP_FIN_WAIT1 = 0x4 + BPF_TCP_FIN_WAIT2 = 0x5 + BPF_TCP_TIME_WAIT = 0x6 + BPF_TCP_CLOSE = 0x7 + BPF_TCP_CLOSE_WAIT = 0x8 + BPF_TCP_LAST_ACK = 0x9 + BPF_TCP_LISTEN = 0xa + BPF_TCP_CLOSING = 0xb + BPF_TCP_NEW_SYN_RECV = 0xc + BPF_TCP_MAX_STATES = 0xd + TCP_BPF_IW = 0x3e9 + TCP_BPF_SNDCWND_CLAMP = 0x3ea + TCP_BPF_DELACK_MAX = 0x3eb + TCP_BPF_RTO_MIN = 0x3ec + TCP_BPF_SYN = 0x3ed + TCP_BPF_SYN_IP = 0x3ee + TCP_BPF_SYN_MAC = 0x3ef + BPF_LOAD_HDR_OPT_TCP_SYN = 0x1 + BPF_WRITE_HDR_TCP_CURRENT_MSS = 0x1 + BPF_WRITE_HDR_TCP_SYNACK_COOKIE = 0x2 + BPF_DEVCG_ACC_MKNOD = 0x1 + BPF_DEVCG_ACC_READ = 0x2 + BPF_DEVCG_ACC_WRITE = 0x4 + BPF_DEVCG_DEV_BLOCK = 0x1 + BPF_DEVCG_DEV_CHAR = 0x2 + BPF_FIB_LOOKUP_DIRECT = 0x1 + BPF_FIB_LOOKUP_OUTPUT = 0x2 + BPF_FIB_LKUP_RET_SUCCESS = 0x0 + BPF_FIB_LKUP_RET_BLACKHOLE = 0x1 + BPF_FIB_LKUP_RET_UNREACHABLE = 0x2 + BPF_FIB_LKUP_RET_PROHIBIT = 0x3 + BPF_FIB_LKUP_RET_NOT_FWDED = 0x4 + BPF_FIB_LKUP_RET_FWD_DISABLED = 0x5 + BPF_FIB_LKUP_RET_UNSUPP_LWT = 0x6 + BPF_FIB_LKUP_RET_NO_NEIGH = 0x7 + BPF_FIB_LKUP_RET_FRAG_NEEDED = 0x8 + BPF_FD_TYPE_RAW_TRACEPOINT = 0x0 + BPF_FD_TYPE_TRACEPOINT = 0x1 + BPF_FD_TYPE_KPROBE = 0x2 + BPF_FD_TYPE_KRETPROBE = 0x3 + BPF_FD_TYPE_UPROBE = 0x4 + BPF_FD_TYPE_URETPROBE = 0x5 + BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 0x1 + BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 0x2 + BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 0x4 ) const ( @@ -2681,6 +2718,7 @@ const ( RTNLGRP_IPV4_MROUTE_R = 0x1e RTNLGRP_IPV6_MROUTE_R = 0x1f RTNLGRP_NEXTHOP = 0x20 + RTNLGRP_BRVLAN = 0x21 ) type CapUserHeader struct { @@ -2775,132 +2813,317 @@ const ( ) const ( - DEVLINK_CMD_UNSPEC = 0x0 - DEVLINK_CMD_GET = 0x1 - DEVLINK_CMD_SET = 0x2 - DEVLINK_CMD_NEW = 0x3 - DEVLINK_CMD_DEL = 0x4 - DEVLINK_CMD_PORT_GET = 0x5 - DEVLINK_CMD_PORT_SET = 0x6 - DEVLINK_CMD_PORT_NEW = 0x7 - DEVLINK_CMD_PORT_DEL = 0x8 - DEVLINK_CMD_PORT_SPLIT = 0x9 - DEVLINK_CMD_PORT_UNSPLIT = 0xa - DEVLINK_CMD_SB_GET = 0xb - DEVLINK_CMD_SB_SET = 0xc - DEVLINK_CMD_SB_NEW = 0xd - DEVLINK_CMD_SB_DEL = 0xe - DEVLINK_CMD_SB_POOL_GET = 0xf - DEVLINK_CMD_SB_POOL_SET = 0x10 - DEVLINK_CMD_SB_POOL_NEW = 0x11 - DEVLINK_CMD_SB_POOL_DEL = 0x12 - DEVLINK_CMD_SB_PORT_POOL_GET = 0x13 - DEVLINK_CMD_SB_PORT_POOL_SET = 0x14 - DEVLINK_CMD_SB_PORT_POOL_NEW = 0x15 - DEVLINK_CMD_SB_PORT_POOL_DEL = 0x16 - DEVLINK_CMD_SB_TC_POOL_BIND_GET = 0x17 - DEVLINK_CMD_SB_TC_POOL_BIND_SET = 0x18 - DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 0x19 - DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 0x1a - DEVLINK_CMD_SB_OCC_SNAPSHOT = 0x1b - DEVLINK_CMD_SB_OCC_MAX_CLEAR = 0x1c - DEVLINK_CMD_ESWITCH_GET = 0x1d - DEVLINK_CMD_ESWITCH_SET = 0x1e - DEVLINK_CMD_DPIPE_TABLE_GET = 0x1f - DEVLINK_CMD_DPIPE_ENTRIES_GET = 0x20 - DEVLINK_CMD_DPIPE_HEADERS_GET = 0x21 - DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 0x22 - DEVLINK_CMD_MAX = 0x48 - DEVLINK_PORT_TYPE_NOTSET = 0x0 - DEVLINK_PORT_TYPE_AUTO = 0x1 - DEVLINK_PORT_TYPE_ETH = 0x2 - DEVLINK_PORT_TYPE_IB = 0x3 - DEVLINK_SB_POOL_TYPE_INGRESS = 0x0 - DEVLINK_SB_POOL_TYPE_EGRESS = 0x1 - DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0x0 - DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 0x1 - DEVLINK_ESWITCH_MODE_LEGACY = 0x0 - DEVLINK_ESWITCH_MODE_SWITCHDEV = 0x1 - DEVLINK_ESWITCH_INLINE_MODE_NONE = 0x0 - DEVLINK_ESWITCH_INLINE_MODE_LINK = 0x1 - DEVLINK_ESWITCH_INLINE_MODE_NETWORK = 0x2 - DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = 0x3 - DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0x0 - DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 0x1 - DEVLINK_ATTR_UNSPEC = 0x0 - DEVLINK_ATTR_BUS_NAME = 0x1 - DEVLINK_ATTR_DEV_NAME = 0x2 - DEVLINK_ATTR_PORT_INDEX = 0x3 - DEVLINK_ATTR_PORT_TYPE = 0x4 - DEVLINK_ATTR_PORT_DESIRED_TYPE = 0x5 - DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 0x6 - DEVLINK_ATTR_PORT_NETDEV_NAME = 0x7 - DEVLINK_ATTR_PORT_IBDEV_NAME = 0x8 - DEVLINK_ATTR_PORT_SPLIT_COUNT = 0x9 - DEVLINK_ATTR_PORT_SPLIT_GROUP = 0xa - DEVLINK_ATTR_SB_INDEX = 0xb - DEVLINK_ATTR_SB_SIZE = 0xc - DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 0xd - DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 0xe - DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 0xf - DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 0x10 - DEVLINK_ATTR_SB_POOL_INDEX = 0x11 - DEVLINK_ATTR_SB_POOL_TYPE = 0x12 - DEVLINK_ATTR_SB_POOL_SIZE = 0x13 - DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 0x14 - DEVLINK_ATTR_SB_THRESHOLD = 0x15 - DEVLINK_ATTR_SB_TC_INDEX = 0x16 - DEVLINK_ATTR_SB_OCC_CUR = 0x17 - DEVLINK_ATTR_SB_OCC_MAX = 0x18 - DEVLINK_ATTR_ESWITCH_MODE = 0x19 - DEVLINK_ATTR_ESWITCH_INLINE_MODE = 0x1a - DEVLINK_ATTR_DPIPE_TABLES = 0x1b - DEVLINK_ATTR_DPIPE_TABLE = 0x1c - DEVLINK_ATTR_DPIPE_TABLE_NAME = 0x1d - DEVLINK_ATTR_DPIPE_TABLE_SIZE = 0x1e - DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 0x1f - DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 0x20 - DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 0x21 - DEVLINK_ATTR_DPIPE_ENTRIES = 0x22 - DEVLINK_ATTR_DPIPE_ENTRY = 0x23 - DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 0x24 - DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 0x25 - DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 0x26 - DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 0x27 - DEVLINK_ATTR_DPIPE_MATCH = 0x28 - DEVLINK_ATTR_DPIPE_MATCH_VALUE = 0x29 - DEVLINK_ATTR_DPIPE_MATCH_TYPE = 0x2a - DEVLINK_ATTR_DPIPE_ACTION = 0x2b - DEVLINK_ATTR_DPIPE_ACTION_VALUE = 0x2c - DEVLINK_ATTR_DPIPE_ACTION_TYPE = 0x2d - DEVLINK_ATTR_DPIPE_VALUE = 0x2e - DEVLINK_ATTR_DPIPE_VALUE_MASK = 0x2f - DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 0x30 - DEVLINK_ATTR_DPIPE_HEADERS = 0x31 - DEVLINK_ATTR_DPIPE_HEADER = 0x32 - DEVLINK_ATTR_DPIPE_HEADER_NAME = 0x33 - DEVLINK_ATTR_DPIPE_HEADER_ID = 0x34 - DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 0x35 - DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 0x36 - DEVLINK_ATTR_DPIPE_HEADER_INDEX = 0x37 - DEVLINK_ATTR_DPIPE_FIELD = 0x38 - DEVLINK_ATTR_DPIPE_FIELD_NAME = 0x39 - DEVLINK_ATTR_DPIPE_FIELD_ID = 0x3a - DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 0x3b - DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 0x3c - DEVLINK_ATTR_PAD = 0x3d - DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 0x3e - DEVLINK_ATTR_MAX = 0x94 - DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 - DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 - DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 - DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0x0 - DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0x0 - DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0x0 - DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0x0 - DEVLINK_DPIPE_HEADER_ETHERNET = 0x0 - DEVLINK_DPIPE_HEADER_IPV4 = 0x1 - DEVLINK_DPIPE_HEADER_IPV6 = 0x2 + DEVLINK_CMD_UNSPEC = 0x0 + DEVLINK_CMD_GET = 0x1 + DEVLINK_CMD_SET = 0x2 + DEVLINK_CMD_NEW = 0x3 + DEVLINK_CMD_DEL = 0x4 + DEVLINK_CMD_PORT_GET = 0x5 + DEVLINK_CMD_PORT_SET = 0x6 + DEVLINK_CMD_PORT_NEW = 0x7 + DEVLINK_CMD_PORT_DEL = 0x8 + DEVLINK_CMD_PORT_SPLIT = 0x9 + DEVLINK_CMD_PORT_UNSPLIT = 0xa + DEVLINK_CMD_SB_GET = 0xb + DEVLINK_CMD_SB_SET = 0xc + DEVLINK_CMD_SB_NEW = 0xd + DEVLINK_CMD_SB_DEL = 0xe + DEVLINK_CMD_SB_POOL_GET = 0xf + DEVLINK_CMD_SB_POOL_SET = 0x10 + DEVLINK_CMD_SB_POOL_NEW = 0x11 + DEVLINK_CMD_SB_POOL_DEL = 0x12 + DEVLINK_CMD_SB_PORT_POOL_GET = 0x13 + DEVLINK_CMD_SB_PORT_POOL_SET = 0x14 + DEVLINK_CMD_SB_PORT_POOL_NEW = 0x15 + DEVLINK_CMD_SB_PORT_POOL_DEL = 0x16 + DEVLINK_CMD_SB_TC_POOL_BIND_GET = 0x17 + DEVLINK_CMD_SB_TC_POOL_BIND_SET = 0x18 + DEVLINK_CMD_SB_TC_POOL_BIND_NEW = 0x19 + DEVLINK_CMD_SB_TC_POOL_BIND_DEL = 0x1a + DEVLINK_CMD_SB_OCC_SNAPSHOT = 0x1b + DEVLINK_CMD_SB_OCC_MAX_CLEAR = 0x1c + DEVLINK_CMD_ESWITCH_GET = 0x1d + DEVLINK_CMD_ESWITCH_SET = 0x1e + DEVLINK_CMD_DPIPE_TABLE_GET = 0x1f + DEVLINK_CMD_DPIPE_ENTRIES_GET = 0x20 + DEVLINK_CMD_DPIPE_HEADERS_GET = 0x21 + DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 0x22 + DEVLINK_CMD_RESOURCE_SET = 0x23 + DEVLINK_CMD_RESOURCE_DUMP = 0x24 + DEVLINK_CMD_RELOAD = 0x25 + DEVLINK_CMD_PARAM_GET = 0x26 + DEVLINK_CMD_PARAM_SET = 0x27 + DEVLINK_CMD_PARAM_NEW = 0x28 + DEVLINK_CMD_PARAM_DEL = 0x29 + DEVLINK_CMD_REGION_GET = 0x2a + DEVLINK_CMD_REGION_SET = 0x2b + DEVLINK_CMD_REGION_NEW = 0x2c + DEVLINK_CMD_REGION_DEL = 0x2d + DEVLINK_CMD_REGION_READ = 0x2e + DEVLINK_CMD_PORT_PARAM_GET = 0x2f + DEVLINK_CMD_PORT_PARAM_SET = 0x30 + DEVLINK_CMD_PORT_PARAM_NEW = 0x31 + DEVLINK_CMD_PORT_PARAM_DEL = 0x32 + DEVLINK_CMD_INFO_GET = 0x33 + DEVLINK_CMD_HEALTH_REPORTER_GET = 0x34 + DEVLINK_CMD_HEALTH_REPORTER_SET = 0x35 + DEVLINK_CMD_HEALTH_REPORTER_RECOVER = 0x36 + DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 0x37 + DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 0x38 + DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 0x39 + DEVLINK_CMD_FLASH_UPDATE = 0x3a + DEVLINK_CMD_FLASH_UPDATE_END = 0x3b + DEVLINK_CMD_FLASH_UPDATE_STATUS = 0x3c + DEVLINK_CMD_TRAP_GET = 0x3d + DEVLINK_CMD_TRAP_SET = 0x3e + DEVLINK_CMD_TRAP_NEW = 0x3f + DEVLINK_CMD_TRAP_DEL = 0x40 + DEVLINK_CMD_TRAP_GROUP_GET = 0x41 + DEVLINK_CMD_TRAP_GROUP_SET = 0x42 + DEVLINK_CMD_TRAP_GROUP_NEW = 0x43 + DEVLINK_CMD_TRAP_GROUP_DEL = 0x44 + DEVLINK_CMD_TRAP_POLICER_GET = 0x45 + DEVLINK_CMD_TRAP_POLICER_SET = 0x46 + DEVLINK_CMD_TRAP_POLICER_NEW = 0x47 + DEVLINK_CMD_TRAP_POLICER_DEL = 0x48 + DEVLINK_CMD_HEALTH_REPORTER_TEST = 0x49 + DEVLINK_CMD_MAX = 0x49 + DEVLINK_PORT_TYPE_NOTSET = 0x0 + DEVLINK_PORT_TYPE_AUTO = 0x1 + DEVLINK_PORT_TYPE_ETH = 0x2 + DEVLINK_PORT_TYPE_IB = 0x3 + DEVLINK_SB_POOL_TYPE_INGRESS = 0x0 + DEVLINK_SB_POOL_TYPE_EGRESS = 0x1 + DEVLINK_SB_THRESHOLD_TYPE_STATIC = 0x0 + DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 0x1 + DEVLINK_ESWITCH_MODE_LEGACY = 0x0 + DEVLINK_ESWITCH_MODE_SWITCHDEV = 0x1 + DEVLINK_ESWITCH_INLINE_MODE_NONE = 0x0 + DEVLINK_ESWITCH_INLINE_MODE_LINK = 0x1 + DEVLINK_ESWITCH_INLINE_MODE_NETWORK = 0x2 + DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = 0x3 + DEVLINK_ESWITCH_ENCAP_MODE_NONE = 0x0 + DEVLINK_ESWITCH_ENCAP_MODE_BASIC = 0x1 + DEVLINK_PORT_FLAVOUR_PHYSICAL = 0x0 + DEVLINK_PORT_FLAVOUR_CPU = 0x1 + DEVLINK_PORT_FLAVOUR_DSA = 0x2 + DEVLINK_PORT_FLAVOUR_PCI_PF = 0x3 + DEVLINK_PORT_FLAVOUR_PCI_VF = 0x4 + DEVLINK_PORT_FLAVOUR_VIRTUAL = 0x5 + DEVLINK_PORT_FLAVOUR_UNUSED = 0x6 + DEVLINK_PARAM_CMODE_RUNTIME = 0x0 + DEVLINK_PARAM_CMODE_DRIVERINIT = 0x1 + DEVLINK_PARAM_CMODE_PERMANENT = 0x2 + DEVLINK_PARAM_CMODE_MAX = 0x2 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER = 0x0 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH = 0x1 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK = 0x2 + DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_UNKNOWN = 0x3 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN = 0x0 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS = 0x1 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER = 0x2 + DEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK = 0x3 + DEVLINK_ATTR_STATS_RX_PACKETS = 0x0 + DEVLINK_ATTR_STATS_RX_BYTES = 0x1 + DEVLINK_ATTR_STATS_RX_DROPPED = 0x2 + DEVLINK_ATTR_STATS_MAX = 0x2 + DEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0x0 + DEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 0x1 + DEVLINK_FLASH_OVERWRITE_MAX_BIT = 0x1 + DEVLINK_TRAP_ACTION_DROP = 0x0 + DEVLINK_TRAP_ACTION_TRAP = 0x1 + DEVLINK_TRAP_ACTION_MIRROR = 0x2 + DEVLINK_TRAP_TYPE_DROP = 0x0 + DEVLINK_TRAP_TYPE_EXCEPTION = 0x1 + DEVLINK_TRAP_TYPE_CONTROL = 0x2 + DEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0x0 + DEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 0x1 + DEVLINK_RELOAD_ACTION_UNSPEC = 0x0 + DEVLINK_RELOAD_ACTION_DRIVER_REINIT = 0x1 + DEVLINK_RELOAD_ACTION_FW_ACTIVATE = 0x2 + DEVLINK_RELOAD_ACTION_MAX = 0x2 + DEVLINK_RELOAD_LIMIT_UNSPEC = 0x0 + DEVLINK_RELOAD_LIMIT_NO_RESET = 0x1 + DEVLINK_RELOAD_LIMIT_MAX = 0x1 + DEVLINK_ATTR_UNSPEC = 0x0 + DEVLINK_ATTR_BUS_NAME = 0x1 + DEVLINK_ATTR_DEV_NAME = 0x2 + DEVLINK_ATTR_PORT_INDEX = 0x3 + DEVLINK_ATTR_PORT_TYPE = 0x4 + DEVLINK_ATTR_PORT_DESIRED_TYPE = 0x5 + DEVLINK_ATTR_PORT_NETDEV_IFINDEX = 0x6 + DEVLINK_ATTR_PORT_NETDEV_NAME = 0x7 + DEVLINK_ATTR_PORT_IBDEV_NAME = 0x8 + DEVLINK_ATTR_PORT_SPLIT_COUNT = 0x9 + DEVLINK_ATTR_PORT_SPLIT_GROUP = 0xa + DEVLINK_ATTR_SB_INDEX = 0xb + DEVLINK_ATTR_SB_SIZE = 0xc + DEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 0xd + DEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 0xe + DEVLINK_ATTR_SB_INGRESS_TC_COUNT = 0xf + DEVLINK_ATTR_SB_EGRESS_TC_COUNT = 0x10 + DEVLINK_ATTR_SB_POOL_INDEX = 0x11 + DEVLINK_ATTR_SB_POOL_TYPE = 0x12 + DEVLINK_ATTR_SB_POOL_SIZE = 0x13 + DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 0x14 + DEVLINK_ATTR_SB_THRESHOLD = 0x15 + DEVLINK_ATTR_SB_TC_INDEX = 0x16 + DEVLINK_ATTR_SB_OCC_CUR = 0x17 + DEVLINK_ATTR_SB_OCC_MAX = 0x18 + DEVLINK_ATTR_ESWITCH_MODE = 0x19 + DEVLINK_ATTR_ESWITCH_INLINE_MODE = 0x1a + DEVLINK_ATTR_DPIPE_TABLES = 0x1b + DEVLINK_ATTR_DPIPE_TABLE = 0x1c + DEVLINK_ATTR_DPIPE_TABLE_NAME = 0x1d + DEVLINK_ATTR_DPIPE_TABLE_SIZE = 0x1e + DEVLINK_ATTR_DPIPE_TABLE_MATCHES = 0x1f + DEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 0x20 + DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 0x21 + DEVLINK_ATTR_DPIPE_ENTRIES = 0x22 + DEVLINK_ATTR_DPIPE_ENTRY = 0x23 + DEVLINK_ATTR_DPIPE_ENTRY_INDEX = 0x24 + DEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 0x25 + DEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 0x26 + DEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 0x27 + DEVLINK_ATTR_DPIPE_MATCH = 0x28 + DEVLINK_ATTR_DPIPE_MATCH_VALUE = 0x29 + DEVLINK_ATTR_DPIPE_MATCH_TYPE = 0x2a + DEVLINK_ATTR_DPIPE_ACTION = 0x2b + DEVLINK_ATTR_DPIPE_ACTION_VALUE = 0x2c + DEVLINK_ATTR_DPIPE_ACTION_TYPE = 0x2d + DEVLINK_ATTR_DPIPE_VALUE = 0x2e + DEVLINK_ATTR_DPIPE_VALUE_MASK = 0x2f + DEVLINK_ATTR_DPIPE_VALUE_MAPPING = 0x30 + DEVLINK_ATTR_DPIPE_HEADERS = 0x31 + DEVLINK_ATTR_DPIPE_HEADER = 0x32 + DEVLINK_ATTR_DPIPE_HEADER_NAME = 0x33 + DEVLINK_ATTR_DPIPE_HEADER_ID = 0x34 + DEVLINK_ATTR_DPIPE_HEADER_FIELDS = 0x35 + DEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 0x36 + DEVLINK_ATTR_DPIPE_HEADER_INDEX = 0x37 + DEVLINK_ATTR_DPIPE_FIELD = 0x38 + DEVLINK_ATTR_DPIPE_FIELD_NAME = 0x39 + DEVLINK_ATTR_DPIPE_FIELD_ID = 0x3a + DEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 0x3b + DEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 0x3c + DEVLINK_ATTR_PAD = 0x3d + DEVLINK_ATTR_ESWITCH_ENCAP_MODE = 0x3e + DEVLINK_ATTR_RESOURCE_LIST = 0x3f + DEVLINK_ATTR_RESOURCE = 0x40 + DEVLINK_ATTR_RESOURCE_NAME = 0x41 + DEVLINK_ATTR_RESOURCE_ID = 0x42 + DEVLINK_ATTR_RESOURCE_SIZE = 0x43 + DEVLINK_ATTR_RESOURCE_SIZE_NEW = 0x44 + DEVLINK_ATTR_RESOURCE_SIZE_VALID = 0x45 + DEVLINK_ATTR_RESOURCE_SIZE_MIN = 0x46 + DEVLINK_ATTR_RESOURCE_SIZE_MAX = 0x47 + DEVLINK_ATTR_RESOURCE_SIZE_GRAN = 0x48 + DEVLINK_ATTR_RESOURCE_UNIT = 0x49 + DEVLINK_ATTR_RESOURCE_OCC = 0x4a + DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 0x4b + DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 0x4c + DEVLINK_ATTR_PORT_FLAVOUR = 0x4d + DEVLINK_ATTR_PORT_NUMBER = 0x4e + DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 0x4f + DEVLINK_ATTR_PARAM = 0x50 + DEVLINK_ATTR_PARAM_NAME = 0x51 + DEVLINK_ATTR_PARAM_GENERIC = 0x52 + DEVLINK_ATTR_PARAM_TYPE = 0x53 + DEVLINK_ATTR_PARAM_VALUES_LIST = 0x54 + DEVLINK_ATTR_PARAM_VALUE = 0x55 + DEVLINK_ATTR_PARAM_VALUE_DATA = 0x56 + DEVLINK_ATTR_PARAM_VALUE_CMODE = 0x57 + DEVLINK_ATTR_REGION_NAME = 0x58 + DEVLINK_ATTR_REGION_SIZE = 0x59 + DEVLINK_ATTR_REGION_SNAPSHOTS = 0x5a + DEVLINK_ATTR_REGION_SNAPSHOT = 0x5b + DEVLINK_ATTR_REGION_SNAPSHOT_ID = 0x5c + DEVLINK_ATTR_REGION_CHUNKS = 0x5d + DEVLINK_ATTR_REGION_CHUNK = 0x5e + DEVLINK_ATTR_REGION_CHUNK_DATA = 0x5f + DEVLINK_ATTR_REGION_CHUNK_ADDR = 0x60 + DEVLINK_ATTR_REGION_CHUNK_LEN = 0x61 + DEVLINK_ATTR_INFO_DRIVER_NAME = 0x62 + DEVLINK_ATTR_INFO_SERIAL_NUMBER = 0x63 + DEVLINK_ATTR_INFO_VERSION_FIXED = 0x64 + DEVLINK_ATTR_INFO_VERSION_RUNNING = 0x65 + DEVLINK_ATTR_INFO_VERSION_STORED = 0x66 + DEVLINK_ATTR_INFO_VERSION_NAME = 0x67 + DEVLINK_ATTR_INFO_VERSION_VALUE = 0x68 + DEVLINK_ATTR_SB_POOL_CELL_SIZE = 0x69 + DEVLINK_ATTR_FMSG = 0x6a + DEVLINK_ATTR_FMSG_OBJ_NEST_START = 0x6b + DEVLINK_ATTR_FMSG_PAIR_NEST_START = 0x6c + DEVLINK_ATTR_FMSG_ARR_NEST_START = 0x6d + DEVLINK_ATTR_FMSG_NEST_END = 0x6e + DEVLINK_ATTR_FMSG_OBJ_NAME = 0x6f + DEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 0x70 + DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 0x71 + DEVLINK_ATTR_HEALTH_REPORTER = 0x72 + DEVLINK_ATTR_HEALTH_REPORTER_NAME = 0x73 + DEVLINK_ATTR_HEALTH_REPORTER_STATE = 0x74 + DEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 0x75 + DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 0x76 + DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 0x77 + DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 0x78 + DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 0x79 + DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 0x7a + DEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 0x7b + DEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 0x7c + DEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 0x7d + DEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 0x7e + DEVLINK_ATTR_PORT_PCI_PF_NUMBER = 0x7f + DEVLINK_ATTR_PORT_PCI_VF_NUMBER = 0x80 + DEVLINK_ATTR_STATS = 0x81 + DEVLINK_ATTR_TRAP_NAME = 0x82 + DEVLINK_ATTR_TRAP_ACTION = 0x83 + DEVLINK_ATTR_TRAP_TYPE = 0x84 + DEVLINK_ATTR_TRAP_GENERIC = 0x85 + DEVLINK_ATTR_TRAP_METADATA = 0x86 + DEVLINK_ATTR_TRAP_GROUP_NAME = 0x87 + DEVLINK_ATTR_RELOAD_FAILED = 0x88 + DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 0x89 + DEVLINK_ATTR_NETNS_FD = 0x8a + DEVLINK_ATTR_NETNS_PID = 0x8b + DEVLINK_ATTR_NETNS_ID = 0x8c + DEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 0x8d + DEVLINK_ATTR_TRAP_POLICER_ID = 0x8e + DEVLINK_ATTR_TRAP_POLICER_RATE = 0x8f + DEVLINK_ATTR_TRAP_POLICER_BURST = 0x90 + DEVLINK_ATTR_PORT_FUNCTION = 0x91 + DEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 0x92 + DEVLINK_ATTR_PORT_LANES = 0x93 + DEVLINK_ATTR_PORT_SPLITTABLE = 0x94 + DEVLINK_ATTR_PORT_EXTERNAL = 0x95 + DEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 0x96 + DEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 0x97 + DEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 0x98 + DEVLINK_ATTR_RELOAD_ACTION = 0x99 + DEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 0x9a + DEVLINK_ATTR_RELOAD_LIMITS = 0x9b + DEVLINK_ATTR_DEV_STATS = 0x9c + DEVLINK_ATTR_RELOAD_STATS = 0x9d + DEVLINK_ATTR_RELOAD_STATS_ENTRY = 0x9e + DEVLINK_ATTR_RELOAD_STATS_LIMIT = 0x9f + DEVLINK_ATTR_RELOAD_STATS_VALUE = 0xa0 + DEVLINK_ATTR_REMOTE_RELOAD_STATS = 0xa1 + DEVLINK_ATTR_RELOAD_ACTION_INFO = 0xa2 + DEVLINK_ATTR_RELOAD_ACTION_STATS = 0xa3 + DEVLINK_ATTR_MAX = 0xa3 + DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 + DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 + DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 + DEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0x0 + DEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0x0 + DEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0x0 + DEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0x0 + DEVLINK_DPIPE_HEADER_ETHERNET = 0x0 + DEVLINK_DPIPE_HEADER_IPV4 = 0x1 + DEVLINK_DPIPE_HEADER_IPV6 = 0x2 + DEVLINK_RESOURCE_UNIT_ENTRY = 0x0 + DEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0x0 + DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 0x1 + DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x1 ) type FsverityDigest struct { @@ -2999,3 +3222,461 @@ const ( MPLS_IPTUNNEL_TTL = 0x2 MPLS_IPTUNNEL_MAX = 0x2 ) + +const ( + ETHTOOL_ID_UNSPEC = 0x0 + ETHTOOL_RX_COPYBREAK = 0x1 + ETHTOOL_TX_COPYBREAK = 0x2 + ETHTOOL_PFC_PREVENTION_TOUT = 0x3 + ETHTOOL_TUNABLE_UNSPEC = 0x0 + ETHTOOL_TUNABLE_U8 = 0x1 + ETHTOOL_TUNABLE_U16 = 0x2 + ETHTOOL_TUNABLE_U32 = 0x3 + ETHTOOL_TUNABLE_U64 = 0x4 + ETHTOOL_TUNABLE_STRING = 0x5 + ETHTOOL_TUNABLE_S8 = 0x6 + ETHTOOL_TUNABLE_S16 = 0x7 + ETHTOOL_TUNABLE_S32 = 0x8 + ETHTOOL_TUNABLE_S64 = 0x9 + ETHTOOL_PHY_ID_UNSPEC = 0x0 + ETHTOOL_PHY_DOWNSHIFT = 0x1 + ETHTOOL_PHY_FAST_LINK_DOWN = 0x2 + ETHTOOL_PHY_EDPD = 0x3 + ETHTOOL_LINK_EXT_STATE_AUTONEG = 0x0 + ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 0x1 + ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 0x2 + ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 0x3 + ETHTOOL_LINK_EXT_STATE_NO_CABLE = 0x4 + ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 0x5 + ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 0x6 + ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 0x7 + ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 0x8 + ETHTOOL_LINK_EXT_STATE_OVERHEAT = 0x9 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 0x3 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 0x4 + ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 0x5 + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 0x6 + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 0x3 + ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 0x4 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 0x3 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 0x4 + ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 0x5 + ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 0x2 + ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 0x1 + ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 0x2 + ETHTOOL_FLASH_ALL_REGIONS = 0x0 + ETHTOOL_F_UNSUPPORTED__BIT = 0x0 + ETHTOOL_F_WISH__BIT = 0x1 + ETHTOOL_F_COMPAT__BIT = 0x2 + ETHTOOL_FEC_NONE_BIT = 0x0 + ETHTOOL_FEC_AUTO_BIT = 0x1 + ETHTOOL_FEC_OFF_BIT = 0x2 + ETHTOOL_FEC_RS_BIT = 0x3 + ETHTOOL_FEC_BASER_BIT = 0x4 + ETHTOOL_FEC_LLRS_BIT = 0x5 + ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0x0 + ETHTOOL_LINK_MODE_10baseT_Full_BIT = 0x1 + ETHTOOL_LINK_MODE_100baseT_Half_BIT = 0x2 + ETHTOOL_LINK_MODE_100baseT_Full_BIT = 0x3 + ETHTOOL_LINK_MODE_1000baseT_Half_BIT = 0x4 + ETHTOOL_LINK_MODE_1000baseT_Full_BIT = 0x5 + ETHTOOL_LINK_MODE_Autoneg_BIT = 0x6 + ETHTOOL_LINK_MODE_TP_BIT = 0x7 + ETHTOOL_LINK_MODE_AUI_BIT = 0x8 + ETHTOOL_LINK_MODE_MII_BIT = 0x9 + ETHTOOL_LINK_MODE_FIBRE_BIT = 0xa + ETHTOOL_LINK_MODE_BNC_BIT = 0xb + ETHTOOL_LINK_MODE_10000baseT_Full_BIT = 0xc + ETHTOOL_LINK_MODE_Pause_BIT = 0xd + ETHTOOL_LINK_MODE_Asym_Pause_BIT = 0xe + ETHTOOL_LINK_MODE_2500baseX_Full_BIT = 0xf + ETHTOOL_LINK_MODE_Backplane_BIT = 0x10 + ETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 0x11 + ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 0x12 + ETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 0x13 + ETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 0x14 + ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 0x15 + ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 0x16 + ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 0x17 + ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 0x18 + ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 0x19 + ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 0x1a + ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 0x1b + ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 0x1c + ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 0x1d + ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 0x1e + ETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 0x1f + ETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 0x20 + ETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 0x21 + ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 0x22 + ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 0x23 + ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 0x24 + ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 0x25 + ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 0x26 + ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 0x27 + ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 0x28 + ETHTOOL_LINK_MODE_1000baseX_Full_BIT = 0x29 + ETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 0x2a + ETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 0x2b + ETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 0x2c + ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 0x2d + ETHTOOL_LINK_MODE_10000baseER_Full_BIT = 0x2e + ETHTOOL_LINK_MODE_2500baseT_Full_BIT = 0x2f + ETHTOOL_LINK_MODE_5000baseT_Full_BIT = 0x30 + ETHTOOL_LINK_MODE_FEC_NONE_BIT = 0x31 + ETHTOOL_LINK_MODE_FEC_RS_BIT = 0x32 + ETHTOOL_LINK_MODE_FEC_BASER_BIT = 0x33 + ETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 0x34 + ETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 0x35 + ETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 0x36 + ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 0x37 + ETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 0x38 + ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 0x39 + ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 0x3a + ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 0x3b + ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 0x3c + ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 0x3d + ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 0x3e + ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 0x3f + ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 0x40 + ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 0x41 + ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 0x42 + ETHTOOL_LINK_MODE_100baseT1_Full_BIT = 0x43 + ETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 0x44 + ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 0x45 + ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 0x46 + ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 0x47 + ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 0x48 + ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 0x49 + ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 0x4a + ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 0x4b + ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 0x4c + ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 0x4d + ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 0x4e + ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 0x4f + ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 0x50 + ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 0x51 + ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 0x52 + ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 0x53 + ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 0x54 + ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 0x55 + ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 0x56 + ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 0x57 + ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 0x58 + ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 0x59 + ETHTOOL_LINK_MODE_100baseFX_Half_BIT = 0x5a + ETHTOOL_LINK_MODE_100baseFX_Full_BIT = 0x5b + + ETHTOOL_MSG_USER_NONE = 0x0 + ETHTOOL_MSG_STRSET_GET = 0x1 + ETHTOOL_MSG_LINKINFO_GET = 0x2 + ETHTOOL_MSG_LINKINFO_SET = 0x3 + ETHTOOL_MSG_LINKMODES_GET = 0x4 + ETHTOOL_MSG_LINKMODES_SET = 0x5 + ETHTOOL_MSG_LINKSTATE_GET = 0x6 + ETHTOOL_MSG_DEBUG_GET = 0x7 + ETHTOOL_MSG_DEBUG_SET = 0x8 + ETHTOOL_MSG_WOL_GET = 0x9 + ETHTOOL_MSG_WOL_SET = 0xa + ETHTOOL_MSG_FEATURES_GET = 0xb + ETHTOOL_MSG_FEATURES_SET = 0xc + ETHTOOL_MSG_PRIVFLAGS_GET = 0xd + ETHTOOL_MSG_PRIVFLAGS_SET = 0xe + ETHTOOL_MSG_RINGS_GET = 0xf + ETHTOOL_MSG_RINGS_SET = 0x10 + ETHTOOL_MSG_CHANNELS_GET = 0x11 + ETHTOOL_MSG_CHANNELS_SET = 0x12 + ETHTOOL_MSG_COALESCE_GET = 0x13 + ETHTOOL_MSG_COALESCE_SET = 0x14 + ETHTOOL_MSG_PAUSE_GET = 0x15 + ETHTOOL_MSG_PAUSE_SET = 0x16 + ETHTOOL_MSG_EEE_GET = 0x17 + ETHTOOL_MSG_EEE_SET = 0x18 + ETHTOOL_MSG_TSINFO_GET = 0x19 + ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a + ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b + ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c + ETHTOOL_MSG_USER_MAX = 0x1c + ETHTOOL_MSG_KERNEL_NONE = 0x0 + ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 + ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 + ETHTOOL_MSG_LINKINFO_NTF = 0x3 + ETHTOOL_MSG_LINKMODES_GET_REPLY = 0x4 + ETHTOOL_MSG_LINKMODES_NTF = 0x5 + ETHTOOL_MSG_LINKSTATE_GET_REPLY = 0x6 + ETHTOOL_MSG_DEBUG_GET_REPLY = 0x7 + ETHTOOL_MSG_DEBUG_NTF = 0x8 + ETHTOOL_MSG_WOL_GET_REPLY = 0x9 + ETHTOOL_MSG_WOL_NTF = 0xa + ETHTOOL_MSG_FEATURES_GET_REPLY = 0xb + ETHTOOL_MSG_FEATURES_SET_REPLY = 0xc + ETHTOOL_MSG_FEATURES_NTF = 0xd + ETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 0xe + ETHTOOL_MSG_PRIVFLAGS_NTF = 0xf + ETHTOOL_MSG_RINGS_GET_REPLY = 0x10 + ETHTOOL_MSG_RINGS_NTF = 0x11 + ETHTOOL_MSG_CHANNELS_GET_REPLY = 0x12 + ETHTOOL_MSG_CHANNELS_NTF = 0x13 + ETHTOOL_MSG_COALESCE_GET_REPLY = 0x14 + ETHTOOL_MSG_COALESCE_NTF = 0x15 + ETHTOOL_MSG_PAUSE_GET_REPLY = 0x16 + ETHTOOL_MSG_PAUSE_NTF = 0x17 + ETHTOOL_MSG_EEE_GET_REPLY = 0x18 + ETHTOOL_MSG_EEE_NTF = 0x19 + ETHTOOL_MSG_TSINFO_GET_REPLY = 0x1a + ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b + ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c + ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d + ETHTOOL_MSG_KERNEL_MAX = 0x1d + ETHTOOL_A_HEADER_UNSPEC = 0x0 + ETHTOOL_A_HEADER_DEV_INDEX = 0x1 + ETHTOOL_A_HEADER_DEV_NAME = 0x2 + ETHTOOL_A_HEADER_FLAGS = 0x3 + ETHTOOL_A_HEADER_MAX = 0x3 + ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0 + ETHTOOL_A_BITSET_BIT_INDEX = 0x1 + ETHTOOL_A_BITSET_BIT_NAME = 0x2 + ETHTOOL_A_BITSET_BIT_VALUE = 0x3 + ETHTOOL_A_BITSET_BIT_MAX = 0x3 + ETHTOOL_A_BITSET_BITS_UNSPEC = 0x0 + ETHTOOL_A_BITSET_BITS_BIT = 0x1 + ETHTOOL_A_BITSET_BITS_MAX = 0x1 + ETHTOOL_A_BITSET_UNSPEC = 0x0 + ETHTOOL_A_BITSET_NOMASK = 0x1 + ETHTOOL_A_BITSET_SIZE = 0x2 + ETHTOOL_A_BITSET_BITS = 0x3 + ETHTOOL_A_BITSET_VALUE = 0x4 + ETHTOOL_A_BITSET_MASK = 0x5 + ETHTOOL_A_BITSET_MAX = 0x5 + ETHTOOL_A_STRING_UNSPEC = 0x0 + ETHTOOL_A_STRING_INDEX = 0x1 + ETHTOOL_A_STRING_VALUE = 0x2 + ETHTOOL_A_STRING_MAX = 0x2 + ETHTOOL_A_STRINGS_UNSPEC = 0x0 + ETHTOOL_A_STRINGS_STRING = 0x1 + ETHTOOL_A_STRINGS_MAX = 0x1 + ETHTOOL_A_STRINGSET_UNSPEC = 0x0 + ETHTOOL_A_STRINGSET_ID = 0x1 + ETHTOOL_A_STRINGSET_COUNT = 0x2 + ETHTOOL_A_STRINGSET_STRINGS = 0x3 + ETHTOOL_A_STRINGSET_MAX = 0x3 + ETHTOOL_A_STRINGSETS_UNSPEC = 0x0 + ETHTOOL_A_STRINGSETS_STRINGSET = 0x1 + ETHTOOL_A_STRINGSETS_MAX = 0x1 + ETHTOOL_A_STRSET_UNSPEC = 0x0 + ETHTOOL_A_STRSET_HEADER = 0x1 + ETHTOOL_A_STRSET_STRINGSETS = 0x2 + ETHTOOL_A_STRSET_COUNTS_ONLY = 0x3 + ETHTOOL_A_STRSET_MAX = 0x3 + ETHTOOL_A_LINKINFO_UNSPEC = 0x0 + ETHTOOL_A_LINKINFO_HEADER = 0x1 + ETHTOOL_A_LINKINFO_PORT = 0x2 + ETHTOOL_A_LINKINFO_PHYADDR = 0x3 + ETHTOOL_A_LINKINFO_TP_MDIX = 0x4 + ETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 0x5 + ETHTOOL_A_LINKINFO_TRANSCEIVER = 0x6 + ETHTOOL_A_LINKINFO_MAX = 0x6 + ETHTOOL_A_LINKMODES_UNSPEC = 0x0 + ETHTOOL_A_LINKMODES_HEADER = 0x1 + ETHTOOL_A_LINKMODES_AUTONEG = 0x2 + ETHTOOL_A_LINKMODES_OURS = 0x3 + ETHTOOL_A_LINKMODES_PEER = 0x4 + ETHTOOL_A_LINKMODES_SPEED = 0x5 + ETHTOOL_A_LINKMODES_DUPLEX = 0x6 + ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 0x7 + ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 0x8 + ETHTOOL_A_LINKMODES_MAX = 0x8 + ETHTOOL_A_LINKSTATE_UNSPEC = 0x0 + ETHTOOL_A_LINKSTATE_HEADER = 0x1 + ETHTOOL_A_LINKSTATE_LINK = 0x2 + ETHTOOL_A_LINKSTATE_SQI = 0x3 + ETHTOOL_A_LINKSTATE_SQI_MAX = 0x4 + ETHTOOL_A_LINKSTATE_EXT_STATE = 0x5 + ETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 0x6 + ETHTOOL_A_LINKSTATE_MAX = 0x6 + ETHTOOL_A_DEBUG_UNSPEC = 0x0 + ETHTOOL_A_DEBUG_HEADER = 0x1 + ETHTOOL_A_DEBUG_MSGMASK = 0x2 + ETHTOOL_A_DEBUG_MAX = 0x2 + ETHTOOL_A_WOL_UNSPEC = 0x0 + ETHTOOL_A_WOL_HEADER = 0x1 + ETHTOOL_A_WOL_MODES = 0x2 + ETHTOOL_A_WOL_SOPASS = 0x3 + ETHTOOL_A_WOL_MAX = 0x3 + ETHTOOL_A_FEATURES_UNSPEC = 0x0 + ETHTOOL_A_FEATURES_HEADER = 0x1 + ETHTOOL_A_FEATURES_HW = 0x2 + ETHTOOL_A_FEATURES_WANTED = 0x3 + ETHTOOL_A_FEATURES_ACTIVE = 0x4 + ETHTOOL_A_FEATURES_NOCHANGE = 0x5 + ETHTOOL_A_FEATURES_MAX = 0x5 + ETHTOOL_A_PRIVFLAGS_UNSPEC = 0x0 + ETHTOOL_A_PRIVFLAGS_HEADER = 0x1 + ETHTOOL_A_PRIVFLAGS_FLAGS = 0x2 + ETHTOOL_A_PRIVFLAGS_MAX = 0x2 + ETHTOOL_A_RINGS_UNSPEC = 0x0 + ETHTOOL_A_RINGS_HEADER = 0x1 + ETHTOOL_A_RINGS_RX_MAX = 0x2 + ETHTOOL_A_RINGS_RX_MINI_MAX = 0x3 + ETHTOOL_A_RINGS_RX_JUMBO_MAX = 0x4 + ETHTOOL_A_RINGS_TX_MAX = 0x5 + ETHTOOL_A_RINGS_RX = 0x6 + ETHTOOL_A_RINGS_RX_MINI = 0x7 + ETHTOOL_A_RINGS_RX_JUMBO = 0x8 + ETHTOOL_A_RINGS_TX = 0x9 + ETHTOOL_A_RINGS_MAX = 0x9 + ETHTOOL_A_CHANNELS_UNSPEC = 0x0 + ETHTOOL_A_CHANNELS_HEADER = 0x1 + ETHTOOL_A_CHANNELS_RX_MAX = 0x2 + ETHTOOL_A_CHANNELS_TX_MAX = 0x3 + ETHTOOL_A_CHANNELS_OTHER_MAX = 0x4 + ETHTOOL_A_CHANNELS_COMBINED_MAX = 0x5 + ETHTOOL_A_CHANNELS_RX_COUNT = 0x6 + ETHTOOL_A_CHANNELS_TX_COUNT = 0x7 + ETHTOOL_A_CHANNELS_OTHER_COUNT = 0x8 + ETHTOOL_A_CHANNELS_COMBINED_COUNT = 0x9 + ETHTOOL_A_CHANNELS_MAX = 0x9 + ETHTOOL_A_COALESCE_UNSPEC = 0x0 + ETHTOOL_A_COALESCE_HEADER = 0x1 + ETHTOOL_A_COALESCE_RX_USECS = 0x2 + ETHTOOL_A_COALESCE_RX_MAX_FRAMES = 0x3 + ETHTOOL_A_COALESCE_RX_USECS_IRQ = 0x4 + ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 0x5 + ETHTOOL_A_COALESCE_TX_USECS = 0x6 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES = 0x7 + ETHTOOL_A_COALESCE_TX_USECS_IRQ = 0x8 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 0x9 + ETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 0xa + ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 0xb + ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 0xc + ETHTOOL_A_COALESCE_PKT_RATE_LOW = 0xd + ETHTOOL_A_COALESCE_RX_USECS_LOW = 0xe + ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 0xf + ETHTOOL_A_COALESCE_TX_USECS_LOW = 0x10 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 0x11 + ETHTOOL_A_COALESCE_PKT_RATE_HIGH = 0x12 + ETHTOOL_A_COALESCE_RX_USECS_HIGH = 0x13 + ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 0x14 + ETHTOOL_A_COALESCE_TX_USECS_HIGH = 0x15 + ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 0x16 + ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 + ETHTOOL_A_COALESCE_MAX = 0x17 + ETHTOOL_A_PAUSE_UNSPEC = 0x0 + ETHTOOL_A_PAUSE_HEADER = 0x1 + ETHTOOL_A_PAUSE_AUTONEG = 0x2 + ETHTOOL_A_PAUSE_RX = 0x3 + ETHTOOL_A_PAUSE_TX = 0x4 + ETHTOOL_A_PAUSE_STATS = 0x5 + ETHTOOL_A_PAUSE_MAX = 0x5 + ETHTOOL_A_PAUSE_STAT_UNSPEC = 0x0 + ETHTOOL_A_PAUSE_STAT_PAD = 0x1 + ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 + ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 0x3 + ETHTOOL_A_PAUSE_STAT_MAX = 0x3 + ETHTOOL_A_EEE_UNSPEC = 0x0 + ETHTOOL_A_EEE_HEADER = 0x1 + ETHTOOL_A_EEE_MODES_OURS = 0x2 + ETHTOOL_A_EEE_MODES_PEER = 0x3 + ETHTOOL_A_EEE_ACTIVE = 0x4 + ETHTOOL_A_EEE_ENABLED = 0x5 + ETHTOOL_A_EEE_TX_LPI_ENABLED = 0x6 + ETHTOOL_A_EEE_TX_LPI_TIMER = 0x7 + ETHTOOL_A_EEE_MAX = 0x7 + ETHTOOL_A_TSINFO_UNSPEC = 0x0 + ETHTOOL_A_TSINFO_HEADER = 0x1 + ETHTOOL_A_TSINFO_TIMESTAMPING = 0x2 + ETHTOOL_A_TSINFO_TX_TYPES = 0x3 + ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 + ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 + ETHTOOL_A_TSINFO_MAX = 0x5 + ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_MAX = 0x1 + ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC = 0x0 + ETHTOOL_A_CABLE_RESULT_CODE_OK = 0x1 + ETHTOOL_A_CABLE_RESULT_CODE_OPEN = 0x2 + ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT = 0x3 + ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT = 0x4 + ETHTOOL_A_CABLE_PAIR_A = 0x0 + ETHTOOL_A_CABLE_PAIR_B = 0x1 + ETHTOOL_A_CABLE_PAIR_C = 0x2 + ETHTOOL_A_CABLE_PAIR_D = 0x3 + ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0 + ETHTOOL_A_CABLE_RESULT_PAIR = 0x1 + ETHTOOL_A_CABLE_RESULT_CODE = 0x2 + ETHTOOL_A_CABLE_RESULT_MAX = 0x2 + ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0 + ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1 + ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2 + ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2 + ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1 + ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2 + ETHTOOL_A_CABLE_NEST_UNSPEC = 0x0 + ETHTOOL_A_CABLE_NEST_RESULT = 0x1 + ETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 0x2 + ETHTOOL_A_CABLE_NEST_MAX = 0x2 + ETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_NTF_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_NTF_STATUS = 0x2 + ETHTOOL_A_CABLE_TEST_NTF_NEST = 0x3 + ETHTOOL_A_CABLE_TEST_NTF_MAX = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 0x1 + ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 0x2 + ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 0x4 + ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 0x4 + ETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_TDR_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_TDR_CFG = 0x2 + ETHTOOL_A_CABLE_TEST_TDR_MAX = 0x2 + ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0x0 + ETHTOOL_A_CABLE_AMPLITUDE_PAIR = 0x1 + ETHTOOL_A_CABLE_AMPLITUDE_mV = 0x2 + ETHTOOL_A_CABLE_AMPLITUDE_MAX = 0x2 + ETHTOOL_A_CABLE_PULSE_UNSPEC = 0x0 + ETHTOOL_A_CABLE_PULSE_mV = 0x1 + ETHTOOL_A_CABLE_PULSE_MAX = 0x1 + ETHTOOL_A_CABLE_STEP_UNSPEC = 0x0 + ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 0x1 + ETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 0x2 + ETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 0x3 + ETHTOOL_A_CABLE_STEP_MAX = 0x3 + ETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TDR_NEST_STEP = 0x1 + ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 0x2 + ETHTOOL_A_CABLE_TDR_NEST_PULSE = 0x3 + ETHTOOL_A_CABLE_TDR_NEST_MAX = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC = 0x0 + ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER = 0x1 + ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS = 0x2 + ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST = 0x3 + ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = 0x3 + ETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0x0 + ETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 0x1 + ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 0x2 + ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 0x1 + ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 0x2 + ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 0x2 + ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 0x1 + ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 0x2 + ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 0x3 + ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 0x3 + ETHTOOL_A_TUNNEL_UDP_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_UDP_TABLE = 0x1 + ETHTOOL_A_TUNNEL_UDP_MAX = 0x1 + ETHTOOL_A_TUNNEL_INFO_UNSPEC = 0x0 + ETHTOOL_A_TUNNEL_INFO_HEADER = 0x1 + ETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 0x2 + ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index d54618aa6..088bd77e3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build 386,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index 741d25be9..078d958ec 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build amd64,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index e8d982c3d..2d39122f4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 311cf2155..304cbd045 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build arm64,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 1312bdf77..7d9d57006 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 2a9934819..a1eb2577b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips64,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index f964307b2..2e5ce3b6a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mips64le,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index ca0fab270..bbaa1200b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build mipsle,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 257e00424..0e6e8a774 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build ppc64,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 980dd3173..7382f385f 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build ppc64le,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index d9fdab20b..28d552216 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build riscv64,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index c25de8c67..a91a7a44b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build s390x,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 97fca6534..f824b2358 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. // +build sparc64,linux diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go index a89100c08..3f11f88e3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -248,6 +248,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x14 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x1c diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go index 289184e0b..0bed83af5 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -255,6 +255,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x14 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go index 428c450e4..e4e3bf736 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -253,6 +253,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x14 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x1c diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go index 6f1f2842c..efac861bb 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go @@ -255,6 +255,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x14 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go index 61ea0019a..80fa295f1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -231,6 +231,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x1c diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go index 87a493f68..560dd6d08 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -235,6 +235,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go index d80836efa..0c1700fa4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -235,6 +235,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x8 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x1c diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go index 4e158746f..5b3e46633 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go @@ -231,6 +231,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go index 992a1f8c0..62bff1670 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go @@ -231,6 +231,7 @@ const ( SizeofSockaddrUnix = 0x6a SizeofSockaddrDatalink = 0x20 SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go index db817f3ba..ca512aff7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -234,6 +234,7 @@ const ( SizeofSockaddrUnix = 0x6e SizeofSockaddrDatalink = 0xfc SizeofLinger = 0x8 + SizeofIovec = 0x10 SizeofIPMreq = 0x8 SizeofIPv6Mreq = 0x14 SizeofMsghdr = 0x30 diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go index 9cd147b7e..115341fba 100644 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -391,7 +391,6 @@ func loadLibraryEx(name string, system bool) (*DLL, error) { var flags uintptr if system { if canDoSearchSystem32() { - const LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800 flags = LOAD_LIBRARY_SEARCH_SYSTEM32 } else if isBaseName(name) { // WindowsXP or unpatched Windows machine diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index 14906485f..69eb462c5 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -624,6 +624,7 @@ func (tml *Tokenmandatorylabel) Size() uint32 { // Authorization Functions //sys checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership +//sys isTokenRestricted(tokenHandle Token) (ret bool, err error) [!failretval] = advapi32.IsTokenRestricted //sys OpenProcessToken(process Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken //sys OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) = advapi32.OpenThreadToken //sys ImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf @@ -837,6 +838,16 @@ func (t Token) IsMember(sid *SID) (bool, error) { return b != 0, nil } +// IsRestricted reports whether the access token t is a restricted token. +func (t Token) IsRestricted() (isRestricted bool, err error) { + isRestricted, err = isTokenRestricted(t) + if !isRestricted && err == syscall.EINVAL { + // If err is EINVAL, this returned ERROR_SUCCESS indicating a non-restricted token. + err = nil + } + return +} + const ( WTS_CONSOLE_CONNECT = 0x1 WTS_CONSOLE_DISCONNECT = 0x2 diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go index f54ff90aa..b269850d0 100644 --- a/vendor/golang.org/x/sys/windows/service.go +++ b/vendor/golang.org/x/sys/windows/service.go @@ -128,6 +128,10 @@ const ( SERVICE_NOTIFY_CREATED = 0x00000080 SERVICE_NOTIFY_DELETED = 0x00000100 SERVICE_NOTIFY_DELETE_PENDING = 0x00000200 + + SC_EVENT_DATABASE_CHANGE = 0 + SC_EVENT_PROPERTY_CHANGE = 1 + SC_EVENT_STATUS_CHANGE = 2 ) type SERVICE_STATUS struct { @@ -229,3 +233,5 @@ type QUERY_SERVICE_LOCK_STATUS struct { //sys EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW //sys QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx //sys NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW +//sys SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications? +//sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 86a46f771..0197df872 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -18,9 +18,11 @@ import ( ) type Handle uintptr +type HWND uintptr const ( InvalidHandle = ^Handle(0) + InvalidHWND = ^HWND(0) // Flags for DefineDosDevice. DDD_EXACT_MATCH_ON_REMOVE = 0x00000004 @@ -170,6 +172,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys GetProcAddress(module Handle, procname string) (proc uintptr, err error) //sys GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW //sys GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW +//sys SetDefaultDllDirectories(directoryFlags uint32) (err error) +//sys SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW //sys GetVersion() (ver uint32, err error) //sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW //sys ExitProcess(exitcode uint32) @@ -212,6 +216,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW //sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) //sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW +//sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId +//sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow +//sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW +//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx //sys shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath //sys TerminateProcess(handle Handle, exitcode uint32) (err error) //sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) @@ -257,22 +265,35 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect //sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile //sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW +//sys FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW +//sys FindNextChangeNotification(handle Handle) (err error) +//sys FindCloseChangeNotification(handle Handle) (err error) //sys CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW -//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) [failretval==InvalidHandle] = crypt32.CertOpenStore +//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore //sys CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore -//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore +//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore //sys CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore //sys CertDeleteCertificateFromStore(certContext *CertContext) (err error) = crypt32.CertDeleteCertificateFromStore -//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain -//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain -//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext -//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext -//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy +//sys CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) = crypt32.CertDuplicateCertificateContext +//sys PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore +//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain +//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain +//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext +//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext +//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy +//sys CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) = crypt32.CertGetNameStringW +//sys CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) = crypt32.CertFindExtension +//sys CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) = crypt32.CryptQueryObject +//sys CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) = crypt32.CryptDecodeObject +//sys CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptProtectData +//sys CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptUnprotectData +//sys WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) = wintrust.WinVerifyTrustEx //sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW //sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey //sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW //sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW //sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW +//sys RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) = advapi32.RegNotifyChangeKeyValue //sys GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId //sys ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId //sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode @@ -339,8 +360,6 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW //sys SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW //sys SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW -//sys MessageBox(hwnd Handle, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW -//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx //sys InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW //sys SetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters //sys GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index e7ae37f88..fd4260762 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -227,7 +227,7 @@ const ( ) const ( - // filters for ReadDirectoryChangesW + // filters for ReadDirectoryChangesW and FindFirstChangeNotificationW FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 @@ -249,24 +249,27 @@ const ( const ( // wincrypt.h - PROV_RSA_FULL = 1 - PROV_RSA_SIG = 2 - PROV_DSS = 3 - PROV_FORTEZZA = 4 - PROV_MS_EXCHANGE = 5 - PROV_SSL = 6 - PROV_RSA_SCHANNEL = 12 - PROV_DSS_DH = 13 - PROV_EC_ECDSA_SIG = 14 - PROV_EC_ECNRA_SIG = 15 - PROV_EC_ECDSA_FULL = 16 - PROV_EC_ECNRA_FULL = 17 - PROV_DH_SCHANNEL = 18 - PROV_SPYRUS_LYNKS = 20 - PROV_RNG = 21 - PROV_INTEL_SEC = 22 - PROV_REPLACE_OWF = 23 - PROV_RSA_AES = 24 + /* certenrolld_begin -- PROV_RSA_*/ + PROV_RSA_FULL = 1 + PROV_RSA_SIG = 2 + PROV_DSS = 3 + PROV_FORTEZZA = 4 + PROV_MS_EXCHANGE = 5 + PROV_SSL = 6 + PROV_RSA_SCHANNEL = 12 + PROV_DSS_DH = 13 + PROV_EC_ECDSA_SIG = 14 + PROV_EC_ECNRA_SIG = 15 + PROV_EC_ECDSA_FULL = 16 + PROV_EC_ECNRA_FULL = 17 + PROV_DH_SCHANNEL = 18 + PROV_SPYRUS_LYNKS = 20 + PROV_RNG = 21 + PROV_INTEL_SEC = 22 + PROV_REPLACE_OWF = 23 + PROV_RSA_AES = 24 + + /* dwFlags definitions for CryptAcquireContext */ CRYPT_VERIFYCONTEXT = 0xF0000000 CRYPT_NEWKEYSET = 0x00000008 CRYPT_DELETEKEYSET = 0x00000010 @@ -274,6 +277,17 @@ const ( CRYPT_SILENT = 0x00000040 CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 + /* Flags for PFXImportCertStore */ + CRYPT_EXPORTABLE = 0x00000001 + CRYPT_USER_PROTECTED = 0x00000002 + CRYPT_USER_KEYSET = 0x00001000 + PKCS12_PREFER_CNG_KSP = 0x00000100 + PKCS12_ALWAYS_CNG_KSP = 0x00000200 + PKCS12_ALLOW_OVERWRITE_KEY = 0x00004000 + PKCS12_NO_PERSIST_KEY = 0x00008000 + PKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010 + + /* Default usage match type is AND with value zero */ USAGE_MATCH_TYPE_AND = 0 USAGE_MATCH_TYPE_OR = 1 @@ -409,6 +423,71 @@ const ( CERT_CHAIN_POLICY_EV = 8 CERT_CHAIN_POLICY_SSL_F12 = 9 + /* Certificate Store close flags */ + CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001 + CERT_CLOSE_STORE_CHECK_FLAG = 0x00000002 + + /* CryptQueryObject object type */ + CERT_QUERY_OBJECT_FILE = 1 + CERT_QUERY_OBJECT_BLOB = 2 + + /* CryptQueryObject content type flags */ + CERT_QUERY_CONTENT_CERT = 1 + CERT_QUERY_CONTENT_CTL = 2 + CERT_QUERY_CONTENT_CRL = 3 + CERT_QUERY_CONTENT_SERIALIZED_STORE = 4 + CERT_QUERY_CONTENT_SERIALIZED_CERT = 5 + CERT_QUERY_CONTENT_SERIALIZED_CTL = 6 + CERT_QUERY_CONTENT_SERIALIZED_CRL = 7 + CERT_QUERY_CONTENT_PKCS7_SIGNED = 8 + CERT_QUERY_CONTENT_PKCS7_UNSIGNED = 9 + CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED = 10 + CERT_QUERY_CONTENT_PKCS10 = 11 + CERT_QUERY_CONTENT_PFX = 12 + CERT_QUERY_CONTENT_CERT_PAIR = 13 + CERT_QUERY_CONTENT_PFX_AND_LOAD = 14 + CERT_QUERY_CONTENT_FLAG_CERT = (1 << CERT_QUERY_CONTENT_CERT) + CERT_QUERY_CONTENT_FLAG_CTL = (1 << CERT_QUERY_CONTENT_CTL) + CERT_QUERY_CONTENT_FLAG_CRL = (1 << CERT_QUERY_CONTENT_CRL) + CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE = (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE) + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT = (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT) + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL = (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL) + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL = (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL) + CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED) + CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED = (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED) + CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED) + CERT_QUERY_CONTENT_FLAG_PKCS10 = (1 << CERT_QUERY_CONTENT_PKCS10) + CERT_QUERY_CONTENT_FLAG_PFX = (1 << CERT_QUERY_CONTENT_PFX) + CERT_QUERY_CONTENT_FLAG_CERT_PAIR = (1 << CERT_QUERY_CONTENT_CERT_PAIR) + CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD = (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD) + CERT_QUERY_CONTENT_FLAG_ALL = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR) + CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED) + + /* CryptQueryObject format type flags */ + CERT_QUERY_FORMAT_BINARY = 1 + CERT_QUERY_FORMAT_BASE64_ENCODED = 2 + CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED = 3 + CERT_QUERY_FORMAT_FLAG_BINARY = (1 << CERT_QUERY_FORMAT_BINARY) + CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED = (1 << CERT_QUERY_FORMAT_BASE64_ENCODED) + CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED) + CERT_QUERY_FORMAT_FLAG_ALL = (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED) + + /* CertGetNameString name types */ + CERT_NAME_EMAIL_TYPE = 1 + CERT_NAME_RDN_TYPE = 2 + CERT_NAME_ATTR_TYPE = 3 + CERT_NAME_SIMPLE_DISPLAY_TYPE = 4 + CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5 + CERT_NAME_DNS_TYPE = 6 + CERT_NAME_URL_TYPE = 7 + CERT_NAME_UPN_TYPE = 8 + + /* CertGetNameString flags */ + CERT_NAME_ISSUER_FLAG = 0x1 + CERT_NAME_DISABLE_IE4_UTF8_FLAG = 0x10000 + CERT_NAME_SEARCH_ALL_NAMES_FLAG = 0x2 + CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x00200000 + /* AuthType values for SSLExtraCertChainPolicyPara struct */ AUTHTYPE_CLIENT = 1 AUTHTYPE_SERVER = 2 @@ -419,6 +498,22 @@ const ( SECURITY_FLAG_IGNORE_WRONG_USAGE = 0x00000200 SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000 SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000 + + /* Flags for Crypt[Un]ProtectData */ + CRYPTPROTECT_UI_FORBIDDEN = 0x1 + CRYPTPROTECT_LOCAL_MACHINE = 0x4 + CRYPTPROTECT_CRED_SYNC = 0x8 + CRYPTPROTECT_AUDIT = 0x10 + CRYPTPROTECT_NO_RECOVERY = 0x20 + CRYPTPROTECT_VERIFY_PROTECTION = 0x40 + CRYPTPROTECT_CRED_REGENERATE = 0x80 + + /* Flags for CryptProtectPromptStruct */ + CRYPTPROTECT_PROMPT_ON_UNPROTECT = 1 + CRYPTPROTECT_PROMPT_ON_PROTECT = 2 + CRYPTPROTECT_PROMPT_RESERVED = 4 + CRYPTPROTECT_PROMPT_STRONG = 8 + CRYPTPROTECT_PROMPT_REQUIRE_STRONG = 16 ) const ( @@ -441,10 +536,58 @@ const ( REALTIME_PRIORITY_CLASS = 0x00000100 ) +/* wintrust.h constants for WinVerifyTrustEx */ +const ( + WTD_UI_ALL = 1 + WTD_UI_NONE = 2 + WTD_UI_NOBAD = 3 + WTD_UI_NOGOOD = 4 + + WTD_REVOKE_NONE = 0 + WTD_REVOKE_WHOLECHAIN = 1 + + WTD_CHOICE_FILE = 1 + WTD_CHOICE_CATALOG = 2 + WTD_CHOICE_BLOB = 3 + WTD_CHOICE_SIGNER = 4 + WTD_CHOICE_CERT = 5 + + WTD_STATEACTION_IGNORE = 0x00000000 + WTD_STATEACTION_VERIFY = 0x00000010 + WTD_STATEACTION_CLOSE = 0x00000002 + WTD_STATEACTION_AUTO_CACHE = 0x00000003 + WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004 + + WTD_USE_IE4_TRUST_FLAG = 0x1 + WTD_NO_IE4_CHAIN_FLAG = 0x2 + WTD_NO_POLICY_USAGE_FLAG = 0x4 + WTD_REVOCATION_CHECK_NONE = 0x10 + WTD_REVOCATION_CHECK_END_CERT = 0x20 + WTD_REVOCATION_CHECK_CHAIN = 0x40 + WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80 + WTD_SAFER_FLAG = 0x100 + WTD_HASH_ONLY_FLAG = 0x200 + WTD_USE_DEFAULT_OSVER_CHECK = 0x400 + WTD_LIFETIME_SIGNING_FLAG = 0x800 + WTD_CACHE_ONLY_URL_RETRIEVAL = 0x1000 + WTD_DISABLE_MD2_MD4 = 0x2000 + WTD_MOTW = 0x4000 + + WTD_UICONTEXT_EXECUTE = 0 + WTD_UICONTEXT_INSTALL = 1 +) + var ( OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00") OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00") OID_SGC_NETSCAPE = []byte("2.16.840.1.113730.4.1\x00") + + WINTRUST_ACTION_GENERIC_VERIFY_V2 = GUID{ + Data1: 0xaac56b, + Data2: 0xcd44, + Data3: 0x11d0, + Data4: [8]byte{0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee}, + } ) // Pointer represents a pointer to an arbitrary Windows type. @@ -1033,7 +1176,57 @@ type MibIfRow struct { } type CertInfo struct { - // Not implemented + Version uint32 + SerialNumber CryptIntegerBlob + SignatureAlgorithm CryptAlgorithmIdentifier + Issuer CertNameBlob + NotBefore Filetime + NotAfter Filetime + Subject CertNameBlob + SubjectPublicKeyInfo CertPublicKeyInfo + IssuerUniqueId CryptBitBlob + SubjectUniqueId CryptBitBlob + CountExtensions uint32 + Extensions *CertExtension +} + +type CertExtension struct { + ObjId *byte + Critical int32 + Value CryptObjidBlob +} + +type CryptAlgorithmIdentifier struct { + ObjId *byte + Parameters CryptObjidBlob +} + +type CertPublicKeyInfo struct { + Algorithm CryptAlgorithmIdentifier + PublicKey CryptBitBlob +} + +type DataBlob struct { + Size uint32 + Data *byte +} +type CryptIntegerBlob DataBlob +type CryptUintBlob DataBlob +type CryptObjidBlob DataBlob +type CertNameBlob DataBlob +type CertRdnValueBlob DataBlob +type CertBlob DataBlob +type CrlBlob DataBlob +type CryptDataBlob DataBlob +type CryptHashBlob DataBlob +type CryptDigestBlob DataBlob +type CryptDerBlob DataBlob +type CryptAttrBlob DataBlob + +type CryptBitBlob struct { + Size uint32 + Data *byte + UnusedBits uint32 } type CertContext struct { @@ -1139,6 +1332,66 @@ type CertChainPolicyStatus struct { ExtraPolicyStatus Pointer } +type CertPolicyInfo struct { + Identifier *byte + CountQualifiers uint32 + Qualifiers *CertPolicyQualifierInfo +} + +type CertPoliciesInfo struct { + Count uint32 + PolicyInfos *CertPolicyInfo +} + +type CertPolicyQualifierInfo struct { + // Not implemented +} + +type CertStrongSignPara struct { + Size uint32 + InfoChoice uint32 + InfoOrSerializedInfoOrOID unsafe.Pointer +} + +type CryptProtectPromptStruct struct { + Size uint32 + PromptFlags uint32 + App HWND + Prompt *uint16 +} + +type WinTrustData struct { + Size uint32 + PolicyCallbackData uintptr + SIPClientData uintptr + UIChoice uint32 + RevocationChecks uint32 + UnionChoice uint32 + FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer + StateAction uint32 + StateData Handle + URLReference *uint16 + ProvFlags uint32 + UIContext uint32 + SignatureSettings *WinTrustSignatureSettings +} + +type WinTrustFileInfo struct { + Size uint32 + FilePath *uint16 + File Handle + KnownSubject *GUID +} + +type WinTrustSignatureSettings struct { + Size uint32 + Index uint32 + Flags uint32 + SecondarySigs uint32 + VerifiedSigIndex uint32 + CryptoPolicy *CertStrongSignPara +} + const ( // do not reorder HKEY_CLASSES_ROOT = 0x80000000 + iota @@ -1801,3 +2054,40 @@ const ( FileCaseSensitiveInfo = 23 FileNormalizedNameInfo = 24 ) + +// LoadLibrary flags for determining from where to search for a DLL +const ( + DONT_RESOLVE_DLL_REFERENCES = 0x1 + LOAD_LIBRARY_AS_DATAFILE = 0x2 + LOAD_WITH_ALTERED_SEARCH_PATH = 0x8 + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x10 + LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20 + LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x40 + LOAD_LIBRARY_REQUIRE_SIGNED_TARGET = 0x80 + LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x100 + LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x200 + LOAD_LIBRARY_SEARCH_USER_DIRS = 0x400 + LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x800 + LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x1000 + LOAD_LIBRARY_SAFE_CURRENT_DIRS = 0x00002000 + LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000 + LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY = 0x00008000 +) + +// RegNotifyChangeKeyValue notifyFilter flags. +const ( + // REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted. + REG_NOTIFY_CHANGE_NAME = 0x00000001 + + // REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information. + REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002 + + // REG_NOTIFY_CHANGE_LAST_SET notifies the caller of changes to a value of the key. This can include adding or deleting a value, or changing an existing value. + REG_NOTIFY_CHANGE_LAST_SET = 0x00000004 + + // REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key. + REG_NOTIFY_CHANGE_SECURITY = 0x00000008 + + // REG_NOTIFY_THREAD_AGNOSTIC indicates that the lifetime of the registration must not be tied to the lifetime of the thread issuing the RegNotifyChangeKeyValue call. Note: This flag value is only supported in Windows 8 and later. + REG_NOTIFY_THREAD_AGNOSTIC = 0x10000000 +) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 8fbef7da6..c38c59d77 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -46,10 +46,12 @@ var ( modntdll = NewLazySystemDLL("ntdll.dll") modole32 = NewLazySystemDLL("ole32.dll") modpsapi = NewLazySystemDLL("psapi.dll") + modsechost = NewLazySystemDLL("sechost.dll") modsecur32 = NewLazySystemDLL("secur32.dll") modshell32 = NewLazySystemDLL("shell32.dll") moduser32 = NewLazySystemDLL("user32.dll") moduserenv = NewLazySystemDLL("userenv.dll") + modwintrust = NewLazySystemDLL("wintrust.dll") modws2_32 = NewLazySystemDLL("ws2_32.dll") modwtsapi32 = NewLazySystemDLL("wtsapi32.dll") @@ -95,6 +97,7 @@ var ( procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") procInitializeSecurityDescriptor = modadvapi32.NewProc("InitializeSecurityDescriptor") procInitiateSystemShutdownExW = modadvapi32.NewProc("InitiateSystemShutdownExW") + procIsTokenRestricted = modadvapi32.NewProc("IsTokenRestricted") procIsValidSecurityDescriptor = modadvapi32.NewProc("IsValidSecurityDescriptor") procIsValidSid = modadvapi32.NewProc("IsValidSid") procIsWellKnownSid = modadvapi32.NewProc("IsWellKnownSid") @@ -115,6 +118,7 @@ var ( procQueryServiceStatusEx = modadvapi32.NewProc("QueryServiceStatusEx") procRegCloseKey = modadvapi32.NewProc("RegCloseKey") procRegEnumKeyExW = modadvapi32.NewProc("RegEnumKeyExW") + procRegNotifyChangeKeyValue = modadvapi32.NewProc("RegNotifyChangeKeyValue") procRegOpenKeyExW = modadvapi32.NewProc("RegOpenKeyExW") procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW") procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") @@ -140,13 +144,21 @@ var ( procCertCloseStore = modcrypt32.NewProc("CertCloseStore") procCertCreateCertificateContext = modcrypt32.NewProc("CertCreateCertificateContext") procCertDeleteCertificateFromStore = modcrypt32.NewProc("CertDeleteCertificateFromStore") + procCertDuplicateCertificateContext = modcrypt32.NewProc("CertDuplicateCertificateContext") procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore") + procCertFindExtension = modcrypt32.NewProc("CertFindExtension") procCertFreeCertificateChain = modcrypt32.NewProc("CertFreeCertificateChain") procCertFreeCertificateContext = modcrypt32.NewProc("CertFreeCertificateContext") procCertGetCertificateChain = modcrypt32.NewProc("CertGetCertificateChain") + procCertGetNameStringW = modcrypt32.NewProc("CertGetNameStringW") procCertOpenStore = modcrypt32.NewProc("CertOpenStore") procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW") procCertVerifyCertificateChainPolicy = modcrypt32.NewProc("CertVerifyCertificateChainPolicy") + procCryptDecodeObject = modcrypt32.NewProc("CryptDecodeObject") + procCryptProtectData = modcrypt32.NewProc("CryptProtectData") + procCryptQueryObject = modcrypt32.NewProc("CryptQueryObject") + procCryptUnprotectData = modcrypt32.NewProc("CryptUnprotectData") + procPFXImportCertStore = modcrypt32.NewProc("PFXImportCertStore") procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W") procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W") procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") @@ -178,9 +190,12 @@ var ( procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") procExitProcess = modkernel32.NewProc("ExitProcess") procFindClose = modkernel32.NewProc("FindClose") + procFindCloseChangeNotification = modkernel32.NewProc("FindCloseChangeNotification") + procFindFirstChangeNotificationW = modkernel32.NewProc("FindFirstChangeNotificationW") procFindFirstFileW = modkernel32.NewProc("FindFirstFileW") procFindFirstVolumeMountPointW = modkernel32.NewProc("FindFirstVolumeMountPointW") procFindFirstVolumeW = modkernel32.NewProc("FindFirstVolumeW") + procFindNextChangeNotification = modkernel32.NewProc("FindNextChangeNotification") procFindNextFileW = modkernel32.NewProc("FindNextFileW") procFindNextVolumeMountPointW = modkernel32.NewProc("FindNextVolumeMountPointW") procFindNextVolumeW = modkernel32.NewProc("FindNextVolumeW") @@ -279,6 +294,8 @@ var ( procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") + procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories") + procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW") procSetEndOfFile = modkernel32.NewProc("SetEndOfFile") procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW") procSetErrorMode = modkernel32.NewProc("SetErrorMode") @@ -326,16 +343,21 @@ var ( procCoTaskMemFree = modole32.NewProc("CoTaskMemFree") procStringFromGUID2 = modole32.NewProc("StringFromGUID2") procEnumProcesses = modpsapi.NewProc("EnumProcesses") + procSubscribeServiceChangeNotifications = modsechost.NewProc("SubscribeServiceChangeNotifications") + procUnsubscribeServiceChangeNotifications = modsechost.NewProc("UnsubscribeServiceChangeNotifications") procGetUserNameExW = modsecur32.NewProc("GetUserNameExW") procTranslateNameW = modsecur32.NewProc("TranslateNameW") procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW") procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath") procShellExecuteW = modshell32.NewProc("ShellExecuteW") procExitWindowsEx = moduser32.NewProc("ExitWindowsEx") + procGetShellWindow = moduser32.NewProc("GetShellWindow") + procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") procMessageBoxW = moduser32.NewProc("MessageBoxW") procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") + procWinVerifyTrustEx = modwintrust.NewProc("WinVerifyTrustEx") procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") procWSACleanup = modws2_32.NewProc("WSACleanup") @@ -756,6 +778,15 @@ func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint return } +func isTokenRestricted(tokenHandle Token) (ret bool, err error) { + r0, _, e1 := syscall.Syscall(procIsTokenRestricted.Addr(), 1, uintptr(tokenHandle), 0, 0) + ret = r0 != 0 + if !ret { + err = errnoErr(e1) + } + return +} + func isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) { r0, _, _ := syscall.Syscall(procIsValidSecurityDescriptor.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) isValid = r0 != 0 @@ -916,6 +947,22 @@ func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reser return } +func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) { + var _p0 uint32 + if watchSubtree { + _p0 = 1 + } + var _p1 uint32 + if asynchronous { + _p1 = 1 + } + r0, _, _ := syscall.Syscall6(procRegNotifyChangeKeyValue.Addr(), 5, uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) if r0 != 0 { @@ -1148,6 +1195,12 @@ func CertDeleteCertificateFromStore(certContext *CertContext) (err error) { return } +func CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) { + r0, _, _ := syscall.Syscall(procCertDuplicateCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + dupContext = (*CertContext)(unsafe.Pointer(r0)) + return +} + func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) context = (*CertContext)(unsafe.Pointer(r0)) @@ -1157,6 +1210,12 @@ func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (contex return } +func CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) { + r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions))) + ret = (*CertExtension)(unsafe.Pointer(r0)) + return +} + func CertFreeCertificateChain(ctx *CertChainContext) { syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) return @@ -1178,10 +1237,16 @@ func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, a return } +func CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) { + r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size)) + chars = uint32(r0) + return +} + func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) handle = Handle(r0) - if handle == InvalidHandle { + if handle == 0 { err = errnoErr(e1) } return @@ -1204,6 +1269,47 @@ func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext return } +func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptProtectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) { + r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { + r1, _, e1 := syscall.Syscall9(procCryptUnprotectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) { + r0, _, e1 := syscall.Syscall(procPFXImportCertStore.Addr(), 3, uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags)) + store = Handle(r0) + if store == 0 { + err = errnoErr(e1) + } + return +} + func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) same = r0 != 0 @@ -1474,6 +1580,36 @@ func FindClose(handle Handle) (err error) { return } +func FindCloseChangeNotification(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindCloseChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(path) + if err != nil { + return + } + return _FindFirstChangeNotification(_p0, watchSubtree, notifyFilter) +} + +func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) { + var _p1 uint32 + if watchSubtree { + _p1 = 1 + } + r0, _, e1 := syscall.Syscall(procFindFirstChangeNotificationW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter)) + handle = Handle(r0) + if handle == InvalidHandle { + err = errnoErr(e1) + } + return +} + func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) handle = Handle(r0) @@ -1501,6 +1637,14 @@ func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, er return } +func FindNextChangeNotification(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func findNextFile1(handle Handle, data *win32finddata1) (err error) { r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) if r1 == 0 { @@ -2366,6 +2510,31 @@ func SetCurrentDirectory(path *uint16) (err error) { return } +func SetDefaultDllDirectories(directoryFlags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetDefaultDllDirectories.Addr(), 1, uintptr(directoryFlags), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetDllDirectory(path string) (err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(path) + if err != nil { + return + } + return _SetDllDirectory(_p0) +} + +func _SetDllDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetDllDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func SetEndOfFile(handle Handle) (err error) { r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) if r1 == 0 { @@ -2752,6 +2921,27 @@ func EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) { return } +func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) { + ret = procSubscribeServiceChangeNotifications.Find() + if ret != nil { + return + } + r0, _, _ := syscall.Syscall6(procSubscribeServiceChangeNotifications.Addr(), 5, uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription)), 0) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + +func UnsubscribeServiceChangeNotifications(subscription uintptr) (err error) { + err = procUnsubscribeServiceChangeNotifications.Find() + if err != nil { + return + } + syscall.Syscall(procUnsubscribeServiceChangeNotifications.Addr(), 1, uintptr(subscription), 0, 0) + return +} + func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) if r1&0xff == 0 { @@ -2801,7 +2991,22 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) { return } -func MessageBox(hwnd Handle, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { +func GetShellWindow() (shellWindow HWND) { + r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) + shellWindow = HWND(r0) + return +} + +func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0) + tid = uint32(r0) + if tid == 0 { + err = errnoErr(e1) + } + return +} + +func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) ret = int32(r0) if ret == 0 { @@ -2838,6 +3043,14 @@ func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { return } +func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { + r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) + if r0 != 0 { + ret = syscall.Errno(r0) + } + return +} + func FreeAddrInfoW(addrinfo *AddrinfoW) { syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) return diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go index eb3157f0b..e15b7bf6a 100644 --- a/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go @@ -57,7 +57,7 @@ loop: err = transform.ErrShortSrc break loop } - r = utf8.RuneError + r, size = utf8.RuneError, 1 goto write } size = 2 diff --git a/vendor/golang.org/x/text/internal/language/compact/tables.go b/vendor/golang.org/x/text/internal/language/compact/tables.go index 554ca354b..fe7ad9ea7 100644 --- a/vendor/golang.org/x/text/internal/language/compact/tables.go +++ b/vendor/golang.org/x/text/internal/language/compact/tables.go @@ -802,16 +802,16 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements 0x03a0010b, 0x03a00115, 0x03a00117, 0x03a0011c, 0x03a00120, 0x03a00128, 0x03a0015e, 0x04000000, 0x04300000, 0x04300099, 0x04400000, 0x0440012f, - 0x04800000, 0x0480006e, 0x05800000, 0x0581f000, - 0x0581f032, 0x05857000, 0x05857032, 0x05e00000, + 0x04800000, 0x0480006e, 0x05800000, 0x05820000, + 0x05820032, 0x0585a000, 0x0585a032, 0x05e00000, 0x05e00052, 0x07100000, 0x07100047, 0x07500000, 0x07500162, 0x07900000, 0x0790012f, 0x07e00000, 0x07e00038, 0x08200000, 0x0a000000, 0x0a0000c3, // Entry 40 - 5F 0x0a500000, 0x0a500035, 0x0a500099, 0x0a900000, 0x0a900053, 0x0a900099, 0x0b200000, 0x0b200078, - 0x0b500000, 0x0b500099, 0x0b700000, 0x0b71f000, - 0x0b71f033, 0x0b757000, 0x0b757033, 0x0d700000, + 0x0b500000, 0x0b500099, 0x0b700000, 0x0b720000, + 0x0b720033, 0x0b75a000, 0x0b75a033, 0x0d700000, 0x0d700022, 0x0d70006e, 0x0d700078, 0x0d70009e, 0x0db00000, 0x0db00035, 0x0db00099, 0x0dc00000, 0x0dc00106, 0x0df00000, 0x0df00131, 0x0e500000, @@ -947,7 +947,7 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements 0x38900000, 0x38900131, 0x39000000, 0x3900006f, 0x390000a4, 0x39500000, 0x39500099, 0x39800000, 0x3980007d, 0x39800106, 0x39d00000, 0x39d05000, - 0x39d050e8, 0x39d33000, 0x39d33099, 0x3a100000, + 0x39d050e8, 0x39d36000, 0x39d36099, 0x3a100000, 0x3b300000, 0x3b3000e9, 0x3bd00000, 0x3bd00001, 0x3be00000, 0x3be00024, 0x3c000000, 0x3c00002a, 0x3c000041, 0x3c00004e, 0x3c00005a, 0x3c000086, @@ -966,7 +966,7 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements 0x3fd00000, 0x3fd00072, 0x3fd000da, 0x3fd0010c, 0x3ff00000, 0x3ff000d1, 0x40100000, 0x401000c3, 0x40200000, 0x4020004c, 0x40700000, 0x40800000, - 0x40857000, 0x408570ba, 0x408dc000, 0x408dc0ba, + 0x4085a000, 0x4085a0ba, 0x408e3000, 0x408e30ba, 0x40c00000, 0x40c000b3, 0x41200000, 0x41200111, 0x41600000, 0x4160010f, 0x41c00000, 0x41d00000, // Entry 280 - 29F @@ -974,9 +974,9 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements 0x42300000, 0x42300164, 0x42900000, 0x42900062, 0x4290006f, 0x429000a4, 0x42900115, 0x43100000, 0x43100027, 0x431000c2, 0x4310014d, 0x43200000, - 0x4321f000, 0x4321f033, 0x4321f0bd, 0x4321f105, - 0x4321f14d, 0x43257000, 0x43257033, 0x432570bd, - 0x43257105, 0x4325714d, 0x43700000, 0x43a00000, + 0x43220000, 0x43220033, 0x432200bd, 0x43220105, + 0x4322014d, 0x4325a000, 0x4325a033, 0x4325a0bd, + 0x4325a105, 0x4325a14d, 0x43700000, 0x43a00000, 0x43b00000, 0x44400000, 0x44400031, 0x44400072, // Entry 2A0 - 2BF 0x4440010c, 0x44500000, 0x4450004b, 0x445000a4, @@ -992,24 +992,24 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements 0x49400106, 0x4a400000, 0x4a4000d4, 0x4a900000, 0x4a9000ba, 0x4ac00000, 0x4ac00053, 0x4ae00000, 0x4ae00130, 0x4b400000, 0x4b400099, 0x4b4000e8, - 0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc1f000, - 0x4bc1f137, 0x4bc57000, 0x4bc57137, 0x4be00000, - 0x4be57000, 0x4be570b4, 0x4bee3000, 0x4bee30b4, + 0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000, + 0x4bc20137, 0x4bc5a000, 0x4bc5a137, 0x4be00000, + 0x4be5a000, 0x4be5a0b4, 0x4beeb000, 0x4beeb0b4, 0x4c000000, 0x4c300000, 0x4c30013e, 0x4c900000, // Entry 2E0 - 2FF 0x4c900001, 0x4cc00000, 0x4cc0012f, 0x4ce00000, 0x4cf00000, 0x4cf0004e, 0x4e500000, 0x4e500114, 0x4f200000, 0x4fb00000, 0x4fb00131, 0x50900000, 0x50900052, 0x51200000, 0x51200001, 0x51800000, - 0x5180003b, 0x518000d6, 0x51f00000, 0x51f38000, - 0x51f38053, 0x51f39000, 0x51f3908d, 0x52800000, - 0x528000ba, 0x52900000, 0x52938000, 0x52938053, - 0x5293808d, 0x529380c6, 0x5293810d, 0x52939000, + 0x5180003b, 0x518000d6, 0x51f00000, 0x51f3b000, + 0x51f3b053, 0x51f3c000, 0x51f3c08d, 0x52800000, + 0x528000ba, 0x52900000, 0x5293b000, 0x5293b053, + 0x5293b08d, 0x5293b0c6, 0x5293b10d, 0x5293c000, // Entry 300 - 31F - 0x5293908d, 0x529390c6, 0x5293912e, 0x52f00000, + 0x5293c08d, 0x5293c0c6, 0x5293c12e, 0x52f00000, 0x52f00161, } // Size: 3116 bytes const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix" -// Total table size 3147 bytes (3KiB); checksum: F4E57D15 +// Total table size 3147 bytes (3KiB); checksum: BE816D44 diff --git a/vendor/golang.org/x/text/internal/language/parse.go b/vendor/golang.org/x/text/internal/language/parse.go index 2be83e1da..a2fdad89d 100644 --- a/vendor/golang.org/x/text/internal/language/parse.go +++ b/vendor/golang.org/x/text/internal/language/parse.go @@ -133,14 +133,15 @@ func (s *scanner) resizeRange(oldStart, oldEnd, newSize int) { s.start = oldStart if end := oldStart + newSize; end != oldEnd { diff := end - oldEnd - if end < cap(s.b) { - b := make([]byte, len(s.b)+diff) + var b []byte + if n := len(s.b) + diff; n > cap(s.b) { + b = make([]byte, n) copy(b, s.b[:oldStart]) - copy(b[end:], s.b[oldEnd:]) - s.b = b } else { - s.b = append(s.b[end:], s.b[oldEnd:]...) + b = s.b[:n:n] } + copy(b[end:], s.b[oldEnd:]) + s.b = b s.next = end + (s.next - s.end) s.end = end } diff --git a/vendor/golang.org/x/text/internal/language/tables.go b/vendor/golang.org/x/text/internal/language/tables.go index 239e2d29e..a19480c5b 100644 --- a/vendor/golang.org/x/text/internal/language/tables.go +++ b/vendor/golang.org/x/text/internal/language/tables.go @@ -7,9 +7,9 @@ import "golang.org/x/text/internal/tag" // CLDRVersion is the CLDR version from which the tables in this package are derived. const CLDRVersion = "32" -const NumLanguages = 8665 +const NumLanguages = 8717 -const NumScripts = 242 +const NumScripts = 251 const NumRegions = 357 @@ -284,14 +284,14 @@ var langNoIndex = [2197]uint8{ 0xfd, 0xdf, 0xfb, 0xfe, 0x9d, 0xb4, 0xd3, 0xff, 0xef, 0xff, 0xdf, 0xf7, 0x7f, 0xb7, 0xfd, 0xd5, 0xa5, 0x77, 0x40, 0xff, 0x9c, 0xc1, 0x41, 0x2c, - 0x08, 0x20, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80, + 0x08, 0x21, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80, // Entry C0 - FF 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96, - 0x1b, 0x14, 0x08, 0xf2, 0x2b, 0xe7, 0x17, 0x56, - 0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x71, 0xf3, 0xef, + 0x1b, 0x14, 0x08, 0xf3, 0x2b, 0xe7, 0x17, 0x56, + 0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x7b, 0xf3, 0xef, 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10, - 0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35, - 0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 0x81, 0x00, + 0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xff, 0x73, 0x35, + 0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x01, 0x81, 0x00, 0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d, // Entry 100 - 13F @@ -299,14 +299,14 @@ var langNoIndex = [2197]uint8{ 0x0d, 0x19, 0x41, 0xdf, 0x79, 0x22, 0x00, 0x00, 0x00, 0x5e, 0x64, 0xdc, 0x24, 0xe5, 0xd9, 0xe3, 0xfe, 0xff, 0xfd, 0xcb, 0x9f, 0x14, 0x01, 0x0c, - 0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc5, 0x67, 0x5f, - 0x56, 0x89, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00, + 0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc7, 0x67, 0x5f, + 0x56, 0x99, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xda, 0x56, 0x90, 0x69, 0x01, 0x2c, 0x96, 0x69, 0x20, 0xfb, // Entry 140 - 17F - 0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x08, 0x16, - 0x01, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06, - 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x09, + 0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x16, + 0x03, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06, + 0x0a, 0x00, 0x01, 0x00, 0x00, 0x10, 0x11, 0x09, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04, 0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x28, 0x04, @@ -322,7 +322,7 @@ var langNoIndex = [2197]uint8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, // Entry 1C0 - 1FF - 0x00, 0x01, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00, 0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55, @@ -332,28 +332,28 @@ var langNoIndex = [2197]uint8{ 0x00, 0x00, 0x00, 0x1e, 0xcd, 0xbf, 0x7a, 0xbf, // Entry 200 - 23F 0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27, - 0xcd, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5, + 0xed, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5, 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe0, 0xdf, - 0x03, 0x44, 0x08, 0x10, 0x01, 0x04, 0x01, 0xe3, - 0x92, 0x54, 0xdb, 0x28, 0xd1, 0x5f, 0xf6, 0x6d, + 0x03, 0x44, 0x08, 0x90, 0x01, 0x04, 0x01, 0xe3, + 0x92, 0x54, 0xdb, 0x28, 0xd3, 0x5f, 0xfe, 0x6d, 0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01, 0x21, 0x12, 0x64, 0x5f, 0xdd, 0x0e, 0x85, 0x4f, 0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54, // Entry 240 - 27F 0xe8, 0x03, 0xb4, 0x27, 0x23, 0x0d, 0x00, 0x00, - 0x20, 0x7b, 0x38, 0x02, 0x05, 0x84, 0x00, 0xf0, + 0x20, 0x7b, 0x78, 0x02, 0x05, 0x84, 0x00, 0xf0, 0xbb, 0x7e, 0x5a, 0x00, 0x18, 0x04, 0x81, 0x00, 0x00, 0x00, 0x80, 0x10, 0x90, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x04, 0x08, 0xa0, 0x70, 0xa5, 0x0c, 0x40, 0x00, 0x00, - 0x11, 0x04, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff, - 0x7b, 0x7f, 0x60, 0x00, 0x05, 0x9b, 0xdd, 0x66, + 0x11, 0x24, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff, + 0x7b, 0x7f, 0x70, 0x00, 0x05, 0x9b, 0xdd, 0x66, // Entry 280 - 2BF 0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x40, 0x05, 0xb5, 0xb6, 0x80, 0x08, 0x04, 0x00, 0x04, 0x51, 0xe2, 0xef, 0xfd, 0x3f, 0x05, 0x09, 0x08, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60, 0xe7, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80, 0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04, 0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20, @@ -397,9 +397,9 @@ var langNoIndex = [2197]uint8{ 0x02, 0x30, 0x9f, 0x7a, 0x16, 0xbd, 0x7f, 0x57, 0xf2, 0xff, 0x31, 0xff, 0xf2, 0x1e, 0x90, 0xf7, 0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x00, - 0x40, 0x54, 0x9f, 0x8a, 0xd9, 0xd9, 0x0e, 0x11, - 0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x00, 0x01, - 0x05, 0xd1, 0x50, 0x58, 0x00, 0x00, 0x00, 0x10, + 0x40, 0x54, 0x9f, 0x8a, 0xd9, 0xf9, 0x2e, 0x11, + 0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x40, 0x01, + 0x05, 0xd1, 0x50, 0x5c, 0x00, 0x00, 0x00, 0x10, 0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2, 0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe, // Entry 400 - 43F @@ -417,14 +417,14 @@ var langNoIndex = [2197]uint8{ 0x7f, 0x4e, 0xbf, 0x8f, 0xae, 0xff, 0xee, 0xdf, 0x7f, 0xf7, 0x73, 0x02, 0x02, 0x04, 0xfc, 0xf7, 0xff, 0xb7, 0xd7, 0xef, 0xfe, 0xcd, 0xf5, 0xce, - 0xe2, 0x8e, 0xe7, 0xbf, 0xb7, 0xff, 0x56, 0xbd, + 0xe2, 0x8e, 0xe7, 0xbf, 0xb7, 0xff, 0x56, 0xfd, 0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff, 0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x06, 0xc4, // Entry 480 - 4BF - 0x13, 0x50, 0x5d, 0xaf, 0xa6, 0xfd, 0x99, 0xfb, + 0x13, 0x50, 0x5d, 0xaf, 0xa6, 0xff, 0x99, 0xfb, 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20, 0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41, - 0xe2, 0xff, 0xfc, 0xdf, 0x00, 0x05, 0xc5, 0x05, + 0xe2, 0xff, 0xfc, 0xdf, 0x02, 0x05, 0xc5, 0x05, 0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x04, 0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00, @@ -437,12 +437,12 @@ var langNoIndex = [2197]uint8{ 0x13, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00, 0x01, 0x00, 0x00, 0xf0, 0x5b, 0xf4, 0xbe, 0x3d, - 0xba, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41, + 0xbe, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41, // Entry 500 - 53F 0x30, 0xff, 0x79, 0x72, 0x04, 0x00, 0x00, 0x49, 0x2d, 0x14, 0x27, 0x57, 0xed, 0xf1, 0x3f, 0xe7, 0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xf8, - 0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe5, 0xf7, + 0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe7, 0xf7, 0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10, 0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9, 0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c, @@ -473,7 +473,7 @@ var langNoIndex = [2197]uint8{ 0x31, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x20, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00, 0x00, 0x1f, 0xdf, 0xd2, 0xb9, 0xff, 0xfd, 0x3f, - 0x1f, 0x98, 0xcf, 0x9c, 0xbf, 0xaf, 0x5f, 0xfe, + 0x1f, 0x98, 0xcf, 0x9c, 0xff, 0xaf, 0x5f, 0xfe, // Entry 600 - 63F 0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9, 0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1, @@ -484,28 +484,28 @@ var langNoIndex = [2197]uint8{ 0xbe, 0x5f, 0x46, 0x1b, 0xe9, 0x5f, 0x50, 0x18, 0x02, 0xfa, 0xf7, 0x9d, 0x15, 0x97, 0x05, 0x0f, // Entry 640 - 67F - 0x75, 0xc4, 0x7d, 0x81, 0x92, 0xf1, 0x57, 0x6c, + 0x75, 0xc4, 0x7d, 0x81, 0x92, 0xf5, 0x57, 0x6c, 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde, - 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x1f, 0x00, 0x98, + 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x3f, 0x00, 0x98, 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff, - 0xb9, 0xda, 0x7d, 0x50, 0x1e, 0x15, 0x7b, 0xb4, + 0xb9, 0xda, 0x7d, 0xd0, 0x3e, 0x15, 0x7b, 0xb4, 0xf5, 0x3e, 0xff, 0xff, 0xf1, 0xf7, 0xff, 0xe7, 0x5f, 0xff, 0xff, 0x9e, 0xdb, 0xf6, 0xd7, 0xb9, 0xef, 0x27, 0x80, 0xbb, 0xc5, 0xff, 0xff, 0xe3, // Entry 680 - 6BF 0x97, 0x9d, 0xbf, 0x9f, 0xf7, 0xc7, 0xfd, 0x37, - 0xce, 0x7f, 0x04, 0x1d, 0x53, 0x7f, 0xf8, 0xda, + 0xce, 0x7f, 0x04, 0x1d, 0x73, 0x7f, 0xf8, 0xda, 0x5d, 0xce, 0x7d, 0x06, 0xb9, 0xea, 0x69, 0xa0, 0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x08, 0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x01, 0x06, 0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00, - 0x04, 0x00, 0x10, 0xcc, 0x58, 0xd5, 0x0d, 0x0f, + 0x04, 0x00, 0x10, 0xdc, 0x58, 0xd7, 0x0d, 0x0f, // Entry 6C0 - 6FF 0x14, 0x4d, 0xf1, 0x16, 0x44, 0xd1, 0x42, 0x08, 0x40, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, - 0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x08, 0x41, - 0x04, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00, + 0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x48, 0x41, + 0x24, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab, 0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, @@ -524,7 +524,7 @@ var langNoIndex = [2197]uint8{ 0xb0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x44, 0xcd, 0xf9, 0x5c, 0x00, 0x01, 0x00, 0x30, 0x04, 0x04, 0x55, 0x00, 0x01, 0x04, 0xf4, 0x3f, 0x4a, - 0x01, 0x00, 0x00, 0xb0, 0x80, 0x00, 0x55, 0x55, + 0x01, 0x00, 0x00, 0xb0, 0x80, 0x20, 0x55, 0x75, 0x97, 0x7c, 0x9f, 0x31, 0xcc, 0x68, 0xd1, 0x03, 0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60, @@ -538,8 +538,8 @@ var langNoIndex = [2197]uint8{ 0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02, 0xff, 0xef, 0xff, 0x4b, 0x85, 0x53, 0xf4, 0xed, // Entry 7C0 - 7FF - 0xdd, 0xbf, 0x72, 0x19, 0xc7, 0x0c, 0xd5, 0x42, - 0x54, 0xdd, 0x77, 0x14, 0x00, 0x80, 0x40, 0x56, + 0xdd, 0xbf, 0x72, 0x1d, 0xc7, 0x0c, 0xd5, 0x42, + 0xfc, 0xff, 0xf7, 0x1f, 0x00, 0x80, 0x40, 0x56, 0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff, 0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d, 0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80, @@ -556,7 +556,7 @@ var langNoIndex = [2197]uint8{ 0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10, 0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00, // Entry 840 - 87F - 0xf0, 0xfb, 0xfd, 0x3f, 0x05, 0x00, 0x12, 0x81, + 0xf0, 0xfb, 0xfd, 0x7f, 0x05, 0x00, 0x12, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28, 0x84, 0x00, 0x21, 0xc0, 0x23, 0x24, 0x00, 0x00, @@ -582,8 +582,8 @@ var altLangIndex = [6]uint16{ } // AliasMap maps langIDs to their suggested replacements. -// Size: 656 bytes, 164 elements -var AliasMap = [164]FromTo{ +// Size: 704 bytes, 176 elements +var AliasMap = [176]FromTo{ 0: {From: 0x82, To: 0x88}, 1: {From: 0x187, To: 0x1ae}, 2: {From: 0x1f3, To: 0x1e1}, @@ -603,224 +603,237 @@ var AliasMap = [164]FromTo{ 16: {From: 0x662, To: 0x431}, 17: {From: 0x6ed, To: 0x3a}, 18: {From: 0x6f8, To: 0x1d7}, - 19: {From: 0x73e, To: 0x21a1}, - 20: {From: 0x7b3, To: 0x56}, - 21: {From: 0x7b9, To: 0x299b}, - 22: {From: 0x7c5, To: 0x58}, - 23: {From: 0x7e6, To: 0x145}, - 24: {From: 0x80c, To: 0x5a}, - 25: {From: 0x815, To: 0x8d}, - 26: {From: 0x87e, To: 0x810}, - 27: {From: 0x8c3, To: 0xee3}, - 28: {From: 0x9ef, To: 0x331}, - 29: {From: 0xa36, To: 0x2c5}, - 30: {From: 0xa3d, To: 0xbf}, - 31: {From: 0xabe, To: 0x3322}, - 32: {From: 0xb38, To: 0x529}, - 33: {From: 0xb75, To: 0x265a}, - 34: {From: 0xb7e, To: 0xbc3}, - 35: {From: 0xb9b, To: 0x44e}, - 36: {From: 0xbbc, To: 0x4229}, - 37: {From: 0xbbf, To: 0x529}, - 38: {From: 0xbfe, To: 0x2da7}, - 39: {From: 0xc2e, To: 0x3181}, - 40: {From: 0xcb9, To: 0xf3}, - 41: {From: 0xd08, To: 0xfa}, - 42: {From: 0xdc8, To: 0x11a}, - 43: {From: 0xdd7, To: 0x32d}, - 44: {From: 0xdf8, To: 0xdfb}, - 45: {From: 0xdfe, To: 0x531}, - 46: {From: 0xedf, To: 0x205a}, - 47: {From: 0xeee, To: 0x2e9a}, - 48: {From: 0xf39, To: 0x367}, - 49: {From: 0x10d0, To: 0x140}, - 50: {From: 0x1104, To: 0x2d0}, - 51: {From: 0x11a0, To: 0x1ec}, - 52: {From: 0x1279, To: 0x21}, - 53: {From: 0x1424, To: 0x15e}, - 54: {From: 0x1470, To: 0x14e}, - 55: {From: 0x151f, To: 0xd9b}, - 56: {From: 0x1523, To: 0x390}, - 57: {From: 0x1532, To: 0x19f}, - 58: {From: 0x1580, To: 0x210}, - 59: {From: 0x1583, To: 0x10d}, - 60: {From: 0x15a3, To: 0x3caf}, - 61: {From: 0x166a, To: 0x19b}, - 62: {From: 0x16c8, To: 0x136}, - 63: {From: 0x1700, To: 0x29f8}, - 64: {From: 0x1718, To: 0x194}, - 65: {From: 0x1727, To: 0xf3f}, - 66: {From: 0x177a, To: 0x178}, - 67: {From: 0x1809, To: 0x17b6}, - 68: {From: 0x1816, To: 0x18f3}, - 69: {From: 0x188a, To: 0x436}, - 70: {From: 0x1979, To: 0x1d01}, - 71: {From: 0x1a74, To: 0x2bb0}, - 72: {From: 0x1a8a, To: 0x1f8}, - 73: {From: 0x1b5a, To: 0x1fa}, - 74: {From: 0x1b86, To: 0x1515}, - 75: {From: 0x1d64, To: 0x2c9b}, - 76: {From: 0x2038, To: 0x37b1}, - 77: {From: 0x203d, To: 0x20dd}, - 78: {From: 0x205a, To: 0x30b}, - 79: {From: 0x20e3, To: 0x274}, - 80: {From: 0x20ee, To: 0x263}, - 81: {From: 0x20f2, To: 0x22d}, - 82: {From: 0x20f9, To: 0x256}, - 83: {From: 0x210f, To: 0x21eb}, - 84: {From: 0x2135, To: 0x27d}, - 85: {From: 0x2160, To: 0x913}, - 86: {From: 0x2199, To: 0x121}, - 87: {From: 0x21ce, To: 0x1561}, - 88: {From: 0x21e6, To: 0x504}, - 89: {From: 0x21f4, To: 0x49f}, - 90: {From: 0x222d, To: 0x121}, - 91: {From: 0x2237, To: 0x121}, - 92: {From: 0x2262, To: 0x92a}, - 93: {From: 0x2316, To: 0x3226}, - 94: {From: 0x2382, To: 0x3365}, - 95: {From: 0x2472, To: 0x2c7}, - 96: {From: 0x24e4, To: 0x2ff}, - 97: {From: 0x24f0, To: 0x2fa}, - 98: {From: 0x24fa, To: 0x31f}, - 99: {From: 0x2550, To: 0xb5b}, - 100: {From: 0x25a9, To: 0xe2}, - 101: {From: 0x263e, To: 0x2d0}, - 102: {From: 0x26c9, To: 0x26b4}, - 103: {From: 0x26f9, To: 0x3c8}, - 104: {From: 0x2727, To: 0x3caf}, - 105: {From: 0x2765, To: 0x26b4}, - 106: {From: 0x2789, To: 0x4358}, - 107: {From: 0x28ef, To: 0x2837}, - 108: {From: 0x2914, To: 0x351}, - 109: {From: 0x2986, To: 0x2da7}, - 110: {From: 0x2b1a, To: 0x38d}, - 111: {From: 0x2bfc, To: 0x395}, - 112: {From: 0x2c3f, To: 0x3caf}, - 113: {From: 0x2cfc, To: 0x3be}, - 114: {From: 0x2d13, To: 0x597}, - 115: {From: 0x2d47, To: 0x148}, - 116: {From: 0x2d48, To: 0x148}, - 117: {From: 0x2dff, To: 0x2f1}, - 118: {From: 0x2e08, To: 0x19cc}, - 119: {From: 0x2e1a, To: 0x2d95}, - 120: {From: 0x2e21, To: 0x292}, - 121: {From: 0x2e54, To: 0x7d}, - 122: {From: 0x2e65, To: 0x2282}, - 123: {From: 0x2ea0, To: 0x2e9b}, - 124: {From: 0x2eef, To: 0x2ed7}, - 125: {From: 0x3193, To: 0x3c4}, - 126: {From: 0x3366, To: 0x338e}, - 127: {From: 0x342a, To: 0x3dc}, - 128: {From: 0x34ee, To: 0x18d0}, - 129: {From: 0x35c8, To: 0x2c9b}, - 130: {From: 0x35e6, To: 0x412}, - 131: {From: 0x3658, To: 0x246}, - 132: {From: 0x3676, To: 0x3f4}, - 133: {From: 0x36fd, To: 0x445}, - 134: {From: 0x37c0, To: 0x121}, - 135: {From: 0x3816, To: 0x38f2}, - 136: {From: 0x382b, To: 0x2c9b}, - 137: {From: 0x382f, To: 0xa9}, - 138: {From: 0x3832, To: 0x3228}, - 139: {From: 0x386c, To: 0x39a6}, - 140: {From: 0x3892, To: 0x3fc0}, - 141: {From: 0x38a5, To: 0x39d7}, - 142: {From: 0x38b4, To: 0x1fa4}, - 143: {From: 0x38b5, To: 0x2e9a}, - 144: {From: 0x395c, To: 0x47e}, - 145: {From: 0x3b4e, To: 0xd91}, - 146: {From: 0x3b78, To: 0x137}, - 147: {From: 0x3c99, To: 0x4bc}, - 148: {From: 0x3fbd, To: 0x100}, - 149: {From: 0x4208, To: 0xa91}, - 150: {From: 0x42be, To: 0x573}, - 151: {From: 0x42f9, To: 0x3f60}, - 152: {From: 0x4378, To: 0x25a}, - 153: {From: 0x43cb, To: 0x36cb}, - 154: {From: 0x43cd, To: 0x10f}, - 155: {From: 0x44af, To: 0x3322}, - 156: {From: 0x44e3, To: 0x512}, - 157: {From: 0x45ca, To: 0x2409}, - 158: {From: 0x45dd, To: 0x26dc}, - 159: {From: 0x4610, To: 0x48ae}, - 160: {From: 0x46ae, To: 0x46a0}, - 161: {From: 0x473e, To: 0x4745}, - 162: {From: 0x4916, To: 0x31f}, - 163: {From: 0x49a7, To: 0x523}, + 19: {From: 0x709, To: 0x3625}, + 20: {From: 0x73e, To: 0x21a1}, + 21: {From: 0x7b3, To: 0x56}, + 22: {From: 0x7b9, To: 0x299b}, + 23: {From: 0x7c5, To: 0x58}, + 24: {From: 0x7e6, To: 0x145}, + 25: {From: 0x80c, To: 0x5a}, + 26: {From: 0x815, To: 0x8d}, + 27: {From: 0x87e, To: 0x810}, + 28: {From: 0x8c3, To: 0xee3}, + 29: {From: 0x9ef, To: 0x331}, + 30: {From: 0xa36, To: 0x2c5}, + 31: {From: 0xa3d, To: 0xbf}, + 32: {From: 0xabe, To: 0x3322}, + 33: {From: 0xb38, To: 0x529}, + 34: {From: 0xb75, To: 0x265a}, + 35: {From: 0xb7e, To: 0xbc3}, + 36: {From: 0xb9b, To: 0x44e}, + 37: {From: 0xbbc, To: 0x4229}, + 38: {From: 0xbbf, To: 0x529}, + 39: {From: 0xbfe, To: 0x2da7}, + 40: {From: 0xc2e, To: 0x3181}, + 41: {From: 0xcb9, To: 0xf3}, + 42: {From: 0xd08, To: 0xfa}, + 43: {From: 0xdc8, To: 0x11a}, + 44: {From: 0xdd7, To: 0x32d}, + 45: {From: 0xdf8, To: 0xdfb}, + 46: {From: 0xdfe, To: 0x531}, + 47: {From: 0xe01, To: 0xdf3}, + 48: {From: 0xedf, To: 0x205a}, + 49: {From: 0xee9, To: 0x222e}, + 50: {From: 0xeee, To: 0x2e9a}, + 51: {From: 0xf39, To: 0x367}, + 52: {From: 0x10d0, To: 0x140}, + 53: {From: 0x1104, To: 0x2d0}, + 54: {From: 0x11a0, To: 0x1ec}, + 55: {From: 0x1279, To: 0x21}, + 56: {From: 0x1424, To: 0x15e}, + 57: {From: 0x1470, To: 0x14e}, + 58: {From: 0x151f, To: 0xd9b}, + 59: {From: 0x1523, To: 0x390}, + 60: {From: 0x1532, To: 0x19f}, + 61: {From: 0x1580, To: 0x210}, + 62: {From: 0x1583, To: 0x10d}, + 63: {From: 0x15a3, To: 0x3caf}, + 64: {From: 0x1630, To: 0x222e}, + 65: {From: 0x166a, To: 0x19b}, + 66: {From: 0x16c8, To: 0x136}, + 67: {From: 0x1700, To: 0x29f8}, + 68: {From: 0x1718, To: 0x194}, + 69: {From: 0x1727, To: 0xf3f}, + 70: {From: 0x177a, To: 0x178}, + 71: {From: 0x1809, To: 0x17b6}, + 72: {From: 0x1816, To: 0x18f3}, + 73: {From: 0x188a, To: 0x436}, + 74: {From: 0x1979, To: 0x1d01}, + 75: {From: 0x1a74, To: 0x2bb0}, + 76: {From: 0x1a8a, To: 0x1f8}, + 77: {From: 0x1b5a, To: 0x1fa}, + 78: {From: 0x1b86, To: 0x1515}, + 79: {From: 0x1d64, To: 0x2c9b}, + 80: {From: 0x2038, To: 0x37b1}, + 81: {From: 0x203d, To: 0x20dd}, + 82: {From: 0x205a, To: 0x30b}, + 83: {From: 0x20e3, To: 0x274}, + 84: {From: 0x20ee, To: 0x263}, + 85: {From: 0x20f2, To: 0x22d}, + 86: {From: 0x20f9, To: 0x256}, + 87: {From: 0x210f, To: 0x21eb}, + 88: {From: 0x2135, To: 0x27d}, + 89: {From: 0x2160, To: 0x913}, + 90: {From: 0x2199, To: 0x121}, + 91: {From: 0x21ce, To: 0x1561}, + 92: {From: 0x21e6, To: 0x504}, + 93: {From: 0x21f4, To: 0x49f}, + 94: {From: 0x21fb, To: 0x269}, + 95: {From: 0x222d, To: 0x121}, + 96: {From: 0x2237, To: 0x121}, + 97: {From: 0x2262, To: 0x92a}, + 98: {From: 0x2316, To: 0x3226}, + 99: {From: 0x236a, To: 0x2835}, + 100: {From: 0x2382, To: 0x3365}, + 101: {From: 0x2472, To: 0x2c7}, + 102: {From: 0x24e4, To: 0x2ff}, + 103: {From: 0x24f0, To: 0x2fa}, + 104: {From: 0x24fa, To: 0x31f}, + 105: {From: 0x2550, To: 0xb5b}, + 106: {From: 0x25a9, To: 0xe2}, + 107: {From: 0x263e, To: 0x2d0}, + 108: {From: 0x26c9, To: 0x26b4}, + 109: {From: 0x26f9, To: 0x3c8}, + 110: {From: 0x2727, To: 0x3caf}, + 111: {From: 0x2755, To: 0x6a4}, + 112: {From: 0x2765, To: 0x26b4}, + 113: {From: 0x2789, To: 0x4358}, + 114: {From: 0x27c9, To: 0x2001}, + 115: {From: 0x28ea, To: 0x27b1}, + 116: {From: 0x28ef, To: 0x2837}, + 117: {From: 0x2914, To: 0x351}, + 118: {From: 0x2986, To: 0x2da7}, + 119: {From: 0x29f0, To: 0x96b}, + 120: {From: 0x2b1a, To: 0x38d}, + 121: {From: 0x2bfc, To: 0x395}, + 122: {From: 0x2c3f, To: 0x3caf}, + 123: {From: 0x2cfc, To: 0x3be}, + 124: {From: 0x2d13, To: 0x597}, + 125: {From: 0x2d47, To: 0x148}, + 126: {From: 0x2d48, To: 0x148}, + 127: {From: 0x2dff, To: 0x2f1}, + 128: {From: 0x2e08, To: 0x19cc}, + 129: {From: 0x2e1a, To: 0x2d95}, + 130: {From: 0x2e21, To: 0x292}, + 131: {From: 0x2e54, To: 0x7d}, + 132: {From: 0x2e65, To: 0x2282}, + 133: {From: 0x2ea0, To: 0x2e9b}, + 134: {From: 0x2eef, To: 0x2ed7}, + 135: {From: 0x3193, To: 0x3c4}, + 136: {From: 0x3366, To: 0x338e}, + 137: {From: 0x342a, To: 0x3dc}, + 138: {From: 0x34ee, To: 0x18d0}, + 139: {From: 0x35c8, To: 0x2c9b}, + 140: {From: 0x35e6, To: 0x412}, + 141: {From: 0x3658, To: 0x246}, + 142: {From: 0x3676, To: 0x3f4}, + 143: {From: 0x36fd, To: 0x445}, + 144: {From: 0x37c0, To: 0x121}, + 145: {From: 0x3816, To: 0x38f2}, + 146: {From: 0x382a, To: 0x2b48}, + 147: {From: 0x382b, To: 0x2c9b}, + 148: {From: 0x382f, To: 0xa9}, + 149: {From: 0x3832, To: 0x3228}, + 150: {From: 0x386c, To: 0x39a6}, + 151: {From: 0x3892, To: 0x3fc0}, + 152: {From: 0x38a5, To: 0x39d7}, + 153: {From: 0x38b4, To: 0x1fa4}, + 154: {From: 0x38b5, To: 0x2e9a}, + 155: {From: 0x395c, To: 0x47e}, + 156: {From: 0x3b4e, To: 0xd91}, + 157: {From: 0x3b78, To: 0x137}, + 158: {From: 0x3c99, To: 0x4bc}, + 159: {From: 0x3fbd, To: 0x100}, + 160: {From: 0x4208, To: 0xa91}, + 161: {From: 0x42be, To: 0x573}, + 162: {From: 0x42f9, To: 0x3f60}, + 163: {From: 0x4378, To: 0x25a}, + 164: {From: 0x43b8, To: 0xe6c}, + 165: {From: 0x43cd, To: 0x10f}, + 166: {From: 0x44af, To: 0x3322}, + 167: {From: 0x44e3, To: 0x512}, + 168: {From: 0x45ca, To: 0x2409}, + 169: {From: 0x45dd, To: 0x26dc}, + 170: {From: 0x4610, To: 0x48ae}, + 171: {From: 0x46ae, To: 0x46a0}, + 172: {From: 0x473e, To: 0x4745}, + 173: {From: 0x4817, To: 0x3503}, + 174: {From: 0x4916, To: 0x31f}, + 175: {From: 0x49a7, To: 0x523}, } -// Size: 164 bytes, 164 elements -var AliasTypes = [164]AliasType{ +// Size: 176 bytes, 176 elements +var AliasTypes = [176]AliasType{ // Entry 0 - 3F 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2, - 1, 1, 2, 0, 1, 0, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0, - 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, - 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 2, 0, 1, 2, 0, + 1, 1, 2, 0, 0, 1, 0, 1, 2, 1, 1, 0, 0, 2, 1, 1, + 0, 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, + 0, 0, 0, 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 2, 0, // Entry 40 - 7F - 1, 0, 1, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, - 2, 2, 2, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, - 0, 1, 0, 2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, + 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 0, 0, 2, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 2, 2, 2, 0, 1, 1, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 2, 1, 1, // Entry 80 - BF - 0, 0, 2, 1, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 1, 1, 0, 1, 2, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, - 0, 1, 1, 1, + 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 2, 1, 1, 1, + 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, + 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, } const ( - _Latn = 87 - _Hani = 54 - _Hans = 56 - _Hant = 57 - _Qaaa = 139 - _Qaai = 147 - _Qabx = 188 - _Zinh = 236 - _Zyyy = 241 - _Zzzz = 242 + _Latn = 90 + _Hani = 57 + _Hans = 59 + _Hant = 60 + _Qaaa = 143 + _Qaai = 151 + _Qabx = 192 + _Zinh = 245 + _Zyyy = 250 + _Zzzz = 251 ) // script is an alphabetically sorted list of ISO 15924 codes. The index // of the script in the string, divided by 4, is the internal scriptID. -const script tag.Index = "" + // Size: 976 bytes +const script tag.Index = "" + // Size: 1012 bytes "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" + - "BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCpmnCprtCyrlCyrsDevaDogrDsrt" + - "DuplEgydEgyhEgypElbaEthiGeokGeorGlagGongGonmGothGranGrekGujrGuruHanbHang" + - "HaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamoJavaJpanJurc" + - "KaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepc" + - "LimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMendMercMeroMlym" + - "ModiMongMoonMrooMteiMultMymrNarbNbatNewaNkdbNkgbNkooNshuOgamOlckOrkhOrya" + - "OsgeOsmaPalmPaucPermPhagPhliPhlpPhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaae" + - "QaafQaagQaahQaaiQaajQaakQaalQaamQaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaaw" + - "QaaxQaayQaazQabaQabbQabcQabdQabeQabfQabgQabhQabiQabjQabkQablQabmQabnQabo" + - "QabpQabqQabrQabsQabtQabuQabvQabwQabxRjngRoroRunrSamrSaraSarbSaurSgnwShaw" + - "ShrdShuiSiddSindSinhSoraSoyoSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTaml" + - "TangTavtTeluTengTfngTglgThaaThaiTibtTirhUgarVaiiVispWaraWchoWoleXpeoXsux" + - "YiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff\xff" + "BrahBraiBugiBuhdCakmCansCariChamCherChrsCirtCoptCpmnCprtCyrlCyrsDevaDiak" + + "DogrDsrtDuplEgydEgyhEgypElbaElymEthiGeokGeorGlagGongGonmGothGranGrekGujr" + + "GuruHanbHangHaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamo" + + "JavaJpanJurcKaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatg" + + "LatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMend" + + "MercMeroMlymModiMongMoonMrooMteiMultMymrNandNarbNbatNewaNkdbNkgbNkooNshu" + + "OgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhliPhlpPhlvPhnxPiqdPlrdPrtiQaaa" + + "QaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaamQaanQaaoQaapQaaqQaarQaas" + + "QaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabeQabfQabgQabhQabiQabjQabk" + + "QablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabwQabxRjngRohgRoroRunrSamr" + + "SaraSarbSaurSgnwShawShrdShuiSiddSindSinhSogdSogoSoraSoyoSundSyloSyrcSyre" + + "SyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglgThaaThaiTibtTirhToto" + + "UgarVaiiVispWaraWchoWoleXpeoXsuxYeziYiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz" + + "\xff\xff\xff\xff" // suppressScript is an index from langID to the dominant script for that language, // if it exists. If a script is given, it should be suppressed from the language tag. // Size: 1330 bytes, 1330 elements var suppressScript = [1330]uint8{ // Entry 0 - 3F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 40 - 7F 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, // Entry 80 - BF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -828,66 +841,66 @@ var suppressScript = [1330]uint8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry C0 - FF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 100 - 13F - 0x57, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, + 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xde, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x57, 0x00, + 0xe5, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x5a, 0x00, // Entry 140 - 17F - 0x57, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, - 0x00, 0x57, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 180 - 1BF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x57, 0x32, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5a, 0x35, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x22, 0x00, // Entry 1C0 - 1FF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x57, 0x00, 0x57, 0x57, 0x00, 0x08, + 0x00, 0x5a, 0x5a, 0x00, 0x5a, 0x5a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x57, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, + 0x5a, 0x5a, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, // Entry 200 - 23F - 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 240 - 27F - 0x00, 0x00, 0x1f, 0x00, 0x00, 0x57, 0x00, 0x00, - 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x21, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00, + 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -895,101 +908,101 @@ var suppressScript = [1330]uint8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 280 - 2BF 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 2C0 - 2FF - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, // Entry 300 - 33F - 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x57, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5a, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, + 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, // Entry 340 - 37F - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, - 0x57, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x5a, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x57, 0x00, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x5a, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 380 - 3BF - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, // Entry 3C0 - 3FF - 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0x00, 0x00, 0x57, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 400 - 43F - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, - 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, // Entry 440 - 47F - 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xda, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, + 0x00, 0xe1, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, // Entry 480 - 4BF - 0x57, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, + 0x5a, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 4C0 - 4FF - 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Entry 500 - 53F 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, } @@ -1255,97 +1268,117 @@ var fromM49 = [333]uint16{ 0xc759, 0xc95a, 0xcb5b, 0xcd5c, 0xcf65, } -// Size: 1615 bytes +// Size: 1995 bytes var variantIndex = map[string]uint8{ "1606nict": 0x0, "1694acad": 0x1, "1901": 0x2, "1959acad": 0x3, - "1994": 0x4d, + "1994": 0x60, "1996": 0x4, "abl1943": 0x5, "akuapem": 0x6, - "alalc97": 0x4f, + "alalc97": 0x62, "aluku": 0x7, "ao1990": 0x8, - "arevela": 0x9, - "arevmda": 0xa, - "asante": 0xb, - "baku1926": 0xc, - "balanka": 0xd, - "barla": 0xe, - "basiceng": 0xf, - "bauddha": 0x10, - "biscayan": 0x11, - "biske": 0x48, - "bohoric": 0x12, - "boont": 0x13, - "colb1945": 0x14, - "cornu": 0x15, - "dajnko": 0x16, - "ekavsk": 0x17, - "emodeng": 0x18, - "fonipa": 0x50, - "fonnapa": 0x51, - "fonupa": 0x52, - "fonxsamp": 0x53, - "hepburn": 0x19, - "heploc": 0x4e, - "hognorsk": 0x1a, - "hsistemo": 0x1b, - "ijekavsk": 0x1c, - "itihasa": 0x1d, - "jauer": 0x1e, - "jyutping": 0x1f, - "kkcor": 0x20, - "kociewie": 0x21, - "kscor": 0x22, - "laukika": 0x23, - "lipaw": 0x49, - "luna1918": 0x24, - "metelko": 0x25, - "monoton": 0x26, - "ndyuka": 0x27, - "nedis": 0x28, - "newfound": 0x29, - "njiva": 0x4a, - "nulik": 0x2a, - "osojs": 0x4b, - "oxendict": 0x2b, - "pahawh2": 0x2c, - "pahawh3": 0x2d, - "pahawh4": 0x2e, - "pamaka": 0x2f, - "petr1708": 0x30, - "pinyin": 0x31, - "polyton": 0x32, - "puter": 0x33, - "rigik": 0x34, - "rozaj": 0x35, - "rumgr": 0x36, - "scotland": 0x37, - "scouse": 0x38, - "simple": 0x54, - "solba": 0x4c, - "sotav": 0x39, - "spanglis": 0x3a, - "surmiran": 0x3b, - "sursilv": 0x3c, - "sutsilv": 0x3d, - "tarask": 0x3e, - "uccor": 0x3f, - "ucrcor": 0x40, - "ulster": 0x41, - "unifon": 0x42, - "vaidika": 0x43, - "valencia": 0x44, - "vallader": 0x45, - "wadegile": 0x46, - "xsistemo": 0x47, + "aranes": 0x9, + "arevela": 0xa, + "arevmda": 0xb, + "asante": 0xc, + "auvern": 0xd, + "baku1926": 0xe, + "balanka": 0xf, + "barla": 0x10, + "basiceng": 0x11, + "bauddha": 0x12, + "biscayan": 0x13, + "biske": 0x5b, + "bohoric": 0x14, + "boont": 0x15, + "bornholm": 0x16, + "cisaup": 0x17, + "colb1945": 0x18, + "cornu": 0x19, + "creiss": 0x1a, + "dajnko": 0x1b, + "ekavsk": 0x1c, + "emodeng": 0x1d, + "fonipa": 0x63, + "fonkirsh": 0x64, + "fonnapa": 0x65, + "fonupa": 0x66, + "fonxsamp": 0x67, + "gascon": 0x1e, + "grclass": 0x1f, + "grital": 0x20, + "grmistr": 0x21, + "hepburn": 0x22, + "heploc": 0x61, + "hognorsk": 0x23, + "hsistemo": 0x24, + "ijekavsk": 0x25, + "itihasa": 0x26, + "ivanchov": 0x27, + "jauer": 0x28, + "jyutping": 0x29, + "kkcor": 0x2a, + "kociewie": 0x2b, + "kscor": 0x2c, + "laukika": 0x2d, + "lemosin": 0x2e, + "lengadoc": 0x2f, + "lipaw": 0x5c, + "luna1918": 0x30, + "metelko": 0x31, + "monoton": 0x32, + "ndyuka": 0x33, + "nedis": 0x34, + "newfound": 0x35, + "nicard": 0x36, + "njiva": 0x5d, + "nulik": 0x37, + "osojs": 0x5e, + "oxendict": 0x38, + "pahawh2": 0x39, + "pahawh3": 0x3a, + "pahawh4": 0x3b, + "pamaka": 0x3c, + "peano": 0x3d, + "petr1708": 0x3e, + "pinyin": 0x3f, + "polyton": 0x40, + "provenc": 0x41, + "puter": 0x42, + "rigik": 0x43, + "rozaj": 0x44, + "rumgr": 0x45, + "scotland": 0x46, + "scouse": 0x47, + "simple": 0x68, + "solba": 0x5f, + "sotav": 0x48, + "spanglis": 0x49, + "surmiran": 0x4a, + "sursilv": 0x4b, + "sutsilv": 0x4c, + "tarask": 0x4d, + "tongyong": 0x4e, + "tunumiit": 0x4f, + "uccor": 0x50, + "ucrcor": 0x51, + "ulster": 0x52, + "unifon": 0x53, + "vaidika": 0x54, + "valencia": 0x55, + "vallader": 0x56, + "vecdruka": 0x57, + "vivaraup": 0x58, + "wadegile": 0x59, + "xsistemo": 0x5a, } // variantNumSpecialized is the number of specialized variants in variants. -const variantNumSpecialized = 79 +const variantNumSpecialized = 98 // nRegionGroups is the number of region groups. const nRegionGroups = 33 @@ -1357,8 +1390,8 @@ type likelyLangRegion struct { // likelyScript is a lookup table, indexed by scriptID, for the most likely // languages and regions given a script. -// Size: 976 bytes, 244 elements -var likelyScript = [244]likelyLangRegion{ +// Size: 1012 bytes, 253 elements +var likelyScript = [253]likelyLangRegion{ 1: {lang: 0x14e, region: 0x84}, 3: {lang: 0x2a2, region: 0x106}, 4: {lang: 0x1f, region: 0x99}, @@ -1382,126 +1415,126 @@ var likelyScript = [244]likelyLangRegion{ 24: {lang: 0x4f0, region: 0x12b}, 25: {lang: 0xe7, region: 0x13e}, 26: {lang: 0xe5, region: 0x135}, - 28: {lang: 0xf1, region: 0x6b}, - 30: {lang: 0x1a0, region: 0x5d}, - 31: {lang: 0x3e2, region: 0x106}, - 33: {lang: 0x1be, region: 0x99}, - 36: {lang: 0x15e, region: 0x78}, - 39: {lang: 0x133, region: 0x6b}, - 40: {lang: 0x431, region: 0x27}, - 41: {lang: 0x27, region: 0x6f}, - 43: {lang: 0x210, region: 0x7d}, - 44: {lang: 0xfe, region: 0x38}, - 46: {lang: 0x19b, region: 0x99}, - 47: {lang: 0x19e, region: 0x130}, - 48: {lang: 0x3e9, region: 0x99}, - 49: {lang: 0x136, region: 0x87}, - 50: {lang: 0x1a4, region: 0x99}, - 51: {lang: 0x39d, region: 0x99}, - 52: {lang: 0x529, region: 0x12e}, - 53: {lang: 0x254, region: 0xab}, - 54: {lang: 0x529, region: 0x53}, - 55: {lang: 0x1cb, region: 0xe7}, - 56: {lang: 0x529, region: 0x53}, - 57: {lang: 0x529, region: 0x12e}, - 58: {lang: 0x2fd, region: 0x9b}, - 59: {lang: 0x1bc, region: 0x97}, - 60: {lang: 0x200, region: 0xa2}, - 61: {lang: 0x1c5, region: 0x12b}, - 62: {lang: 0x1ca, region: 0xaf}, - 65: {lang: 0x1d5, region: 0x92}, - 67: {lang: 0x142, region: 0x9e}, - 68: {lang: 0x254, region: 0xab}, - 69: {lang: 0x20e, region: 0x95}, - 70: {lang: 0x200, region: 0xa2}, - 72: {lang: 0x135, region: 0xc4}, + 29: {lang: 0xf1, region: 0x6b}, + 31: {lang: 0x1a0, region: 0x5d}, + 32: {lang: 0x3e2, region: 0x106}, + 34: {lang: 0x1be, region: 0x99}, + 38: {lang: 0x15e, region: 0x78}, + 41: {lang: 0x133, region: 0x6b}, + 42: {lang: 0x431, region: 0x27}, + 44: {lang: 0x27, region: 0x6f}, + 46: {lang: 0x210, region: 0x7d}, + 47: {lang: 0xfe, region: 0x38}, + 49: {lang: 0x19b, region: 0x99}, + 50: {lang: 0x19e, region: 0x130}, + 51: {lang: 0x3e9, region: 0x99}, + 52: {lang: 0x136, region: 0x87}, + 53: {lang: 0x1a4, region: 0x99}, + 54: {lang: 0x39d, region: 0x99}, + 55: {lang: 0x529, region: 0x12e}, + 56: {lang: 0x254, region: 0xab}, + 57: {lang: 0x529, region: 0x53}, + 58: {lang: 0x1cb, region: 0xe7}, + 59: {lang: 0x529, region: 0x53}, + 60: {lang: 0x529, region: 0x12e}, + 61: {lang: 0x2fd, region: 0x9b}, + 62: {lang: 0x1bc, region: 0x97}, + 63: {lang: 0x200, region: 0xa2}, + 64: {lang: 0x1c5, region: 0x12b}, + 65: {lang: 0x1ca, region: 0xaf}, + 68: {lang: 0x1d5, region: 0x92}, + 70: {lang: 0x142, region: 0x9e}, + 71: {lang: 0x254, region: 0xab}, + 72: {lang: 0x20e, region: 0x95}, 73: {lang: 0x200, region: 0xa2}, - 74: {lang: 0x3bb, region: 0xe8}, - 75: {lang: 0x24a, region: 0xa6}, - 76: {lang: 0x3fa, region: 0x99}, - 79: {lang: 0x251, region: 0x99}, - 80: {lang: 0x254, region: 0xab}, - 82: {lang: 0x88, region: 0x99}, - 83: {lang: 0x370, region: 0x123}, - 84: {lang: 0x2b8, region: 0xaf}, - 89: {lang: 0x29f, region: 0x99}, - 90: {lang: 0x2a8, region: 0x99}, - 91: {lang: 0x28f, region: 0x87}, - 92: {lang: 0x1a0, region: 0x87}, - 93: {lang: 0x2ac, region: 0x53}, - 95: {lang: 0x4f4, region: 0x12b}, - 96: {lang: 0x4f5, region: 0x12b}, - 97: {lang: 0x1be, region: 0x99}, - 99: {lang: 0x337, region: 0x9c}, - 100: {lang: 0x4f7, region: 0x53}, - 101: {lang: 0xa9, region: 0x53}, - 104: {lang: 0x2e8, region: 0x112}, - 105: {lang: 0x4f8, region: 0x10b}, - 106: {lang: 0x4f8, region: 0x10b}, - 107: {lang: 0x304, region: 0x99}, - 108: {lang: 0x31b, region: 0x99}, - 109: {lang: 0x30b, region: 0x53}, - 111: {lang: 0x31e, region: 0x35}, - 112: {lang: 0x30e, region: 0x99}, - 113: {lang: 0x414, region: 0xe8}, - 114: {lang: 0x331, region: 0xc4}, - 115: {lang: 0x4f9, region: 0x108}, - 116: {lang: 0x3b, region: 0xa1}, - 117: {lang: 0x353, region: 0xdb}, - 120: {lang: 0x2d0, region: 0x84}, - 121: {lang: 0x52a, region: 0x53}, - 122: {lang: 0x403, region: 0x96}, - 123: {lang: 0x3ee, region: 0x99}, - 124: {lang: 0x39b, region: 0xc5}, - 125: {lang: 0x395, region: 0x99}, - 126: {lang: 0x399, region: 0x135}, - 127: {lang: 0x429, region: 0x115}, - 128: {lang: 0x3b, region: 0x11c}, - 129: {lang: 0xfd, region: 0xc4}, - 130: {lang: 0x27d, region: 0x106}, - 131: {lang: 0x2c9, region: 0x53}, - 132: {lang: 0x39f, region: 0x9c}, - 133: {lang: 0x39f, region: 0x53}, - 135: {lang: 0x3ad, region: 0xb0}, - 137: {lang: 0x1c6, region: 0x53}, - 138: {lang: 0x4fd, region: 0x9c}, - 189: {lang: 0x3cb, region: 0x95}, - 191: {lang: 0x372, region: 0x10c}, - 192: {lang: 0x420, region: 0x97}, - 194: {lang: 0x4ff, region: 0x15e}, - 195: {lang: 0x3f0, region: 0x99}, - 196: {lang: 0x45, region: 0x135}, - 197: {lang: 0x139, region: 0x7b}, - 198: {lang: 0x3e9, region: 0x99}, - 200: {lang: 0x3e9, region: 0x99}, - 201: {lang: 0x3fa, region: 0x99}, - 202: {lang: 0x40c, region: 0xb3}, - 203: {lang: 0x433, region: 0x99}, - 204: {lang: 0xef, region: 0xc5}, - 205: {lang: 0x43e, region: 0x95}, - 206: {lang: 0x44d, region: 0x35}, - 207: {lang: 0x44e, region: 0x9b}, - 211: {lang: 0x45a, region: 0xe7}, - 212: {lang: 0x11a, region: 0x99}, - 213: {lang: 0x45e, region: 0x53}, - 214: {lang: 0x232, region: 0x53}, - 215: {lang: 0x450, region: 0x99}, - 216: {lang: 0x4a5, region: 0x53}, - 217: {lang: 0x9f, region: 0x13e}, - 218: {lang: 0x461, region: 0x99}, - 220: {lang: 0x528, region: 0xba}, - 221: {lang: 0x153, region: 0xe7}, - 222: {lang: 0x128, region: 0xcd}, - 223: {lang: 0x46b, region: 0x123}, - 224: {lang: 0xa9, region: 0x53}, - 225: {lang: 0x2ce, region: 0x99}, - 226: {lang: 0x4ad, region: 0x11c}, - 227: {lang: 0x4be, region: 0xb4}, - 229: {lang: 0x1ce, region: 0x99}, - 232: {lang: 0x3a9, region: 0x9c}, - 233: {lang: 0x22, region: 0x9b}, - 234: {lang: 0x1ea, region: 0x53}, - 235: {lang: 0xef, region: 0xc5}, + 75: {lang: 0x135, region: 0xc4}, + 76: {lang: 0x200, region: 0xa2}, + 77: {lang: 0x3bb, region: 0xe8}, + 78: {lang: 0x24a, region: 0xa6}, + 79: {lang: 0x3fa, region: 0x99}, + 82: {lang: 0x251, region: 0x99}, + 83: {lang: 0x254, region: 0xab}, + 85: {lang: 0x88, region: 0x99}, + 86: {lang: 0x370, region: 0x123}, + 87: {lang: 0x2b8, region: 0xaf}, + 92: {lang: 0x29f, region: 0x99}, + 93: {lang: 0x2a8, region: 0x99}, + 94: {lang: 0x28f, region: 0x87}, + 95: {lang: 0x1a0, region: 0x87}, + 96: {lang: 0x2ac, region: 0x53}, + 98: {lang: 0x4f4, region: 0x12b}, + 99: {lang: 0x4f5, region: 0x12b}, + 100: {lang: 0x1be, region: 0x99}, + 102: {lang: 0x337, region: 0x9c}, + 103: {lang: 0x4f7, region: 0x53}, + 104: {lang: 0xa9, region: 0x53}, + 107: {lang: 0x2e8, region: 0x112}, + 108: {lang: 0x4f8, region: 0x10b}, + 109: {lang: 0x4f8, region: 0x10b}, + 110: {lang: 0x304, region: 0x99}, + 111: {lang: 0x31b, region: 0x99}, + 112: {lang: 0x30b, region: 0x53}, + 114: {lang: 0x31e, region: 0x35}, + 115: {lang: 0x30e, region: 0x99}, + 116: {lang: 0x414, region: 0xe8}, + 117: {lang: 0x331, region: 0xc4}, + 119: {lang: 0x4f9, region: 0x108}, + 120: {lang: 0x3b, region: 0xa1}, + 121: {lang: 0x353, region: 0xdb}, + 124: {lang: 0x2d0, region: 0x84}, + 125: {lang: 0x52a, region: 0x53}, + 126: {lang: 0x403, region: 0x96}, + 127: {lang: 0x3ee, region: 0x99}, + 128: {lang: 0x39b, region: 0xc5}, + 129: {lang: 0x395, region: 0x99}, + 130: {lang: 0x399, region: 0x135}, + 131: {lang: 0x429, region: 0x115}, + 132: {lang: 0x3b, region: 0x11c}, + 133: {lang: 0xfd, region: 0xc4}, + 134: {lang: 0x27d, region: 0x106}, + 135: {lang: 0x2c9, region: 0x53}, + 136: {lang: 0x39f, region: 0x9c}, + 137: {lang: 0x39f, region: 0x53}, + 139: {lang: 0x3ad, region: 0xb0}, + 141: {lang: 0x1c6, region: 0x53}, + 142: {lang: 0x4fd, region: 0x9c}, + 193: {lang: 0x3cb, region: 0x95}, + 196: {lang: 0x372, region: 0x10c}, + 197: {lang: 0x420, region: 0x97}, + 199: {lang: 0x4ff, region: 0x15e}, + 200: {lang: 0x3f0, region: 0x99}, + 201: {lang: 0x45, region: 0x135}, + 202: {lang: 0x139, region: 0x7b}, + 203: {lang: 0x3e9, region: 0x99}, + 205: {lang: 0x3e9, region: 0x99}, + 206: {lang: 0x3fa, region: 0x99}, + 207: {lang: 0x40c, region: 0xb3}, + 210: {lang: 0x433, region: 0x99}, + 211: {lang: 0xef, region: 0xc5}, + 212: {lang: 0x43e, region: 0x95}, + 213: {lang: 0x44d, region: 0x35}, + 214: {lang: 0x44e, region: 0x9b}, + 218: {lang: 0x45a, region: 0xe7}, + 219: {lang: 0x11a, region: 0x99}, + 220: {lang: 0x45e, region: 0x53}, + 221: {lang: 0x232, region: 0x53}, + 222: {lang: 0x450, region: 0x99}, + 223: {lang: 0x4a5, region: 0x53}, + 224: {lang: 0x9f, region: 0x13e}, + 225: {lang: 0x461, region: 0x99}, + 227: {lang: 0x528, region: 0xba}, + 228: {lang: 0x153, region: 0xe7}, + 229: {lang: 0x128, region: 0xcd}, + 230: {lang: 0x46b, region: 0x123}, + 231: {lang: 0xa9, region: 0x53}, + 232: {lang: 0x2ce, region: 0x99}, + 234: {lang: 0x4ad, region: 0x11c}, + 235: {lang: 0x4be, region: 0xb4}, + 237: {lang: 0x1ce, region: 0x99}, + 240: {lang: 0x3a9, region: 0x9c}, + 241: {lang: 0x22, region: 0x9b}, + 243: {lang: 0x1ea, region: 0x53}, + 244: {lang: 0xef, region: 0xc5}, } type likelyScriptRegion struct { @@ -1516,1423 +1549,1423 @@ type likelyScriptRegion struct { // of the list in likelyLangList. // Size: 5320 bytes, 1330 elements var likelyLang = [1330]likelyScriptRegion{ - 0: {region: 0x135, script: 0x57, flags: 0x0}, - 1: {region: 0x6f, script: 0x57, flags: 0x0}, - 2: {region: 0x165, script: 0x57, flags: 0x0}, - 3: {region: 0x165, script: 0x57, flags: 0x0}, - 4: {region: 0x165, script: 0x57, flags: 0x0}, - 5: {region: 0x7d, script: 0x1f, flags: 0x0}, - 6: {region: 0x165, script: 0x57, flags: 0x0}, - 7: {region: 0x165, script: 0x1f, flags: 0x0}, - 8: {region: 0x80, script: 0x57, flags: 0x0}, - 9: {region: 0x165, script: 0x57, flags: 0x0}, - 10: {region: 0x165, script: 0x57, flags: 0x0}, - 11: {region: 0x165, script: 0x57, flags: 0x0}, - 12: {region: 0x95, script: 0x57, flags: 0x0}, - 13: {region: 0x131, script: 0x57, flags: 0x0}, - 14: {region: 0x80, script: 0x57, flags: 0x0}, - 15: {region: 0x165, script: 0x57, flags: 0x0}, - 16: {region: 0x165, script: 0x57, flags: 0x0}, - 17: {region: 0x106, script: 0x1f, flags: 0x0}, - 18: {region: 0x165, script: 0x57, flags: 0x0}, + 0: {region: 0x135, script: 0x5a, flags: 0x0}, + 1: {region: 0x6f, script: 0x5a, flags: 0x0}, + 2: {region: 0x165, script: 0x5a, flags: 0x0}, + 3: {region: 0x165, script: 0x5a, flags: 0x0}, + 4: {region: 0x165, script: 0x5a, flags: 0x0}, + 5: {region: 0x7d, script: 0x20, flags: 0x0}, + 6: {region: 0x165, script: 0x5a, flags: 0x0}, + 7: {region: 0x165, script: 0x20, flags: 0x0}, + 8: {region: 0x80, script: 0x5a, flags: 0x0}, + 9: {region: 0x165, script: 0x5a, flags: 0x0}, + 10: {region: 0x165, script: 0x5a, flags: 0x0}, + 11: {region: 0x165, script: 0x5a, flags: 0x0}, + 12: {region: 0x95, script: 0x5a, flags: 0x0}, + 13: {region: 0x131, script: 0x5a, flags: 0x0}, + 14: {region: 0x80, script: 0x5a, flags: 0x0}, + 15: {region: 0x165, script: 0x5a, flags: 0x0}, + 16: {region: 0x165, script: 0x5a, flags: 0x0}, + 17: {region: 0x106, script: 0x20, flags: 0x0}, + 18: {region: 0x165, script: 0x5a, flags: 0x0}, 19: {region: 0x9c, script: 0x9, flags: 0x0}, 20: {region: 0x128, script: 0x5, flags: 0x0}, - 21: {region: 0x165, script: 0x57, flags: 0x0}, - 22: {region: 0x161, script: 0x57, flags: 0x0}, - 23: {region: 0x165, script: 0x57, flags: 0x0}, - 24: {region: 0x165, script: 0x57, flags: 0x0}, - 25: {region: 0x165, script: 0x57, flags: 0x0}, - 26: {region: 0x165, script: 0x57, flags: 0x0}, - 27: {region: 0x165, script: 0x57, flags: 0x0}, - 28: {region: 0x52, script: 0x57, flags: 0x0}, - 29: {region: 0x165, script: 0x57, flags: 0x0}, - 30: {region: 0x165, script: 0x57, flags: 0x0}, + 21: {region: 0x165, script: 0x5a, flags: 0x0}, + 22: {region: 0x161, script: 0x5a, flags: 0x0}, + 23: {region: 0x165, script: 0x5a, flags: 0x0}, + 24: {region: 0x165, script: 0x5a, flags: 0x0}, + 25: {region: 0x165, script: 0x5a, flags: 0x0}, + 26: {region: 0x165, script: 0x5a, flags: 0x0}, + 27: {region: 0x165, script: 0x5a, flags: 0x0}, + 28: {region: 0x52, script: 0x5a, flags: 0x0}, + 29: {region: 0x165, script: 0x5a, flags: 0x0}, + 30: {region: 0x165, script: 0x5a, flags: 0x0}, 31: {region: 0x99, script: 0x4, flags: 0x0}, - 32: {region: 0x165, script: 0x57, flags: 0x0}, - 33: {region: 0x80, script: 0x57, flags: 0x0}, - 34: {region: 0x9b, script: 0xe9, flags: 0x0}, - 35: {region: 0x165, script: 0x57, flags: 0x0}, - 36: {region: 0x165, script: 0x57, flags: 0x0}, - 37: {region: 0x14d, script: 0x57, flags: 0x0}, - 38: {region: 0x106, script: 0x1f, flags: 0x0}, - 39: {region: 0x6f, script: 0x29, flags: 0x0}, - 40: {region: 0x165, script: 0x57, flags: 0x0}, - 41: {region: 0x165, script: 0x57, flags: 0x0}, - 42: {region: 0xd6, script: 0x57, flags: 0x0}, - 43: {region: 0x165, script: 0x57, flags: 0x0}, - 45: {region: 0x165, script: 0x57, flags: 0x0}, - 46: {region: 0x165, script: 0x57, flags: 0x0}, - 47: {region: 0x165, script: 0x57, flags: 0x0}, - 48: {region: 0x165, script: 0x57, flags: 0x0}, - 49: {region: 0x165, script: 0x57, flags: 0x0}, - 50: {region: 0x165, script: 0x57, flags: 0x0}, - 51: {region: 0x95, script: 0x57, flags: 0x0}, + 32: {region: 0x165, script: 0x5a, flags: 0x0}, + 33: {region: 0x80, script: 0x5a, flags: 0x0}, + 34: {region: 0x9b, script: 0xf1, flags: 0x0}, + 35: {region: 0x165, script: 0x5a, flags: 0x0}, + 36: {region: 0x165, script: 0x5a, flags: 0x0}, + 37: {region: 0x14d, script: 0x5a, flags: 0x0}, + 38: {region: 0x106, script: 0x20, flags: 0x0}, + 39: {region: 0x6f, script: 0x2c, flags: 0x0}, + 40: {region: 0x165, script: 0x5a, flags: 0x0}, + 41: {region: 0x165, script: 0x5a, flags: 0x0}, + 42: {region: 0xd6, script: 0x5a, flags: 0x0}, + 43: {region: 0x165, script: 0x5a, flags: 0x0}, + 45: {region: 0x165, script: 0x5a, flags: 0x0}, + 46: {region: 0x165, script: 0x5a, flags: 0x0}, + 47: {region: 0x165, script: 0x5a, flags: 0x0}, + 48: {region: 0x165, script: 0x5a, flags: 0x0}, + 49: {region: 0x165, script: 0x5a, flags: 0x0}, + 50: {region: 0x165, script: 0x5a, flags: 0x0}, + 51: {region: 0x95, script: 0x5a, flags: 0x0}, 52: {region: 0x165, script: 0x5, flags: 0x0}, 53: {region: 0x122, script: 0x5, flags: 0x0}, - 54: {region: 0x165, script: 0x57, flags: 0x0}, - 55: {region: 0x165, script: 0x57, flags: 0x0}, - 56: {region: 0x165, script: 0x57, flags: 0x0}, - 57: {region: 0x165, script: 0x57, flags: 0x0}, + 54: {region: 0x165, script: 0x5a, flags: 0x0}, + 55: {region: 0x165, script: 0x5a, flags: 0x0}, + 56: {region: 0x165, script: 0x5a, flags: 0x0}, + 57: {region: 0x165, script: 0x5a, flags: 0x0}, 58: {region: 0x6b, script: 0x5, flags: 0x0}, 59: {region: 0x0, script: 0x3, flags: 0x1}, - 60: {region: 0x165, script: 0x57, flags: 0x0}, - 61: {region: 0x51, script: 0x57, flags: 0x0}, - 62: {region: 0x3f, script: 0x57, flags: 0x0}, + 60: {region: 0x165, script: 0x5a, flags: 0x0}, + 61: {region: 0x51, script: 0x5a, flags: 0x0}, + 62: {region: 0x3f, script: 0x5a, flags: 0x0}, 63: {region: 0x67, script: 0x5, flags: 0x0}, 65: {region: 0xba, script: 0x5, flags: 0x0}, 66: {region: 0x6b, script: 0x5, flags: 0x0}, 67: {region: 0x99, script: 0xe, flags: 0x0}, - 68: {region: 0x12f, script: 0x57, flags: 0x0}, - 69: {region: 0x135, script: 0xc4, flags: 0x0}, - 70: {region: 0x165, script: 0x57, flags: 0x0}, - 71: {region: 0x165, script: 0x57, flags: 0x0}, - 72: {region: 0x6e, script: 0x57, flags: 0x0}, - 73: {region: 0x165, script: 0x57, flags: 0x0}, - 74: {region: 0x165, script: 0x57, flags: 0x0}, - 75: {region: 0x49, script: 0x57, flags: 0x0}, - 76: {region: 0x165, script: 0x57, flags: 0x0}, - 77: {region: 0x106, script: 0x1f, flags: 0x0}, + 68: {region: 0x12f, script: 0x5a, flags: 0x0}, + 69: {region: 0x135, script: 0xc9, flags: 0x0}, + 70: {region: 0x165, script: 0x5a, flags: 0x0}, + 71: {region: 0x165, script: 0x5a, flags: 0x0}, + 72: {region: 0x6e, script: 0x5a, flags: 0x0}, + 73: {region: 0x165, script: 0x5a, flags: 0x0}, + 74: {region: 0x165, script: 0x5a, flags: 0x0}, + 75: {region: 0x49, script: 0x5a, flags: 0x0}, + 76: {region: 0x165, script: 0x5a, flags: 0x0}, + 77: {region: 0x106, script: 0x20, flags: 0x0}, 78: {region: 0x165, script: 0x5, flags: 0x0}, - 79: {region: 0x165, script: 0x57, flags: 0x0}, - 80: {region: 0x165, script: 0x57, flags: 0x0}, - 81: {region: 0x165, script: 0x57, flags: 0x0}, - 82: {region: 0x99, script: 0x21, flags: 0x0}, - 83: {region: 0x165, script: 0x57, flags: 0x0}, - 84: {region: 0x165, script: 0x57, flags: 0x0}, - 85: {region: 0x165, script: 0x57, flags: 0x0}, - 86: {region: 0x3f, script: 0x57, flags: 0x0}, - 87: {region: 0x165, script: 0x57, flags: 0x0}, + 79: {region: 0x165, script: 0x5a, flags: 0x0}, + 80: {region: 0x165, script: 0x5a, flags: 0x0}, + 81: {region: 0x165, script: 0x5a, flags: 0x0}, + 82: {region: 0x99, script: 0x22, flags: 0x0}, + 83: {region: 0x165, script: 0x5a, flags: 0x0}, + 84: {region: 0x165, script: 0x5a, flags: 0x0}, + 85: {region: 0x165, script: 0x5a, flags: 0x0}, + 86: {region: 0x3f, script: 0x5a, flags: 0x0}, + 87: {region: 0x165, script: 0x5a, flags: 0x0}, 88: {region: 0x3, script: 0x5, flags: 0x1}, - 89: {region: 0x106, script: 0x1f, flags: 0x0}, + 89: {region: 0x106, script: 0x20, flags: 0x0}, 90: {region: 0xe8, script: 0x5, flags: 0x0}, - 91: {region: 0x95, script: 0x57, flags: 0x0}, - 92: {region: 0xdb, script: 0x21, flags: 0x0}, - 93: {region: 0x2e, script: 0x57, flags: 0x0}, - 94: {region: 0x52, script: 0x57, flags: 0x0}, - 95: {region: 0x165, script: 0x57, flags: 0x0}, + 91: {region: 0x95, script: 0x5a, flags: 0x0}, + 92: {region: 0xdb, script: 0x22, flags: 0x0}, + 93: {region: 0x2e, script: 0x5a, flags: 0x0}, + 94: {region: 0x52, script: 0x5a, flags: 0x0}, + 95: {region: 0x165, script: 0x5a, flags: 0x0}, 96: {region: 0x52, script: 0xb, flags: 0x0}, - 97: {region: 0x165, script: 0x57, flags: 0x0}, - 98: {region: 0x165, script: 0x57, flags: 0x0}, - 99: {region: 0x95, script: 0x57, flags: 0x0}, - 100: {region: 0x165, script: 0x57, flags: 0x0}, - 101: {region: 0x52, script: 0x57, flags: 0x0}, - 102: {region: 0x165, script: 0x57, flags: 0x0}, - 103: {region: 0x165, script: 0x57, flags: 0x0}, - 104: {region: 0x165, script: 0x57, flags: 0x0}, - 105: {region: 0x165, script: 0x57, flags: 0x0}, - 106: {region: 0x4f, script: 0x57, flags: 0x0}, - 107: {region: 0x165, script: 0x57, flags: 0x0}, - 108: {region: 0x165, script: 0x57, flags: 0x0}, - 109: {region: 0x165, script: 0x57, flags: 0x0}, - 110: {region: 0x165, script: 0x29, flags: 0x0}, - 111: {region: 0x165, script: 0x57, flags: 0x0}, - 112: {region: 0x165, script: 0x57, flags: 0x0}, - 113: {region: 0x47, script: 0x1f, flags: 0x0}, - 114: {region: 0x165, script: 0x57, flags: 0x0}, - 115: {region: 0x165, script: 0x57, flags: 0x0}, + 97: {region: 0x165, script: 0x5a, flags: 0x0}, + 98: {region: 0x165, script: 0x5a, flags: 0x0}, + 99: {region: 0x95, script: 0x5a, flags: 0x0}, + 100: {region: 0x165, script: 0x5a, flags: 0x0}, + 101: {region: 0x52, script: 0x5a, flags: 0x0}, + 102: {region: 0x165, script: 0x5a, flags: 0x0}, + 103: {region: 0x165, script: 0x5a, flags: 0x0}, + 104: {region: 0x165, script: 0x5a, flags: 0x0}, + 105: {region: 0x165, script: 0x5a, flags: 0x0}, + 106: {region: 0x4f, script: 0x5a, flags: 0x0}, + 107: {region: 0x165, script: 0x5a, flags: 0x0}, + 108: {region: 0x165, script: 0x5a, flags: 0x0}, + 109: {region: 0x165, script: 0x5a, flags: 0x0}, + 110: {region: 0x165, script: 0x2c, flags: 0x0}, + 111: {region: 0x165, script: 0x5a, flags: 0x0}, + 112: {region: 0x165, script: 0x5a, flags: 0x0}, + 113: {region: 0x47, script: 0x20, flags: 0x0}, + 114: {region: 0x165, script: 0x5a, flags: 0x0}, + 115: {region: 0x165, script: 0x5a, flags: 0x0}, 116: {region: 0x10b, script: 0x5, flags: 0x0}, - 117: {region: 0x162, script: 0x57, flags: 0x0}, - 118: {region: 0x165, script: 0x57, flags: 0x0}, - 119: {region: 0x95, script: 0x57, flags: 0x0}, - 120: {region: 0x165, script: 0x57, flags: 0x0}, - 121: {region: 0x12f, script: 0x57, flags: 0x0}, - 122: {region: 0x52, script: 0x57, flags: 0x0}, - 123: {region: 0x99, script: 0xd7, flags: 0x0}, + 117: {region: 0x162, script: 0x5a, flags: 0x0}, + 118: {region: 0x165, script: 0x5a, flags: 0x0}, + 119: {region: 0x95, script: 0x5a, flags: 0x0}, + 120: {region: 0x165, script: 0x5a, flags: 0x0}, + 121: {region: 0x12f, script: 0x5a, flags: 0x0}, + 122: {region: 0x52, script: 0x5a, flags: 0x0}, + 123: {region: 0x99, script: 0xde, flags: 0x0}, 124: {region: 0xe8, script: 0x5, flags: 0x0}, - 125: {region: 0x99, script: 0x21, flags: 0x0}, - 126: {region: 0x38, script: 0x1f, flags: 0x0}, - 127: {region: 0x99, script: 0x21, flags: 0x0}, + 125: {region: 0x99, script: 0x22, flags: 0x0}, + 126: {region: 0x38, script: 0x20, flags: 0x0}, + 127: {region: 0x99, script: 0x22, flags: 0x0}, 128: {region: 0xe8, script: 0x5, flags: 0x0}, - 129: {region: 0x12b, script: 0x31, flags: 0x0}, - 131: {region: 0x99, script: 0x21, flags: 0x0}, - 132: {region: 0x165, script: 0x57, flags: 0x0}, - 133: {region: 0x99, script: 0x21, flags: 0x0}, - 134: {region: 0xe7, script: 0x57, flags: 0x0}, - 135: {region: 0x165, script: 0x57, flags: 0x0}, - 136: {region: 0x99, script: 0x21, flags: 0x0}, - 137: {region: 0x165, script: 0x57, flags: 0x0}, - 138: {region: 0x13f, script: 0x57, flags: 0x0}, - 139: {region: 0x165, script: 0x57, flags: 0x0}, - 140: {region: 0x165, script: 0x57, flags: 0x0}, - 141: {region: 0xe7, script: 0x57, flags: 0x0}, - 142: {region: 0x165, script: 0x57, flags: 0x0}, - 143: {region: 0xd6, script: 0x57, flags: 0x0}, - 144: {region: 0x165, script: 0x57, flags: 0x0}, - 145: {region: 0x165, script: 0x57, flags: 0x0}, - 146: {region: 0x165, script: 0x57, flags: 0x0}, - 147: {region: 0x165, script: 0x29, flags: 0x0}, - 148: {region: 0x99, script: 0x21, flags: 0x0}, - 149: {region: 0x95, script: 0x57, flags: 0x0}, - 150: {region: 0x165, script: 0x57, flags: 0x0}, - 151: {region: 0x165, script: 0x57, flags: 0x0}, - 152: {region: 0x114, script: 0x57, flags: 0x0}, - 153: {region: 0x165, script: 0x57, flags: 0x0}, - 154: {region: 0x165, script: 0x57, flags: 0x0}, - 155: {region: 0x52, script: 0x57, flags: 0x0}, - 156: {region: 0x165, script: 0x57, flags: 0x0}, - 157: {region: 0xe7, script: 0x57, flags: 0x0}, - 158: {region: 0x165, script: 0x57, flags: 0x0}, - 159: {region: 0x13e, script: 0xd9, flags: 0x0}, - 160: {region: 0xc3, script: 0x57, flags: 0x0}, - 161: {region: 0x165, script: 0x57, flags: 0x0}, - 162: {region: 0x165, script: 0x57, flags: 0x0}, - 163: {region: 0xc3, script: 0x57, flags: 0x0}, - 164: {region: 0x165, script: 0x57, flags: 0x0}, + 129: {region: 0x12b, script: 0x34, flags: 0x0}, + 131: {region: 0x99, script: 0x22, flags: 0x0}, + 132: {region: 0x165, script: 0x5a, flags: 0x0}, + 133: {region: 0x99, script: 0x22, flags: 0x0}, + 134: {region: 0xe7, script: 0x5a, flags: 0x0}, + 135: {region: 0x165, script: 0x5a, flags: 0x0}, + 136: {region: 0x99, script: 0x22, flags: 0x0}, + 137: {region: 0x165, script: 0x5a, flags: 0x0}, + 138: {region: 0x13f, script: 0x5a, flags: 0x0}, + 139: {region: 0x165, script: 0x5a, flags: 0x0}, + 140: {region: 0x165, script: 0x5a, flags: 0x0}, + 141: {region: 0xe7, script: 0x5a, flags: 0x0}, + 142: {region: 0x165, script: 0x5a, flags: 0x0}, + 143: {region: 0xd6, script: 0x5a, flags: 0x0}, + 144: {region: 0x165, script: 0x5a, flags: 0x0}, + 145: {region: 0x165, script: 0x5a, flags: 0x0}, + 146: {region: 0x165, script: 0x5a, flags: 0x0}, + 147: {region: 0x165, script: 0x2c, flags: 0x0}, + 148: {region: 0x99, script: 0x22, flags: 0x0}, + 149: {region: 0x95, script: 0x5a, flags: 0x0}, + 150: {region: 0x165, script: 0x5a, flags: 0x0}, + 151: {region: 0x165, script: 0x5a, flags: 0x0}, + 152: {region: 0x114, script: 0x5a, flags: 0x0}, + 153: {region: 0x165, script: 0x5a, flags: 0x0}, + 154: {region: 0x165, script: 0x5a, flags: 0x0}, + 155: {region: 0x52, script: 0x5a, flags: 0x0}, + 156: {region: 0x165, script: 0x5a, flags: 0x0}, + 157: {region: 0xe7, script: 0x5a, flags: 0x0}, + 158: {region: 0x165, script: 0x5a, flags: 0x0}, + 159: {region: 0x13e, script: 0xe0, flags: 0x0}, + 160: {region: 0xc3, script: 0x5a, flags: 0x0}, + 161: {region: 0x165, script: 0x5a, flags: 0x0}, + 162: {region: 0x165, script: 0x5a, flags: 0x0}, + 163: {region: 0xc3, script: 0x5a, flags: 0x0}, + 164: {region: 0x165, script: 0x5a, flags: 0x0}, 165: {region: 0x35, script: 0xe, flags: 0x0}, - 166: {region: 0x165, script: 0x57, flags: 0x0}, - 167: {region: 0x165, script: 0x57, flags: 0x0}, - 168: {region: 0x165, script: 0x57, flags: 0x0}, - 169: {region: 0x53, script: 0xe0, flags: 0x0}, - 170: {region: 0x165, script: 0x57, flags: 0x0}, - 171: {region: 0x165, script: 0x57, flags: 0x0}, - 172: {region: 0x165, script: 0x57, flags: 0x0}, + 166: {region: 0x165, script: 0x5a, flags: 0x0}, + 167: {region: 0x165, script: 0x5a, flags: 0x0}, + 168: {region: 0x165, script: 0x5a, flags: 0x0}, + 169: {region: 0x53, script: 0xe7, flags: 0x0}, + 170: {region: 0x165, script: 0x5a, flags: 0x0}, + 171: {region: 0x165, script: 0x5a, flags: 0x0}, + 172: {region: 0x165, script: 0x5a, flags: 0x0}, 173: {region: 0x99, script: 0xe, flags: 0x0}, - 174: {region: 0x165, script: 0x57, flags: 0x0}, + 174: {region: 0x165, script: 0x5a, flags: 0x0}, 175: {region: 0x9c, script: 0x5, flags: 0x0}, - 176: {region: 0x165, script: 0x57, flags: 0x0}, - 177: {region: 0x4f, script: 0x57, flags: 0x0}, - 178: {region: 0x78, script: 0x57, flags: 0x0}, - 179: {region: 0x99, script: 0x21, flags: 0x0}, + 176: {region: 0x165, script: 0x5a, flags: 0x0}, + 177: {region: 0x4f, script: 0x5a, flags: 0x0}, + 178: {region: 0x78, script: 0x5a, flags: 0x0}, + 179: {region: 0x99, script: 0x22, flags: 0x0}, 180: {region: 0xe8, script: 0x5, flags: 0x0}, - 181: {region: 0x99, script: 0x21, flags: 0x0}, - 182: {region: 0x165, script: 0x57, flags: 0x0}, - 183: {region: 0x33, script: 0x57, flags: 0x0}, - 184: {region: 0x165, script: 0x57, flags: 0x0}, + 181: {region: 0x99, script: 0x22, flags: 0x0}, + 182: {region: 0x165, script: 0x5a, flags: 0x0}, + 183: {region: 0x33, script: 0x5a, flags: 0x0}, + 184: {region: 0x165, script: 0x5a, flags: 0x0}, 185: {region: 0xb4, script: 0xc, flags: 0x0}, - 186: {region: 0x52, script: 0x57, flags: 0x0}, - 187: {region: 0x165, script: 0x29, flags: 0x0}, - 188: {region: 0xe7, script: 0x57, flags: 0x0}, - 189: {region: 0x165, script: 0x57, flags: 0x0}, - 190: {region: 0xe8, script: 0x21, flags: 0x0}, - 191: {region: 0x106, script: 0x1f, flags: 0x0}, - 192: {region: 0x15f, script: 0x57, flags: 0x0}, - 193: {region: 0x165, script: 0x57, flags: 0x0}, - 194: {region: 0x95, script: 0x57, flags: 0x0}, - 195: {region: 0x165, script: 0x57, flags: 0x0}, - 196: {region: 0x52, script: 0x57, flags: 0x0}, - 197: {region: 0x165, script: 0x57, flags: 0x0}, - 198: {region: 0x165, script: 0x57, flags: 0x0}, - 199: {region: 0x165, script: 0x57, flags: 0x0}, - 200: {region: 0x86, script: 0x57, flags: 0x0}, - 201: {region: 0x165, script: 0x57, flags: 0x0}, - 202: {region: 0x165, script: 0x57, flags: 0x0}, - 203: {region: 0x165, script: 0x57, flags: 0x0}, - 204: {region: 0x165, script: 0x57, flags: 0x0}, - 205: {region: 0x6d, script: 0x29, flags: 0x0}, - 206: {region: 0x165, script: 0x57, flags: 0x0}, - 207: {region: 0x165, script: 0x57, flags: 0x0}, - 208: {region: 0x52, script: 0x57, flags: 0x0}, - 209: {region: 0x165, script: 0x57, flags: 0x0}, - 210: {region: 0x165, script: 0x57, flags: 0x0}, - 211: {region: 0xc3, script: 0x57, flags: 0x0}, - 212: {region: 0x165, script: 0x57, flags: 0x0}, - 213: {region: 0x165, script: 0x57, flags: 0x0}, - 214: {region: 0x165, script: 0x57, flags: 0x0}, - 215: {region: 0x6e, script: 0x57, flags: 0x0}, - 216: {region: 0x165, script: 0x57, flags: 0x0}, - 217: {region: 0x165, script: 0x57, flags: 0x0}, - 218: {region: 0xd6, script: 0x57, flags: 0x0}, + 186: {region: 0x52, script: 0x5a, flags: 0x0}, + 187: {region: 0x165, script: 0x2c, flags: 0x0}, + 188: {region: 0xe7, script: 0x5a, flags: 0x0}, + 189: {region: 0x165, script: 0x5a, flags: 0x0}, + 190: {region: 0xe8, script: 0x22, flags: 0x0}, + 191: {region: 0x106, script: 0x20, flags: 0x0}, + 192: {region: 0x15f, script: 0x5a, flags: 0x0}, + 193: {region: 0x165, script: 0x5a, flags: 0x0}, + 194: {region: 0x95, script: 0x5a, flags: 0x0}, + 195: {region: 0x165, script: 0x5a, flags: 0x0}, + 196: {region: 0x52, script: 0x5a, flags: 0x0}, + 197: {region: 0x165, script: 0x5a, flags: 0x0}, + 198: {region: 0x165, script: 0x5a, flags: 0x0}, + 199: {region: 0x165, script: 0x5a, flags: 0x0}, + 200: {region: 0x86, script: 0x5a, flags: 0x0}, + 201: {region: 0x165, script: 0x5a, flags: 0x0}, + 202: {region: 0x165, script: 0x5a, flags: 0x0}, + 203: {region: 0x165, script: 0x5a, flags: 0x0}, + 204: {region: 0x165, script: 0x5a, flags: 0x0}, + 205: {region: 0x6d, script: 0x2c, flags: 0x0}, + 206: {region: 0x165, script: 0x5a, flags: 0x0}, + 207: {region: 0x165, script: 0x5a, flags: 0x0}, + 208: {region: 0x52, script: 0x5a, flags: 0x0}, + 209: {region: 0x165, script: 0x5a, flags: 0x0}, + 210: {region: 0x165, script: 0x5a, flags: 0x0}, + 211: {region: 0xc3, script: 0x5a, flags: 0x0}, + 212: {region: 0x165, script: 0x5a, flags: 0x0}, + 213: {region: 0x165, script: 0x5a, flags: 0x0}, + 214: {region: 0x165, script: 0x5a, flags: 0x0}, + 215: {region: 0x6e, script: 0x5a, flags: 0x0}, + 216: {region: 0x165, script: 0x5a, flags: 0x0}, + 217: {region: 0x165, script: 0x5a, flags: 0x0}, + 218: {region: 0xd6, script: 0x5a, flags: 0x0}, 219: {region: 0x35, script: 0x16, flags: 0x0}, - 220: {region: 0x106, script: 0x1f, flags: 0x0}, - 221: {region: 0xe7, script: 0x57, flags: 0x0}, - 222: {region: 0x165, script: 0x57, flags: 0x0}, - 223: {region: 0x131, script: 0x57, flags: 0x0}, - 224: {region: 0x8a, script: 0x57, flags: 0x0}, - 225: {region: 0x75, script: 0x57, flags: 0x0}, - 226: {region: 0x106, script: 0x1f, flags: 0x0}, - 227: {region: 0x135, script: 0x57, flags: 0x0}, - 228: {region: 0x49, script: 0x57, flags: 0x0}, + 220: {region: 0x106, script: 0x20, flags: 0x0}, + 221: {region: 0xe7, script: 0x5a, flags: 0x0}, + 222: {region: 0x165, script: 0x5a, flags: 0x0}, + 223: {region: 0x131, script: 0x5a, flags: 0x0}, + 224: {region: 0x8a, script: 0x5a, flags: 0x0}, + 225: {region: 0x75, script: 0x5a, flags: 0x0}, + 226: {region: 0x106, script: 0x20, flags: 0x0}, + 227: {region: 0x135, script: 0x5a, flags: 0x0}, + 228: {region: 0x49, script: 0x5a, flags: 0x0}, 229: {region: 0x135, script: 0x1a, flags: 0x0}, 230: {region: 0xa6, script: 0x5, flags: 0x0}, 231: {region: 0x13e, script: 0x19, flags: 0x0}, - 232: {region: 0x165, script: 0x57, flags: 0x0}, + 232: {region: 0x165, script: 0x5a, flags: 0x0}, 233: {region: 0x9b, script: 0x5, flags: 0x0}, - 234: {region: 0x165, script: 0x57, flags: 0x0}, - 235: {region: 0x165, script: 0x57, flags: 0x0}, - 236: {region: 0x165, script: 0x57, flags: 0x0}, - 237: {region: 0x165, script: 0x57, flags: 0x0}, - 238: {region: 0x165, script: 0x57, flags: 0x0}, - 239: {region: 0xc5, script: 0xcc, flags: 0x0}, - 240: {region: 0x78, script: 0x57, flags: 0x0}, - 241: {region: 0x6b, script: 0x1c, flags: 0x0}, - 242: {region: 0xe7, script: 0x57, flags: 0x0}, + 234: {region: 0x165, script: 0x5a, flags: 0x0}, + 235: {region: 0x165, script: 0x5a, flags: 0x0}, + 236: {region: 0x165, script: 0x5a, flags: 0x0}, + 237: {region: 0x165, script: 0x5a, flags: 0x0}, + 238: {region: 0x165, script: 0x5a, flags: 0x0}, + 239: {region: 0xc5, script: 0xd3, flags: 0x0}, + 240: {region: 0x78, script: 0x5a, flags: 0x0}, + 241: {region: 0x6b, script: 0x1d, flags: 0x0}, + 242: {region: 0xe7, script: 0x5a, flags: 0x0}, 243: {region: 0x49, script: 0x17, flags: 0x0}, - 244: {region: 0x130, script: 0x1f, flags: 0x0}, + 244: {region: 0x130, script: 0x20, flags: 0x0}, 245: {region: 0x49, script: 0x17, flags: 0x0}, 246: {region: 0x49, script: 0x17, flags: 0x0}, 247: {region: 0x49, script: 0x17, flags: 0x0}, 248: {region: 0x49, script: 0x17, flags: 0x0}, - 249: {region: 0x10a, script: 0x57, flags: 0x0}, - 250: {region: 0x5e, script: 0x57, flags: 0x0}, - 251: {region: 0xe9, script: 0x57, flags: 0x0}, + 249: {region: 0x10a, script: 0x5a, flags: 0x0}, + 250: {region: 0x5e, script: 0x5a, flags: 0x0}, + 251: {region: 0xe9, script: 0x5a, flags: 0x0}, 252: {region: 0x49, script: 0x17, flags: 0x0}, - 253: {region: 0xc4, script: 0x81, flags: 0x0}, + 253: {region: 0xc4, script: 0x85, flags: 0x0}, 254: {region: 0x8, script: 0x2, flags: 0x1}, - 255: {region: 0x106, script: 0x1f, flags: 0x0}, - 256: {region: 0x7b, script: 0x57, flags: 0x0}, - 257: {region: 0x63, script: 0x57, flags: 0x0}, - 258: {region: 0x165, script: 0x57, flags: 0x0}, - 259: {region: 0x165, script: 0x57, flags: 0x0}, - 260: {region: 0x165, script: 0x57, flags: 0x0}, - 261: {region: 0x165, script: 0x57, flags: 0x0}, - 262: {region: 0x135, script: 0x57, flags: 0x0}, - 263: {region: 0x106, script: 0x1f, flags: 0x0}, - 264: {region: 0xa4, script: 0x57, flags: 0x0}, - 265: {region: 0x165, script: 0x57, flags: 0x0}, - 266: {region: 0x165, script: 0x57, flags: 0x0}, + 255: {region: 0x106, script: 0x20, flags: 0x0}, + 256: {region: 0x7b, script: 0x5a, flags: 0x0}, + 257: {region: 0x63, script: 0x5a, flags: 0x0}, + 258: {region: 0x165, script: 0x5a, flags: 0x0}, + 259: {region: 0x165, script: 0x5a, flags: 0x0}, + 260: {region: 0x165, script: 0x5a, flags: 0x0}, + 261: {region: 0x165, script: 0x5a, flags: 0x0}, + 262: {region: 0x135, script: 0x5a, flags: 0x0}, + 263: {region: 0x106, script: 0x20, flags: 0x0}, + 264: {region: 0xa4, script: 0x5a, flags: 0x0}, + 265: {region: 0x165, script: 0x5a, flags: 0x0}, + 266: {region: 0x165, script: 0x5a, flags: 0x0}, 267: {region: 0x99, script: 0x5, flags: 0x0}, - 268: {region: 0x165, script: 0x57, flags: 0x0}, - 269: {region: 0x60, script: 0x57, flags: 0x0}, - 270: {region: 0x165, script: 0x57, flags: 0x0}, - 271: {region: 0x49, script: 0x57, flags: 0x0}, - 272: {region: 0x165, script: 0x57, flags: 0x0}, - 273: {region: 0x165, script: 0x57, flags: 0x0}, - 274: {region: 0x165, script: 0x57, flags: 0x0}, + 268: {region: 0x165, script: 0x5a, flags: 0x0}, + 269: {region: 0x60, script: 0x5a, flags: 0x0}, + 270: {region: 0x165, script: 0x5a, flags: 0x0}, + 271: {region: 0x49, script: 0x5a, flags: 0x0}, + 272: {region: 0x165, script: 0x5a, flags: 0x0}, + 273: {region: 0x165, script: 0x5a, flags: 0x0}, + 274: {region: 0x165, script: 0x5a, flags: 0x0}, 275: {region: 0x165, script: 0x5, flags: 0x0}, - 276: {region: 0x49, script: 0x57, flags: 0x0}, - 277: {region: 0x165, script: 0x57, flags: 0x0}, - 278: {region: 0x165, script: 0x57, flags: 0x0}, - 279: {region: 0xd4, script: 0x57, flags: 0x0}, - 280: {region: 0x4f, script: 0x57, flags: 0x0}, - 281: {region: 0x165, script: 0x57, flags: 0x0}, + 276: {region: 0x49, script: 0x5a, flags: 0x0}, + 277: {region: 0x165, script: 0x5a, flags: 0x0}, + 278: {region: 0x165, script: 0x5a, flags: 0x0}, + 279: {region: 0xd4, script: 0x5a, flags: 0x0}, + 280: {region: 0x4f, script: 0x5a, flags: 0x0}, + 281: {region: 0x165, script: 0x5a, flags: 0x0}, 282: {region: 0x99, script: 0x5, flags: 0x0}, - 283: {region: 0x165, script: 0x57, flags: 0x0}, - 284: {region: 0x165, script: 0x57, flags: 0x0}, - 285: {region: 0x165, script: 0x57, flags: 0x0}, - 286: {region: 0x165, script: 0x29, flags: 0x0}, - 287: {region: 0x60, script: 0x57, flags: 0x0}, - 288: {region: 0xc3, script: 0x57, flags: 0x0}, - 289: {region: 0xd0, script: 0x57, flags: 0x0}, - 290: {region: 0x165, script: 0x57, flags: 0x0}, - 291: {region: 0xdb, script: 0x21, flags: 0x0}, - 292: {region: 0x52, script: 0x57, flags: 0x0}, - 293: {region: 0x165, script: 0x57, flags: 0x0}, - 294: {region: 0x165, script: 0x57, flags: 0x0}, - 295: {region: 0x165, script: 0x57, flags: 0x0}, - 296: {region: 0xcd, script: 0xde, flags: 0x0}, - 297: {region: 0x165, script: 0x57, flags: 0x0}, - 298: {region: 0x165, script: 0x57, flags: 0x0}, - 299: {region: 0x114, script: 0x57, flags: 0x0}, - 300: {region: 0x37, script: 0x57, flags: 0x0}, - 301: {region: 0x43, script: 0xe0, flags: 0x0}, - 302: {region: 0x165, script: 0x57, flags: 0x0}, - 303: {region: 0xa4, script: 0x57, flags: 0x0}, - 304: {region: 0x80, script: 0x57, flags: 0x0}, - 305: {region: 0xd6, script: 0x57, flags: 0x0}, - 306: {region: 0x9e, script: 0x57, flags: 0x0}, - 307: {region: 0x6b, script: 0x27, flags: 0x0}, - 308: {region: 0x165, script: 0x57, flags: 0x0}, - 309: {region: 0xc4, script: 0x48, flags: 0x0}, - 310: {region: 0x87, script: 0x31, flags: 0x0}, - 311: {region: 0x165, script: 0x57, flags: 0x0}, - 312: {region: 0x165, script: 0x57, flags: 0x0}, + 283: {region: 0x165, script: 0x5a, flags: 0x0}, + 284: {region: 0x165, script: 0x5a, flags: 0x0}, + 285: {region: 0x165, script: 0x5a, flags: 0x0}, + 286: {region: 0x165, script: 0x2c, flags: 0x0}, + 287: {region: 0x60, script: 0x5a, flags: 0x0}, + 288: {region: 0xc3, script: 0x5a, flags: 0x0}, + 289: {region: 0xd0, script: 0x5a, flags: 0x0}, + 290: {region: 0x165, script: 0x5a, flags: 0x0}, + 291: {region: 0xdb, script: 0x22, flags: 0x0}, + 292: {region: 0x52, script: 0x5a, flags: 0x0}, + 293: {region: 0x165, script: 0x5a, flags: 0x0}, + 294: {region: 0x165, script: 0x5a, flags: 0x0}, + 295: {region: 0x165, script: 0x5a, flags: 0x0}, + 296: {region: 0xcd, script: 0xe5, flags: 0x0}, + 297: {region: 0x165, script: 0x5a, flags: 0x0}, + 298: {region: 0x165, script: 0x5a, flags: 0x0}, + 299: {region: 0x114, script: 0x5a, flags: 0x0}, + 300: {region: 0x37, script: 0x5a, flags: 0x0}, + 301: {region: 0x43, script: 0xe7, flags: 0x0}, + 302: {region: 0x165, script: 0x5a, flags: 0x0}, + 303: {region: 0xa4, script: 0x5a, flags: 0x0}, + 304: {region: 0x80, script: 0x5a, flags: 0x0}, + 305: {region: 0xd6, script: 0x5a, flags: 0x0}, + 306: {region: 0x9e, script: 0x5a, flags: 0x0}, + 307: {region: 0x6b, script: 0x29, flags: 0x0}, + 308: {region: 0x165, script: 0x5a, flags: 0x0}, + 309: {region: 0xc4, script: 0x4b, flags: 0x0}, + 310: {region: 0x87, script: 0x34, flags: 0x0}, + 311: {region: 0x165, script: 0x5a, flags: 0x0}, + 312: {region: 0x165, script: 0x5a, flags: 0x0}, 313: {region: 0xa, script: 0x2, flags: 0x1}, - 314: {region: 0x165, script: 0x57, flags: 0x0}, - 315: {region: 0x165, script: 0x57, flags: 0x0}, - 316: {region: 0x1, script: 0x57, flags: 0x0}, - 317: {region: 0x165, script: 0x57, flags: 0x0}, - 318: {region: 0x6e, script: 0x57, flags: 0x0}, - 319: {region: 0x135, script: 0x57, flags: 0x0}, - 320: {region: 0x6a, script: 0x57, flags: 0x0}, - 321: {region: 0x165, script: 0x57, flags: 0x0}, - 322: {region: 0x9e, script: 0x43, flags: 0x0}, - 323: {region: 0x165, script: 0x57, flags: 0x0}, - 324: {region: 0x165, script: 0x57, flags: 0x0}, - 325: {region: 0x6e, script: 0x57, flags: 0x0}, - 326: {region: 0x52, script: 0x57, flags: 0x0}, - 327: {region: 0x6e, script: 0x57, flags: 0x0}, + 314: {region: 0x165, script: 0x5a, flags: 0x0}, + 315: {region: 0x165, script: 0x5a, flags: 0x0}, + 316: {region: 0x1, script: 0x5a, flags: 0x0}, + 317: {region: 0x165, script: 0x5a, flags: 0x0}, + 318: {region: 0x6e, script: 0x5a, flags: 0x0}, + 319: {region: 0x135, script: 0x5a, flags: 0x0}, + 320: {region: 0x6a, script: 0x5a, flags: 0x0}, + 321: {region: 0x165, script: 0x5a, flags: 0x0}, + 322: {region: 0x9e, script: 0x46, flags: 0x0}, + 323: {region: 0x165, script: 0x5a, flags: 0x0}, + 324: {region: 0x165, script: 0x5a, flags: 0x0}, + 325: {region: 0x6e, script: 0x5a, flags: 0x0}, + 326: {region: 0x52, script: 0x5a, flags: 0x0}, + 327: {region: 0x6e, script: 0x5a, flags: 0x0}, 328: {region: 0x9c, script: 0x5, flags: 0x0}, - 329: {region: 0x165, script: 0x57, flags: 0x0}, - 330: {region: 0x165, script: 0x57, flags: 0x0}, - 331: {region: 0x165, script: 0x57, flags: 0x0}, - 332: {region: 0x165, script: 0x57, flags: 0x0}, - 333: {region: 0x86, script: 0x57, flags: 0x0}, + 329: {region: 0x165, script: 0x5a, flags: 0x0}, + 330: {region: 0x165, script: 0x5a, flags: 0x0}, + 331: {region: 0x165, script: 0x5a, flags: 0x0}, + 332: {region: 0x165, script: 0x5a, flags: 0x0}, + 333: {region: 0x86, script: 0x5a, flags: 0x0}, 334: {region: 0xc, script: 0x2, flags: 0x1}, - 335: {region: 0x165, script: 0x57, flags: 0x0}, - 336: {region: 0xc3, script: 0x57, flags: 0x0}, - 337: {region: 0x72, script: 0x57, flags: 0x0}, + 335: {region: 0x165, script: 0x5a, flags: 0x0}, + 336: {region: 0xc3, script: 0x5a, flags: 0x0}, + 337: {region: 0x72, script: 0x5a, flags: 0x0}, 338: {region: 0x10b, script: 0x5, flags: 0x0}, - 339: {region: 0xe7, script: 0x57, flags: 0x0}, - 340: {region: 0x10c, script: 0x57, flags: 0x0}, - 341: {region: 0x73, script: 0x57, flags: 0x0}, - 342: {region: 0x165, script: 0x57, flags: 0x0}, - 343: {region: 0x165, script: 0x57, flags: 0x0}, - 344: {region: 0x76, script: 0x57, flags: 0x0}, - 345: {region: 0x165, script: 0x57, flags: 0x0}, - 346: {region: 0x3b, script: 0x57, flags: 0x0}, - 347: {region: 0x165, script: 0x57, flags: 0x0}, - 348: {region: 0x165, script: 0x57, flags: 0x0}, - 349: {region: 0x165, script: 0x57, flags: 0x0}, - 350: {region: 0x78, script: 0x57, flags: 0x0}, - 351: {region: 0x135, script: 0x57, flags: 0x0}, - 352: {region: 0x78, script: 0x57, flags: 0x0}, - 353: {region: 0x60, script: 0x57, flags: 0x0}, - 354: {region: 0x60, script: 0x57, flags: 0x0}, + 339: {region: 0xe7, script: 0x5a, flags: 0x0}, + 340: {region: 0x10c, script: 0x5a, flags: 0x0}, + 341: {region: 0x73, script: 0x5a, flags: 0x0}, + 342: {region: 0x165, script: 0x5a, flags: 0x0}, + 343: {region: 0x165, script: 0x5a, flags: 0x0}, + 344: {region: 0x76, script: 0x5a, flags: 0x0}, + 345: {region: 0x165, script: 0x5a, flags: 0x0}, + 346: {region: 0x3b, script: 0x5a, flags: 0x0}, + 347: {region: 0x165, script: 0x5a, flags: 0x0}, + 348: {region: 0x165, script: 0x5a, flags: 0x0}, + 349: {region: 0x165, script: 0x5a, flags: 0x0}, + 350: {region: 0x78, script: 0x5a, flags: 0x0}, + 351: {region: 0x135, script: 0x5a, flags: 0x0}, + 352: {region: 0x78, script: 0x5a, flags: 0x0}, + 353: {region: 0x60, script: 0x5a, flags: 0x0}, + 354: {region: 0x60, script: 0x5a, flags: 0x0}, 355: {region: 0x52, script: 0x5, flags: 0x0}, - 356: {region: 0x140, script: 0x57, flags: 0x0}, - 357: {region: 0x165, script: 0x57, flags: 0x0}, - 358: {region: 0x84, script: 0x57, flags: 0x0}, - 359: {region: 0x165, script: 0x57, flags: 0x0}, - 360: {region: 0xd4, script: 0x57, flags: 0x0}, - 361: {region: 0x9e, script: 0x57, flags: 0x0}, - 362: {region: 0xd6, script: 0x57, flags: 0x0}, - 363: {region: 0x165, script: 0x57, flags: 0x0}, - 364: {region: 0x10b, script: 0x57, flags: 0x0}, - 365: {region: 0xd9, script: 0x57, flags: 0x0}, - 366: {region: 0x96, script: 0x57, flags: 0x0}, - 367: {region: 0x80, script: 0x57, flags: 0x0}, - 368: {region: 0x165, script: 0x57, flags: 0x0}, - 369: {region: 0xbc, script: 0x57, flags: 0x0}, - 370: {region: 0x165, script: 0x57, flags: 0x0}, - 371: {region: 0x165, script: 0x57, flags: 0x0}, - 372: {region: 0x165, script: 0x57, flags: 0x0}, - 373: {region: 0x53, script: 0x38, flags: 0x0}, - 374: {region: 0x165, script: 0x57, flags: 0x0}, - 375: {region: 0x95, script: 0x57, flags: 0x0}, - 376: {region: 0x165, script: 0x57, flags: 0x0}, - 377: {region: 0x165, script: 0x57, flags: 0x0}, - 378: {region: 0x99, script: 0x21, flags: 0x0}, - 379: {region: 0x165, script: 0x57, flags: 0x0}, + 356: {region: 0x140, script: 0x5a, flags: 0x0}, + 357: {region: 0x165, script: 0x5a, flags: 0x0}, + 358: {region: 0x84, script: 0x5a, flags: 0x0}, + 359: {region: 0x165, script: 0x5a, flags: 0x0}, + 360: {region: 0xd4, script: 0x5a, flags: 0x0}, + 361: {region: 0x9e, script: 0x5a, flags: 0x0}, + 362: {region: 0xd6, script: 0x5a, flags: 0x0}, + 363: {region: 0x165, script: 0x5a, flags: 0x0}, + 364: {region: 0x10b, script: 0x5a, flags: 0x0}, + 365: {region: 0xd9, script: 0x5a, flags: 0x0}, + 366: {region: 0x96, script: 0x5a, flags: 0x0}, + 367: {region: 0x80, script: 0x5a, flags: 0x0}, + 368: {region: 0x165, script: 0x5a, flags: 0x0}, + 369: {region: 0xbc, script: 0x5a, flags: 0x0}, + 370: {region: 0x165, script: 0x5a, flags: 0x0}, + 371: {region: 0x165, script: 0x5a, flags: 0x0}, + 372: {region: 0x165, script: 0x5a, flags: 0x0}, + 373: {region: 0x53, script: 0x3b, flags: 0x0}, + 374: {region: 0x165, script: 0x5a, flags: 0x0}, + 375: {region: 0x95, script: 0x5a, flags: 0x0}, + 376: {region: 0x165, script: 0x5a, flags: 0x0}, + 377: {region: 0x165, script: 0x5a, flags: 0x0}, + 378: {region: 0x99, script: 0x22, flags: 0x0}, + 379: {region: 0x165, script: 0x5a, flags: 0x0}, 380: {region: 0x9c, script: 0x5, flags: 0x0}, - 381: {region: 0x7e, script: 0x57, flags: 0x0}, - 382: {region: 0x7b, script: 0x57, flags: 0x0}, - 383: {region: 0x165, script: 0x57, flags: 0x0}, - 384: {region: 0x165, script: 0x57, flags: 0x0}, - 385: {region: 0x165, script: 0x57, flags: 0x0}, - 386: {region: 0x165, script: 0x57, flags: 0x0}, - 387: {region: 0x165, script: 0x57, flags: 0x0}, - 388: {region: 0x165, script: 0x57, flags: 0x0}, - 389: {region: 0x6f, script: 0x29, flags: 0x0}, - 390: {region: 0x165, script: 0x57, flags: 0x0}, - 391: {region: 0xdb, script: 0x21, flags: 0x0}, - 392: {region: 0x165, script: 0x57, flags: 0x0}, - 393: {region: 0xa7, script: 0x57, flags: 0x0}, - 394: {region: 0x165, script: 0x57, flags: 0x0}, + 381: {region: 0x7e, script: 0x5a, flags: 0x0}, + 382: {region: 0x7b, script: 0x5a, flags: 0x0}, + 383: {region: 0x165, script: 0x5a, flags: 0x0}, + 384: {region: 0x165, script: 0x5a, flags: 0x0}, + 385: {region: 0x165, script: 0x5a, flags: 0x0}, + 386: {region: 0x165, script: 0x5a, flags: 0x0}, + 387: {region: 0x165, script: 0x5a, flags: 0x0}, + 388: {region: 0x165, script: 0x5a, flags: 0x0}, + 389: {region: 0x6f, script: 0x2c, flags: 0x0}, + 390: {region: 0x165, script: 0x5a, flags: 0x0}, + 391: {region: 0xdb, script: 0x22, flags: 0x0}, + 392: {region: 0x165, script: 0x5a, flags: 0x0}, + 393: {region: 0xa7, script: 0x5a, flags: 0x0}, + 394: {region: 0x165, script: 0x5a, flags: 0x0}, 395: {region: 0xe8, script: 0x5, flags: 0x0}, - 396: {region: 0x165, script: 0x57, flags: 0x0}, + 396: {region: 0x165, script: 0x5a, flags: 0x0}, 397: {region: 0xe8, script: 0x5, flags: 0x0}, - 398: {region: 0x165, script: 0x57, flags: 0x0}, - 399: {region: 0x165, script: 0x57, flags: 0x0}, - 400: {region: 0x6e, script: 0x57, flags: 0x0}, + 398: {region: 0x165, script: 0x5a, flags: 0x0}, + 399: {region: 0x165, script: 0x5a, flags: 0x0}, + 400: {region: 0x6e, script: 0x5a, flags: 0x0}, 401: {region: 0x9c, script: 0x5, flags: 0x0}, - 402: {region: 0x165, script: 0x57, flags: 0x0}, - 403: {region: 0x165, script: 0x29, flags: 0x0}, - 404: {region: 0xf1, script: 0x57, flags: 0x0}, - 405: {region: 0x165, script: 0x57, flags: 0x0}, - 406: {region: 0x165, script: 0x57, flags: 0x0}, - 407: {region: 0x165, script: 0x57, flags: 0x0}, - 408: {region: 0x165, script: 0x29, flags: 0x0}, - 409: {region: 0x165, script: 0x57, flags: 0x0}, - 410: {region: 0x99, script: 0x21, flags: 0x0}, - 411: {region: 0x99, script: 0xda, flags: 0x0}, - 412: {region: 0x95, script: 0x57, flags: 0x0}, - 413: {region: 0xd9, script: 0x57, flags: 0x0}, - 414: {region: 0x130, script: 0x2f, flags: 0x0}, - 415: {region: 0x165, script: 0x57, flags: 0x0}, + 402: {region: 0x165, script: 0x5a, flags: 0x0}, + 403: {region: 0x165, script: 0x2c, flags: 0x0}, + 404: {region: 0xf1, script: 0x5a, flags: 0x0}, + 405: {region: 0x165, script: 0x5a, flags: 0x0}, + 406: {region: 0x165, script: 0x5a, flags: 0x0}, + 407: {region: 0x165, script: 0x5a, flags: 0x0}, + 408: {region: 0x165, script: 0x2c, flags: 0x0}, + 409: {region: 0x165, script: 0x5a, flags: 0x0}, + 410: {region: 0x99, script: 0x22, flags: 0x0}, + 411: {region: 0x99, script: 0xe1, flags: 0x0}, + 412: {region: 0x95, script: 0x5a, flags: 0x0}, + 413: {region: 0xd9, script: 0x5a, flags: 0x0}, + 414: {region: 0x130, script: 0x32, flags: 0x0}, + 415: {region: 0x165, script: 0x5a, flags: 0x0}, 416: {region: 0xe, script: 0x2, flags: 0x1}, 417: {region: 0x99, script: 0xe, flags: 0x0}, - 418: {region: 0x165, script: 0x57, flags: 0x0}, - 419: {region: 0x4e, script: 0x57, flags: 0x0}, - 420: {region: 0x99, script: 0x32, flags: 0x0}, - 421: {region: 0x41, script: 0x57, flags: 0x0}, - 422: {region: 0x54, script: 0x57, flags: 0x0}, - 423: {region: 0x165, script: 0x57, flags: 0x0}, - 424: {region: 0x80, script: 0x57, flags: 0x0}, - 425: {region: 0x165, script: 0x57, flags: 0x0}, - 426: {region: 0x165, script: 0x57, flags: 0x0}, - 427: {region: 0xa4, script: 0x57, flags: 0x0}, - 428: {region: 0x98, script: 0x57, flags: 0x0}, - 429: {region: 0x165, script: 0x57, flags: 0x0}, - 430: {region: 0xdb, script: 0x21, flags: 0x0}, - 431: {region: 0x165, script: 0x57, flags: 0x0}, + 418: {region: 0x165, script: 0x5a, flags: 0x0}, + 419: {region: 0x4e, script: 0x5a, flags: 0x0}, + 420: {region: 0x99, script: 0x35, flags: 0x0}, + 421: {region: 0x41, script: 0x5a, flags: 0x0}, + 422: {region: 0x54, script: 0x5a, flags: 0x0}, + 423: {region: 0x165, script: 0x5a, flags: 0x0}, + 424: {region: 0x80, script: 0x5a, flags: 0x0}, + 425: {region: 0x165, script: 0x5a, flags: 0x0}, + 426: {region: 0x165, script: 0x5a, flags: 0x0}, + 427: {region: 0xa4, script: 0x5a, flags: 0x0}, + 428: {region: 0x98, script: 0x5a, flags: 0x0}, + 429: {region: 0x165, script: 0x5a, flags: 0x0}, + 430: {region: 0xdb, script: 0x22, flags: 0x0}, + 431: {region: 0x165, script: 0x5a, flags: 0x0}, 432: {region: 0x165, script: 0x5, flags: 0x0}, - 433: {region: 0x49, script: 0x57, flags: 0x0}, + 433: {region: 0x49, script: 0x5a, flags: 0x0}, 434: {region: 0x165, script: 0x5, flags: 0x0}, - 435: {region: 0x165, script: 0x57, flags: 0x0}, + 435: {region: 0x165, script: 0x5a, flags: 0x0}, 436: {region: 0x10, script: 0x3, flags: 0x1}, - 437: {region: 0x165, script: 0x57, flags: 0x0}, - 438: {region: 0x53, script: 0x38, flags: 0x0}, - 439: {region: 0x165, script: 0x57, flags: 0x0}, - 440: {region: 0x135, script: 0x57, flags: 0x0}, + 437: {region: 0x165, script: 0x5a, flags: 0x0}, + 438: {region: 0x53, script: 0x3b, flags: 0x0}, + 439: {region: 0x165, script: 0x5a, flags: 0x0}, + 440: {region: 0x135, script: 0x5a, flags: 0x0}, 441: {region: 0x24, script: 0x5, flags: 0x0}, - 442: {region: 0x165, script: 0x57, flags: 0x0}, - 443: {region: 0x165, script: 0x29, flags: 0x0}, - 444: {region: 0x97, script: 0x3b, flags: 0x0}, - 445: {region: 0x165, script: 0x57, flags: 0x0}, - 446: {region: 0x99, script: 0x21, flags: 0x0}, - 447: {region: 0x165, script: 0x57, flags: 0x0}, - 448: {region: 0x73, script: 0x57, flags: 0x0}, - 449: {region: 0x165, script: 0x57, flags: 0x0}, - 450: {region: 0x165, script: 0x57, flags: 0x0}, - 451: {region: 0xe7, script: 0x57, flags: 0x0}, - 452: {region: 0x165, script: 0x57, flags: 0x0}, - 453: {region: 0x12b, script: 0x3d, flags: 0x0}, - 454: {region: 0x53, script: 0x89, flags: 0x0}, - 455: {region: 0x165, script: 0x57, flags: 0x0}, + 442: {region: 0x165, script: 0x5a, flags: 0x0}, + 443: {region: 0x165, script: 0x2c, flags: 0x0}, + 444: {region: 0x97, script: 0x3e, flags: 0x0}, + 445: {region: 0x165, script: 0x5a, flags: 0x0}, + 446: {region: 0x99, script: 0x22, flags: 0x0}, + 447: {region: 0x165, script: 0x5a, flags: 0x0}, + 448: {region: 0x73, script: 0x5a, flags: 0x0}, + 449: {region: 0x165, script: 0x5a, flags: 0x0}, + 450: {region: 0x165, script: 0x5a, flags: 0x0}, + 451: {region: 0xe7, script: 0x5a, flags: 0x0}, + 452: {region: 0x165, script: 0x5a, flags: 0x0}, + 453: {region: 0x12b, script: 0x40, flags: 0x0}, + 454: {region: 0x53, script: 0x8d, flags: 0x0}, + 455: {region: 0x165, script: 0x5a, flags: 0x0}, 456: {region: 0xe8, script: 0x5, flags: 0x0}, - 457: {region: 0x99, script: 0x21, flags: 0x0}, - 458: {region: 0xaf, script: 0x3e, flags: 0x0}, - 459: {region: 0xe7, script: 0x57, flags: 0x0}, + 457: {region: 0x99, script: 0x22, flags: 0x0}, + 458: {region: 0xaf, script: 0x41, flags: 0x0}, + 459: {region: 0xe7, script: 0x5a, flags: 0x0}, 460: {region: 0xe8, script: 0x5, flags: 0x0}, - 461: {region: 0xe6, script: 0x57, flags: 0x0}, - 462: {region: 0x99, script: 0x21, flags: 0x0}, - 463: {region: 0x99, script: 0x21, flags: 0x0}, - 464: {region: 0x165, script: 0x57, flags: 0x0}, - 465: {region: 0x90, script: 0x57, flags: 0x0}, - 466: {region: 0x60, script: 0x57, flags: 0x0}, - 467: {region: 0x53, script: 0x38, flags: 0x0}, - 468: {region: 0x91, script: 0x57, flags: 0x0}, - 469: {region: 0x92, script: 0x57, flags: 0x0}, - 470: {region: 0x165, script: 0x57, flags: 0x0}, + 461: {region: 0xe6, script: 0x5a, flags: 0x0}, + 462: {region: 0x99, script: 0x22, flags: 0x0}, + 463: {region: 0x99, script: 0x22, flags: 0x0}, + 464: {region: 0x165, script: 0x5a, flags: 0x0}, + 465: {region: 0x90, script: 0x5a, flags: 0x0}, + 466: {region: 0x60, script: 0x5a, flags: 0x0}, + 467: {region: 0x53, script: 0x3b, flags: 0x0}, + 468: {region: 0x91, script: 0x5a, flags: 0x0}, + 469: {region: 0x92, script: 0x5a, flags: 0x0}, + 470: {region: 0x165, script: 0x5a, flags: 0x0}, 471: {region: 0x28, script: 0x8, flags: 0x0}, - 472: {region: 0xd2, script: 0x57, flags: 0x0}, - 473: {region: 0x78, script: 0x57, flags: 0x0}, - 474: {region: 0x165, script: 0x57, flags: 0x0}, - 475: {region: 0x165, script: 0x57, flags: 0x0}, - 476: {region: 0xd0, script: 0x57, flags: 0x0}, - 477: {region: 0xd6, script: 0x57, flags: 0x0}, - 478: {region: 0x165, script: 0x57, flags: 0x0}, - 479: {region: 0x165, script: 0x57, flags: 0x0}, - 480: {region: 0x165, script: 0x57, flags: 0x0}, - 481: {region: 0x95, script: 0x57, flags: 0x0}, - 482: {region: 0x165, script: 0x57, flags: 0x0}, - 483: {region: 0x165, script: 0x57, flags: 0x0}, - 484: {region: 0x165, script: 0x57, flags: 0x0}, - 486: {region: 0x122, script: 0x57, flags: 0x0}, - 487: {region: 0xd6, script: 0x57, flags: 0x0}, - 488: {region: 0x165, script: 0x57, flags: 0x0}, - 489: {region: 0x165, script: 0x57, flags: 0x0}, - 490: {region: 0x53, script: 0xea, flags: 0x0}, - 491: {region: 0x165, script: 0x57, flags: 0x0}, - 492: {region: 0x135, script: 0x57, flags: 0x0}, - 493: {region: 0x165, script: 0x57, flags: 0x0}, - 494: {region: 0x49, script: 0x57, flags: 0x0}, - 495: {region: 0x165, script: 0x57, flags: 0x0}, - 496: {region: 0x165, script: 0x57, flags: 0x0}, - 497: {region: 0xe7, script: 0x57, flags: 0x0}, - 498: {region: 0x165, script: 0x57, flags: 0x0}, - 499: {region: 0x95, script: 0x57, flags: 0x0}, - 500: {region: 0x106, script: 0x1f, flags: 0x0}, - 501: {region: 0x1, script: 0x57, flags: 0x0}, - 502: {region: 0x165, script: 0x57, flags: 0x0}, - 503: {region: 0x165, script: 0x57, flags: 0x0}, - 504: {region: 0x9d, script: 0x57, flags: 0x0}, - 505: {region: 0x9e, script: 0x57, flags: 0x0}, + 472: {region: 0xd2, script: 0x5a, flags: 0x0}, + 473: {region: 0x78, script: 0x5a, flags: 0x0}, + 474: {region: 0x165, script: 0x5a, flags: 0x0}, + 475: {region: 0x165, script: 0x5a, flags: 0x0}, + 476: {region: 0xd0, script: 0x5a, flags: 0x0}, + 477: {region: 0xd6, script: 0x5a, flags: 0x0}, + 478: {region: 0x165, script: 0x5a, flags: 0x0}, + 479: {region: 0x165, script: 0x5a, flags: 0x0}, + 480: {region: 0x165, script: 0x5a, flags: 0x0}, + 481: {region: 0x95, script: 0x5a, flags: 0x0}, + 482: {region: 0x165, script: 0x5a, flags: 0x0}, + 483: {region: 0x165, script: 0x5a, flags: 0x0}, + 484: {region: 0x165, script: 0x5a, flags: 0x0}, + 486: {region: 0x122, script: 0x5a, flags: 0x0}, + 487: {region: 0xd6, script: 0x5a, flags: 0x0}, + 488: {region: 0x165, script: 0x5a, flags: 0x0}, + 489: {region: 0x165, script: 0x5a, flags: 0x0}, + 490: {region: 0x53, script: 0xf3, flags: 0x0}, + 491: {region: 0x165, script: 0x5a, flags: 0x0}, + 492: {region: 0x135, script: 0x5a, flags: 0x0}, + 493: {region: 0x165, script: 0x5a, flags: 0x0}, + 494: {region: 0x49, script: 0x5a, flags: 0x0}, + 495: {region: 0x165, script: 0x5a, flags: 0x0}, + 496: {region: 0x165, script: 0x5a, flags: 0x0}, + 497: {region: 0xe7, script: 0x5a, flags: 0x0}, + 498: {region: 0x165, script: 0x5a, flags: 0x0}, + 499: {region: 0x95, script: 0x5a, flags: 0x0}, + 500: {region: 0x106, script: 0x20, flags: 0x0}, + 501: {region: 0x1, script: 0x5a, flags: 0x0}, + 502: {region: 0x165, script: 0x5a, flags: 0x0}, + 503: {region: 0x165, script: 0x5a, flags: 0x0}, + 504: {region: 0x9d, script: 0x5a, flags: 0x0}, + 505: {region: 0x9e, script: 0x5a, flags: 0x0}, 506: {region: 0x49, script: 0x17, flags: 0x0}, - 507: {region: 0x97, script: 0x3b, flags: 0x0}, - 508: {region: 0x165, script: 0x57, flags: 0x0}, - 509: {region: 0x165, script: 0x57, flags: 0x0}, - 510: {region: 0x106, script: 0x57, flags: 0x0}, - 511: {region: 0x165, script: 0x57, flags: 0x0}, - 512: {region: 0xa2, script: 0x46, flags: 0x0}, - 513: {region: 0x165, script: 0x57, flags: 0x0}, - 514: {region: 0xa0, script: 0x57, flags: 0x0}, - 515: {region: 0x1, script: 0x57, flags: 0x0}, - 516: {region: 0x165, script: 0x57, flags: 0x0}, - 517: {region: 0x165, script: 0x57, flags: 0x0}, - 518: {region: 0x165, script: 0x57, flags: 0x0}, - 519: {region: 0x52, script: 0x57, flags: 0x0}, - 520: {region: 0x130, script: 0x3b, flags: 0x0}, - 521: {region: 0x165, script: 0x57, flags: 0x0}, - 522: {region: 0x12f, script: 0x57, flags: 0x0}, - 523: {region: 0xdb, script: 0x21, flags: 0x0}, - 524: {region: 0x165, script: 0x57, flags: 0x0}, - 525: {region: 0x63, script: 0x57, flags: 0x0}, - 526: {region: 0x95, script: 0x57, flags: 0x0}, - 527: {region: 0x95, script: 0x57, flags: 0x0}, - 528: {region: 0x7d, script: 0x2b, flags: 0x0}, - 529: {region: 0x137, script: 0x1f, flags: 0x0}, - 530: {region: 0x67, script: 0x57, flags: 0x0}, - 531: {region: 0xc4, script: 0x57, flags: 0x0}, - 532: {region: 0x165, script: 0x57, flags: 0x0}, - 533: {region: 0x165, script: 0x57, flags: 0x0}, - 534: {region: 0xd6, script: 0x57, flags: 0x0}, - 535: {region: 0xa4, script: 0x57, flags: 0x0}, - 536: {region: 0xc3, script: 0x57, flags: 0x0}, - 537: {region: 0x106, script: 0x1f, flags: 0x0}, - 538: {region: 0x165, script: 0x57, flags: 0x0}, - 539: {region: 0x165, script: 0x57, flags: 0x0}, - 540: {region: 0x165, script: 0x57, flags: 0x0}, - 541: {region: 0x165, script: 0x57, flags: 0x0}, + 507: {region: 0x97, script: 0x3e, flags: 0x0}, + 508: {region: 0x165, script: 0x5a, flags: 0x0}, + 509: {region: 0x165, script: 0x5a, flags: 0x0}, + 510: {region: 0x106, script: 0x5a, flags: 0x0}, + 511: {region: 0x165, script: 0x5a, flags: 0x0}, + 512: {region: 0xa2, script: 0x49, flags: 0x0}, + 513: {region: 0x165, script: 0x5a, flags: 0x0}, + 514: {region: 0xa0, script: 0x5a, flags: 0x0}, + 515: {region: 0x1, script: 0x5a, flags: 0x0}, + 516: {region: 0x165, script: 0x5a, flags: 0x0}, + 517: {region: 0x165, script: 0x5a, flags: 0x0}, + 518: {region: 0x165, script: 0x5a, flags: 0x0}, + 519: {region: 0x52, script: 0x5a, flags: 0x0}, + 520: {region: 0x130, script: 0x3e, flags: 0x0}, + 521: {region: 0x165, script: 0x5a, flags: 0x0}, + 522: {region: 0x12f, script: 0x5a, flags: 0x0}, + 523: {region: 0xdb, script: 0x22, flags: 0x0}, + 524: {region: 0x165, script: 0x5a, flags: 0x0}, + 525: {region: 0x63, script: 0x5a, flags: 0x0}, + 526: {region: 0x95, script: 0x5a, flags: 0x0}, + 527: {region: 0x95, script: 0x5a, flags: 0x0}, + 528: {region: 0x7d, script: 0x2e, flags: 0x0}, + 529: {region: 0x137, script: 0x20, flags: 0x0}, + 530: {region: 0x67, script: 0x5a, flags: 0x0}, + 531: {region: 0xc4, script: 0x5a, flags: 0x0}, + 532: {region: 0x165, script: 0x5a, flags: 0x0}, + 533: {region: 0x165, script: 0x5a, flags: 0x0}, + 534: {region: 0xd6, script: 0x5a, flags: 0x0}, + 535: {region: 0xa4, script: 0x5a, flags: 0x0}, + 536: {region: 0xc3, script: 0x5a, flags: 0x0}, + 537: {region: 0x106, script: 0x20, flags: 0x0}, + 538: {region: 0x165, script: 0x5a, flags: 0x0}, + 539: {region: 0x165, script: 0x5a, flags: 0x0}, + 540: {region: 0x165, script: 0x5a, flags: 0x0}, + 541: {region: 0x165, script: 0x5a, flags: 0x0}, 542: {region: 0xd4, script: 0x5, flags: 0x0}, - 543: {region: 0xd6, script: 0x57, flags: 0x0}, - 544: {region: 0x164, script: 0x57, flags: 0x0}, - 545: {region: 0x165, script: 0x57, flags: 0x0}, - 546: {region: 0x165, script: 0x57, flags: 0x0}, - 547: {region: 0x12f, script: 0x57, flags: 0x0}, + 543: {region: 0xd6, script: 0x5a, flags: 0x0}, + 544: {region: 0x164, script: 0x5a, flags: 0x0}, + 545: {region: 0x165, script: 0x5a, flags: 0x0}, + 546: {region: 0x165, script: 0x5a, flags: 0x0}, + 547: {region: 0x12f, script: 0x5a, flags: 0x0}, 548: {region: 0x122, script: 0x5, flags: 0x0}, - 549: {region: 0x165, script: 0x57, flags: 0x0}, - 550: {region: 0x123, script: 0xdf, flags: 0x0}, - 551: {region: 0x5a, script: 0x57, flags: 0x0}, - 552: {region: 0x52, script: 0x57, flags: 0x0}, - 553: {region: 0x165, script: 0x57, flags: 0x0}, - 554: {region: 0x4f, script: 0x57, flags: 0x0}, - 555: {region: 0x99, script: 0x21, flags: 0x0}, - 556: {region: 0x99, script: 0x21, flags: 0x0}, - 557: {region: 0x4b, script: 0x57, flags: 0x0}, - 558: {region: 0x95, script: 0x57, flags: 0x0}, - 559: {region: 0x165, script: 0x57, flags: 0x0}, - 560: {region: 0x41, script: 0x57, flags: 0x0}, - 561: {region: 0x99, script: 0x57, flags: 0x0}, - 562: {region: 0x53, script: 0xd6, flags: 0x0}, - 563: {region: 0x99, script: 0x21, flags: 0x0}, - 564: {region: 0xc3, script: 0x57, flags: 0x0}, - 565: {region: 0x165, script: 0x57, flags: 0x0}, - 566: {region: 0x99, script: 0x72, flags: 0x0}, + 549: {region: 0x165, script: 0x5a, flags: 0x0}, + 550: {region: 0x123, script: 0xe6, flags: 0x0}, + 551: {region: 0x5a, script: 0x5a, flags: 0x0}, + 552: {region: 0x52, script: 0x5a, flags: 0x0}, + 553: {region: 0x165, script: 0x5a, flags: 0x0}, + 554: {region: 0x4f, script: 0x5a, flags: 0x0}, + 555: {region: 0x99, script: 0x22, flags: 0x0}, + 556: {region: 0x99, script: 0x22, flags: 0x0}, + 557: {region: 0x4b, script: 0x5a, flags: 0x0}, + 558: {region: 0x95, script: 0x5a, flags: 0x0}, + 559: {region: 0x165, script: 0x5a, flags: 0x0}, + 560: {region: 0x41, script: 0x5a, flags: 0x0}, + 561: {region: 0x99, script: 0x5a, flags: 0x0}, + 562: {region: 0x53, script: 0xdd, flags: 0x0}, + 563: {region: 0x99, script: 0x22, flags: 0x0}, + 564: {region: 0xc3, script: 0x5a, flags: 0x0}, + 565: {region: 0x165, script: 0x5a, flags: 0x0}, + 566: {region: 0x99, script: 0x75, flags: 0x0}, 567: {region: 0xe8, script: 0x5, flags: 0x0}, - 568: {region: 0x165, script: 0x57, flags: 0x0}, - 569: {region: 0xa4, script: 0x57, flags: 0x0}, - 570: {region: 0x165, script: 0x57, flags: 0x0}, - 571: {region: 0x12b, script: 0x57, flags: 0x0}, - 572: {region: 0x165, script: 0x57, flags: 0x0}, - 573: {region: 0xd2, script: 0x57, flags: 0x0}, - 574: {region: 0x165, script: 0x57, flags: 0x0}, - 575: {region: 0xaf, script: 0x54, flags: 0x0}, - 576: {region: 0x165, script: 0x57, flags: 0x0}, - 577: {region: 0x165, script: 0x57, flags: 0x0}, + 568: {region: 0x165, script: 0x5a, flags: 0x0}, + 569: {region: 0xa4, script: 0x5a, flags: 0x0}, + 570: {region: 0x165, script: 0x5a, flags: 0x0}, + 571: {region: 0x12b, script: 0x5a, flags: 0x0}, + 572: {region: 0x165, script: 0x5a, flags: 0x0}, + 573: {region: 0xd2, script: 0x5a, flags: 0x0}, + 574: {region: 0x165, script: 0x5a, flags: 0x0}, + 575: {region: 0xaf, script: 0x57, flags: 0x0}, + 576: {region: 0x165, script: 0x5a, flags: 0x0}, + 577: {region: 0x165, script: 0x5a, flags: 0x0}, 578: {region: 0x13, script: 0x6, flags: 0x1}, - 579: {region: 0x165, script: 0x57, flags: 0x0}, - 580: {region: 0x52, script: 0x57, flags: 0x0}, - 581: {region: 0x82, script: 0x57, flags: 0x0}, - 582: {region: 0xa4, script: 0x57, flags: 0x0}, - 583: {region: 0x165, script: 0x57, flags: 0x0}, - 584: {region: 0x165, script: 0x57, flags: 0x0}, - 585: {region: 0x165, script: 0x57, flags: 0x0}, - 586: {region: 0xa6, script: 0x4b, flags: 0x0}, - 587: {region: 0x2a, script: 0x57, flags: 0x0}, - 588: {region: 0x165, script: 0x57, flags: 0x0}, - 589: {region: 0x165, script: 0x57, flags: 0x0}, - 590: {region: 0x165, script: 0x57, flags: 0x0}, - 591: {region: 0x165, script: 0x57, flags: 0x0}, - 592: {region: 0x165, script: 0x57, flags: 0x0}, - 593: {region: 0x99, script: 0x4f, flags: 0x0}, - 594: {region: 0x8b, script: 0x57, flags: 0x0}, - 595: {region: 0x165, script: 0x57, flags: 0x0}, - 596: {region: 0xab, script: 0x50, flags: 0x0}, - 597: {region: 0x106, script: 0x1f, flags: 0x0}, - 598: {region: 0x99, script: 0x21, flags: 0x0}, - 599: {region: 0x165, script: 0x57, flags: 0x0}, - 600: {region: 0x75, script: 0x57, flags: 0x0}, - 601: {region: 0x165, script: 0x57, flags: 0x0}, - 602: {region: 0xb4, script: 0x57, flags: 0x0}, - 603: {region: 0x165, script: 0x57, flags: 0x0}, - 604: {region: 0x165, script: 0x57, flags: 0x0}, - 605: {region: 0x165, script: 0x57, flags: 0x0}, - 606: {region: 0x165, script: 0x57, flags: 0x0}, - 607: {region: 0x165, script: 0x57, flags: 0x0}, - 608: {region: 0x165, script: 0x57, flags: 0x0}, - 609: {region: 0x165, script: 0x57, flags: 0x0}, - 610: {region: 0x165, script: 0x29, flags: 0x0}, - 611: {region: 0x165, script: 0x57, flags: 0x0}, - 612: {region: 0x106, script: 0x1f, flags: 0x0}, - 613: {region: 0x112, script: 0x57, flags: 0x0}, - 614: {region: 0xe7, script: 0x57, flags: 0x0}, - 615: {region: 0x106, script: 0x57, flags: 0x0}, - 616: {region: 0x165, script: 0x57, flags: 0x0}, - 617: {region: 0x99, script: 0x21, flags: 0x0}, + 579: {region: 0x165, script: 0x5a, flags: 0x0}, + 580: {region: 0x52, script: 0x5a, flags: 0x0}, + 581: {region: 0x82, script: 0x5a, flags: 0x0}, + 582: {region: 0xa4, script: 0x5a, flags: 0x0}, + 583: {region: 0x165, script: 0x5a, flags: 0x0}, + 584: {region: 0x165, script: 0x5a, flags: 0x0}, + 585: {region: 0x165, script: 0x5a, flags: 0x0}, + 586: {region: 0xa6, script: 0x4e, flags: 0x0}, + 587: {region: 0x2a, script: 0x5a, flags: 0x0}, + 588: {region: 0x165, script: 0x5a, flags: 0x0}, + 589: {region: 0x165, script: 0x5a, flags: 0x0}, + 590: {region: 0x165, script: 0x5a, flags: 0x0}, + 591: {region: 0x165, script: 0x5a, flags: 0x0}, + 592: {region: 0x165, script: 0x5a, flags: 0x0}, + 593: {region: 0x99, script: 0x52, flags: 0x0}, + 594: {region: 0x8b, script: 0x5a, flags: 0x0}, + 595: {region: 0x165, script: 0x5a, flags: 0x0}, + 596: {region: 0xab, script: 0x53, flags: 0x0}, + 597: {region: 0x106, script: 0x20, flags: 0x0}, + 598: {region: 0x99, script: 0x22, flags: 0x0}, + 599: {region: 0x165, script: 0x5a, flags: 0x0}, + 600: {region: 0x75, script: 0x5a, flags: 0x0}, + 601: {region: 0x165, script: 0x5a, flags: 0x0}, + 602: {region: 0xb4, script: 0x5a, flags: 0x0}, + 603: {region: 0x165, script: 0x5a, flags: 0x0}, + 604: {region: 0x165, script: 0x5a, flags: 0x0}, + 605: {region: 0x165, script: 0x5a, flags: 0x0}, + 606: {region: 0x165, script: 0x5a, flags: 0x0}, + 607: {region: 0x165, script: 0x5a, flags: 0x0}, + 608: {region: 0x165, script: 0x5a, flags: 0x0}, + 609: {region: 0x165, script: 0x5a, flags: 0x0}, + 610: {region: 0x165, script: 0x2c, flags: 0x0}, + 611: {region: 0x165, script: 0x5a, flags: 0x0}, + 612: {region: 0x106, script: 0x20, flags: 0x0}, + 613: {region: 0x112, script: 0x5a, flags: 0x0}, + 614: {region: 0xe7, script: 0x5a, flags: 0x0}, + 615: {region: 0x106, script: 0x5a, flags: 0x0}, + 616: {region: 0x165, script: 0x5a, flags: 0x0}, + 617: {region: 0x99, script: 0x22, flags: 0x0}, 618: {region: 0x99, script: 0x5, flags: 0x0}, - 619: {region: 0x12f, script: 0x57, flags: 0x0}, - 620: {region: 0x165, script: 0x57, flags: 0x0}, - 621: {region: 0x52, script: 0x57, flags: 0x0}, - 622: {region: 0x60, script: 0x57, flags: 0x0}, - 623: {region: 0x165, script: 0x57, flags: 0x0}, - 624: {region: 0x165, script: 0x57, flags: 0x0}, - 625: {region: 0x165, script: 0x29, flags: 0x0}, - 626: {region: 0x165, script: 0x57, flags: 0x0}, - 627: {region: 0x165, script: 0x57, flags: 0x0}, + 619: {region: 0x12f, script: 0x5a, flags: 0x0}, + 620: {region: 0x165, script: 0x5a, flags: 0x0}, + 621: {region: 0x52, script: 0x5a, flags: 0x0}, + 622: {region: 0x60, script: 0x5a, flags: 0x0}, + 623: {region: 0x165, script: 0x5a, flags: 0x0}, + 624: {region: 0x165, script: 0x5a, flags: 0x0}, + 625: {region: 0x165, script: 0x2c, flags: 0x0}, + 626: {region: 0x165, script: 0x5a, flags: 0x0}, + 627: {region: 0x165, script: 0x5a, flags: 0x0}, 628: {region: 0x19, script: 0x3, flags: 0x1}, - 629: {region: 0x165, script: 0x57, flags: 0x0}, - 630: {region: 0x165, script: 0x57, flags: 0x0}, - 631: {region: 0x165, script: 0x57, flags: 0x0}, - 632: {region: 0x165, script: 0x57, flags: 0x0}, - 633: {region: 0x106, script: 0x1f, flags: 0x0}, - 634: {region: 0x165, script: 0x57, flags: 0x0}, - 635: {region: 0x165, script: 0x57, flags: 0x0}, - 636: {region: 0x165, script: 0x57, flags: 0x0}, - 637: {region: 0x106, script: 0x1f, flags: 0x0}, - 638: {region: 0x165, script: 0x57, flags: 0x0}, - 639: {region: 0x95, script: 0x57, flags: 0x0}, + 629: {region: 0x165, script: 0x5a, flags: 0x0}, + 630: {region: 0x165, script: 0x5a, flags: 0x0}, + 631: {region: 0x165, script: 0x5a, flags: 0x0}, + 632: {region: 0x165, script: 0x5a, flags: 0x0}, + 633: {region: 0x106, script: 0x20, flags: 0x0}, + 634: {region: 0x165, script: 0x5a, flags: 0x0}, + 635: {region: 0x165, script: 0x5a, flags: 0x0}, + 636: {region: 0x165, script: 0x5a, flags: 0x0}, + 637: {region: 0x106, script: 0x20, flags: 0x0}, + 638: {region: 0x165, script: 0x5a, flags: 0x0}, + 639: {region: 0x95, script: 0x5a, flags: 0x0}, 640: {region: 0xe8, script: 0x5, flags: 0x0}, - 641: {region: 0x7b, script: 0x57, flags: 0x0}, - 642: {region: 0x165, script: 0x57, flags: 0x0}, - 643: {region: 0x165, script: 0x57, flags: 0x0}, - 644: {region: 0x165, script: 0x57, flags: 0x0}, - 645: {region: 0x165, script: 0x29, flags: 0x0}, - 646: {region: 0x123, script: 0xdf, flags: 0x0}, + 641: {region: 0x7b, script: 0x5a, flags: 0x0}, + 642: {region: 0x165, script: 0x5a, flags: 0x0}, + 643: {region: 0x165, script: 0x5a, flags: 0x0}, + 644: {region: 0x165, script: 0x5a, flags: 0x0}, + 645: {region: 0x165, script: 0x2c, flags: 0x0}, + 646: {region: 0x123, script: 0xe6, flags: 0x0}, 647: {region: 0xe8, script: 0x5, flags: 0x0}, - 648: {region: 0x165, script: 0x57, flags: 0x0}, - 649: {region: 0x165, script: 0x57, flags: 0x0}, + 648: {region: 0x165, script: 0x5a, flags: 0x0}, + 649: {region: 0x165, script: 0x5a, flags: 0x0}, 650: {region: 0x1c, script: 0x5, flags: 0x1}, - 651: {region: 0x165, script: 0x57, flags: 0x0}, - 652: {region: 0x165, script: 0x57, flags: 0x0}, - 653: {region: 0x165, script: 0x57, flags: 0x0}, - 654: {region: 0x138, script: 0x57, flags: 0x0}, - 655: {region: 0x87, script: 0x5b, flags: 0x0}, - 656: {region: 0x97, script: 0x3b, flags: 0x0}, - 657: {region: 0x12f, script: 0x57, flags: 0x0}, + 651: {region: 0x165, script: 0x5a, flags: 0x0}, + 652: {region: 0x165, script: 0x5a, flags: 0x0}, + 653: {region: 0x165, script: 0x5a, flags: 0x0}, + 654: {region: 0x138, script: 0x5a, flags: 0x0}, + 655: {region: 0x87, script: 0x5e, flags: 0x0}, + 656: {region: 0x97, script: 0x3e, flags: 0x0}, + 657: {region: 0x12f, script: 0x5a, flags: 0x0}, 658: {region: 0xe8, script: 0x5, flags: 0x0}, - 659: {region: 0x131, script: 0x57, flags: 0x0}, - 660: {region: 0x165, script: 0x57, flags: 0x0}, - 661: {region: 0xb7, script: 0x57, flags: 0x0}, - 662: {region: 0x106, script: 0x1f, flags: 0x0}, - 663: {region: 0x165, script: 0x57, flags: 0x0}, - 664: {region: 0x95, script: 0x57, flags: 0x0}, - 665: {region: 0x165, script: 0x57, flags: 0x0}, - 666: {region: 0x53, script: 0xdf, flags: 0x0}, - 667: {region: 0x165, script: 0x57, flags: 0x0}, - 668: {region: 0x165, script: 0x57, flags: 0x0}, - 669: {region: 0x165, script: 0x57, flags: 0x0}, - 670: {region: 0x165, script: 0x57, flags: 0x0}, - 671: {region: 0x99, script: 0x59, flags: 0x0}, - 672: {region: 0x165, script: 0x57, flags: 0x0}, - 673: {region: 0x165, script: 0x57, flags: 0x0}, - 674: {region: 0x106, script: 0x1f, flags: 0x0}, - 675: {region: 0x131, script: 0x57, flags: 0x0}, - 676: {region: 0x165, script: 0x57, flags: 0x0}, - 677: {region: 0xd9, script: 0x57, flags: 0x0}, - 678: {region: 0x165, script: 0x57, flags: 0x0}, - 679: {region: 0x165, script: 0x57, flags: 0x0}, + 659: {region: 0x131, script: 0x5a, flags: 0x0}, + 660: {region: 0x165, script: 0x5a, flags: 0x0}, + 661: {region: 0xb7, script: 0x5a, flags: 0x0}, + 662: {region: 0x106, script: 0x20, flags: 0x0}, + 663: {region: 0x165, script: 0x5a, flags: 0x0}, + 664: {region: 0x95, script: 0x5a, flags: 0x0}, + 665: {region: 0x165, script: 0x5a, flags: 0x0}, + 666: {region: 0x53, script: 0xe6, flags: 0x0}, + 667: {region: 0x165, script: 0x5a, flags: 0x0}, + 668: {region: 0x165, script: 0x5a, flags: 0x0}, + 669: {region: 0x165, script: 0x5a, flags: 0x0}, + 670: {region: 0x165, script: 0x5a, flags: 0x0}, + 671: {region: 0x99, script: 0x5c, flags: 0x0}, + 672: {region: 0x165, script: 0x5a, flags: 0x0}, + 673: {region: 0x165, script: 0x5a, flags: 0x0}, + 674: {region: 0x106, script: 0x20, flags: 0x0}, + 675: {region: 0x131, script: 0x5a, flags: 0x0}, + 676: {region: 0x165, script: 0x5a, flags: 0x0}, + 677: {region: 0xd9, script: 0x5a, flags: 0x0}, + 678: {region: 0x165, script: 0x5a, flags: 0x0}, + 679: {region: 0x165, script: 0x5a, flags: 0x0}, 680: {region: 0x21, script: 0x2, flags: 0x1}, - 681: {region: 0x165, script: 0x57, flags: 0x0}, - 682: {region: 0x165, script: 0x57, flags: 0x0}, - 683: {region: 0x9e, script: 0x57, flags: 0x0}, - 684: {region: 0x53, script: 0x5d, flags: 0x0}, - 685: {region: 0x95, script: 0x57, flags: 0x0}, + 681: {region: 0x165, script: 0x5a, flags: 0x0}, + 682: {region: 0x165, script: 0x5a, flags: 0x0}, + 683: {region: 0x9e, script: 0x5a, flags: 0x0}, + 684: {region: 0x53, script: 0x60, flags: 0x0}, + 685: {region: 0x95, script: 0x5a, flags: 0x0}, 686: {region: 0x9c, script: 0x5, flags: 0x0}, - 687: {region: 0x135, script: 0x57, flags: 0x0}, - 688: {region: 0x165, script: 0x57, flags: 0x0}, - 689: {region: 0x165, script: 0x57, flags: 0x0}, - 690: {region: 0x99, script: 0xda, flags: 0x0}, - 691: {region: 0x9e, script: 0x57, flags: 0x0}, - 692: {region: 0x165, script: 0x57, flags: 0x0}, - 693: {region: 0x4b, script: 0x57, flags: 0x0}, - 694: {region: 0x165, script: 0x57, flags: 0x0}, - 695: {region: 0x165, script: 0x57, flags: 0x0}, - 696: {region: 0xaf, script: 0x54, flags: 0x0}, - 697: {region: 0x165, script: 0x57, flags: 0x0}, - 698: {region: 0x165, script: 0x57, flags: 0x0}, - 699: {region: 0x4b, script: 0x57, flags: 0x0}, - 700: {region: 0x165, script: 0x57, flags: 0x0}, - 701: {region: 0x165, script: 0x57, flags: 0x0}, - 702: {region: 0x162, script: 0x57, flags: 0x0}, + 687: {region: 0x135, script: 0x5a, flags: 0x0}, + 688: {region: 0x165, script: 0x5a, flags: 0x0}, + 689: {region: 0x165, script: 0x5a, flags: 0x0}, + 690: {region: 0x99, script: 0xe1, flags: 0x0}, + 691: {region: 0x9e, script: 0x5a, flags: 0x0}, + 692: {region: 0x165, script: 0x5a, flags: 0x0}, + 693: {region: 0x4b, script: 0x5a, flags: 0x0}, + 694: {region: 0x165, script: 0x5a, flags: 0x0}, + 695: {region: 0x165, script: 0x5a, flags: 0x0}, + 696: {region: 0xaf, script: 0x57, flags: 0x0}, + 697: {region: 0x165, script: 0x5a, flags: 0x0}, + 698: {region: 0x165, script: 0x5a, flags: 0x0}, + 699: {region: 0x4b, script: 0x5a, flags: 0x0}, + 700: {region: 0x165, script: 0x5a, flags: 0x0}, + 701: {region: 0x165, script: 0x5a, flags: 0x0}, + 702: {region: 0x162, script: 0x5a, flags: 0x0}, 703: {region: 0x9c, script: 0x5, flags: 0x0}, - 704: {region: 0xb6, script: 0x57, flags: 0x0}, - 705: {region: 0xb8, script: 0x57, flags: 0x0}, - 706: {region: 0x4b, script: 0x57, flags: 0x0}, - 707: {region: 0x4b, script: 0x57, flags: 0x0}, - 708: {region: 0xa4, script: 0x57, flags: 0x0}, - 709: {region: 0xa4, script: 0x57, flags: 0x0}, + 704: {region: 0xb6, script: 0x5a, flags: 0x0}, + 705: {region: 0xb8, script: 0x5a, flags: 0x0}, + 706: {region: 0x4b, script: 0x5a, flags: 0x0}, + 707: {region: 0x4b, script: 0x5a, flags: 0x0}, + 708: {region: 0xa4, script: 0x5a, flags: 0x0}, + 709: {region: 0xa4, script: 0x5a, flags: 0x0}, 710: {region: 0x9c, script: 0x5, flags: 0x0}, - 711: {region: 0xb8, script: 0x57, flags: 0x0}, - 712: {region: 0x123, script: 0xdf, flags: 0x0}, - 713: {region: 0x53, script: 0x38, flags: 0x0}, - 714: {region: 0x12b, script: 0x57, flags: 0x0}, - 715: {region: 0x95, script: 0x57, flags: 0x0}, - 716: {region: 0x52, script: 0x57, flags: 0x0}, - 717: {region: 0x99, script: 0x21, flags: 0x0}, - 718: {region: 0x99, script: 0x21, flags: 0x0}, - 719: {region: 0x95, script: 0x57, flags: 0x0}, + 711: {region: 0xb8, script: 0x5a, flags: 0x0}, + 712: {region: 0x123, script: 0xe6, flags: 0x0}, + 713: {region: 0x53, script: 0x3b, flags: 0x0}, + 714: {region: 0x12b, script: 0x5a, flags: 0x0}, + 715: {region: 0x95, script: 0x5a, flags: 0x0}, + 716: {region: 0x52, script: 0x5a, flags: 0x0}, + 717: {region: 0x99, script: 0x22, flags: 0x0}, + 718: {region: 0x99, script: 0x22, flags: 0x0}, + 719: {region: 0x95, script: 0x5a, flags: 0x0}, 720: {region: 0x23, script: 0x3, flags: 0x1}, - 721: {region: 0xa4, script: 0x57, flags: 0x0}, - 722: {region: 0x165, script: 0x57, flags: 0x0}, - 723: {region: 0xcf, script: 0x57, flags: 0x0}, - 724: {region: 0x165, script: 0x57, flags: 0x0}, - 725: {region: 0x165, script: 0x57, flags: 0x0}, - 726: {region: 0x165, script: 0x57, flags: 0x0}, - 727: {region: 0x165, script: 0x57, flags: 0x0}, - 728: {region: 0x165, script: 0x57, flags: 0x0}, - 729: {region: 0x165, script: 0x57, flags: 0x0}, - 730: {region: 0x165, script: 0x57, flags: 0x0}, - 731: {region: 0x165, script: 0x57, flags: 0x0}, - 732: {region: 0x165, script: 0x57, flags: 0x0}, - 733: {region: 0x165, script: 0x57, flags: 0x0}, - 734: {region: 0x165, script: 0x57, flags: 0x0}, + 721: {region: 0xa4, script: 0x5a, flags: 0x0}, + 722: {region: 0x165, script: 0x5a, flags: 0x0}, + 723: {region: 0xcf, script: 0x5a, flags: 0x0}, + 724: {region: 0x165, script: 0x5a, flags: 0x0}, + 725: {region: 0x165, script: 0x5a, flags: 0x0}, + 726: {region: 0x165, script: 0x5a, flags: 0x0}, + 727: {region: 0x165, script: 0x5a, flags: 0x0}, + 728: {region: 0x165, script: 0x5a, flags: 0x0}, + 729: {region: 0x165, script: 0x5a, flags: 0x0}, + 730: {region: 0x165, script: 0x5a, flags: 0x0}, + 731: {region: 0x165, script: 0x5a, flags: 0x0}, + 732: {region: 0x165, script: 0x5a, flags: 0x0}, + 733: {region: 0x165, script: 0x5a, flags: 0x0}, + 734: {region: 0x165, script: 0x5a, flags: 0x0}, 735: {region: 0x165, script: 0x5, flags: 0x0}, - 736: {region: 0x106, script: 0x1f, flags: 0x0}, - 737: {region: 0xe7, script: 0x57, flags: 0x0}, - 738: {region: 0x165, script: 0x57, flags: 0x0}, - 739: {region: 0x95, script: 0x57, flags: 0x0}, - 740: {region: 0x165, script: 0x29, flags: 0x0}, - 741: {region: 0x165, script: 0x57, flags: 0x0}, - 742: {region: 0x165, script: 0x57, flags: 0x0}, - 743: {region: 0x165, script: 0x57, flags: 0x0}, - 744: {region: 0x112, script: 0x57, flags: 0x0}, - 745: {region: 0xa4, script: 0x57, flags: 0x0}, - 746: {region: 0x165, script: 0x57, flags: 0x0}, - 747: {region: 0x165, script: 0x57, flags: 0x0}, + 736: {region: 0x106, script: 0x20, flags: 0x0}, + 737: {region: 0xe7, script: 0x5a, flags: 0x0}, + 738: {region: 0x165, script: 0x5a, flags: 0x0}, + 739: {region: 0x95, script: 0x5a, flags: 0x0}, + 740: {region: 0x165, script: 0x2c, flags: 0x0}, + 741: {region: 0x165, script: 0x5a, flags: 0x0}, + 742: {region: 0x165, script: 0x5a, flags: 0x0}, + 743: {region: 0x165, script: 0x5a, flags: 0x0}, + 744: {region: 0x112, script: 0x5a, flags: 0x0}, + 745: {region: 0xa4, script: 0x5a, flags: 0x0}, + 746: {region: 0x165, script: 0x5a, flags: 0x0}, + 747: {region: 0x165, script: 0x5a, flags: 0x0}, 748: {region: 0x123, script: 0x5, flags: 0x0}, - 749: {region: 0xcc, script: 0x57, flags: 0x0}, - 750: {region: 0x165, script: 0x57, flags: 0x0}, - 751: {region: 0x165, script: 0x57, flags: 0x0}, - 752: {region: 0x165, script: 0x57, flags: 0x0}, - 753: {region: 0xbf, script: 0x57, flags: 0x0}, - 754: {region: 0xd1, script: 0x57, flags: 0x0}, - 755: {region: 0x165, script: 0x57, flags: 0x0}, - 756: {region: 0x52, script: 0x57, flags: 0x0}, - 757: {region: 0xdb, script: 0x21, flags: 0x0}, - 758: {region: 0x12f, script: 0x57, flags: 0x0}, - 759: {region: 0xc0, script: 0x57, flags: 0x0}, - 760: {region: 0x165, script: 0x57, flags: 0x0}, - 761: {region: 0x165, script: 0x57, flags: 0x0}, - 762: {region: 0xe0, script: 0x57, flags: 0x0}, - 763: {region: 0x165, script: 0x57, flags: 0x0}, - 764: {region: 0x95, script: 0x57, flags: 0x0}, - 765: {region: 0x9b, script: 0x3a, flags: 0x0}, - 766: {region: 0x165, script: 0x57, flags: 0x0}, - 767: {region: 0xc2, script: 0x1f, flags: 0x0}, + 749: {region: 0xcc, script: 0x5a, flags: 0x0}, + 750: {region: 0x165, script: 0x5a, flags: 0x0}, + 751: {region: 0x165, script: 0x5a, flags: 0x0}, + 752: {region: 0x165, script: 0x5a, flags: 0x0}, + 753: {region: 0xbf, script: 0x5a, flags: 0x0}, + 754: {region: 0xd1, script: 0x5a, flags: 0x0}, + 755: {region: 0x165, script: 0x5a, flags: 0x0}, + 756: {region: 0x52, script: 0x5a, flags: 0x0}, + 757: {region: 0xdb, script: 0x22, flags: 0x0}, + 758: {region: 0x12f, script: 0x5a, flags: 0x0}, + 759: {region: 0xc0, script: 0x5a, flags: 0x0}, + 760: {region: 0x165, script: 0x5a, flags: 0x0}, + 761: {region: 0x165, script: 0x5a, flags: 0x0}, + 762: {region: 0xe0, script: 0x5a, flags: 0x0}, + 763: {region: 0x165, script: 0x5a, flags: 0x0}, + 764: {region: 0x95, script: 0x5a, flags: 0x0}, + 765: {region: 0x9b, script: 0x3d, flags: 0x0}, + 766: {region: 0x165, script: 0x5a, flags: 0x0}, + 767: {region: 0xc2, script: 0x20, flags: 0x0}, 768: {region: 0x165, script: 0x5, flags: 0x0}, - 769: {region: 0x165, script: 0x57, flags: 0x0}, - 770: {region: 0x165, script: 0x57, flags: 0x0}, - 771: {region: 0x165, script: 0x57, flags: 0x0}, - 772: {region: 0x99, script: 0x6b, flags: 0x0}, - 773: {region: 0x165, script: 0x57, flags: 0x0}, - 774: {region: 0x165, script: 0x57, flags: 0x0}, - 775: {region: 0x10b, script: 0x57, flags: 0x0}, - 776: {region: 0x165, script: 0x57, flags: 0x0}, - 777: {region: 0x165, script: 0x57, flags: 0x0}, - 778: {region: 0x165, script: 0x57, flags: 0x0}, + 769: {region: 0x165, script: 0x5a, flags: 0x0}, + 770: {region: 0x165, script: 0x5a, flags: 0x0}, + 771: {region: 0x165, script: 0x5a, flags: 0x0}, + 772: {region: 0x99, script: 0x6e, flags: 0x0}, + 773: {region: 0x165, script: 0x5a, flags: 0x0}, + 774: {region: 0x165, script: 0x5a, flags: 0x0}, + 775: {region: 0x10b, script: 0x5a, flags: 0x0}, + 776: {region: 0x165, script: 0x5a, flags: 0x0}, + 777: {region: 0x165, script: 0x5a, flags: 0x0}, + 778: {region: 0x165, script: 0x5a, flags: 0x0}, 779: {region: 0x26, script: 0x3, flags: 0x1}, - 780: {region: 0x165, script: 0x57, flags: 0x0}, - 781: {region: 0x165, script: 0x57, flags: 0x0}, + 780: {region: 0x165, script: 0x5a, flags: 0x0}, + 781: {region: 0x165, script: 0x5a, flags: 0x0}, 782: {region: 0x99, script: 0xe, flags: 0x0}, - 783: {region: 0xc4, script: 0x72, flags: 0x0}, - 785: {region: 0x165, script: 0x57, flags: 0x0}, - 786: {region: 0x49, script: 0x57, flags: 0x0}, - 787: {region: 0x49, script: 0x57, flags: 0x0}, - 788: {region: 0x37, script: 0x57, flags: 0x0}, - 789: {region: 0x165, script: 0x57, flags: 0x0}, - 790: {region: 0x165, script: 0x57, flags: 0x0}, - 791: {region: 0x165, script: 0x57, flags: 0x0}, - 792: {region: 0x165, script: 0x57, flags: 0x0}, - 793: {region: 0x165, script: 0x57, flags: 0x0}, - 794: {region: 0x165, script: 0x57, flags: 0x0}, - 795: {region: 0x99, script: 0x21, flags: 0x0}, - 796: {region: 0xdb, script: 0x21, flags: 0x0}, - 797: {region: 0x106, script: 0x1f, flags: 0x0}, - 798: {region: 0x35, script: 0x6f, flags: 0x0}, + 783: {region: 0xc4, script: 0x75, flags: 0x0}, + 785: {region: 0x165, script: 0x5a, flags: 0x0}, + 786: {region: 0x49, script: 0x5a, flags: 0x0}, + 787: {region: 0x49, script: 0x5a, flags: 0x0}, + 788: {region: 0x37, script: 0x5a, flags: 0x0}, + 789: {region: 0x165, script: 0x5a, flags: 0x0}, + 790: {region: 0x165, script: 0x5a, flags: 0x0}, + 791: {region: 0x165, script: 0x5a, flags: 0x0}, + 792: {region: 0x165, script: 0x5a, flags: 0x0}, + 793: {region: 0x165, script: 0x5a, flags: 0x0}, + 794: {region: 0x165, script: 0x5a, flags: 0x0}, + 795: {region: 0x99, script: 0x22, flags: 0x0}, + 796: {region: 0xdb, script: 0x22, flags: 0x0}, + 797: {region: 0x106, script: 0x20, flags: 0x0}, + 798: {region: 0x35, script: 0x72, flags: 0x0}, 799: {region: 0x29, script: 0x3, flags: 0x1}, - 800: {region: 0xcb, script: 0x57, flags: 0x0}, - 801: {region: 0x165, script: 0x57, flags: 0x0}, - 802: {region: 0x165, script: 0x57, flags: 0x0}, - 803: {region: 0x165, script: 0x57, flags: 0x0}, - 804: {region: 0x99, script: 0x21, flags: 0x0}, - 805: {region: 0x52, script: 0x57, flags: 0x0}, - 807: {region: 0x165, script: 0x57, flags: 0x0}, - 808: {region: 0x135, script: 0x57, flags: 0x0}, - 809: {region: 0x165, script: 0x57, flags: 0x0}, - 810: {region: 0x165, script: 0x57, flags: 0x0}, + 800: {region: 0xcb, script: 0x5a, flags: 0x0}, + 801: {region: 0x165, script: 0x5a, flags: 0x0}, + 802: {region: 0x165, script: 0x5a, flags: 0x0}, + 803: {region: 0x165, script: 0x5a, flags: 0x0}, + 804: {region: 0x99, script: 0x22, flags: 0x0}, + 805: {region: 0x52, script: 0x5a, flags: 0x0}, + 807: {region: 0x165, script: 0x5a, flags: 0x0}, + 808: {region: 0x135, script: 0x5a, flags: 0x0}, + 809: {region: 0x165, script: 0x5a, flags: 0x0}, + 810: {region: 0x165, script: 0x5a, flags: 0x0}, 811: {region: 0xe8, script: 0x5, flags: 0x0}, - 812: {region: 0xc3, script: 0x57, flags: 0x0}, - 813: {region: 0x99, script: 0x21, flags: 0x0}, - 814: {region: 0x95, script: 0x57, flags: 0x0}, - 815: {region: 0x164, script: 0x57, flags: 0x0}, - 816: {region: 0x165, script: 0x57, flags: 0x0}, - 817: {region: 0xc4, script: 0x72, flags: 0x0}, - 818: {region: 0x165, script: 0x57, flags: 0x0}, - 819: {region: 0x165, script: 0x29, flags: 0x0}, - 820: {region: 0x106, script: 0x1f, flags: 0x0}, - 821: {region: 0x165, script: 0x57, flags: 0x0}, - 822: {region: 0x131, script: 0x57, flags: 0x0}, - 823: {region: 0x9c, script: 0x63, flags: 0x0}, - 824: {region: 0x165, script: 0x57, flags: 0x0}, - 825: {region: 0x165, script: 0x57, flags: 0x0}, + 812: {region: 0xc3, script: 0x5a, flags: 0x0}, + 813: {region: 0x99, script: 0x22, flags: 0x0}, + 814: {region: 0x95, script: 0x5a, flags: 0x0}, + 815: {region: 0x164, script: 0x5a, flags: 0x0}, + 816: {region: 0x165, script: 0x5a, flags: 0x0}, + 817: {region: 0xc4, script: 0x75, flags: 0x0}, + 818: {region: 0x165, script: 0x5a, flags: 0x0}, + 819: {region: 0x165, script: 0x2c, flags: 0x0}, + 820: {region: 0x106, script: 0x20, flags: 0x0}, + 821: {region: 0x165, script: 0x5a, flags: 0x0}, + 822: {region: 0x131, script: 0x5a, flags: 0x0}, + 823: {region: 0x9c, script: 0x66, flags: 0x0}, + 824: {region: 0x165, script: 0x5a, flags: 0x0}, + 825: {region: 0x165, script: 0x5a, flags: 0x0}, 826: {region: 0x9c, script: 0x5, flags: 0x0}, - 827: {region: 0x165, script: 0x57, flags: 0x0}, - 828: {region: 0x165, script: 0x57, flags: 0x0}, - 829: {region: 0x165, script: 0x57, flags: 0x0}, - 830: {region: 0xdd, script: 0x57, flags: 0x0}, - 831: {region: 0x165, script: 0x57, flags: 0x0}, - 832: {region: 0x165, script: 0x57, flags: 0x0}, - 834: {region: 0x165, script: 0x57, flags: 0x0}, - 835: {region: 0x53, script: 0x38, flags: 0x0}, - 836: {region: 0x9e, script: 0x57, flags: 0x0}, - 837: {region: 0xd2, script: 0x57, flags: 0x0}, - 838: {region: 0x165, script: 0x57, flags: 0x0}, - 839: {region: 0xda, script: 0x57, flags: 0x0}, - 840: {region: 0x165, script: 0x57, flags: 0x0}, - 841: {region: 0x165, script: 0x57, flags: 0x0}, - 842: {region: 0x165, script: 0x57, flags: 0x0}, - 843: {region: 0xcf, script: 0x57, flags: 0x0}, - 844: {region: 0x165, script: 0x57, flags: 0x0}, - 845: {region: 0x165, script: 0x57, flags: 0x0}, - 846: {region: 0x164, script: 0x57, flags: 0x0}, - 847: {region: 0xd1, script: 0x57, flags: 0x0}, - 848: {region: 0x60, script: 0x57, flags: 0x0}, - 849: {region: 0xdb, script: 0x21, flags: 0x0}, - 850: {region: 0x165, script: 0x57, flags: 0x0}, - 851: {region: 0xdb, script: 0x21, flags: 0x0}, - 852: {region: 0x165, script: 0x57, flags: 0x0}, - 853: {region: 0x165, script: 0x57, flags: 0x0}, - 854: {region: 0xd2, script: 0x57, flags: 0x0}, - 855: {region: 0x165, script: 0x57, flags: 0x0}, - 856: {region: 0x165, script: 0x57, flags: 0x0}, - 857: {region: 0xd1, script: 0x57, flags: 0x0}, - 858: {region: 0x165, script: 0x57, flags: 0x0}, - 859: {region: 0xcf, script: 0x57, flags: 0x0}, - 860: {region: 0xcf, script: 0x57, flags: 0x0}, - 861: {region: 0x165, script: 0x57, flags: 0x0}, - 862: {region: 0x165, script: 0x57, flags: 0x0}, - 863: {region: 0x95, script: 0x57, flags: 0x0}, - 864: {region: 0x165, script: 0x57, flags: 0x0}, - 865: {region: 0xdf, script: 0x57, flags: 0x0}, - 866: {region: 0x165, script: 0x57, flags: 0x0}, - 867: {region: 0x165, script: 0x57, flags: 0x0}, - 868: {region: 0x99, script: 0x57, flags: 0x0}, - 869: {region: 0x165, script: 0x57, flags: 0x0}, - 870: {region: 0x165, script: 0x57, flags: 0x0}, - 871: {region: 0xd9, script: 0x57, flags: 0x0}, - 872: {region: 0x52, script: 0x57, flags: 0x0}, - 873: {region: 0x165, script: 0x57, flags: 0x0}, - 874: {region: 0xda, script: 0x57, flags: 0x0}, - 875: {region: 0x165, script: 0x57, flags: 0x0}, - 876: {region: 0x52, script: 0x57, flags: 0x0}, - 877: {region: 0x165, script: 0x57, flags: 0x0}, - 878: {region: 0x165, script: 0x57, flags: 0x0}, - 879: {region: 0xda, script: 0x57, flags: 0x0}, - 880: {region: 0x123, script: 0x53, flags: 0x0}, - 881: {region: 0x99, script: 0x21, flags: 0x0}, - 882: {region: 0x10c, script: 0xbf, flags: 0x0}, - 883: {region: 0x165, script: 0x57, flags: 0x0}, - 884: {region: 0x165, script: 0x57, flags: 0x0}, - 885: {region: 0x84, script: 0x78, flags: 0x0}, - 886: {region: 0x161, script: 0x57, flags: 0x0}, - 887: {region: 0x165, script: 0x57, flags: 0x0}, + 827: {region: 0x165, script: 0x5a, flags: 0x0}, + 828: {region: 0x165, script: 0x5a, flags: 0x0}, + 829: {region: 0x165, script: 0x5a, flags: 0x0}, + 830: {region: 0xdd, script: 0x5a, flags: 0x0}, + 831: {region: 0x165, script: 0x5a, flags: 0x0}, + 832: {region: 0x165, script: 0x5a, flags: 0x0}, + 834: {region: 0x165, script: 0x5a, flags: 0x0}, + 835: {region: 0x53, script: 0x3b, flags: 0x0}, + 836: {region: 0x9e, script: 0x5a, flags: 0x0}, + 837: {region: 0xd2, script: 0x5a, flags: 0x0}, + 838: {region: 0x165, script: 0x5a, flags: 0x0}, + 839: {region: 0xda, script: 0x5a, flags: 0x0}, + 840: {region: 0x165, script: 0x5a, flags: 0x0}, + 841: {region: 0x165, script: 0x5a, flags: 0x0}, + 842: {region: 0x165, script: 0x5a, flags: 0x0}, + 843: {region: 0xcf, script: 0x5a, flags: 0x0}, + 844: {region: 0x165, script: 0x5a, flags: 0x0}, + 845: {region: 0x165, script: 0x5a, flags: 0x0}, + 846: {region: 0x164, script: 0x5a, flags: 0x0}, + 847: {region: 0xd1, script: 0x5a, flags: 0x0}, + 848: {region: 0x60, script: 0x5a, flags: 0x0}, + 849: {region: 0xdb, script: 0x22, flags: 0x0}, + 850: {region: 0x165, script: 0x5a, flags: 0x0}, + 851: {region: 0xdb, script: 0x22, flags: 0x0}, + 852: {region: 0x165, script: 0x5a, flags: 0x0}, + 853: {region: 0x165, script: 0x5a, flags: 0x0}, + 854: {region: 0xd2, script: 0x5a, flags: 0x0}, + 855: {region: 0x165, script: 0x5a, flags: 0x0}, + 856: {region: 0x165, script: 0x5a, flags: 0x0}, + 857: {region: 0xd1, script: 0x5a, flags: 0x0}, + 858: {region: 0x165, script: 0x5a, flags: 0x0}, + 859: {region: 0xcf, script: 0x5a, flags: 0x0}, + 860: {region: 0xcf, script: 0x5a, flags: 0x0}, + 861: {region: 0x165, script: 0x5a, flags: 0x0}, + 862: {region: 0x165, script: 0x5a, flags: 0x0}, + 863: {region: 0x95, script: 0x5a, flags: 0x0}, + 864: {region: 0x165, script: 0x5a, flags: 0x0}, + 865: {region: 0xdf, script: 0x5a, flags: 0x0}, + 866: {region: 0x165, script: 0x5a, flags: 0x0}, + 867: {region: 0x165, script: 0x5a, flags: 0x0}, + 868: {region: 0x99, script: 0x5a, flags: 0x0}, + 869: {region: 0x165, script: 0x5a, flags: 0x0}, + 870: {region: 0x165, script: 0x5a, flags: 0x0}, + 871: {region: 0xd9, script: 0x5a, flags: 0x0}, + 872: {region: 0x52, script: 0x5a, flags: 0x0}, + 873: {region: 0x165, script: 0x5a, flags: 0x0}, + 874: {region: 0xda, script: 0x5a, flags: 0x0}, + 875: {region: 0x165, script: 0x5a, flags: 0x0}, + 876: {region: 0x52, script: 0x5a, flags: 0x0}, + 877: {region: 0x165, script: 0x5a, flags: 0x0}, + 878: {region: 0x165, script: 0x5a, flags: 0x0}, + 879: {region: 0xda, script: 0x5a, flags: 0x0}, + 880: {region: 0x123, script: 0x56, flags: 0x0}, + 881: {region: 0x99, script: 0x22, flags: 0x0}, + 882: {region: 0x10c, script: 0xc4, flags: 0x0}, + 883: {region: 0x165, script: 0x5a, flags: 0x0}, + 884: {region: 0x165, script: 0x5a, flags: 0x0}, + 885: {region: 0x84, script: 0x7c, flags: 0x0}, + 886: {region: 0x161, script: 0x5a, flags: 0x0}, + 887: {region: 0x165, script: 0x5a, flags: 0x0}, 888: {region: 0x49, script: 0x17, flags: 0x0}, - 889: {region: 0x165, script: 0x57, flags: 0x0}, - 890: {region: 0x161, script: 0x57, flags: 0x0}, - 891: {region: 0x165, script: 0x57, flags: 0x0}, - 892: {region: 0x165, script: 0x57, flags: 0x0}, - 893: {region: 0x165, script: 0x57, flags: 0x0}, - 894: {region: 0x165, script: 0x57, flags: 0x0}, - 895: {region: 0x165, script: 0x57, flags: 0x0}, - 896: {region: 0x117, script: 0x57, flags: 0x0}, - 897: {region: 0x165, script: 0x57, flags: 0x0}, - 898: {region: 0x165, script: 0x57, flags: 0x0}, - 899: {region: 0x135, script: 0x57, flags: 0x0}, - 900: {region: 0x165, script: 0x57, flags: 0x0}, - 901: {region: 0x53, script: 0x57, flags: 0x0}, - 902: {region: 0x165, script: 0x57, flags: 0x0}, - 903: {region: 0xce, script: 0x57, flags: 0x0}, - 904: {region: 0x12f, script: 0x57, flags: 0x0}, - 905: {region: 0x131, script: 0x57, flags: 0x0}, - 906: {region: 0x80, script: 0x57, flags: 0x0}, - 907: {region: 0x78, script: 0x57, flags: 0x0}, - 908: {region: 0x165, script: 0x57, flags: 0x0}, - 910: {region: 0x165, script: 0x57, flags: 0x0}, - 911: {region: 0x165, script: 0x57, flags: 0x0}, - 912: {region: 0x6f, script: 0x57, flags: 0x0}, - 913: {region: 0x165, script: 0x57, flags: 0x0}, - 914: {region: 0x165, script: 0x57, flags: 0x0}, - 915: {region: 0x165, script: 0x57, flags: 0x0}, - 916: {region: 0x165, script: 0x57, flags: 0x0}, - 917: {region: 0x99, script: 0x7d, flags: 0x0}, - 918: {region: 0x165, script: 0x57, flags: 0x0}, + 889: {region: 0x165, script: 0x5a, flags: 0x0}, + 890: {region: 0x161, script: 0x5a, flags: 0x0}, + 891: {region: 0x165, script: 0x5a, flags: 0x0}, + 892: {region: 0x165, script: 0x5a, flags: 0x0}, + 893: {region: 0x165, script: 0x5a, flags: 0x0}, + 894: {region: 0x165, script: 0x5a, flags: 0x0}, + 895: {region: 0x165, script: 0x5a, flags: 0x0}, + 896: {region: 0x117, script: 0x5a, flags: 0x0}, + 897: {region: 0x165, script: 0x5a, flags: 0x0}, + 898: {region: 0x165, script: 0x5a, flags: 0x0}, + 899: {region: 0x135, script: 0x5a, flags: 0x0}, + 900: {region: 0x165, script: 0x5a, flags: 0x0}, + 901: {region: 0x53, script: 0x5a, flags: 0x0}, + 902: {region: 0x165, script: 0x5a, flags: 0x0}, + 903: {region: 0xce, script: 0x5a, flags: 0x0}, + 904: {region: 0x12f, script: 0x5a, flags: 0x0}, + 905: {region: 0x131, script: 0x5a, flags: 0x0}, + 906: {region: 0x80, script: 0x5a, flags: 0x0}, + 907: {region: 0x78, script: 0x5a, flags: 0x0}, + 908: {region: 0x165, script: 0x5a, flags: 0x0}, + 910: {region: 0x165, script: 0x5a, flags: 0x0}, + 911: {region: 0x165, script: 0x5a, flags: 0x0}, + 912: {region: 0x6f, script: 0x5a, flags: 0x0}, + 913: {region: 0x165, script: 0x5a, flags: 0x0}, + 914: {region: 0x165, script: 0x5a, flags: 0x0}, + 915: {region: 0x165, script: 0x5a, flags: 0x0}, + 916: {region: 0x165, script: 0x5a, flags: 0x0}, + 917: {region: 0x99, script: 0x81, flags: 0x0}, + 918: {region: 0x165, script: 0x5a, flags: 0x0}, 919: {region: 0x165, script: 0x5, flags: 0x0}, - 920: {region: 0x7d, script: 0x1f, flags: 0x0}, - 921: {region: 0x135, script: 0x7e, flags: 0x0}, + 920: {region: 0x7d, script: 0x20, flags: 0x0}, + 921: {region: 0x135, script: 0x82, flags: 0x0}, 922: {region: 0x165, script: 0x5, flags: 0x0}, - 923: {region: 0xc5, script: 0x7c, flags: 0x0}, - 924: {region: 0x165, script: 0x57, flags: 0x0}, + 923: {region: 0xc5, script: 0x80, flags: 0x0}, + 924: {region: 0x165, script: 0x5a, flags: 0x0}, 925: {region: 0x2c, script: 0x3, flags: 0x1}, - 926: {region: 0xe7, script: 0x57, flags: 0x0}, + 926: {region: 0xe7, script: 0x5a, flags: 0x0}, 927: {region: 0x2f, script: 0x2, flags: 0x1}, - 928: {region: 0xe7, script: 0x57, flags: 0x0}, - 929: {region: 0x30, script: 0x57, flags: 0x0}, - 930: {region: 0xf0, script: 0x57, flags: 0x0}, - 931: {region: 0x165, script: 0x57, flags: 0x0}, - 932: {region: 0x78, script: 0x57, flags: 0x0}, - 933: {region: 0xd6, script: 0x57, flags: 0x0}, - 934: {region: 0x135, script: 0x57, flags: 0x0}, - 935: {region: 0x49, script: 0x57, flags: 0x0}, - 936: {region: 0x165, script: 0x57, flags: 0x0}, - 937: {region: 0x9c, script: 0xe8, flags: 0x0}, - 938: {region: 0x165, script: 0x57, flags: 0x0}, - 939: {region: 0x60, script: 0x57, flags: 0x0}, + 928: {region: 0xe7, script: 0x5a, flags: 0x0}, + 929: {region: 0x30, script: 0x5a, flags: 0x0}, + 930: {region: 0xf0, script: 0x5a, flags: 0x0}, + 931: {region: 0x165, script: 0x5a, flags: 0x0}, + 932: {region: 0x78, script: 0x5a, flags: 0x0}, + 933: {region: 0xd6, script: 0x5a, flags: 0x0}, + 934: {region: 0x135, script: 0x5a, flags: 0x0}, + 935: {region: 0x49, script: 0x5a, flags: 0x0}, + 936: {region: 0x165, script: 0x5a, flags: 0x0}, + 937: {region: 0x9c, script: 0xf0, flags: 0x0}, + 938: {region: 0x165, script: 0x5a, flags: 0x0}, + 939: {region: 0x60, script: 0x5a, flags: 0x0}, 940: {region: 0x165, script: 0x5, flags: 0x0}, - 941: {region: 0xb0, script: 0x87, flags: 0x0}, - 943: {region: 0x165, script: 0x57, flags: 0x0}, - 944: {region: 0x165, script: 0x57, flags: 0x0}, + 941: {region: 0xb0, script: 0x8b, flags: 0x0}, + 943: {region: 0x165, script: 0x5a, flags: 0x0}, + 944: {region: 0x165, script: 0x5a, flags: 0x0}, 945: {region: 0x99, script: 0x12, flags: 0x0}, - 946: {region: 0xa4, script: 0x57, flags: 0x0}, - 947: {region: 0xe9, script: 0x57, flags: 0x0}, - 948: {region: 0x165, script: 0x57, flags: 0x0}, - 949: {region: 0x9e, script: 0x57, flags: 0x0}, - 950: {region: 0x165, script: 0x57, flags: 0x0}, - 951: {region: 0x165, script: 0x57, flags: 0x0}, - 952: {region: 0x87, script: 0x31, flags: 0x0}, - 953: {region: 0x75, script: 0x57, flags: 0x0}, - 954: {region: 0x165, script: 0x57, flags: 0x0}, - 955: {region: 0xe8, script: 0x4a, flags: 0x0}, + 946: {region: 0xa4, script: 0x5a, flags: 0x0}, + 947: {region: 0xe9, script: 0x5a, flags: 0x0}, + 948: {region: 0x165, script: 0x5a, flags: 0x0}, + 949: {region: 0x9e, script: 0x5a, flags: 0x0}, + 950: {region: 0x165, script: 0x5a, flags: 0x0}, + 951: {region: 0x165, script: 0x5a, flags: 0x0}, + 952: {region: 0x87, script: 0x34, flags: 0x0}, + 953: {region: 0x75, script: 0x5a, flags: 0x0}, + 954: {region: 0x165, script: 0x5a, flags: 0x0}, + 955: {region: 0xe8, script: 0x4d, flags: 0x0}, 956: {region: 0x9c, script: 0x5, flags: 0x0}, - 957: {region: 0x1, script: 0x57, flags: 0x0}, + 957: {region: 0x1, script: 0x5a, flags: 0x0}, 958: {region: 0x24, script: 0x5, flags: 0x0}, - 959: {region: 0x165, script: 0x57, flags: 0x0}, - 960: {region: 0x41, script: 0x57, flags: 0x0}, - 961: {region: 0x165, script: 0x57, flags: 0x0}, - 962: {region: 0x7a, script: 0x57, flags: 0x0}, - 963: {region: 0x165, script: 0x57, flags: 0x0}, - 964: {region: 0xe4, script: 0x57, flags: 0x0}, - 965: {region: 0x89, script: 0x57, flags: 0x0}, - 966: {region: 0x69, script: 0x57, flags: 0x0}, - 967: {region: 0x165, script: 0x57, flags: 0x0}, - 968: {region: 0x99, script: 0x21, flags: 0x0}, - 969: {region: 0x165, script: 0x57, flags: 0x0}, - 970: {region: 0x102, script: 0x57, flags: 0x0}, - 971: {region: 0x95, script: 0x57, flags: 0x0}, - 972: {region: 0x165, script: 0x57, flags: 0x0}, - 973: {region: 0x165, script: 0x57, flags: 0x0}, - 974: {region: 0x9e, script: 0x57, flags: 0x0}, + 959: {region: 0x165, script: 0x5a, flags: 0x0}, + 960: {region: 0x41, script: 0x5a, flags: 0x0}, + 961: {region: 0x165, script: 0x5a, flags: 0x0}, + 962: {region: 0x7a, script: 0x5a, flags: 0x0}, + 963: {region: 0x165, script: 0x5a, flags: 0x0}, + 964: {region: 0xe4, script: 0x5a, flags: 0x0}, + 965: {region: 0x89, script: 0x5a, flags: 0x0}, + 966: {region: 0x69, script: 0x5a, flags: 0x0}, + 967: {region: 0x165, script: 0x5a, flags: 0x0}, + 968: {region: 0x99, script: 0x22, flags: 0x0}, + 969: {region: 0x165, script: 0x5a, flags: 0x0}, + 970: {region: 0x102, script: 0x5a, flags: 0x0}, + 971: {region: 0x95, script: 0x5a, flags: 0x0}, + 972: {region: 0x165, script: 0x5a, flags: 0x0}, + 973: {region: 0x165, script: 0x5a, flags: 0x0}, + 974: {region: 0x9e, script: 0x5a, flags: 0x0}, 975: {region: 0x165, script: 0x5, flags: 0x0}, - 976: {region: 0x99, script: 0x57, flags: 0x0}, + 976: {region: 0x99, script: 0x5a, flags: 0x0}, 977: {region: 0x31, script: 0x2, flags: 0x1}, - 978: {region: 0xdb, script: 0x21, flags: 0x0}, + 978: {region: 0xdb, script: 0x22, flags: 0x0}, 979: {region: 0x35, script: 0xe, flags: 0x0}, - 980: {region: 0x4e, script: 0x57, flags: 0x0}, - 981: {region: 0x72, script: 0x57, flags: 0x0}, - 982: {region: 0x4e, script: 0x57, flags: 0x0}, + 980: {region: 0x4e, script: 0x5a, flags: 0x0}, + 981: {region: 0x72, script: 0x5a, flags: 0x0}, + 982: {region: 0x4e, script: 0x5a, flags: 0x0}, 983: {region: 0x9c, script: 0x5, flags: 0x0}, - 984: {region: 0x10c, script: 0x57, flags: 0x0}, - 985: {region: 0x3a, script: 0x57, flags: 0x0}, - 986: {region: 0x165, script: 0x57, flags: 0x0}, - 987: {region: 0xd1, script: 0x57, flags: 0x0}, - 988: {region: 0x104, script: 0x57, flags: 0x0}, - 989: {region: 0x95, script: 0x57, flags: 0x0}, - 990: {region: 0x12f, script: 0x57, flags: 0x0}, - 991: {region: 0x165, script: 0x57, flags: 0x0}, - 992: {region: 0x165, script: 0x57, flags: 0x0}, - 993: {region: 0x73, script: 0x57, flags: 0x0}, - 994: {region: 0x106, script: 0x1f, flags: 0x0}, - 995: {region: 0x130, script: 0x1f, flags: 0x0}, - 996: {region: 0x109, script: 0x57, flags: 0x0}, - 997: {region: 0x107, script: 0x57, flags: 0x0}, - 998: {region: 0x12f, script: 0x57, flags: 0x0}, - 999: {region: 0x165, script: 0x57, flags: 0x0}, - 1000: {region: 0xa2, script: 0x49, flags: 0x0}, - 1001: {region: 0x99, script: 0x21, flags: 0x0}, - 1002: {region: 0x80, script: 0x57, flags: 0x0}, - 1003: {region: 0x106, script: 0x1f, flags: 0x0}, - 1004: {region: 0xa4, script: 0x57, flags: 0x0}, - 1005: {region: 0x95, script: 0x57, flags: 0x0}, - 1006: {region: 0x99, script: 0x57, flags: 0x0}, - 1007: {region: 0x114, script: 0x57, flags: 0x0}, - 1008: {region: 0x99, script: 0xc3, flags: 0x0}, - 1009: {region: 0x165, script: 0x57, flags: 0x0}, - 1010: {region: 0x165, script: 0x57, flags: 0x0}, - 1011: {region: 0x12f, script: 0x57, flags: 0x0}, - 1012: {region: 0x9e, script: 0x57, flags: 0x0}, - 1013: {region: 0x99, script: 0x21, flags: 0x0}, + 984: {region: 0x10c, script: 0x5a, flags: 0x0}, + 985: {region: 0x3a, script: 0x5a, flags: 0x0}, + 986: {region: 0x165, script: 0x5a, flags: 0x0}, + 987: {region: 0xd1, script: 0x5a, flags: 0x0}, + 988: {region: 0x104, script: 0x5a, flags: 0x0}, + 989: {region: 0x95, script: 0x5a, flags: 0x0}, + 990: {region: 0x12f, script: 0x5a, flags: 0x0}, + 991: {region: 0x165, script: 0x5a, flags: 0x0}, + 992: {region: 0x165, script: 0x5a, flags: 0x0}, + 993: {region: 0x73, script: 0x5a, flags: 0x0}, + 994: {region: 0x106, script: 0x20, flags: 0x0}, + 995: {region: 0x130, script: 0x20, flags: 0x0}, + 996: {region: 0x109, script: 0x5a, flags: 0x0}, + 997: {region: 0x107, script: 0x5a, flags: 0x0}, + 998: {region: 0x12f, script: 0x5a, flags: 0x0}, + 999: {region: 0x165, script: 0x5a, flags: 0x0}, + 1000: {region: 0xa2, script: 0x4c, flags: 0x0}, + 1001: {region: 0x99, script: 0x22, flags: 0x0}, + 1002: {region: 0x80, script: 0x5a, flags: 0x0}, + 1003: {region: 0x106, script: 0x20, flags: 0x0}, + 1004: {region: 0xa4, script: 0x5a, flags: 0x0}, + 1005: {region: 0x95, script: 0x5a, flags: 0x0}, + 1006: {region: 0x99, script: 0x5a, flags: 0x0}, + 1007: {region: 0x114, script: 0x5a, flags: 0x0}, + 1008: {region: 0x99, script: 0xc8, flags: 0x0}, + 1009: {region: 0x165, script: 0x5a, flags: 0x0}, + 1010: {region: 0x165, script: 0x5a, flags: 0x0}, + 1011: {region: 0x12f, script: 0x5a, flags: 0x0}, + 1012: {region: 0x9e, script: 0x5a, flags: 0x0}, + 1013: {region: 0x99, script: 0x22, flags: 0x0}, 1014: {region: 0x165, script: 0x5, flags: 0x0}, - 1015: {region: 0x9e, script: 0x57, flags: 0x0}, - 1016: {region: 0x7b, script: 0x57, flags: 0x0}, - 1017: {region: 0x49, script: 0x57, flags: 0x0}, + 1015: {region: 0x9e, script: 0x5a, flags: 0x0}, + 1016: {region: 0x7b, script: 0x5a, flags: 0x0}, + 1017: {region: 0x49, script: 0x5a, flags: 0x0}, 1018: {region: 0x33, script: 0x4, flags: 0x1}, - 1019: {region: 0x9e, script: 0x57, flags: 0x0}, + 1019: {region: 0x9e, script: 0x5a, flags: 0x0}, 1020: {region: 0x9c, script: 0x5, flags: 0x0}, - 1021: {region: 0xda, script: 0x57, flags: 0x0}, - 1022: {region: 0x4f, script: 0x57, flags: 0x0}, - 1023: {region: 0xd1, script: 0x57, flags: 0x0}, - 1024: {region: 0xcf, script: 0x57, flags: 0x0}, - 1025: {region: 0xc3, script: 0x57, flags: 0x0}, - 1026: {region: 0x4c, script: 0x57, flags: 0x0}, - 1027: {region: 0x96, script: 0x7a, flags: 0x0}, - 1028: {region: 0xb6, script: 0x57, flags: 0x0}, - 1029: {region: 0x165, script: 0x29, flags: 0x0}, - 1030: {region: 0x165, script: 0x57, flags: 0x0}, - 1032: {region: 0xba, script: 0xdc, flags: 0x0}, - 1033: {region: 0x165, script: 0x57, flags: 0x0}, - 1034: {region: 0xc4, script: 0x72, flags: 0x0}, + 1021: {region: 0xda, script: 0x5a, flags: 0x0}, + 1022: {region: 0x4f, script: 0x5a, flags: 0x0}, + 1023: {region: 0xd1, script: 0x5a, flags: 0x0}, + 1024: {region: 0xcf, script: 0x5a, flags: 0x0}, + 1025: {region: 0xc3, script: 0x5a, flags: 0x0}, + 1026: {region: 0x4c, script: 0x5a, flags: 0x0}, + 1027: {region: 0x96, script: 0x7e, flags: 0x0}, + 1028: {region: 0xb6, script: 0x5a, flags: 0x0}, + 1029: {region: 0x165, script: 0x2c, flags: 0x0}, + 1030: {region: 0x165, script: 0x5a, flags: 0x0}, + 1032: {region: 0xba, script: 0xe3, flags: 0x0}, + 1033: {region: 0x165, script: 0x5a, flags: 0x0}, + 1034: {region: 0xc4, script: 0x75, flags: 0x0}, 1035: {region: 0x165, script: 0x5, flags: 0x0}, - 1036: {region: 0xb3, script: 0xca, flags: 0x0}, - 1037: {region: 0x6f, script: 0x57, flags: 0x0}, - 1038: {region: 0x165, script: 0x57, flags: 0x0}, - 1039: {region: 0x165, script: 0x57, flags: 0x0}, - 1040: {region: 0x165, script: 0x57, flags: 0x0}, - 1041: {region: 0x165, script: 0x57, flags: 0x0}, - 1042: {region: 0x111, script: 0x57, flags: 0x0}, - 1043: {region: 0x165, script: 0x57, flags: 0x0}, + 1036: {region: 0xb3, script: 0xcf, flags: 0x0}, + 1037: {region: 0x6f, script: 0x5a, flags: 0x0}, + 1038: {region: 0x165, script: 0x5a, flags: 0x0}, + 1039: {region: 0x165, script: 0x5a, flags: 0x0}, + 1040: {region: 0x165, script: 0x5a, flags: 0x0}, + 1041: {region: 0x165, script: 0x5a, flags: 0x0}, + 1042: {region: 0x111, script: 0x5a, flags: 0x0}, + 1043: {region: 0x165, script: 0x5a, flags: 0x0}, 1044: {region: 0xe8, script: 0x5, flags: 0x0}, - 1045: {region: 0x165, script: 0x57, flags: 0x0}, - 1046: {region: 0x10f, script: 0x57, flags: 0x0}, - 1047: {region: 0x165, script: 0x57, flags: 0x0}, - 1048: {region: 0xe9, script: 0x57, flags: 0x0}, - 1049: {region: 0x165, script: 0x57, flags: 0x0}, - 1050: {region: 0x95, script: 0x57, flags: 0x0}, - 1051: {region: 0x142, script: 0x57, flags: 0x0}, - 1052: {region: 0x10c, script: 0x57, flags: 0x0}, - 1054: {region: 0x10c, script: 0x57, flags: 0x0}, - 1055: {region: 0x72, script: 0x57, flags: 0x0}, - 1056: {region: 0x97, script: 0xc0, flags: 0x0}, - 1057: {region: 0x165, script: 0x57, flags: 0x0}, - 1058: {region: 0x72, script: 0x57, flags: 0x0}, - 1059: {region: 0x164, script: 0x57, flags: 0x0}, - 1060: {region: 0x165, script: 0x57, flags: 0x0}, - 1061: {region: 0xc3, script: 0x57, flags: 0x0}, - 1062: {region: 0x165, script: 0x57, flags: 0x0}, - 1063: {region: 0x165, script: 0x57, flags: 0x0}, - 1064: {region: 0x165, script: 0x57, flags: 0x0}, - 1065: {region: 0x115, script: 0x57, flags: 0x0}, - 1066: {region: 0x165, script: 0x57, flags: 0x0}, - 1067: {region: 0x165, script: 0x57, flags: 0x0}, - 1068: {region: 0x123, script: 0xdf, flags: 0x0}, - 1069: {region: 0x165, script: 0x57, flags: 0x0}, - 1070: {region: 0x165, script: 0x57, flags: 0x0}, - 1071: {region: 0x165, script: 0x57, flags: 0x0}, - 1072: {region: 0x165, script: 0x57, flags: 0x0}, - 1073: {region: 0x27, script: 0x57, flags: 0x0}, + 1045: {region: 0x165, script: 0x5a, flags: 0x0}, + 1046: {region: 0x10f, script: 0x5a, flags: 0x0}, + 1047: {region: 0x165, script: 0x5a, flags: 0x0}, + 1048: {region: 0xe9, script: 0x5a, flags: 0x0}, + 1049: {region: 0x165, script: 0x5a, flags: 0x0}, + 1050: {region: 0x95, script: 0x5a, flags: 0x0}, + 1051: {region: 0x142, script: 0x5a, flags: 0x0}, + 1052: {region: 0x10c, script: 0x5a, flags: 0x0}, + 1054: {region: 0x10c, script: 0x5a, flags: 0x0}, + 1055: {region: 0x72, script: 0x5a, flags: 0x0}, + 1056: {region: 0x97, script: 0xc5, flags: 0x0}, + 1057: {region: 0x165, script: 0x5a, flags: 0x0}, + 1058: {region: 0x72, script: 0x5a, flags: 0x0}, + 1059: {region: 0x164, script: 0x5a, flags: 0x0}, + 1060: {region: 0x165, script: 0x5a, flags: 0x0}, + 1061: {region: 0xc3, script: 0x5a, flags: 0x0}, + 1062: {region: 0x165, script: 0x5a, flags: 0x0}, + 1063: {region: 0x165, script: 0x5a, flags: 0x0}, + 1064: {region: 0x165, script: 0x5a, flags: 0x0}, + 1065: {region: 0x115, script: 0x5a, flags: 0x0}, + 1066: {region: 0x165, script: 0x5a, flags: 0x0}, + 1067: {region: 0x165, script: 0x5a, flags: 0x0}, + 1068: {region: 0x123, script: 0xe6, flags: 0x0}, + 1069: {region: 0x165, script: 0x5a, flags: 0x0}, + 1070: {region: 0x165, script: 0x5a, flags: 0x0}, + 1071: {region: 0x165, script: 0x5a, flags: 0x0}, + 1072: {region: 0x165, script: 0x5a, flags: 0x0}, + 1073: {region: 0x27, script: 0x5a, flags: 0x0}, 1074: {region: 0x37, script: 0x5, flags: 0x1}, - 1075: {region: 0x99, script: 0xcb, flags: 0x0}, - 1076: {region: 0x116, script: 0x57, flags: 0x0}, - 1077: {region: 0x114, script: 0x57, flags: 0x0}, - 1078: {region: 0x99, script: 0x21, flags: 0x0}, - 1079: {region: 0x161, script: 0x57, flags: 0x0}, - 1080: {region: 0x165, script: 0x57, flags: 0x0}, - 1081: {region: 0x165, script: 0x57, flags: 0x0}, - 1082: {region: 0x6d, script: 0x57, flags: 0x0}, - 1083: {region: 0x161, script: 0x57, flags: 0x0}, - 1084: {region: 0x165, script: 0x57, flags: 0x0}, - 1085: {region: 0x60, script: 0x57, flags: 0x0}, - 1086: {region: 0x95, script: 0x57, flags: 0x0}, - 1087: {region: 0x165, script: 0x57, flags: 0x0}, - 1088: {region: 0x165, script: 0x57, flags: 0x0}, - 1089: {region: 0x12f, script: 0x57, flags: 0x0}, - 1090: {region: 0x165, script: 0x57, flags: 0x0}, - 1091: {region: 0x84, script: 0x57, flags: 0x0}, - 1092: {region: 0x10c, script: 0x57, flags: 0x0}, - 1093: {region: 0x12f, script: 0x57, flags: 0x0}, + 1075: {region: 0x99, script: 0xd2, flags: 0x0}, + 1076: {region: 0x116, script: 0x5a, flags: 0x0}, + 1077: {region: 0x114, script: 0x5a, flags: 0x0}, + 1078: {region: 0x99, script: 0x22, flags: 0x0}, + 1079: {region: 0x161, script: 0x5a, flags: 0x0}, + 1080: {region: 0x165, script: 0x5a, flags: 0x0}, + 1081: {region: 0x165, script: 0x5a, flags: 0x0}, + 1082: {region: 0x6d, script: 0x5a, flags: 0x0}, + 1083: {region: 0x161, script: 0x5a, flags: 0x0}, + 1084: {region: 0x165, script: 0x5a, flags: 0x0}, + 1085: {region: 0x60, script: 0x5a, flags: 0x0}, + 1086: {region: 0x95, script: 0x5a, flags: 0x0}, + 1087: {region: 0x165, script: 0x5a, flags: 0x0}, + 1088: {region: 0x165, script: 0x5a, flags: 0x0}, + 1089: {region: 0x12f, script: 0x5a, flags: 0x0}, + 1090: {region: 0x165, script: 0x5a, flags: 0x0}, + 1091: {region: 0x84, script: 0x5a, flags: 0x0}, + 1092: {region: 0x10c, script: 0x5a, flags: 0x0}, + 1093: {region: 0x12f, script: 0x5a, flags: 0x0}, 1094: {region: 0x15f, script: 0x5, flags: 0x0}, - 1095: {region: 0x4b, script: 0x57, flags: 0x0}, - 1096: {region: 0x60, script: 0x57, flags: 0x0}, - 1097: {region: 0x165, script: 0x57, flags: 0x0}, - 1098: {region: 0x99, script: 0x21, flags: 0x0}, - 1099: {region: 0x95, script: 0x57, flags: 0x0}, - 1100: {region: 0x165, script: 0x57, flags: 0x0}, + 1095: {region: 0x4b, script: 0x5a, flags: 0x0}, + 1096: {region: 0x60, script: 0x5a, flags: 0x0}, + 1097: {region: 0x165, script: 0x5a, flags: 0x0}, + 1098: {region: 0x99, script: 0x22, flags: 0x0}, + 1099: {region: 0x95, script: 0x5a, flags: 0x0}, + 1100: {region: 0x165, script: 0x5a, flags: 0x0}, 1101: {region: 0x35, script: 0xe, flags: 0x0}, - 1102: {region: 0x9b, script: 0xcf, flags: 0x0}, - 1103: {region: 0xe9, script: 0x57, flags: 0x0}, - 1104: {region: 0x99, script: 0xd7, flags: 0x0}, - 1105: {region: 0xdb, script: 0x21, flags: 0x0}, - 1106: {region: 0x165, script: 0x57, flags: 0x0}, - 1107: {region: 0x165, script: 0x57, flags: 0x0}, - 1108: {region: 0x165, script: 0x57, flags: 0x0}, - 1109: {region: 0x165, script: 0x57, flags: 0x0}, - 1110: {region: 0x165, script: 0x57, flags: 0x0}, - 1111: {region: 0x165, script: 0x57, flags: 0x0}, - 1112: {region: 0x165, script: 0x57, flags: 0x0}, - 1113: {region: 0x165, script: 0x57, flags: 0x0}, - 1114: {region: 0xe7, script: 0x57, flags: 0x0}, - 1115: {region: 0x165, script: 0x57, flags: 0x0}, - 1116: {region: 0x165, script: 0x57, flags: 0x0}, - 1117: {region: 0x99, script: 0x4f, flags: 0x0}, - 1118: {region: 0x53, script: 0xd5, flags: 0x0}, - 1119: {region: 0xdb, script: 0x21, flags: 0x0}, - 1120: {region: 0xdb, script: 0x21, flags: 0x0}, - 1121: {region: 0x99, script: 0xda, flags: 0x0}, - 1122: {region: 0x165, script: 0x57, flags: 0x0}, - 1123: {region: 0x112, script: 0x57, flags: 0x0}, - 1124: {region: 0x131, script: 0x57, flags: 0x0}, - 1125: {region: 0x126, script: 0x57, flags: 0x0}, - 1126: {region: 0x165, script: 0x57, flags: 0x0}, + 1102: {region: 0x9b, script: 0xd6, flags: 0x0}, + 1103: {region: 0xe9, script: 0x5a, flags: 0x0}, + 1104: {region: 0x99, script: 0xde, flags: 0x0}, + 1105: {region: 0xdb, script: 0x22, flags: 0x0}, + 1106: {region: 0x165, script: 0x5a, flags: 0x0}, + 1107: {region: 0x165, script: 0x5a, flags: 0x0}, + 1108: {region: 0x165, script: 0x5a, flags: 0x0}, + 1109: {region: 0x165, script: 0x5a, flags: 0x0}, + 1110: {region: 0x165, script: 0x5a, flags: 0x0}, + 1111: {region: 0x165, script: 0x5a, flags: 0x0}, + 1112: {region: 0x165, script: 0x5a, flags: 0x0}, + 1113: {region: 0x165, script: 0x5a, flags: 0x0}, + 1114: {region: 0xe7, script: 0x5a, flags: 0x0}, + 1115: {region: 0x165, script: 0x5a, flags: 0x0}, + 1116: {region: 0x165, script: 0x5a, flags: 0x0}, + 1117: {region: 0x99, script: 0x52, flags: 0x0}, + 1118: {region: 0x53, script: 0xdc, flags: 0x0}, + 1119: {region: 0xdb, script: 0x22, flags: 0x0}, + 1120: {region: 0xdb, script: 0x22, flags: 0x0}, + 1121: {region: 0x99, script: 0xe1, flags: 0x0}, + 1122: {region: 0x165, script: 0x5a, flags: 0x0}, + 1123: {region: 0x112, script: 0x5a, flags: 0x0}, + 1124: {region: 0x131, script: 0x5a, flags: 0x0}, + 1125: {region: 0x126, script: 0x5a, flags: 0x0}, + 1126: {region: 0x165, script: 0x5a, flags: 0x0}, 1127: {region: 0x3c, script: 0x3, flags: 0x1}, - 1128: {region: 0x165, script: 0x57, flags: 0x0}, - 1129: {region: 0x165, script: 0x57, flags: 0x0}, - 1130: {region: 0x165, script: 0x57, flags: 0x0}, - 1131: {region: 0x123, script: 0xdf, flags: 0x0}, - 1132: {region: 0xdb, script: 0x21, flags: 0x0}, - 1133: {region: 0xdb, script: 0x21, flags: 0x0}, - 1134: {region: 0xdb, script: 0x21, flags: 0x0}, - 1135: {region: 0x6f, script: 0x29, flags: 0x0}, - 1136: {region: 0x165, script: 0x57, flags: 0x0}, - 1137: {region: 0x6d, script: 0x29, flags: 0x0}, - 1138: {region: 0x165, script: 0x57, flags: 0x0}, - 1139: {region: 0x165, script: 0x57, flags: 0x0}, - 1140: {region: 0x165, script: 0x57, flags: 0x0}, - 1141: {region: 0xd6, script: 0x57, flags: 0x0}, - 1142: {region: 0x127, script: 0x57, flags: 0x0}, - 1143: {region: 0x125, script: 0x57, flags: 0x0}, - 1144: {region: 0x32, script: 0x57, flags: 0x0}, - 1145: {region: 0xdb, script: 0x21, flags: 0x0}, - 1146: {region: 0xe7, script: 0x57, flags: 0x0}, - 1147: {region: 0x165, script: 0x57, flags: 0x0}, - 1148: {region: 0x165, script: 0x57, flags: 0x0}, - 1149: {region: 0x32, script: 0x57, flags: 0x0}, - 1150: {region: 0xd4, script: 0x57, flags: 0x0}, - 1151: {region: 0x165, script: 0x57, flags: 0x0}, - 1152: {region: 0x161, script: 0x57, flags: 0x0}, - 1153: {region: 0x165, script: 0x57, flags: 0x0}, - 1154: {region: 0x129, script: 0x57, flags: 0x0}, - 1155: {region: 0x165, script: 0x57, flags: 0x0}, - 1156: {region: 0xce, script: 0x57, flags: 0x0}, - 1157: {region: 0x165, script: 0x57, flags: 0x0}, - 1158: {region: 0xe6, script: 0x57, flags: 0x0}, - 1159: {region: 0x165, script: 0x57, flags: 0x0}, - 1160: {region: 0x165, script: 0x57, flags: 0x0}, - 1161: {region: 0x165, script: 0x57, flags: 0x0}, - 1162: {region: 0x12b, script: 0x57, flags: 0x0}, - 1163: {region: 0x12b, script: 0x57, flags: 0x0}, - 1164: {region: 0x12e, script: 0x57, flags: 0x0}, + 1128: {region: 0x165, script: 0x5a, flags: 0x0}, + 1129: {region: 0x165, script: 0x5a, flags: 0x0}, + 1130: {region: 0x165, script: 0x5a, flags: 0x0}, + 1131: {region: 0x123, script: 0xe6, flags: 0x0}, + 1132: {region: 0xdb, script: 0x22, flags: 0x0}, + 1133: {region: 0xdb, script: 0x22, flags: 0x0}, + 1134: {region: 0xdb, script: 0x22, flags: 0x0}, + 1135: {region: 0x6f, script: 0x2c, flags: 0x0}, + 1136: {region: 0x165, script: 0x5a, flags: 0x0}, + 1137: {region: 0x6d, script: 0x2c, flags: 0x0}, + 1138: {region: 0x165, script: 0x5a, flags: 0x0}, + 1139: {region: 0x165, script: 0x5a, flags: 0x0}, + 1140: {region: 0x165, script: 0x5a, flags: 0x0}, + 1141: {region: 0xd6, script: 0x5a, flags: 0x0}, + 1142: {region: 0x127, script: 0x5a, flags: 0x0}, + 1143: {region: 0x125, script: 0x5a, flags: 0x0}, + 1144: {region: 0x32, script: 0x5a, flags: 0x0}, + 1145: {region: 0xdb, script: 0x22, flags: 0x0}, + 1146: {region: 0xe7, script: 0x5a, flags: 0x0}, + 1147: {region: 0x165, script: 0x5a, flags: 0x0}, + 1148: {region: 0x165, script: 0x5a, flags: 0x0}, + 1149: {region: 0x32, script: 0x5a, flags: 0x0}, + 1150: {region: 0xd4, script: 0x5a, flags: 0x0}, + 1151: {region: 0x165, script: 0x5a, flags: 0x0}, + 1152: {region: 0x161, script: 0x5a, flags: 0x0}, + 1153: {region: 0x165, script: 0x5a, flags: 0x0}, + 1154: {region: 0x129, script: 0x5a, flags: 0x0}, + 1155: {region: 0x165, script: 0x5a, flags: 0x0}, + 1156: {region: 0xce, script: 0x5a, flags: 0x0}, + 1157: {region: 0x165, script: 0x5a, flags: 0x0}, + 1158: {region: 0xe6, script: 0x5a, flags: 0x0}, + 1159: {region: 0x165, script: 0x5a, flags: 0x0}, + 1160: {region: 0x165, script: 0x5a, flags: 0x0}, + 1161: {region: 0x165, script: 0x5a, flags: 0x0}, + 1162: {region: 0x12b, script: 0x5a, flags: 0x0}, + 1163: {region: 0x12b, script: 0x5a, flags: 0x0}, + 1164: {region: 0x12e, script: 0x5a, flags: 0x0}, 1165: {region: 0x165, script: 0x5, flags: 0x0}, - 1166: {region: 0x161, script: 0x57, flags: 0x0}, - 1167: {region: 0x87, script: 0x31, flags: 0x0}, - 1168: {region: 0xdb, script: 0x21, flags: 0x0}, - 1169: {region: 0xe7, script: 0x57, flags: 0x0}, - 1170: {region: 0x43, script: 0xe0, flags: 0x0}, - 1171: {region: 0x165, script: 0x57, flags: 0x0}, - 1172: {region: 0x106, script: 0x1f, flags: 0x0}, - 1173: {region: 0x165, script: 0x57, flags: 0x0}, - 1174: {region: 0x165, script: 0x57, flags: 0x0}, - 1175: {region: 0x131, script: 0x57, flags: 0x0}, - 1176: {region: 0x165, script: 0x57, flags: 0x0}, - 1177: {region: 0x123, script: 0xdf, flags: 0x0}, - 1178: {region: 0x32, script: 0x57, flags: 0x0}, - 1179: {region: 0x165, script: 0x57, flags: 0x0}, - 1180: {region: 0x165, script: 0x57, flags: 0x0}, - 1181: {region: 0xce, script: 0x57, flags: 0x0}, - 1182: {region: 0x165, script: 0x57, flags: 0x0}, - 1183: {region: 0x165, script: 0x57, flags: 0x0}, - 1184: {region: 0x12d, script: 0x57, flags: 0x0}, - 1185: {region: 0x165, script: 0x57, flags: 0x0}, - 1187: {region: 0x165, script: 0x57, flags: 0x0}, - 1188: {region: 0xd4, script: 0x57, flags: 0x0}, - 1189: {region: 0x53, script: 0xd8, flags: 0x0}, - 1190: {region: 0xe5, script: 0x57, flags: 0x0}, - 1191: {region: 0x165, script: 0x57, flags: 0x0}, - 1192: {region: 0x106, script: 0x1f, flags: 0x0}, - 1193: {region: 0xba, script: 0x57, flags: 0x0}, - 1194: {region: 0x165, script: 0x57, flags: 0x0}, - 1195: {region: 0x106, script: 0x1f, flags: 0x0}, + 1166: {region: 0x161, script: 0x5a, flags: 0x0}, + 1167: {region: 0x87, script: 0x34, flags: 0x0}, + 1168: {region: 0xdb, script: 0x22, flags: 0x0}, + 1169: {region: 0xe7, script: 0x5a, flags: 0x0}, + 1170: {region: 0x43, script: 0xe7, flags: 0x0}, + 1171: {region: 0x165, script: 0x5a, flags: 0x0}, + 1172: {region: 0x106, script: 0x20, flags: 0x0}, + 1173: {region: 0x165, script: 0x5a, flags: 0x0}, + 1174: {region: 0x165, script: 0x5a, flags: 0x0}, + 1175: {region: 0x131, script: 0x5a, flags: 0x0}, + 1176: {region: 0x165, script: 0x5a, flags: 0x0}, + 1177: {region: 0x123, script: 0xe6, flags: 0x0}, + 1178: {region: 0x32, script: 0x5a, flags: 0x0}, + 1179: {region: 0x165, script: 0x5a, flags: 0x0}, + 1180: {region: 0x165, script: 0x5a, flags: 0x0}, + 1181: {region: 0xce, script: 0x5a, flags: 0x0}, + 1182: {region: 0x165, script: 0x5a, flags: 0x0}, + 1183: {region: 0x165, script: 0x5a, flags: 0x0}, + 1184: {region: 0x12d, script: 0x5a, flags: 0x0}, + 1185: {region: 0x165, script: 0x5a, flags: 0x0}, + 1187: {region: 0x165, script: 0x5a, flags: 0x0}, + 1188: {region: 0xd4, script: 0x5a, flags: 0x0}, + 1189: {region: 0x53, script: 0xdf, flags: 0x0}, + 1190: {region: 0xe5, script: 0x5a, flags: 0x0}, + 1191: {region: 0x165, script: 0x5a, flags: 0x0}, + 1192: {region: 0x106, script: 0x20, flags: 0x0}, + 1193: {region: 0xba, script: 0x5a, flags: 0x0}, + 1194: {region: 0x165, script: 0x5a, flags: 0x0}, + 1195: {region: 0x106, script: 0x20, flags: 0x0}, 1196: {region: 0x3f, script: 0x4, flags: 0x1}, - 1197: {region: 0x11c, script: 0xe2, flags: 0x0}, - 1198: {region: 0x130, script: 0x1f, flags: 0x0}, - 1199: {region: 0x75, script: 0x57, flags: 0x0}, - 1200: {region: 0x2a, script: 0x57, flags: 0x0}, + 1197: {region: 0x11c, script: 0xea, flags: 0x0}, + 1198: {region: 0x130, script: 0x20, flags: 0x0}, + 1199: {region: 0x75, script: 0x5a, flags: 0x0}, + 1200: {region: 0x2a, script: 0x5a, flags: 0x0}, 1202: {region: 0x43, script: 0x3, flags: 0x1}, 1203: {region: 0x99, script: 0xe, flags: 0x0}, 1204: {region: 0xe8, script: 0x5, flags: 0x0}, - 1205: {region: 0x165, script: 0x57, flags: 0x0}, - 1206: {region: 0x165, script: 0x57, flags: 0x0}, - 1207: {region: 0x165, script: 0x57, flags: 0x0}, - 1208: {region: 0x165, script: 0x57, flags: 0x0}, - 1209: {region: 0x165, script: 0x57, flags: 0x0}, - 1210: {region: 0x165, script: 0x57, flags: 0x0}, - 1211: {region: 0x165, script: 0x57, flags: 0x0}, + 1205: {region: 0x165, script: 0x5a, flags: 0x0}, + 1206: {region: 0x165, script: 0x5a, flags: 0x0}, + 1207: {region: 0x165, script: 0x5a, flags: 0x0}, + 1208: {region: 0x165, script: 0x5a, flags: 0x0}, + 1209: {region: 0x165, script: 0x5a, flags: 0x0}, + 1210: {region: 0x165, script: 0x5a, flags: 0x0}, + 1211: {region: 0x165, script: 0x5a, flags: 0x0}, 1212: {region: 0x46, script: 0x4, flags: 0x1}, - 1213: {region: 0x165, script: 0x57, flags: 0x0}, - 1214: {region: 0xb4, script: 0xe3, flags: 0x0}, - 1215: {region: 0x165, script: 0x57, flags: 0x0}, - 1216: {region: 0x161, script: 0x57, flags: 0x0}, - 1217: {region: 0x9e, script: 0x57, flags: 0x0}, - 1218: {region: 0x106, script: 0x57, flags: 0x0}, - 1219: {region: 0x13e, script: 0x57, flags: 0x0}, - 1220: {region: 0x11b, script: 0x57, flags: 0x0}, - 1221: {region: 0x165, script: 0x57, flags: 0x0}, - 1222: {region: 0x36, script: 0x57, flags: 0x0}, - 1223: {region: 0x60, script: 0x57, flags: 0x0}, - 1224: {region: 0xd1, script: 0x57, flags: 0x0}, - 1225: {region: 0x1, script: 0x57, flags: 0x0}, - 1226: {region: 0x106, script: 0x57, flags: 0x0}, - 1227: {region: 0x6a, script: 0x57, flags: 0x0}, - 1228: {region: 0x12f, script: 0x57, flags: 0x0}, - 1229: {region: 0x165, script: 0x57, flags: 0x0}, - 1230: {region: 0x36, script: 0x57, flags: 0x0}, - 1231: {region: 0x4e, script: 0x57, flags: 0x0}, - 1232: {region: 0x165, script: 0x57, flags: 0x0}, - 1233: {region: 0x6f, script: 0x29, flags: 0x0}, - 1234: {region: 0x165, script: 0x57, flags: 0x0}, - 1235: {region: 0xe7, script: 0x57, flags: 0x0}, - 1236: {region: 0x2f, script: 0x57, flags: 0x0}, - 1237: {region: 0x99, script: 0xda, flags: 0x0}, - 1238: {region: 0x99, script: 0x21, flags: 0x0}, - 1239: {region: 0x165, script: 0x57, flags: 0x0}, - 1240: {region: 0x165, script: 0x57, flags: 0x0}, - 1241: {region: 0x165, script: 0x57, flags: 0x0}, - 1242: {region: 0x165, script: 0x57, flags: 0x0}, - 1243: {region: 0x165, script: 0x57, flags: 0x0}, - 1244: {region: 0x165, script: 0x57, flags: 0x0}, - 1245: {region: 0x165, script: 0x57, flags: 0x0}, - 1246: {region: 0x165, script: 0x57, flags: 0x0}, - 1247: {region: 0x165, script: 0x57, flags: 0x0}, - 1248: {region: 0x140, script: 0x57, flags: 0x0}, - 1249: {region: 0x165, script: 0x57, flags: 0x0}, - 1250: {region: 0x165, script: 0x57, flags: 0x0}, + 1213: {region: 0x165, script: 0x5a, flags: 0x0}, + 1214: {region: 0xb4, script: 0xeb, flags: 0x0}, + 1215: {region: 0x165, script: 0x5a, flags: 0x0}, + 1216: {region: 0x161, script: 0x5a, flags: 0x0}, + 1217: {region: 0x9e, script: 0x5a, flags: 0x0}, + 1218: {region: 0x106, script: 0x5a, flags: 0x0}, + 1219: {region: 0x13e, script: 0x5a, flags: 0x0}, + 1220: {region: 0x11b, script: 0x5a, flags: 0x0}, + 1221: {region: 0x165, script: 0x5a, flags: 0x0}, + 1222: {region: 0x36, script: 0x5a, flags: 0x0}, + 1223: {region: 0x60, script: 0x5a, flags: 0x0}, + 1224: {region: 0xd1, script: 0x5a, flags: 0x0}, + 1225: {region: 0x1, script: 0x5a, flags: 0x0}, + 1226: {region: 0x106, script: 0x5a, flags: 0x0}, + 1227: {region: 0x6a, script: 0x5a, flags: 0x0}, + 1228: {region: 0x12f, script: 0x5a, flags: 0x0}, + 1229: {region: 0x165, script: 0x5a, flags: 0x0}, + 1230: {region: 0x36, script: 0x5a, flags: 0x0}, + 1231: {region: 0x4e, script: 0x5a, flags: 0x0}, + 1232: {region: 0x165, script: 0x5a, flags: 0x0}, + 1233: {region: 0x6f, script: 0x2c, flags: 0x0}, + 1234: {region: 0x165, script: 0x5a, flags: 0x0}, + 1235: {region: 0xe7, script: 0x5a, flags: 0x0}, + 1236: {region: 0x2f, script: 0x5a, flags: 0x0}, + 1237: {region: 0x99, script: 0xe1, flags: 0x0}, + 1238: {region: 0x99, script: 0x22, flags: 0x0}, + 1239: {region: 0x165, script: 0x5a, flags: 0x0}, + 1240: {region: 0x165, script: 0x5a, flags: 0x0}, + 1241: {region: 0x165, script: 0x5a, flags: 0x0}, + 1242: {region: 0x165, script: 0x5a, flags: 0x0}, + 1243: {region: 0x165, script: 0x5a, flags: 0x0}, + 1244: {region: 0x165, script: 0x5a, flags: 0x0}, + 1245: {region: 0x165, script: 0x5a, flags: 0x0}, + 1246: {region: 0x165, script: 0x5a, flags: 0x0}, + 1247: {region: 0x165, script: 0x5a, flags: 0x0}, + 1248: {region: 0x140, script: 0x5a, flags: 0x0}, + 1249: {region: 0x165, script: 0x5a, flags: 0x0}, + 1250: {region: 0x165, script: 0x5a, flags: 0x0}, 1251: {region: 0xa8, script: 0x5, flags: 0x0}, - 1252: {region: 0x165, script: 0x57, flags: 0x0}, - 1253: {region: 0x114, script: 0x57, flags: 0x0}, - 1254: {region: 0x165, script: 0x57, flags: 0x0}, - 1255: {region: 0x165, script: 0x57, flags: 0x0}, - 1256: {region: 0x165, script: 0x57, flags: 0x0}, - 1257: {region: 0x165, script: 0x57, flags: 0x0}, - 1258: {region: 0x99, script: 0x21, flags: 0x0}, - 1259: {region: 0x53, script: 0x38, flags: 0x0}, - 1260: {region: 0x165, script: 0x57, flags: 0x0}, - 1261: {region: 0x165, script: 0x57, flags: 0x0}, - 1262: {region: 0x41, script: 0x57, flags: 0x0}, - 1263: {region: 0x165, script: 0x57, flags: 0x0}, + 1252: {region: 0x165, script: 0x5a, flags: 0x0}, + 1253: {region: 0x114, script: 0x5a, flags: 0x0}, + 1254: {region: 0x165, script: 0x5a, flags: 0x0}, + 1255: {region: 0x165, script: 0x5a, flags: 0x0}, + 1256: {region: 0x165, script: 0x5a, flags: 0x0}, + 1257: {region: 0x165, script: 0x5a, flags: 0x0}, + 1258: {region: 0x99, script: 0x22, flags: 0x0}, + 1259: {region: 0x53, script: 0x3b, flags: 0x0}, + 1260: {region: 0x165, script: 0x5a, flags: 0x0}, + 1261: {region: 0x165, script: 0x5a, flags: 0x0}, + 1262: {region: 0x41, script: 0x5a, flags: 0x0}, + 1263: {region: 0x165, script: 0x5a, flags: 0x0}, 1264: {region: 0x12b, script: 0x18, flags: 0x0}, - 1265: {region: 0x165, script: 0x57, flags: 0x0}, - 1266: {region: 0x161, script: 0x57, flags: 0x0}, - 1267: {region: 0x165, script: 0x57, flags: 0x0}, - 1268: {region: 0x12b, script: 0x5f, flags: 0x0}, - 1269: {region: 0x12b, script: 0x60, flags: 0x0}, - 1270: {region: 0x7d, script: 0x2b, flags: 0x0}, - 1271: {region: 0x53, script: 0x64, flags: 0x0}, - 1272: {region: 0x10b, script: 0x69, flags: 0x0}, - 1273: {region: 0x108, script: 0x73, flags: 0x0}, - 1274: {region: 0x99, script: 0x21, flags: 0x0}, - 1275: {region: 0x131, script: 0x57, flags: 0x0}, - 1276: {region: 0x165, script: 0x57, flags: 0x0}, - 1277: {region: 0x9c, script: 0x8a, flags: 0x0}, - 1278: {region: 0x165, script: 0x57, flags: 0x0}, - 1279: {region: 0x15e, script: 0xc2, flags: 0x0}, - 1280: {region: 0x165, script: 0x57, flags: 0x0}, - 1281: {region: 0x165, script: 0x57, flags: 0x0}, - 1282: {region: 0xdb, script: 0x21, flags: 0x0}, - 1283: {region: 0x165, script: 0x57, flags: 0x0}, - 1284: {region: 0x165, script: 0x57, flags: 0x0}, - 1285: {region: 0xd1, script: 0x57, flags: 0x0}, - 1286: {region: 0x75, script: 0x57, flags: 0x0}, - 1287: {region: 0x165, script: 0x57, flags: 0x0}, - 1288: {region: 0x165, script: 0x57, flags: 0x0}, - 1289: {region: 0x52, script: 0x57, flags: 0x0}, - 1290: {region: 0x165, script: 0x57, flags: 0x0}, - 1291: {region: 0x165, script: 0x57, flags: 0x0}, - 1292: {region: 0x165, script: 0x57, flags: 0x0}, - 1293: {region: 0x52, script: 0x57, flags: 0x0}, - 1294: {region: 0x165, script: 0x57, flags: 0x0}, - 1295: {region: 0x165, script: 0x57, flags: 0x0}, - 1296: {region: 0x165, script: 0x57, flags: 0x0}, - 1297: {region: 0x165, script: 0x57, flags: 0x0}, - 1298: {region: 0x1, script: 0x3b, flags: 0x0}, - 1299: {region: 0x165, script: 0x57, flags: 0x0}, - 1300: {region: 0x165, script: 0x57, flags: 0x0}, - 1301: {region: 0x165, script: 0x57, flags: 0x0}, - 1302: {region: 0x165, script: 0x57, flags: 0x0}, - 1303: {region: 0x165, script: 0x57, flags: 0x0}, - 1304: {region: 0xd6, script: 0x57, flags: 0x0}, - 1305: {region: 0x165, script: 0x57, flags: 0x0}, - 1306: {region: 0x165, script: 0x57, flags: 0x0}, - 1307: {region: 0x165, script: 0x57, flags: 0x0}, - 1308: {region: 0x41, script: 0x57, flags: 0x0}, - 1309: {region: 0x165, script: 0x57, flags: 0x0}, - 1310: {region: 0xcf, script: 0x57, flags: 0x0}, + 1265: {region: 0x165, script: 0x5a, flags: 0x0}, + 1266: {region: 0x161, script: 0x5a, flags: 0x0}, + 1267: {region: 0x165, script: 0x5a, flags: 0x0}, + 1268: {region: 0x12b, script: 0x62, flags: 0x0}, + 1269: {region: 0x12b, script: 0x63, flags: 0x0}, + 1270: {region: 0x7d, script: 0x2e, flags: 0x0}, + 1271: {region: 0x53, script: 0x67, flags: 0x0}, + 1272: {region: 0x10b, script: 0x6c, flags: 0x0}, + 1273: {region: 0x108, script: 0x77, flags: 0x0}, + 1274: {region: 0x99, script: 0x22, flags: 0x0}, + 1275: {region: 0x131, script: 0x5a, flags: 0x0}, + 1276: {region: 0x165, script: 0x5a, flags: 0x0}, + 1277: {region: 0x9c, script: 0x8e, flags: 0x0}, + 1278: {region: 0x165, script: 0x5a, flags: 0x0}, + 1279: {region: 0x15e, script: 0xc7, flags: 0x0}, + 1280: {region: 0x165, script: 0x5a, flags: 0x0}, + 1281: {region: 0x165, script: 0x5a, flags: 0x0}, + 1282: {region: 0xdb, script: 0x22, flags: 0x0}, + 1283: {region: 0x165, script: 0x5a, flags: 0x0}, + 1284: {region: 0x165, script: 0x5a, flags: 0x0}, + 1285: {region: 0xd1, script: 0x5a, flags: 0x0}, + 1286: {region: 0x75, script: 0x5a, flags: 0x0}, + 1287: {region: 0x165, script: 0x5a, flags: 0x0}, + 1288: {region: 0x165, script: 0x5a, flags: 0x0}, + 1289: {region: 0x52, script: 0x5a, flags: 0x0}, + 1290: {region: 0x165, script: 0x5a, flags: 0x0}, + 1291: {region: 0x165, script: 0x5a, flags: 0x0}, + 1292: {region: 0x165, script: 0x5a, flags: 0x0}, + 1293: {region: 0x52, script: 0x5a, flags: 0x0}, + 1294: {region: 0x165, script: 0x5a, flags: 0x0}, + 1295: {region: 0x165, script: 0x5a, flags: 0x0}, + 1296: {region: 0x165, script: 0x5a, flags: 0x0}, + 1297: {region: 0x165, script: 0x5a, flags: 0x0}, + 1298: {region: 0x1, script: 0x3e, flags: 0x0}, + 1299: {region: 0x165, script: 0x5a, flags: 0x0}, + 1300: {region: 0x165, script: 0x5a, flags: 0x0}, + 1301: {region: 0x165, script: 0x5a, flags: 0x0}, + 1302: {region: 0x165, script: 0x5a, flags: 0x0}, + 1303: {region: 0x165, script: 0x5a, flags: 0x0}, + 1304: {region: 0xd6, script: 0x5a, flags: 0x0}, + 1305: {region: 0x165, script: 0x5a, flags: 0x0}, + 1306: {region: 0x165, script: 0x5a, flags: 0x0}, + 1307: {region: 0x165, script: 0x5a, flags: 0x0}, + 1308: {region: 0x41, script: 0x5a, flags: 0x0}, + 1309: {region: 0x165, script: 0x5a, flags: 0x0}, + 1310: {region: 0xcf, script: 0x5a, flags: 0x0}, 1311: {region: 0x4a, script: 0x3, flags: 0x1}, - 1312: {region: 0x165, script: 0x57, flags: 0x0}, - 1313: {region: 0x165, script: 0x57, flags: 0x0}, - 1314: {region: 0x165, script: 0x57, flags: 0x0}, - 1315: {region: 0x53, script: 0x57, flags: 0x0}, - 1316: {region: 0x10b, script: 0x57, flags: 0x0}, + 1312: {region: 0x165, script: 0x5a, flags: 0x0}, + 1313: {region: 0x165, script: 0x5a, flags: 0x0}, + 1314: {region: 0x165, script: 0x5a, flags: 0x0}, + 1315: {region: 0x53, script: 0x5a, flags: 0x0}, + 1316: {region: 0x10b, script: 0x5a, flags: 0x0}, 1318: {region: 0xa8, script: 0x5, flags: 0x0}, - 1319: {region: 0xd9, script: 0x57, flags: 0x0}, - 1320: {region: 0xba, script: 0xdc, flags: 0x0}, + 1319: {region: 0xd9, script: 0x5a, flags: 0x0}, + 1320: {region: 0xba, script: 0xe3, flags: 0x0}, 1321: {region: 0x4d, script: 0x14, flags: 0x1}, - 1322: {region: 0x53, script: 0x79, flags: 0x0}, - 1323: {region: 0x165, script: 0x57, flags: 0x0}, - 1324: {region: 0x122, script: 0x57, flags: 0x0}, - 1325: {region: 0xd0, script: 0x57, flags: 0x0}, - 1326: {region: 0x165, script: 0x57, flags: 0x0}, - 1327: {region: 0x161, script: 0x57, flags: 0x0}, - 1329: {region: 0x12b, script: 0x57, flags: 0x0}, + 1322: {region: 0x53, script: 0x7d, flags: 0x0}, + 1323: {region: 0x165, script: 0x5a, flags: 0x0}, + 1324: {region: 0x122, script: 0x5a, flags: 0x0}, + 1325: {region: 0xd0, script: 0x5a, flags: 0x0}, + 1326: {region: 0x165, script: 0x5a, flags: 0x0}, + 1327: {region: 0x161, script: 0x5a, flags: 0x0}, + 1329: {region: 0x12b, script: 0x5a, flags: 0x0}, } // likelyLangList holds lists info associated with likelyLang. // Size: 388 bytes, 97 elements var likelyLangList = [97]likelyScriptRegion{ 0: {region: 0x9c, script: 0x7, flags: 0x0}, - 1: {region: 0xa1, script: 0x74, flags: 0x2}, - 2: {region: 0x11c, script: 0x80, flags: 0x2}, - 3: {region: 0x32, script: 0x57, flags: 0x0}, + 1: {region: 0xa1, script: 0x78, flags: 0x2}, + 2: {region: 0x11c, script: 0x84, flags: 0x2}, + 3: {region: 0x32, script: 0x5a, flags: 0x0}, 4: {region: 0x9b, script: 0x5, flags: 0x4}, 5: {region: 0x9c, script: 0x5, flags: 0x4}, - 6: {region: 0x106, script: 0x1f, flags: 0x4}, + 6: {region: 0x106, script: 0x20, flags: 0x4}, 7: {region: 0x9c, script: 0x5, flags: 0x2}, - 8: {region: 0x106, script: 0x1f, flags: 0x0}, - 9: {region: 0x38, script: 0x2c, flags: 0x2}, - 10: {region: 0x135, script: 0x57, flags: 0x0}, - 11: {region: 0x7b, script: 0xc5, flags: 0x2}, - 12: {region: 0x114, script: 0x57, flags: 0x0}, + 8: {region: 0x106, script: 0x20, flags: 0x0}, + 9: {region: 0x38, script: 0x2f, flags: 0x2}, + 10: {region: 0x135, script: 0x5a, flags: 0x0}, + 11: {region: 0x7b, script: 0xca, flags: 0x2}, + 12: {region: 0x114, script: 0x5a, flags: 0x0}, 13: {region: 0x84, script: 0x1, flags: 0x2}, - 14: {region: 0x5d, script: 0x1e, flags: 0x0}, - 15: {region: 0x87, script: 0x5c, flags: 0x2}, - 16: {region: 0xd6, script: 0x57, flags: 0x0}, + 14: {region: 0x5d, script: 0x1f, flags: 0x0}, + 15: {region: 0x87, script: 0x5f, flags: 0x2}, + 16: {region: 0xd6, script: 0x5a, flags: 0x0}, 17: {region: 0x52, script: 0x5, flags: 0x4}, 18: {region: 0x10b, script: 0x5, flags: 0x4}, - 19: {region: 0xae, script: 0x1f, flags: 0x0}, + 19: {region: 0xae, script: 0x20, flags: 0x0}, 20: {region: 0x24, script: 0x5, flags: 0x4}, 21: {region: 0x53, script: 0x5, flags: 0x4}, 22: {region: 0x9c, script: 0x5, flags: 0x4}, 23: {region: 0xc5, script: 0x5, flags: 0x4}, 24: {region: 0x53, script: 0x5, flags: 0x2}, - 25: {region: 0x12b, script: 0x57, flags: 0x0}, + 25: {region: 0x12b, script: 0x5a, flags: 0x0}, 26: {region: 0xb0, script: 0x5, flags: 0x4}, 27: {region: 0x9b, script: 0x5, flags: 0x2}, - 28: {region: 0xa5, script: 0x1f, flags: 0x0}, + 28: {region: 0xa5, script: 0x20, flags: 0x0}, 29: {region: 0x53, script: 0x5, flags: 0x4}, - 30: {region: 0x12b, script: 0x57, flags: 0x4}, + 30: {region: 0x12b, script: 0x5a, flags: 0x4}, 31: {region: 0x53, script: 0x5, flags: 0x2}, - 32: {region: 0x12b, script: 0x57, flags: 0x2}, - 33: {region: 0xdb, script: 0x21, flags: 0x0}, - 34: {region: 0x99, script: 0x5a, flags: 0x2}, - 35: {region: 0x83, script: 0x57, flags: 0x0}, - 36: {region: 0x84, script: 0x78, flags: 0x4}, - 37: {region: 0x84, script: 0x78, flags: 0x2}, - 38: {region: 0xc5, script: 0x1f, flags: 0x0}, - 39: {region: 0x53, script: 0x6d, flags: 0x4}, - 40: {region: 0x53, script: 0x6d, flags: 0x2}, - 41: {region: 0xd0, script: 0x57, flags: 0x0}, + 32: {region: 0x12b, script: 0x5a, flags: 0x2}, + 33: {region: 0xdb, script: 0x22, flags: 0x0}, + 34: {region: 0x99, script: 0x5d, flags: 0x2}, + 35: {region: 0x83, script: 0x5a, flags: 0x0}, + 36: {region: 0x84, script: 0x7c, flags: 0x4}, + 37: {region: 0x84, script: 0x7c, flags: 0x2}, + 38: {region: 0xc5, script: 0x20, flags: 0x0}, + 39: {region: 0x53, script: 0x70, flags: 0x4}, + 40: {region: 0x53, script: 0x70, flags: 0x2}, + 41: {region: 0xd0, script: 0x5a, flags: 0x0}, 42: {region: 0x4a, script: 0x5, flags: 0x4}, 43: {region: 0x95, script: 0x5, flags: 0x4}, - 44: {region: 0x99, script: 0x33, flags: 0x0}, + 44: {region: 0x99, script: 0x36, flags: 0x0}, 45: {region: 0xe8, script: 0x5, flags: 0x4}, 46: {region: 0xe8, script: 0x5, flags: 0x2}, - 47: {region: 0x9c, script: 0x84, flags: 0x0}, - 48: {region: 0x53, script: 0x85, flags: 0x2}, - 49: {region: 0xba, script: 0xdc, flags: 0x0}, - 50: {region: 0xd9, script: 0x57, flags: 0x4}, + 47: {region: 0x9c, script: 0x88, flags: 0x0}, + 48: {region: 0x53, script: 0x89, flags: 0x2}, + 49: {region: 0xba, script: 0xe3, flags: 0x0}, + 50: {region: 0xd9, script: 0x5a, flags: 0x4}, 51: {region: 0xe8, script: 0x5, flags: 0x0}, - 52: {region: 0x99, script: 0x21, flags: 0x2}, - 53: {region: 0x99, script: 0x4c, flags: 0x2}, - 54: {region: 0x99, script: 0xc9, flags: 0x2}, - 55: {region: 0x105, script: 0x1f, flags: 0x0}, - 56: {region: 0xbd, script: 0x57, flags: 0x4}, - 57: {region: 0x104, script: 0x57, flags: 0x4}, - 58: {region: 0x106, script: 0x57, flags: 0x4}, - 59: {region: 0x12b, script: 0x57, flags: 0x4}, - 60: {region: 0x124, script: 0x1f, flags: 0x0}, + 52: {region: 0x99, script: 0x22, flags: 0x2}, + 53: {region: 0x99, script: 0x4f, flags: 0x2}, + 54: {region: 0x99, script: 0xce, flags: 0x2}, + 55: {region: 0x105, script: 0x20, flags: 0x0}, + 56: {region: 0xbd, script: 0x5a, flags: 0x4}, + 57: {region: 0x104, script: 0x5a, flags: 0x4}, + 58: {region: 0x106, script: 0x5a, flags: 0x4}, + 59: {region: 0x12b, script: 0x5a, flags: 0x4}, + 60: {region: 0x124, script: 0x20, flags: 0x0}, 61: {region: 0xe8, script: 0x5, flags: 0x4}, 62: {region: 0xe8, script: 0x5, flags: 0x2}, 63: {region: 0x53, script: 0x5, flags: 0x0}, - 64: {region: 0xae, script: 0x1f, flags: 0x4}, - 65: {region: 0xc5, script: 0x1f, flags: 0x4}, - 66: {region: 0xae, script: 0x1f, flags: 0x2}, + 64: {region: 0xae, script: 0x20, flags: 0x4}, + 65: {region: 0xc5, script: 0x20, flags: 0x4}, + 66: {region: 0xae, script: 0x20, flags: 0x2}, 67: {region: 0x99, script: 0xe, flags: 0x0}, - 68: {region: 0xdb, script: 0x21, flags: 0x4}, - 69: {region: 0xdb, script: 0x21, flags: 0x2}, - 70: {region: 0x137, script: 0x57, flags: 0x0}, + 68: {region: 0xdb, script: 0x22, flags: 0x4}, + 69: {region: 0xdb, script: 0x22, flags: 0x2}, + 70: {region: 0x137, script: 0x5a, flags: 0x0}, 71: {region: 0x24, script: 0x5, flags: 0x4}, - 72: {region: 0x53, script: 0x1f, flags: 0x4}, + 72: {region: 0x53, script: 0x20, flags: 0x4}, 73: {region: 0x24, script: 0x5, flags: 0x2}, - 74: {region: 0x8d, script: 0x39, flags: 0x0}, - 75: {region: 0x53, script: 0x38, flags: 0x4}, - 76: {region: 0x53, script: 0x38, flags: 0x2}, - 77: {region: 0x53, script: 0x38, flags: 0x0}, - 78: {region: 0x2f, script: 0x39, flags: 0x4}, - 79: {region: 0x3e, script: 0x39, flags: 0x4}, - 80: {region: 0x7b, script: 0x39, flags: 0x4}, - 81: {region: 0x7e, script: 0x39, flags: 0x4}, - 82: {region: 0x8d, script: 0x39, flags: 0x4}, - 83: {region: 0x95, script: 0x39, flags: 0x4}, - 84: {region: 0xc6, script: 0x39, flags: 0x4}, - 85: {region: 0xd0, script: 0x39, flags: 0x4}, - 86: {region: 0xe2, script: 0x39, flags: 0x4}, - 87: {region: 0xe5, script: 0x39, flags: 0x4}, - 88: {region: 0xe7, script: 0x39, flags: 0x4}, - 89: {region: 0x116, script: 0x39, flags: 0x4}, - 90: {region: 0x123, script: 0x39, flags: 0x4}, - 91: {region: 0x12e, script: 0x39, flags: 0x4}, - 92: {region: 0x135, script: 0x39, flags: 0x4}, - 93: {region: 0x13e, script: 0x39, flags: 0x4}, + 74: {region: 0x8d, script: 0x3c, flags: 0x0}, + 75: {region: 0x53, script: 0x3b, flags: 0x4}, + 76: {region: 0x53, script: 0x3b, flags: 0x2}, + 77: {region: 0x53, script: 0x3b, flags: 0x0}, + 78: {region: 0x2f, script: 0x3c, flags: 0x4}, + 79: {region: 0x3e, script: 0x3c, flags: 0x4}, + 80: {region: 0x7b, script: 0x3c, flags: 0x4}, + 81: {region: 0x7e, script: 0x3c, flags: 0x4}, + 82: {region: 0x8d, script: 0x3c, flags: 0x4}, + 83: {region: 0x95, script: 0x3c, flags: 0x4}, + 84: {region: 0xc6, script: 0x3c, flags: 0x4}, + 85: {region: 0xd0, script: 0x3c, flags: 0x4}, + 86: {region: 0xe2, script: 0x3c, flags: 0x4}, + 87: {region: 0xe5, script: 0x3c, flags: 0x4}, + 88: {region: 0xe7, script: 0x3c, flags: 0x4}, + 89: {region: 0x116, script: 0x3c, flags: 0x4}, + 90: {region: 0x123, script: 0x3c, flags: 0x4}, + 91: {region: 0x12e, script: 0x3c, flags: 0x4}, + 92: {region: 0x135, script: 0x3c, flags: 0x4}, + 93: {region: 0x13e, script: 0x3c, flags: 0x4}, 94: {region: 0x12e, script: 0x11, flags: 0x2}, - 95: {region: 0x12e, script: 0x34, flags: 0x2}, - 96: {region: 0x12e, script: 0x39, flags: 0x2}, + 95: {region: 0x12e, script: 0x37, flags: 0x2}, + 96: {region: 0x12e, script: 0x3c, flags: 0x2}, } type likelyLangScript struct { @@ -2948,304 +2981,304 @@ type likelyLangScript struct { // TODO: exclude containers and user-definable regions from the list. // Size: 1432 bytes, 358 elements var likelyRegion = [358]likelyLangScript{ - 34: {lang: 0xd7, script: 0x57, flags: 0x0}, + 34: {lang: 0xd7, script: 0x5a, flags: 0x0}, 35: {lang: 0x3a, script: 0x5, flags: 0x0}, 36: {lang: 0x0, script: 0x2, flags: 0x1}, 39: {lang: 0x2, script: 0x2, flags: 0x1}, 40: {lang: 0x4, script: 0x2, flags: 0x1}, - 42: {lang: 0x3c0, script: 0x57, flags: 0x0}, - 43: {lang: 0x0, script: 0x57, flags: 0x0}, - 44: {lang: 0x13e, script: 0x57, flags: 0x0}, - 45: {lang: 0x41b, script: 0x57, flags: 0x0}, - 46: {lang: 0x10d, script: 0x57, flags: 0x0}, - 48: {lang: 0x367, script: 0x57, flags: 0x0}, - 49: {lang: 0x444, script: 0x57, flags: 0x0}, - 50: {lang: 0x58, script: 0x57, flags: 0x0}, + 42: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 43: {lang: 0x0, script: 0x5a, flags: 0x0}, + 44: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 45: {lang: 0x41b, script: 0x5a, flags: 0x0}, + 46: {lang: 0x10d, script: 0x5a, flags: 0x0}, + 48: {lang: 0x367, script: 0x5a, flags: 0x0}, + 49: {lang: 0x444, script: 0x5a, flags: 0x0}, + 50: {lang: 0x58, script: 0x5a, flags: 0x0}, 51: {lang: 0x6, script: 0x2, flags: 0x1}, 53: {lang: 0xa5, script: 0xe, flags: 0x0}, - 54: {lang: 0x367, script: 0x57, flags: 0x0}, - 55: {lang: 0x15e, script: 0x57, flags: 0x0}, - 56: {lang: 0x7e, script: 0x1f, flags: 0x0}, + 54: {lang: 0x367, script: 0x5a, flags: 0x0}, + 55: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 56: {lang: 0x7e, script: 0x20, flags: 0x0}, 57: {lang: 0x3a, script: 0x5, flags: 0x0}, - 58: {lang: 0x3d9, script: 0x57, flags: 0x0}, - 59: {lang: 0x15e, script: 0x57, flags: 0x0}, - 60: {lang: 0x15e, script: 0x57, flags: 0x0}, - 62: {lang: 0x31f, script: 0x57, flags: 0x0}, - 63: {lang: 0x13e, script: 0x57, flags: 0x0}, - 64: {lang: 0x3a1, script: 0x57, flags: 0x0}, - 65: {lang: 0x3c0, script: 0x57, flags: 0x0}, + 58: {lang: 0x3d9, script: 0x5a, flags: 0x0}, + 59: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 60: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 62: {lang: 0x31f, script: 0x5a, flags: 0x0}, + 63: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 64: {lang: 0x3a1, script: 0x5a, flags: 0x0}, + 65: {lang: 0x3c0, script: 0x5a, flags: 0x0}, 67: {lang: 0x8, script: 0x2, flags: 0x1}, - 69: {lang: 0x0, script: 0x57, flags: 0x0}, - 71: {lang: 0x71, script: 0x1f, flags: 0x0}, - 73: {lang: 0x512, script: 0x3b, flags: 0x2}, + 69: {lang: 0x0, script: 0x5a, flags: 0x0}, + 71: {lang: 0x71, script: 0x20, flags: 0x0}, + 73: {lang: 0x512, script: 0x3e, flags: 0x2}, 74: {lang: 0x31f, script: 0x5, flags: 0x2}, - 75: {lang: 0x445, script: 0x57, flags: 0x0}, - 76: {lang: 0x15e, script: 0x57, flags: 0x0}, - 77: {lang: 0x15e, script: 0x57, flags: 0x0}, - 78: {lang: 0x10d, script: 0x57, flags: 0x0}, - 79: {lang: 0x15e, script: 0x57, flags: 0x0}, - 81: {lang: 0x13e, script: 0x57, flags: 0x0}, - 82: {lang: 0x15e, script: 0x57, flags: 0x0}, + 75: {lang: 0x445, script: 0x5a, flags: 0x0}, + 76: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 77: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 78: {lang: 0x10d, script: 0x5a, flags: 0x0}, + 79: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 81: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 82: {lang: 0x15e, script: 0x5a, flags: 0x0}, 83: {lang: 0xa, script: 0x4, flags: 0x1}, - 84: {lang: 0x13e, script: 0x57, flags: 0x0}, - 85: {lang: 0x0, script: 0x57, flags: 0x0}, - 86: {lang: 0x13e, script: 0x57, flags: 0x0}, - 89: {lang: 0x13e, script: 0x57, flags: 0x0}, - 90: {lang: 0x3c0, script: 0x57, flags: 0x0}, - 91: {lang: 0x3a1, script: 0x57, flags: 0x0}, + 84: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 85: {lang: 0x0, script: 0x5a, flags: 0x0}, + 86: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 89: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 90: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 91: {lang: 0x3a1, script: 0x5a, flags: 0x0}, 93: {lang: 0xe, script: 0x2, flags: 0x1}, - 94: {lang: 0xfa, script: 0x57, flags: 0x0}, - 96: {lang: 0x10d, script: 0x57, flags: 0x0}, - 98: {lang: 0x1, script: 0x57, flags: 0x0}, - 99: {lang: 0x101, script: 0x57, flags: 0x0}, - 101: {lang: 0x13e, script: 0x57, flags: 0x0}, + 94: {lang: 0xfa, script: 0x5a, flags: 0x0}, + 96: {lang: 0x10d, script: 0x5a, flags: 0x0}, + 98: {lang: 0x1, script: 0x5a, flags: 0x0}, + 99: {lang: 0x101, script: 0x5a, flags: 0x0}, + 101: {lang: 0x13e, script: 0x5a, flags: 0x0}, 103: {lang: 0x10, script: 0x2, flags: 0x1}, - 104: {lang: 0x13e, script: 0x57, flags: 0x0}, - 105: {lang: 0x13e, script: 0x57, flags: 0x0}, - 106: {lang: 0x140, script: 0x57, flags: 0x0}, + 104: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 105: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 106: {lang: 0x140, script: 0x5a, flags: 0x0}, 107: {lang: 0x3a, script: 0x5, flags: 0x0}, 108: {lang: 0x3a, script: 0x5, flags: 0x0}, - 109: {lang: 0x46f, script: 0x29, flags: 0x0}, - 110: {lang: 0x13e, script: 0x57, flags: 0x0}, + 109: {lang: 0x46f, script: 0x2c, flags: 0x0}, + 110: {lang: 0x13e, script: 0x5a, flags: 0x0}, 111: {lang: 0x12, script: 0x2, flags: 0x1}, - 113: {lang: 0x10d, script: 0x57, flags: 0x0}, - 114: {lang: 0x151, script: 0x57, flags: 0x0}, - 115: {lang: 0x1c0, script: 0x21, flags: 0x2}, - 118: {lang: 0x158, script: 0x57, flags: 0x0}, - 120: {lang: 0x15e, script: 0x57, flags: 0x0}, - 122: {lang: 0x15e, script: 0x57, flags: 0x0}, + 113: {lang: 0x10d, script: 0x5a, flags: 0x0}, + 114: {lang: 0x151, script: 0x5a, flags: 0x0}, + 115: {lang: 0x1c0, script: 0x22, flags: 0x2}, + 118: {lang: 0x158, script: 0x5a, flags: 0x0}, + 120: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 122: {lang: 0x15e, script: 0x5a, flags: 0x0}, 123: {lang: 0x14, script: 0x2, flags: 0x1}, 125: {lang: 0x16, script: 0x3, flags: 0x1}, - 126: {lang: 0x15e, script: 0x57, flags: 0x0}, - 128: {lang: 0x21, script: 0x57, flags: 0x0}, - 130: {lang: 0x245, script: 0x57, flags: 0x0}, - 132: {lang: 0x15e, script: 0x57, flags: 0x0}, - 133: {lang: 0x15e, script: 0x57, flags: 0x0}, - 134: {lang: 0x13e, script: 0x57, flags: 0x0}, + 126: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 128: {lang: 0x21, script: 0x5a, flags: 0x0}, + 130: {lang: 0x245, script: 0x5a, flags: 0x0}, + 132: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 133: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 134: {lang: 0x13e, script: 0x5a, flags: 0x0}, 135: {lang: 0x19, script: 0x2, flags: 0x1}, - 136: {lang: 0x0, script: 0x57, flags: 0x0}, - 137: {lang: 0x13e, script: 0x57, flags: 0x0}, - 139: {lang: 0x3c0, script: 0x57, flags: 0x0}, - 141: {lang: 0x529, script: 0x39, flags: 0x0}, - 142: {lang: 0x0, script: 0x57, flags: 0x0}, - 143: {lang: 0x13e, script: 0x57, flags: 0x0}, - 144: {lang: 0x1d1, script: 0x57, flags: 0x0}, - 145: {lang: 0x1d4, script: 0x57, flags: 0x0}, - 146: {lang: 0x1d5, script: 0x57, flags: 0x0}, - 148: {lang: 0x13e, script: 0x57, flags: 0x0}, + 136: {lang: 0x0, script: 0x5a, flags: 0x0}, + 137: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 139: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 141: {lang: 0x529, script: 0x3c, flags: 0x0}, + 142: {lang: 0x0, script: 0x5a, flags: 0x0}, + 143: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 144: {lang: 0x1d1, script: 0x5a, flags: 0x0}, + 145: {lang: 0x1d4, script: 0x5a, flags: 0x0}, + 146: {lang: 0x1d5, script: 0x5a, flags: 0x0}, + 148: {lang: 0x13e, script: 0x5a, flags: 0x0}, 149: {lang: 0x1b, script: 0x2, flags: 0x1}, - 151: {lang: 0x1bc, script: 0x3b, flags: 0x0}, + 151: {lang: 0x1bc, script: 0x3e, flags: 0x0}, 153: {lang: 0x1d, script: 0x3, flags: 0x1}, 155: {lang: 0x3a, script: 0x5, flags: 0x0}, 156: {lang: 0x20, script: 0x2, flags: 0x1}, - 157: {lang: 0x1f8, script: 0x57, flags: 0x0}, - 158: {lang: 0x1f9, script: 0x57, flags: 0x0}, + 157: {lang: 0x1f8, script: 0x5a, flags: 0x0}, + 158: {lang: 0x1f9, script: 0x5a, flags: 0x0}, 161: {lang: 0x3a, script: 0x5, flags: 0x0}, - 162: {lang: 0x200, script: 0x46, flags: 0x0}, - 164: {lang: 0x445, script: 0x57, flags: 0x0}, - 165: {lang: 0x28a, script: 0x1f, flags: 0x0}, + 162: {lang: 0x200, script: 0x49, flags: 0x0}, + 164: {lang: 0x445, script: 0x5a, flags: 0x0}, + 165: {lang: 0x28a, script: 0x20, flags: 0x0}, 166: {lang: 0x22, script: 0x3, flags: 0x1}, 168: {lang: 0x25, script: 0x2, flags: 0x1}, - 170: {lang: 0x254, script: 0x50, flags: 0x0}, - 171: {lang: 0x254, script: 0x50, flags: 0x0}, + 170: {lang: 0x254, script: 0x53, flags: 0x0}, + 171: {lang: 0x254, script: 0x53, flags: 0x0}, 172: {lang: 0x3a, script: 0x5, flags: 0x0}, - 174: {lang: 0x3e2, script: 0x1f, flags: 0x0}, + 174: {lang: 0x3e2, script: 0x20, flags: 0x0}, 175: {lang: 0x27, script: 0x2, flags: 0x1}, 176: {lang: 0x3a, script: 0x5, flags: 0x0}, - 178: {lang: 0x10d, script: 0x57, flags: 0x0}, - 179: {lang: 0x40c, script: 0xca, flags: 0x0}, - 181: {lang: 0x43b, script: 0x57, flags: 0x0}, - 182: {lang: 0x2c0, script: 0x57, flags: 0x0}, - 183: {lang: 0x15e, script: 0x57, flags: 0x0}, - 184: {lang: 0x2c7, script: 0x57, flags: 0x0}, + 178: {lang: 0x10d, script: 0x5a, flags: 0x0}, + 179: {lang: 0x40c, script: 0xcf, flags: 0x0}, + 181: {lang: 0x43b, script: 0x5a, flags: 0x0}, + 182: {lang: 0x2c0, script: 0x5a, flags: 0x0}, + 183: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 184: {lang: 0x2c7, script: 0x5a, flags: 0x0}, 185: {lang: 0x3a, script: 0x5, flags: 0x0}, 186: {lang: 0x29, script: 0x2, flags: 0x1}, - 187: {lang: 0x15e, script: 0x57, flags: 0x0}, + 187: {lang: 0x15e, script: 0x5a, flags: 0x0}, 188: {lang: 0x2b, script: 0x2, flags: 0x1}, - 189: {lang: 0x432, script: 0x57, flags: 0x0}, - 190: {lang: 0x15e, script: 0x57, flags: 0x0}, - 191: {lang: 0x2f1, script: 0x57, flags: 0x0}, + 189: {lang: 0x432, script: 0x5a, flags: 0x0}, + 190: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 191: {lang: 0x2f1, script: 0x5a, flags: 0x0}, 194: {lang: 0x2d, script: 0x2, flags: 0x1}, - 195: {lang: 0xa0, script: 0x57, flags: 0x0}, + 195: {lang: 0xa0, script: 0x5a, flags: 0x0}, 196: {lang: 0x2f, script: 0x2, flags: 0x1}, 197: {lang: 0x31, script: 0x2, flags: 0x1}, 198: {lang: 0x33, script: 0x2, flags: 0x1}, - 200: {lang: 0x15e, script: 0x57, flags: 0x0}, + 200: {lang: 0x15e, script: 0x5a, flags: 0x0}, 201: {lang: 0x35, script: 0x2, flags: 0x1}, - 203: {lang: 0x320, script: 0x57, flags: 0x0}, + 203: {lang: 0x320, script: 0x5a, flags: 0x0}, 204: {lang: 0x37, script: 0x3, flags: 0x1}, - 205: {lang: 0x128, script: 0xde, flags: 0x0}, - 207: {lang: 0x13e, script: 0x57, flags: 0x0}, - 208: {lang: 0x31f, script: 0x57, flags: 0x0}, - 209: {lang: 0x3c0, script: 0x57, flags: 0x0}, - 210: {lang: 0x16, script: 0x57, flags: 0x0}, - 211: {lang: 0x15e, script: 0x57, flags: 0x0}, - 212: {lang: 0x1b4, script: 0x57, flags: 0x0}, + 205: {lang: 0x128, script: 0xe5, flags: 0x0}, + 207: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 208: {lang: 0x31f, script: 0x5a, flags: 0x0}, + 209: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 210: {lang: 0x16, script: 0x5a, flags: 0x0}, + 211: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 212: {lang: 0x1b4, script: 0x5a, flags: 0x0}, 214: {lang: 0x1b4, script: 0x5, flags: 0x2}, - 216: {lang: 0x13e, script: 0x57, flags: 0x0}, - 217: {lang: 0x367, script: 0x57, flags: 0x0}, - 218: {lang: 0x347, script: 0x57, flags: 0x0}, - 219: {lang: 0x351, script: 0x21, flags: 0x0}, + 216: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 217: {lang: 0x367, script: 0x5a, flags: 0x0}, + 218: {lang: 0x347, script: 0x5a, flags: 0x0}, + 219: {lang: 0x351, script: 0x22, flags: 0x0}, 225: {lang: 0x3a, script: 0x5, flags: 0x0}, - 226: {lang: 0x13e, script: 0x57, flags: 0x0}, - 228: {lang: 0x13e, script: 0x57, flags: 0x0}, - 229: {lang: 0x15e, script: 0x57, flags: 0x0}, - 230: {lang: 0x486, script: 0x57, flags: 0x0}, - 231: {lang: 0x153, script: 0x57, flags: 0x0}, + 226: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 228: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 229: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 230: {lang: 0x486, script: 0x5a, flags: 0x0}, + 231: {lang: 0x153, script: 0x5a, flags: 0x0}, 232: {lang: 0x3a, script: 0x3, flags: 0x1}, - 233: {lang: 0x3b3, script: 0x57, flags: 0x0}, - 234: {lang: 0x15e, script: 0x57, flags: 0x0}, - 236: {lang: 0x13e, script: 0x57, flags: 0x0}, + 233: {lang: 0x3b3, script: 0x5a, flags: 0x0}, + 234: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 236: {lang: 0x13e, script: 0x5a, flags: 0x0}, 237: {lang: 0x3a, script: 0x5, flags: 0x0}, - 238: {lang: 0x3c0, script: 0x57, flags: 0x0}, - 240: {lang: 0x3a2, script: 0x57, flags: 0x0}, - 241: {lang: 0x194, script: 0x57, flags: 0x0}, + 238: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 240: {lang: 0x3a2, script: 0x5a, flags: 0x0}, + 241: {lang: 0x194, script: 0x5a, flags: 0x0}, 243: {lang: 0x3a, script: 0x5, flags: 0x0}, - 258: {lang: 0x15e, script: 0x57, flags: 0x0}, + 258: {lang: 0x15e, script: 0x5a, flags: 0x0}, 260: {lang: 0x3d, script: 0x2, flags: 0x1}, - 261: {lang: 0x432, script: 0x1f, flags: 0x0}, + 261: {lang: 0x432, script: 0x20, flags: 0x0}, 262: {lang: 0x3f, script: 0x2, flags: 0x1}, - 263: {lang: 0x3e5, script: 0x57, flags: 0x0}, + 263: {lang: 0x3e5, script: 0x5a, flags: 0x0}, 264: {lang: 0x3a, script: 0x5, flags: 0x0}, - 266: {lang: 0x15e, script: 0x57, flags: 0x0}, + 266: {lang: 0x15e, script: 0x5a, flags: 0x0}, 267: {lang: 0x3a, script: 0x5, flags: 0x0}, 268: {lang: 0x41, script: 0x2, flags: 0x1}, - 271: {lang: 0x416, script: 0x57, flags: 0x0}, - 272: {lang: 0x347, script: 0x57, flags: 0x0}, + 271: {lang: 0x416, script: 0x5a, flags: 0x0}, + 272: {lang: 0x347, script: 0x5a, flags: 0x0}, 273: {lang: 0x43, script: 0x2, flags: 0x1}, - 275: {lang: 0x1f9, script: 0x57, flags: 0x0}, - 276: {lang: 0x15e, script: 0x57, flags: 0x0}, - 277: {lang: 0x429, script: 0x57, flags: 0x0}, - 278: {lang: 0x367, script: 0x57, flags: 0x0}, - 280: {lang: 0x3c0, script: 0x57, flags: 0x0}, - 282: {lang: 0x13e, script: 0x57, flags: 0x0}, + 275: {lang: 0x1f9, script: 0x5a, flags: 0x0}, + 276: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 277: {lang: 0x429, script: 0x5a, flags: 0x0}, + 278: {lang: 0x367, script: 0x5a, flags: 0x0}, + 280: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 282: {lang: 0x13e, script: 0x5a, flags: 0x0}, 284: {lang: 0x45, script: 0x2, flags: 0x1}, - 288: {lang: 0x15e, script: 0x57, flags: 0x0}, - 289: {lang: 0x15e, script: 0x57, flags: 0x0}, + 288: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 289: {lang: 0x15e, script: 0x5a, flags: 0x0}, 290: {lang: 0x47, script: 0x2, flags: 0x1}, 291: {lang: 0x49, script: 0x3, flags: 0x1}, 292: {lang: 0x4c, script: 0x2, flags: 0x1}, - 293: {lang: 0x477, script: 0x57, flags: 0x0}, - 294: {lang: 0x3c0, script: 0x57, flags: 0x0}, - 295: {lang: 0x476, script: 0x57, flags: 0x0}, + 293: {lang: 0x477, script: 0x5a, flags: 0x0}, + 294: {lang: 0x3c0, script: 0x5a, flags: 0x0}, + 295: {lang: 0x476, script: 0x5a, flags: 0x0}, 296: {lang: 0x4e, script: 0x2, flags: 0x1}, - 297: {lang: 0x482, script: 0x57, flags: 0x0}, + 297: {lang: 0x482, script: 0x5a, flags: 0x0}, 299: {lang: 0x50, script: 0x4, flags: 0x1}, - 301: {lang: 0x4a0, script: 0x57, flags: 0x0}, + 301: {lang: 0x4a0, script: 0x5a, flags: 0x0}, 302: {lang: 0x54, script: 0x2, flags: 0x1}, - 303: {lang: 0x445, script: 0x57, flags: 0x0}, + 303: {lang: 0x445, script: 0x5a, flags: 0x0}, 304: {lang: 0x56, script: 0x3, flags: 0x1}, - 305: {lang: 0x445, script: 0x57, flags: 0x0}, - 309: {lang: 0x512, script: 0x3b, flags: 0x2}, - 310: {lang: 0x13e, script: 0x57, flags: 0x0}, - 311: {lang: 0x4bc, script: 0x57, flags: 0x0}, - 312: {lang: 0x1f9, script: 0x57, flags: 0x0}, - 315: {lang: 0x13e, script: 0x57, flags: 0x0}, - 318: {lang: 0x4c3, script: 0x57, flags: 0x0}, - 319: {lang: 0x8a, script: 0x57, flags: 0x0}, - 320: {lang: 0x15e, script: 0x57, flags: 0x0}, - 322: {lang: 0x41b, script: 0x57, flags: 0x0}, + 305: {lang: 0x445, script: 0x5a, flags: 0x0}, + 309: {lang: 0x512, script: 0x3e, flags: 0x2}, + 310: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 311: {lang: 0x4bc, script: 0x5a, flags: 0x0}, + 312: {lang: 0x1f9, script: 0x5a, flags: 0x0}, + 315: {lang: 0x13e, script: 0x5a, flags: 0x0}, + 318: {lang: 0x4c3, script: 0x5a, flags: 0x0}, + 319: {lang: 0x8a, script: 0x5a, flags: 0x0}, + 320: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 322: {lang: 0x41b, script: 0x5a, flags: 0x0}, 333: {lang: 0x59, script: 0x2, flags: 0x1}, 350: {lang: 0x3a, script: 0x5, flags: 0x0}, 351: {lang: 0x5b, script: 0x2, flags: 0x1}, - 356: {lang: 0x423, script: 0x57, flags: 0x0}, + 356: {lang: 0x423, script: 0x5a, flags: 0x0}, } // likelyRegionList holds lists info associated with likelyRegion. // Size: 372 bytes, 93 elements var likelyRegionList = [93]likelyLangScript{ 0: {lang: 0x148, script: 0x5, flags: 0x0}, - 1: {lang: 0x476, script: 0x57, flags: 0x0}, - 2: {lang: 0x431, script: 0x57, flags: 0x0}, - 3: {lang: 0x2ff, script: 0x1f, flags: 0x0}, + 1: {lang: 0x476, script: 0x5a, flags: 0x0}, + 2: {lang: 0x431, script: 0x5a, flags: 0x0}, + 3: {lang: 0x2ff, script: 0x20, flags: 0x0}, 4: {lang: 0x1d7, script: 0x8, flags: 0x0}, - 5: {lang: 0x274, script: 0x57, flags: 0x0}, - 6: {lang: 0xb7, script: 0x57, flags: 0x0}, - 7: {lang: 0x432, script: 0x1f, flags: 0x0}, - 8: {lang: 0x12d, script: 0xe0, flags: 0x0}, - 9: {lang: 0x351, script: 0x21, flags: 0x0}, - 10: {lang: 0x529, script: 0x38, flags: 0x0}, + 5: {lang: 0x274, script: 0x5a, flags: 0x0}, + 6: {lang: 0xb7, script: 0x5a, flags: 0x0}, + 7: {lang: 0x432, script: 0x20, flags: 0x0}, + 8: {lang: 0x12d, script: 0xe7, flags: 0x0}, + 9: {lang: 0x351, script: 0x22, flags: 0x0}, + 10: {lang: 0x529, script: 0x3b, flags: 0x0}, 11: {lang: 0x4ac, script: 0x5, flags: 0x0}, - 12: {lang: 0x523, script: 0x57, flags: 0x0}, - 13: {lang: 0x29a, script: 0xdf, flags: 0x0}, - 14: {lang: 0x136, script: 0x31, flags: 0x0}, - 15: {lang: 0x48a, script: 0x57, flags: 0x0}, + 12: {lang: 0x523, script: 0x5a, flags: 0x0}, + 13: {lang: 0x29a, script: 0xe6, flags: 0x0}, + 14: {lang: 0x136, script: 0x34, flags: 0x0}, + 15: {lang: 0x48a, script: 0x5a, flags: 0x0}, 16: {lang: 0x3a, script: 0x5, flags: 0x0}, - 17: {lang: 0x15e, script: 0x57, flags: 0x0}, - 18: {lang: 0x27, script: 0x29, flags: 0x0}, - 19: {lang: 0x139, script: 0x57, flags: 0x0}, + 17: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 18: {lang: 0x27, script: 0x2c, flags: 0x0}, + 19: {lang: 0x139, script: 0x5a, flags: 0x0}, 20: {lang: 0x26a, script: 0x5, flags: 0x2}, - 21: {lang: 0x512, script: 0x3b, flags: 0x2}, - 22: {lang: 0x210, script: 0x2b, flags: 0x0}, - 23: {lang: 0x5, script: 0x1f, flags: 0x0}, - 24: {lang: 0x274, script: 0x57, flags: 0x0}, - 25: {lang: 0x136, script: 0x31, flags: 0x0}, - 26: {lang: 0x2ff, script: 0x1f, flags: 0x0}, - 27: {lang: 0x1e1, script: 0x57, flags: 0x0}, + 21: {lang: 0x512, script: 0x3e, flags: 0x2}, + 22: {lang: 0x210, script: 0x2e, flags: 0x0}, + 23: {lang: 0x5, script: 0x20, flags: 0x0}, + 24: {lang: 0x274, script: 0x5a, flags: 0x0}, + 25: {lang: 0x136, script: 0x34, flags: 0x0}, + 26: {lang: 0x2ff, script: 0x20, flags: 0x0}, + 27: {lang: 0x1e1, script: 0x5a, flags: 0x0}, 28: {lang: 0x31f, script: 0x5, flags: 0x0}, - 29: {lang: 0x1be, script: 0x21, flags: 0x0}, + 29: {lang: 0x1be, script: 0x22, flags: 0x0}, 30: {lang: 0x4b4, script: 0x5, flags: 0x0}, - 31: {lang: 0x236, script: 0x72, flags: 0x0}, + 31: {lang: 0x236, script: 0x75, flags: 0x0}, 32: {lang: 0x148, script: 0x5, flags: 0x0}, - 33: {lang: 0x476, script: 0x57, flags: 0x0}, - 34: {lang: 0x24a, script: 0x4b, flags: 0x0}, + 33: {lang: 0x476, script: 0x5a, flags: 0x0}, + 34: {lang: 0x24a, script: 0x4e, flags: 0x0}, 35: {lang: 0xe6, script: 0x5, flags: 0x0}, - 36: {lang: 0x226, script: 0xdf, flags: 0x0}, + 36: {lang: 0x226, script: 0xe6, flags: 0x0}, 37: {lang: 0x3a, script: 0x5, flags: 0x0}, - 38: {lang: 0x15e, script: 0x57, flags: 0x0}, - 39: {lang: 0x2b8, script: 0x54, flags: 0x0}, - 40: {lang: 0x226, script: 0xdf, flags: 0x0}, + 38: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 39: {lang: 0x2b8, script: 0x57, flags: 0x0}, + 40: {lang: 0x226, script: 0xe6, flags: 0x0}, 41: {lang: 0x3a, script: 0x5, flags: 0x0}, - 42: {lang: 0x15e, script: 0x57, flags: 0x0}, - 43: {lang: 0x3dc, script: 0x57, flags: 0x0}, - 44: {lang: 0x4ae, script: 0x1f, flags: 0x0}, - 45: {lang: 0x2ff, script: 0x1f, flags: 0x0}, - 46: {lang: 0x431, script: 0x57, flags: 0x0}, - 47: {lang: 0x331, script: 0x72, flags: 0x0}, - 48: {lang: 0x213, script: 0x57, flags: 0x0}, - 49: {lang: 0x30b, script: 0x1f, flags: 0x0}, + 42: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 43: {lang: 0x3dc, script: 0x5a, flags: 0x0}, + 44: {lang: 0x4ae, script: 0x20, flags: 0x0}, + 45: {lang: 0x2ff, script: 0x20, flags: 0x0}, + 46: {lang: 0x431, script: 0x5a, flags: 0x0}, + 47: {lang: 0x331, script: 0x75, flags: 0x0}, + 48: {lang: 0x213, script: 0x5a, flags: 0x0}, + 49: {lang: 0x30b, script: 0x20, flags: 0x0}, 50: {lang: 0x242, script: 0x5, flags: 0x0}, - 51: {lang: 0x529, script: 0x39, flags: 0x0}, - 52: {lang: 0x3c0, script: 0x57, flags: 0x0}, + 51: {lang: 0x529, script: 0x3c, flags: 0x0}, + 52: {lang: 0x3c0, script: 0x5a, flags: 0x0}, 53: {lang: 0x3a, script: 0x5, flags: 0x0}, - 54: {lang: 0x15e, script: 0x57, flags: 0x0}, - 55: {lang: 0x2ed, script: 0x57, flags: 0x0}, + 54: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 55: {lang: 0x2ed, script: 0x5a, flags: 0x0}, 56: {lang: 0x4b4, script: 0x5, flags: 0x0}, - 57: {lang: 0x88, script: 0x21, flags: 0x0}, + 57: {lang: 0x88, script: 0x22, flags: 0x0}, 58: {lang: 0x4b4, script: 0x5, flags: 0x0}, 59: {lang: 0x4b4, script: 0x5, flags: 0x0}, - 60: {lang: 0xbe, script: 0x21, flags: 0x0}, - 61: {lang: 0x3dc, script: 0x57, flags: 0x0}, - 62: {lang: 0x7e, script: 0x1f, flags: 0x0}, - 63: {lang: 0x3e2, script: 0x1f, flags: 0x0}, - 64: {lang: 0x267, script: 0x57, flags: 0x0}, - 65: {lang: 0x444, script: 0x57, flags: 0x0}, - 66: {lang: 0x512, script: 0x3b, flags: 0x0}, - 67: {lang: 0x412, script: 0x57, flags: 0x0}, - 68: {lang: 0x4ae, script: 0x1f, flags: 0x0}, + 60: {lang: 0xbe, script: 0x22, flags: 0x0}, + 61: {lang: 0x3dc, script: 0x5a, flags: 0x0}, + 62: {lang: 0x7e, script: 0x20, flags: 0x0}, + 63: {lang: 0x3e2, script: 0x20, flags: 0x0}, + 64: {lang: 0x267, script: 0x5a, flags: 0x0}, + 65: {lang: 0x444, script: 0x5a, flags: 0x0}, + 66: {lang: 0x512, script: 0x3e, flags: 0x0}, + 67: {lang: 0x412, script: 0x5a, flags: 0x0}, + 68: {lang: 0x4ae, script: 0x20, flags: 0x0}, 69: {lang: 0x3a, script: 0x5, flags: 0x0}, - 70: {lang: 0x15e, script: 0x57, flags: 0x0}, - 71: {lang: 0x15e, script: 0x57, flags: 0x0}, + 70: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 71: {lang: 0x15e, script: 0x5a, flags: 0x0}, 72: {lang: 0x35, script: 0x5, flags: 0x0}, - 73: {lang: 0x46b, script: 0xdf, flags: 0x0}, + 73: {lang: 0x46b, script: 0xe6, flags: 0x0}, 74: {lang: 0x2ec, script: 0x5, flags: 0x0}, - 75: {lang: 0x30f, script: 0x72, flags: 0x0}, - 76: {lang: 0x467, script: 0x1f, flags: 0x0}, + 75: {lang: 0x30f, script: 0x75, flags: 0x0}, + 76: {lang: 0x467, script: 0x20, flags: 0x0}, 77: {lang: 0x148, script: 0x5, flags: 0x0}, 78: {lang: 0x3a, script: 0x5, flags: 0x0}, - 79: {lang: 0x15e, script: 0x57, flags: 0x0}, - 80: {lang: 0x48a, script: 0x57, flags: 0x0}, + 79: {lang: 0x15e, script: 0x5a, flags: 0x0}, + 80: {lang: 0x48a, script: 0x5a, flags: 0x0}, 81: {lang: 0x58, script: 0x5, flags: 0x0}, - 82: {lang: 0x219, script: 0x1f, flags: 0x0}, - 83: {lang: 0x81, script: 0x31, flags: 0x0}, - 84: {lang: 0x529, script: 0x39, flags: 0x0}, - 85: {lang: 0x48c, script: 0x57, flags: 0x0}, - 86: {lang: 0x4ae, script: 0x1f, flags: 0x0}, - 87: {lang: 0x512, script: 0x3b, flags: 0x0}, - 88: {lang: 0x3b3, script: 0x57, flags: 0x0}, - 89: {lang: 0x431, script: 0x57, flags: 0x0}, - 90: {lang: 0x432, script: 0x1f, flags: 0x0}, - 91: {lang: 0x15e, script: 0x57, flags: 0x0}, + 82: {lang: 0x219, script: 0x20, flags: 0x0}, + 83: {lang: 0x81, script: 0x34, flags: 0x0}, + 84: {lang: 0x529, script: 0x3c, flags: 0x0}, + 85: {lang: 0x48c, script: 0x5a, flags: 0x0}, + 86: {lang: 0x4ae, script: 0x20, flags: 0x0}, + 87: {lang: 0x512, script: 0x3e, flags: 0x0}, + 88: {lang: 0x3b3, script: 0x5a, flags: 0x0}, + 89: {lang: 0x431, script: 0x5a, flags: 0x0}, + 90: {lang: 0x432, script: 0x20, flags: 0x0}, + 91: {lang: 0x15e, script: 0x5a, flags: 0x0}, 92: {lang: 0x446, script: 0x5, flags: 0x0}, } @@ -3257,38 +3290,38 @@ type likelyTag struct { // Size: 198 bytes, 33 elements var likelyRegionGroup = [33]likelyTag{ - 1: {lang: 0x139, region: 0xd6, script: 0x57}, - 2: {lang: 0x139, region: 0x135, script: 0x57}, - 3: {lang: 0x3c0, region: 0x41, script: 0x57}, - 4: {lang: 0x139, region: 0x2f, script: 0x57}, - 5: {lang: 0x139, region: 0xd6, script: 0x57}, - 6: {lang: 0x13e, region: 0xcf, script: 0x57}, - 7: {lang: 0x445, region: 0x12f, script: 0x57}, + 1: {lang: 0x139, region: 0xd6, script: 0x5a}, + 2: {lang: 0x139, region: 0x135, script: 0x5a}, + 3: {lang: 0x3c0, region: 0x41, script: 0x5a}, + 4: {lang: 0x139, region: 0x2f, script: 0x5a}, + 5: {lang: 0x139, region: 0xd6, script: 0x5a}, + 6: {lang: 0x13e, region: 0xcf, script: 0x5a}, + 7: {lang: 0x445, region: 0x12f, script: 0x5a}, 8: {lang: 0x3a, region: 0x6b, script: 0x5}, - 9: {lang: 0x445, region: 0x4b, script: 0x57}, - 10: {lang: 0x139, region: 0x161, script: 0x57}, - 11: {lang: 0x139, region: 0x135, script: 0x57}, - 12: {lang: 0x139, region: 0x135, script: 0x57}, - 13: {lang: 0x13e, region: 0x59, script: 0x57}, - 14: {lang: 0x529, region: 0x53, script: 0x38}, - 15: {lang: 0x1be, region: 0x99, script: 0x21}, - 16: {lang: 0x1e1, region: 0x95, script: 0x57}, - 17: {lang: 0x1f9, region: 0x9e, script: 0x57}, - 18: {lang: 0x139, region: 0x2f, script: 0x57}, - 19: {lang: 0x139, region: 0xe6, script: 0x57}, - 20: {lang: 0x139, region: 0x8a, script: 0x57}, - 21: {lang: 0x41b, region: 0x142, script: 0x57}, - 22: {lang: 0x529, region: 0x53, script: 0x38}, - 23: {lang: 0x4bc, region: 0x137, script: 0x57}, + 9: {lang: 0x445, region: 0x4b, script: 0x5a}, + 10: {lang: 0x139, region: 0x161, script: 0x5a}, + 11: {lang: 0x139, region: 0x135, script: 0x5a}, + 12: {lang: 0x139, region: 0x135, script: 0x5a}, + 13: {lang: 0x13e, region: 0x59, script: 0x5a}, + 14: {lang: 0x529, region: 0x53, script: 0x3b}, + 15: {lang: 0x1be, region: 0x99, script: 0x22}, + 16: {lang: 0x1e1, region: 0x95, script: 0x5a}, + 17: {lang: 0x1f9, region: 0x9e, script: 0x5a}, + 18: {lang: 0x139, region: 0x2f, script: 0x5a}, + 19: {lang: 0x139, region: 0xe6, script: 0x5a}, + 20: {lang: 0x139, region: 0x8a, script: 0x5a}, + 21: {lang: 0x41b, region: 0x142, script: 0x5a}, + 22: {lang: 0x529, region: 0x53, script: 0x3b}, + 23: {lang: 0x4bc, region: 0x137, script: 0x5a}, 24: {lang: 0x3a, region: 0x108, script: 0x5}, - 25: {lang: 0x3e2, region: 0x106, script: 0x1f}, - 26: {lang: 0x3e2, region: 0x106, script: 0x1f}, - 27: {lang: 0x139, region: 0x7b, script: 0x57}, - 28: {lang: 0x10d, region: 0x60, script: 0x57}, - 29: {lang: 0x139, region: 0xd6, script: 0x57}, - 30: {lang: 0x13e, region: 0x1f, script: 0x57}, - 31: {lang: 0x139, region: 0x9a, script: 0x57}, - 32: {lang: 0x139, region: 0x7b, script: 0x57}, + 25: {lang: 0x3e2, region: 0x106, script: 0x20}, + 26: {lang: 0x3e2, region: 0x106, script: 0x20}, + 27: {lang: 0x139, region: 0x7b, script: 0x5a}, + 28: {lang: 0x10d, region: 0x60, script: 0x5a}, + 29: {lang: 0x139, region: 0xd6, script: 0x5a}, + 30: {lang: 0x13e, region: 0x1f, script: 0x5a}, + 31: {lang: 0x139, region: 0x9a, script: 0x5a}, + 32: {lang: 0x139, region: 0x7b, script: 0x5a}, } // Size: 264 bytes, 33 elements @@ -3421,11 +3454,11 @@ type parentRel struct { // Size: 414 bytes, 5 elements var parents = [5]parentRel{ - 0: {lang: 0x139, script: 0x0, maxScript: 0x57, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5c, 0x5d, 0x61, 0x64, 0x6d, 0x73, 0x74, 0x75, 0x7b, 0x7c, 0x7f, 0x80, 0x81, 0x83, 0x8c, 0x8d, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9f, 0xa0, 0xa4, 0xa7, 0xa9, 0xad, 0xb1, 0xb4, 0xb5, 0xbf, 0xc6, 0xca, 0xcb, 0xcc, 0xce, 0xd0, 0xd2, 0xd5, 0xd6, 0xdd, 0xdf, 0xe0, 0xe6, 0xe7, 0xe8, 0xeb, 0xf0, 0x107, 0x109, 0x10a, 0x10b, 0x10d, 0x10e, 0x112, 0x117, 0x11b, 0x11d, 0x11f, 0x125, 0x129, 0x12c, 0x12d, 0x12f, 0x131, 0x139, 0x13c, 0x13f, 0x142, 0x161, 0x162, 0x164}}, - 1: {lang: 0x139, script: 0x0, maxScript: 0x57, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x60, 0x63, 0x72, 0xd9, 0x10c, 0x10f}}, - 2: {lang: 0x13e, script: 0x0, maxScript: 0x57, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x56, 0x59, 0x65, 0x69, 0x89, 0x8f, 0xcf, 0xd8, 0xe2, 0xe4, 0xec, 0xf1, 0x11a, 0x135, 0x136, 0x13b}}, - 3: {lang: 0x3c0, script: 0x0, maxScript: 0x57, toRegion: 0xee, fromRegion: []uint16{0x2a, 0x4e, 0x5a, 0x86, 0x8b, 0xb7, 0xc6, 0xd1, 0x118, 0x126}}, - 4: {lang: 0x529, script: 0x39, maxScript: 0x39, toRegion: 0x8d, fromRegion: []uint16{0xc6}}, + 0: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5c, 0x5d, 0x61, 0x64, 0x6d, 0x73, 0x74, 0x75, 0x7b, 0x7c, 0x7f, 0x80, 0x81, 0x83, 0x8c, 0x8d, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9f, 0xa0, 0xa4, 0xa7, 0xa9, 0xad, 0xb1, 0xb4, 0xb5, 0xbf, 0xc6, 0xca, 0xcb, 0xcc, 0xce, 0xd0, 0xd2, 0xd5, 0xd6, 0xdd, 0xdf, 0xe0, 0xe6, 0xe7, 0xe8, 0xeb, 0xf0, 0x107, 0x109, 0x10a, 0x10b, 0x10d, 0x10e, 0x112, 0x117, 0x11b, 0x11d, 0x11f, 0x125, 0x129, 0x12c, 0x12d, 0x12f, 0x131, 0x139, 0x13c, 0x13f, 0x142, 0x161, 0x162, 0x164}}, + 1: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x60, 0x63, 0x72, 0xd9, 0x10c, 0x10f}}, + 2: {lang: 0x13e, script: 0x0, maxScript: 0x5a, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x56, 0x59, 0x65, 0x69, 0x89, 0x8f, 0xcf, 0xd8, 0xe2, 0xe4, 0xec, 0xf1, 0x11a, 0x135, 0x136, 0x13b}}, + 3: {lang: 0x3c0, script: 0x0, maxScript: 0x5a, toRegion: 0xee, fromRegion: []uint16{0x2a, 0x4e, 0x5a, 0x86, 0x8b, 0xb7, 0xc6, 0xd1, 0x118, 0x126}}, + 4: {lang: 0x529, script: 0x3c, maxScript: 0x3c, toRegion: 0x8d, fromRegion: []uint16{0xc6}}, } -// Total table size 25886 bytes (25KiB); checksum: 50D3D57D +// Total table size 26398 bytes (25KiB); checksum: 1C859EA7 diff --git a/vendor/golang.org/x/text/language/tables.go b/vendor/golang.org/x/text/language/tables.go index e22807719..87e58a02a 100644 --- a/vendor/golang.org/x/text/language/tables.go +++ b/vendor/golang.org/x/text/language/tables.go @@ -35,16 +35,16 @@ const ( _XK = 333 ) const ( - _Latn = 87 - _Hani = 54 - _Hans = 56 - _Hant = 57 - _Qaaa = 139 - _Qaai = 147 - _Qabx = 188 - _Zinh = 236 - _Zyyy = 241 - _Zzzz = 242 + _Latn = 90 + _Hani = 57 + _Hans = 59 + _Hant = 60 + _Qaaa = 143 + _Qaai = 151 + _Qabx = 192 + _Zinh = 245 + _Zyyy = 250 + _Zzzz = 251 ) var regionToGroups = []uint8{ // 357 elements @@ -249,32 +249,32 @@ var matchLang = []mutualIntelligibility{ // 113 elements // matchScript holds pairs of scriptIDs where readers of one script // can typically also read the other. Each is associated with a confidence. var matchScript = []scriptIntelligibility{ // 26 elements - 0: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x57, haveScript: 0x1f, distance: 0x5}, - 1: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x1f, haveScript: 0x57, distance: 0x5}, - 2: {wantLang: 0x58, haveLang: 0x3e2, wantScript: 0x57, haveScript: 0x1f, distance: 0xa}, - 3: {wantLang: 0xa5, haveLang: 0x139, wantScript: 0xe, haveScript: 0x57, distance: 0xa}, - 4: {wantLang: 0x1d7, haveLang: 0x3e2, wantScript: 0x8, haveScript: 0x1f, distance: 0xa}, - 5: {wantLang: 0x210, haveLang: 0x139, wantScript: 0x2b, haveScript: 0x57, distance: 0xa}, - 6: {wantLang: 0x24a, haveLang: 0x139, wantScript: 0x4b, haveScript: 0x57, distance: 0xa}, - 7: {wantLang: 0x251, haveLang: 0x139, wantScript: 0x4f, haveScript: 0x57, distance: 0xa}, - 8: {wantLang: 0x2b8, haveLang: 0x139, wantScript: 0x54, haveScript: 0x57, distance: 0xa}, - 9: {wantLang: 0x304, haveLang: 0x139, wantScript: 0x6b, haveScript: 0x57, distance: 0xa}, - 10: {wantLang: 0x331, haveLang: 0x139, wantScript: 0x72, haveScript: 0x57, distance: 0xa}, - 11: {wantLang: 0x351, haveLang: 0x139, wantScript: 0x21, haveScript: 0x57, distance: 0xa}, - 12: {wantLang: 0x395, haveLang: 0x139, wantScript: 0x7d, haveScript: 0x57, distance: 0xa}, - 13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x33, haveScript: 0x57, distance: 0xa}, - 14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x57, distance: 0xa}, - 15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x57, distance: 0xa}, - 16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xca, haveScript: 0x57, distance: 0xa}, - 17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xd7, haveScript: 0x57, distance: 0xa}, - 18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xda, haveScript: 0x57, distance: 0xa}, - 19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x29, haveScript: 0x57, distance: 0xa}, - 20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x57, haveScript: 0x1f, distance: 0xa}, - 21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x57, distance: 0xa}, - 22: {wantLang: 0x4bc, haveLang: 0x3e2, wantScript: 0x57, haveScript: 0x1f, distance: 0xa}, - 23: {wantLang: 0x512, haveLang: 0x139, wantScript: 0x3b, haveScript: 0x57, distance: 0xa}, - 24: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x38, haveScript: 0x39, distance: 0xf}, - 25: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x39, haveScript: 0x38, distance: 0x13}, + 0: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x5a, haveScript: 0x20, distance: 0x5}, + 1: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x20, haveScript: 0x5a, distance: 0x5}, + 2: {wantLang: 0x58, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa}, + 3: {wantLang: 0xa5, haveLang: 0x139, wantScript: 0xe, haveScript: 0x5a, distance: 0xa}, + 4: {wantLang: 0x1d7, haveLang: 0x3e2, wantScript: 0x8, haveScript: 0x20, distance: 0xa}, + 5: {wantLang: 0x210, haveLang: 0x139, wantScript: 0x2e, haveScript: 0x5a, distance: 0xa}, + 6: {wantLang: 0x24a, haveLang: 0x139, wantScript: 0x4e, haveScript: 0x5a, distance: 0xa}, + 7: {wantLang: 0x251, haveLang: 0x139, wantScript: 0x52, haveScript: 0x5a, distance: 0xa}, + 8: {wantLang: 0x2b8, haveLang: 0x139, wantScript: 0x57, haveScript: 0x5a, distance: 0xa}, + 9: {wantLang: 0x304, haveLang: 0x139, wantScript: 0x6e, haveScript: 0x5a, distance: 0xa}, + 10: {wantLang: 0x331, haveLang: 0x139, wantScript: 0x75, haveScript: 0x5a, distance: 0xa}, + 11: {wantLang: 0x351, haveLang: 0x139, wantScript: 0x22, haveScript: 0x5a, distance: 0xa}, + 12: {wantLang: 0x395, haveLang: 0x139, wantScript: 0x81, haveScript: 0x5a, distance: 0xa}, + 13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x36, haveScript: 0x5a, distance: 0xa}, + 14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa}, + 15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa}, + 16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xcf, haveScript: 0x5a, distance: 0xa}, + 17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xde, haveScript: 0x5a, distance: 0xa}, + 18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xe1, haveScript: 0x5a, distance: 0xa}, + 19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x2c, haveScript: 0x5a, distance: 0xa}, + 20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa}, + 21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa}, + 22: {wantLang: 0x4bc, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa}, + 23: {wantLang: 0x512, haveLang: 0x139, wantScript: 0x3e, haveScript: 0x5a, distance: 0xa}, + 24: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3b, haveScript: 0x3c, distance: 0xf}, + 25: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3c, haveScript: 0x3b, distance: 0x13}, } // Size: 232 bytes var matchRegion = []regionIntelligibility{ // 15 elements @@ -286,13 +286,13 @@ var matchRegion = []regionIntelligibility{ // 15 elements 5: {lang: 0x13e, script: 0x0, group: 0x83, distance: 0x4}, 6: {lang: 0x3c0, script: 0x0, group: 0x3, distance: 0x4}, 7: {lang: 0x3c0, script: 0x0, group: 0x83, distance: 0x4}, - 8: {lang: 0x529, script: 0x39, group: 0x2, distance: 0x4}, - 9: {lang: 0x529, script: 0x39, group: 0x82, distance: 0x4}, + 8: {lang: 0x529, script: 0x3c, group: 0x2, distance: 0x4}, + 9: {lang: 0x529, script: 0x3c, group: 0x82, distance: 0x4}, 10: {lang: 0x3a, script: 0x0, group: 0x80, distance: 0x5}, 11: {lang: 0x139, script: 0x0, group: 0x80, distance: 0x5}, 12: {lang: 0x13e, script: 0x0, group: 0x80, distance: 0x5}, 13: {lang: 0x3c0, script: 0x0, group: 0x80, distance: 0x5}, - 14: {lang: 0x529, script: 0x39, group: 0x80, distance: 0x5}, + 14: {lang: 0x529, script: 0x3c, group: 0x80, distance: 0x5}, } // Size: 114 bytes // Total table size 1471 bytes (1KiB); checksum: 4CB1CD46 diff --git a/vendor/golang.org/x/text/unicode/bidi/bidi.go b/vendor/golang.org/x/text/unicode/bidi/bidi.go index e8edc54cc..fd057601b 100644 --- a/vendor/golang.org/x/text/unicode/bidi/bidi.go +++ b/vendor/golang.org/x/text/unicode/bidi/bidi.go @@ -12,15 +12,14 @@ // and without notice. package bidi // import "golang.org/x/text/unicode/bidi" -// TODO: -// The following functionality would not be hard to implement, but hinges on -// the definition of a Segmenter interface. For now this is up to the user. -// - Iterate over paragraphs -// - Segmenter to iterate over runs directly from a given text. -// Also: +// TODO // - Transformer for reordering? // - Transformer (validator, really) for Bidi Rule. +import ( + "bytes" +) + // This API tries to avoid dealing with embedding levels for now. Under the hood // these will be computed, but the question is to which extent the user should // know they exist. We should at some point allow the user to specify an @@ -49,7 +48,9 @@ const ( Neutral ) -type options struct{} +type options struct { + defaultDirection Direction +} // An Option is an option for Bidi processing. type Option func(*options) @@ -66,12 +67,62 @@ type Option func(*options) // DefaultDirection sets the default direction for a Paragraph. The direction is // overridden if the text contains directional characters. func DefaultDirection(d Direction) Option { - panic("unimplemented") + return func(opts *options) { + opts.defaultDirection = d + } } // A Paragraph holds a single Paragraph for Bidi processing. type Paragraph struct { - // buffers + p []byte + o Ordering + opts []Option + types []Class + pairTypes []bracketType + pairValues []rune + runes []rune + options options +} + +// Initialize the p.pairTypes, p.pairValues and p.types from the input previously +// set by p.SetBytes() or p.SetString(). Also limit the input up to (and including) a paragraph +// separator (bidi class B). +// +// The function p.Order() needs these values to be set, so this preparation could be postponed. +// But since the SetBytes and SetStrings functions return the length of the input up to the paragraph +// separator, the whole input needs to be processed anyway and should not be done twice. +// +// The function has the same return values as SetBytes() / SetString() +func (p *Paragraph) prepareInput() (n int, err error) { + p.runes = bytes.Runes(p.p) + bytecount := 0 + // clear slices from previous SetString or SetBytes + p.pairTypes = nil + p.pairValues = nil + p.types = nil + + for _, r := range p.runes { + props, i := LookupRune(r) + bytecount += i + cls := props.Class() + if cls == B { + return bytecount, nil + } + p.types = append(p.types, cls) + if props.IsOpeningBracket() { + p.pairTypes = append(p.pairTypes, bpOpen) + p.pairValues = append(p.pairValues, r) + } else if props.IsBracket() { + // this must be a closing bracket, + // since IsOpeningBracket is not true + p.pairTypes = append(p.pairTypes, bpClose) + p.pairValues = append(p.pairValues, r) + } else { + p.pairTypes = append(p.pairTypes, bpNone) + p.pairValues = append(p.pairValues, 0) + } + } + return bytecount, nil } // SetBytes configures p for the given paragraph text. It replaces text @@ -80,70 +131,150 @@ type Paragraph struct { // consumed from b including this separator. Error may be non-nil if options are // given. func (p *Paragraph) SetBytes(b []byte, opts ...Option) (n int, err error) { - panic("unimplemented") + p.p = b + p.opts = opts + return p.prepareInput() } -// SetString configures p for the given paragraph text. It replaces text -// previously set by SetBytes or SetString. If b contains a paragraph separator +// SetString configures s for the given paragraph text. It replaces text +// previously set by SetBytes or SetString. If s contains a paragraph separator // it will only process the first paragraph and report the number of bytes -// consumed from b including this separator. Error may be non-nil if options are +// consumed from s including this separator. Error may be non-nil if options are // given. func (p *Paragraph) SetString(s string, opts ...Option) (n int, err error) { - panic("unimplemented") + p.p = []byte(s) + p.opts = opts + return p.prepareInput() } // IsLeftToRight reports whether the principle direction of rendering for this // paragraphs is left-to-right. If this returns false, the principle direction // of rendering is right-to-left. func (p *Paragraph) IsLeftToRight() bool { - panic("unimplemented") + return p.Direction() == LeftToRight } // Direction returns the direction of the text of this paragraph. // // The direction may be LeftToRight, RightToLeft, Mixed, or Neutral. func (p *Paragraph) Direction() Direction { - panic("unimplemented") + return p.o.Direction() } +// TODO: what happens if the position is > len(input)? This should return an error. + // RunAt reports the Run at the given position of the input text. // // This method can be used for computing line breaks on paragraphs. func (p *Paragraph) RunAt(pos int) Run { - panic("unimplemented") + c := 0 + runNumber := 0 + for i, r := range p.o.runes { + c += len(r) + if pos < c { + runNumber = i + } + } + return p.o.Run(runNumber) +} + +func calculateOrdering(levels []level, runes []rune) Ordering { + var curDir Direction + + prevDir := Neutral + prevI := 0 + + o := Ordering{} + // lvl = 0,2,4,...: left to right + // lvl = 1,3,5,...: right to left + for i, lvl := range levels { + if lvl%2 == 0 { + curDir = LeftToRight + } else { + curDir = RightToLeft + } + if curDir != prevDir { + if i > 0 { + o.runes = append(o.runes, runes[prevI:i]) + o.directions = append(o.directions, prevDir) + o.startpos = append(o.startpos, prevI) + } + prevI = i + prevDir = curDir + } + } + o.runes = append(o.runes, runes[prevI:]) + o.directions = append(o.directions, prevDir) + o.startpos = append(o.startpos, prevI) + return o } // Order computes the visual ordering of all the runs in a Paragraph. func (p *Paragraph) Order() (Ordering, error) { - panic("unimplemented") + if len(p.types) == 0 { + return Ordering{}, nil + } + + for _, fn := range p.opts { + fn(&p.options) + } + lvl := level(-1) + if p.options.defaultDirection == RightToLeft { + lvl = 1 + } + para, err := newParagraph(p.types, p.pairTypes, p.pairValues, lvl) + if err != nil { + return Ordering{}, err + } + + levels := para.getLevels([]int{len(p.types)}) + + p.o = calculateOrdering(levels, p.runes) + return p.o, nil } // Line computes the visual ordering of runs for a single line starting and // ending at the given positions in the original text. func (p *Paragraph) Line(start, end int) (Ordering, error) { - panic("unimplemented") + lineTypes := p.types[start:end] + para, err := newParagraph(lineTypes, p.pairTypes[start:end], p.pairValues[start:end], -1) + if err != nil { + return Ordering{}, err + } + levels := para.getLevels([]int{len(lineTypes)}) + o := calculateOrdering(levels, p.runes[start:end]) + return o, nil } // An Ordering holds the computed visual order of runs of a Paragraph. Calling // SetBytes or SetString on the originating Paragraph invalidates an Ordering. // The methods of an Ordering should only be called by one goroutine at a time. -type Ordering struct{} +type Ordering struct { + runes [][]rune + directions []Direction + startpos []int +} // Direction reports the directionality of the runs. // // The direction may be LeftToRight, RightToLeft, Mixed, or Neutral. func (o *Ordering) Direction() Direction { - panic("unimplemented") + return o.directions[0] } // NumRuns returns the number of runs. func (o *Ordering) NumRuns() int { - panic("unimplemented") + return len(o.runes) } // Run returns the ith run within the ordering. func (o *Ordering) Run(i int) Run { - panic("unimplemented") + r := Run{ + runes: o.runes[i], + direction: o.directions[i], + startpos: o.startpos[i], + } + return r } // TODO: perhaps with options. @@ -155,16 +286,19 @@ func (o *Ordering) Run(i int) Run { // A Run is a continuous sequence of characters of a single direction. type Run struct { + runes []rune + direction Direction + startpos int } // String returns the text of the run in its original order. func (r *Run) String() string { - panic("unimplemented") + return string(r.runes) } // Bytes returns the text of the run in its original order. func (r *Run) Bytes() []byte { - panic("unimplemented") + return []byte(r.String()) } // TODO: methods for @@ -174,25 +308,52 @@ func (r *Run) Bytes() []byte { // Direction reports the direction of the run. func (r *Run) Direction() Direction { - panic("unimplemented") + return r.direction } -// Position of the Run within the text passed to SetBytes or SetString of the +// Pos returns the position of the Run within the text passed to SetBytes or SetString of the // originating Paragraph value. func (r *Run) Pos() (start, end int) { - panic("unimplemented") + return r.startpos, r.startpos + len(r.runes) - 1 } // AppendReverse reverses the order of characters of in, appends them to out, // and returns the result. Modifiers will still follow the runes they modify. // Brackets are replaced with their counterparts. func AppendReverse(out, in []byte) []byte { - panic("unimplemented") + ret := make([]byte, len(in)+len(out)) + copy(ret, out) + inRunes := bytes.Runes(in) + + for i, r := range inRunes { + prop, _ := LookupRune(r) + if prop.IsBracket() { + inRunes[i] = prop.reverseBracket(r) + } + } + + for i, j := 0, len(inRunes)-1; i < j; i, j = i+1, j-1 { + inRunes[i], inRunes[j] = inRunes[j], inRunes[i] + } + copy(ret[len(out):], string(inRunes)) + + return ret } // ReverseString reverses the order of characters in s and returns a new string. // Modifiers will still follow the runes they modify. Brackets are replaced with // their counterparts. func ReverseString(s string) string { - panic("unimplemented") + input := []rune(s) + li := len(input) + ret := make([]rune, li) + for i, r := range input { + prop, _ := LookupRune(r) + if prop.IsBracket() { + ret[li-i-1] = prop.reverseBracket(r) + } else { + ret[li-i-1] = r + } + } + return string(ret) } diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go index 50deb6600..e4c081101 100644 --- a/vendor/golang.org/x/text/unicode/bidi/core.go +++ b/vendor/golang.org/x/text/unicode/bidi/core.go @@ -4,7 +4,10 @@ package bidi -import "log" +import ( + "fmt" + "log" +) // This implementation is a port based on the reference implementation found at: // https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/ @@ -97,13 +100,20 @@ type paragraph struct { // rune (suggested is the rune of the open bracket for opening and matching // close brackets, after normalization). The embedding levels are optional, but // may be supplied to encode embedding levels of styled text. -// -// TODO: return an error. -func newParagraph(types []Class, pairTypes []bracketType, pairValues []rune, levels level) *paragraph { - validateTypes(types) - validatePbTypes(pairTypes) - validatePbValues(pairValues, pairTypes) - validateParagraphEmbeddingLevel(levels) +func newParagraph(types []Class, pairTypes []bracketType, pairValues []rune, levels level) (*paragraph, error) { + var err error + if err = validateTypes(types); err != nil { + return nil, err + } + if err = validatePbTypes(pairTypes); err != nil { + return nil, err + } + if err = validatePbValues(pairValues, pairTypes); err != nil { + return nil, err + } + if err = validateParagraphEmbeddingLevel(levels); err != nil { + return nil, err + } p := ¶graph{ initialTypes: append([]Class(nil), types...), @@ -115,7 +125,7 @@ func newParagraph(types []Class, pairTypes []bracketType, pairValues []rune, lev resultTypes: append([]Class(nil), types...), } p.run() - return p + return p, nil } func (p *paragraph) Len() int { return len(p.initialTypes) } @@ -1001,58 +1011,61 @@ func typeForLevel(level level) Class { return R } -// TODO: change validation to not panic - -func validateTypes(types []Class) { +func validateTypes(types []Class) error { if len(types) == 0 { - log.Panic("types is null") + return fmt.Errorf("types is null") } for i, t := range types[:len(types)-1] { if t == B { - log.Panicf("B type before end of paragraph at index: %d", i) + return fmt.Errorf("B type before end of paragraph at index: %d", i) } } + return nil } -func validateParagraphEmbeddingLevel(embeddingLevel level) { +func validateParagraphEmbeddingLevel(embeddingLevel level) error { if embeddingLevel != implicitLevel && embeddingLevel != 0 && embeddingLevel != 1 { - log.Panicf("illegal paragraph embedding level: %d", embeddingLevel) + return fmt.Errorf("illegal paragraph embedding level: %d", embeddingLevel) } + return nil } -func validateLineBreaks(linebreaks []int, textLength int) { +func validateLineBreaks(linebreaks []int, textLength int) error { prev := 0 for i, next := range linebreaks { if next <= prev { - log.Panicf("bad linebreak: %d at index: %d", next, i) + return fmt.Errorf("bad linebreak: %d at index: %d", next, i) } prev = next } if prev != textLength { - log.Panicf("last linebreak was %d, want %d", prev, textLength) + return fmt.Errorf("last linebreak was %d, want %d", prev, textLength) } + return nil } -func validatePbTypes(pairTypes []bracketType) { +func validatePbTypes(pairTypes []bracketType) error { if len(pairTypes) == 0 { - log.Panic("pairTypes is null") + return fmt.Errorf("pairTypes is null") } for i, pt := range pairTypes { switch pt { case bpNone, bpOpen, bpClose: default: - log.Panicf("illegal pairType value at %d: %v", i, pairTypes[i]) + return fmt.Errorf("illegal pairType value at %d: %v", i, pairTypes[i]) } } + return nil } -func validatePbValues(pairValues []rune, pairTypes []bracketType) { +func validatePbValues(pairValues []rune, pairTypes []bracketType) error { if pairValues == nil { - log.Panic("pairValues is null") + return fmt.Errorf("pairValues is null") } if len(pairTypes) != len(pairValues) { - log.Panic("pairTypes is different length from pairValues") + return fmt.Errorf("pairTypes is different length from pairValues") } + return nil } diff --git a/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go index 7ffa36512..647f2d427 100644 --- a/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +++ b/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go @@ -1,6 +1,6 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -// +build go1.14 +// +build go1.14,!go1.16 package bidi diff --git a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go new file mode 100644 index 000000000..c937d0976 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go @@ -0,0 +1,1955 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.16 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "13.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 17408 bytes (17.00 KiB). Checksum: df85fcbfe9b8377f. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 248 blocks, 15872 entries, 15872 bytes +// The third block is the zero block. +var bidiValues = [15872]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, + 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, + 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, + 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, + 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, + 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, + // Block 0x18, offset 0x600 + 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, + 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, + 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, + 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, + 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, + 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, + 0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + 0x77e: 0x000c, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + 0x83a: 0x000c, 0x83b: 0x000c, + 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x895: 0x000c, 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, 0x944: 0x000c, + 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa00: 0x000c, 0xa01: 0x000c, + 0xa3b: 0x000c, + 0xa3c: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa81: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaca: 0x000c, + 0xad2: 0x000c, 0xad3: 0x000c, 0xad4: 0x000c, 0xad6: 0x000c, + // Block 0x2c, offset 0xb00 + 0xb31: 0x000c, 0xb34: 0x000c, 0xb35: 0x000c, + 0xb36: 0x000c, 0xb37: 0x000c, 0xb38: 0x000c, 0xb39: 0x000c, 0xb3a: 0x000c, + 0xb3f: 0x0004, + // Block 0x2d, offset 0xb40 + 0xb47: 0x000c, 0xb48: 0x000c, 0xb49: 0x000c, 0xb4a: 0x000c, 0xb4b: 0x000c, + 0xb4c: 0x000c, 0xb4d: 0x000c, 0xb4e: 0x000c, + // Block 0x2e, offset 0xb80 + 0xbb1: 0x000c, 0xbb4: 0x000c, 0xbb5: 0x000c, + 0xbb6: 0x000c, 0xbb7: 0x000c, 0xbb8: 0x000c, 0xbb9: 0x000c, 0xbba: 0x000c, 0xbbb: 0x000c, + 0xbbc: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbc8: 0x000c, 0xbc9: 0x000c, 0xbca: 0x000c, 0xbcb: 0x000c, + 0xbcc: 0x000c, 0xbcd: 0x000c, + // Block 0x30, offset 0xc00 + 0xc18: 0x000c, 0xc19: 0x000c, + 0xc35: 0x000c, + 0xc37: 0x000c, 0xc39: 0x000c, 0xc3a: 0x003a, 0xc3b: 0x002a, + 0xc3c: 0x003a, 0xc3d: 0x002a, + // Block 0x31, offset 0xc40 + 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, 0xc7d: 0x000c, 0xc7e: 0x000c, + // Block 0x32, offset 0xc80 + 0xc80: 0x000c, 0xc81: 0x000c, 0xc82: 0x000c, 0xc83: 0x000c, 0xc84: 0x000c, + 0xc86: 0x000c, 0xc87: 0x000c, + 0xc8d: 0x000c, 0xc8e: 0x000c, 0xc8f: 0x000c, 0xc90: 0x000c, 0xc91: 0x000c, + 0xc92: 0x000c, 0xc93: 0x000c, 0xc94: 0x000c, 0xc95: 0x000c, 0xc96: 0x000c, 0xc97: 0x000c, + 0xc99: 0x000c, 0xc9a: 0x000c, 0xc9b: 0x000c, 0xc9c: 0x000c, 0xc9d: 0x000c, + 0xc9e: 0x000c, 0xc9f: 0x000c, 0xca0: 0x000c, 0xca1: 0x000c, 0xca2: 0x000c, 0xca3: 0x000c, + 0xca4: 0x000c, 0xca5: 0x000c, 0xca6: 0x000c, 0xca7: 0x000c, 0xca8: 0x000c, 0xca9: 0x000c, + 0xcaa: 0x000c, 0xcab: 0x000c, 0xcac: 0x000c, 0xcad: 0x000c, 0xcae: 0x000c, 0xcaf: 0x000c, + 0xcb0: 0x000c, 0xcb1: 0x000c, 0xcb2: 0x000c, 0xcb3: 0x000c, 0xcb4: 0x000c, 0xcb5: 0x000c, + 0xcb6: 0x000c, 0xcb7: 0x000c, 0xcb8: 0x000c, 0xcb9: 0x000c, 0xcba: 0x000c, 0xcbb: 0x000c, + 0xcbc: 0x000c, + // Block 0x33, offset 0xcc0 + 0xcc6: 0x000c, + // Block 0x34, offset 0xd00 + 0xd2d: 0x000c, 0xd2e: 0x000c, 0xd2f: 0x000c, + 0xd30: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, 0xd35: 0x000c, + 0xd36: 0x000c, 0xd37: 0x000c, 0xd39: 0x000c, 0xd3a: 0x000c, + 0xd3d: 0x000c, 0xd3e: 0x000c, + // Block 0x35, offset 0xd40 + 0xd58: 0x000c, 0xd59: 0x000c, + 0xd5e: 0x000c, 0xd5f: 0x000c, 0xd60: 0x000c, + 0xd71: 0x000c, 0xd72: 0x000c, 0xd73: 0x000c, 0xd74: 0x000c, + // Block 0x36, offset 0xd80 + 0xd82: 0x000c, 0xd85: 0x000c, + 0xd86: 0x000c, + 0xd8d: 0x000c, + 0xd9d: 0x000c, + // Block 0x37, offset 0xdc0 + 0xddd: 0x000c, + 0xdde: 0x000c, 0xddf: 0x000c, + // Block 0x38, offset 0xe00 + 0xe10: 0x000a, 0xe11: 0x000a, + 0xe12: 0x000a, 0xe13: 0x000a, 0xe14: 0x000a, 0xe15: 0x000a, 0xe16: 0x000a, 0xe17: 0x000a, + 0xe18: 0x000a, 0xe19: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x000a, + // Block 0x3a, offset 0xe80 + 0xe80: 0x0009, + 0xe9b: 0x007a, 0xe9c: 0x006a, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, 0xed4: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, 0xef4: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf12: 0x000c, 0xf13: 0x000c, + 0xf32: 0x000c, 0xf33: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf74: 0x000c, 0xf75: 0x000c, + 0xf77: 0x000c, 0xf78: 0x000c, 0xf79: 0x000c, 0xf7a: 0x000c, 0xf7b: 0x000c, + 0xf7c: 0x000c, 0xf7d: 0x000c, + // Block 0x3e, offset 0xf80 + 0xf86: 0x000c, 0xf89: 0x000c, 0xf8a: 0x000c, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000c, 0xf8f: 0x000c, 0xf90: 0x000c, 0xf91: 0x000c, + 0xf92: 0x000c, 0xf93: 0x000c, + 0xf9b: 0x0004, 0xf9d: 0x000c, + 0xfb0: 0x000a, 0xfb1: 0x000a, 0xfb2: 0x000a, 0xfb3: 0x000a, 0xfb4: 0x000a, 0xfb5: 0x000a, + 0xfb6: 0x000a, 0xfb7: 0x000a, 0xfb8: 0x000a, 0xfb9: 0x000a, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x000a, 0xfc1: 0x000a, 0xfc2: 0x000a, 0xfc3: 0x000a, 0xfc4: 0x000a, 0xfc5: 0x000a, + 0xfc6: 0x000a, 0xfc7: 0x000a, 0xfc8: 0x000a, 0xfc9: 0x000a, 0xfca: 0x000a, 0xfcb: 0x000c, + 0xfcc: 0x000c, 0xfcd: 0x000c, 0xfce: 0x000b, + // Block 0x40, offset 0x1000 + 0x1005: 0x000c, + 0x1006: 0x000c, + 0x1029: 0x000c, + // Block 0x41, offset 0x1040 + 0x1060: 0x000c, 0x1061: 0x000c, 0x1062: 0x000c, + 0x1067: 0x000c, 0x1068: 0x000c, + 0x1072: 0x000c, + 0x1079: 0x000c, 0x107a: 0x000c, 0x107b: 0x000c, + // Block 0x42, offset 0x1080 + 0x1080: 0x000a, 0x1084: 0x000a, 0x1085: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10de: 0x000a, 0x10df: 0x000a, 0x10e0: 0x000a, 0x10e1: 0x000a, 0x10e2: 0x000a, 0x10e3: 0x000a, + 0x10e4: 0x000a, 0x10e5: 0x000a, 0x10e6: 0x000a, 0x10e7: 0x000a, 0x10e8: 0x000a, 0x10e9: 0x000a, + 0x10ea: 0x000a, 0x10eb: 0x000a, 0x10ec: 0x000a, 0x10ed: 0x000a, 0x10ee: 0x000a, 0x10ef: 0x000a, + 0x10f0: 0x000a, 0x10f1: 0x000a, 0x10f2: 0x000a, 0x10f3: 0x000a, 0x10f4: 0x000a, 0x10f5: 0x000a, + 0x10f6: 0x000a, 0x10f7: 0x000a, 0x10f8: 0x000a, 0x10f9: 0x000a, 0x10fa: 0x000a, 0x10fb: 0x000a, + 0x10fc: 0x000a, 0x10fd: 0x000a, 0x10fe: 0x000a, 0x10ff: 0x000a, + // Block 0x44, offset 0x1100 + 0x1117: 0x000c, + 0x1118: 0x000c, 0x111b: 0x000c, + // Block 0x45, offset 0x1140 + 0x1156: 0x000c, + 0x1158: 0x000c, 0x1159: 0x000c, 0x115a: 0x000c, 0x115b: 0x000c, 0x115c: 0x000c, 0x115d: 0x000c, + 0x115e: 0x000c, 0x1160: 0x000c, 0x1162: 0x000c, + 0x1165: 0x000c, 0x1166: 0x000c, 0x1167: 0x000c, 0x1168: 0x000c, 0x1169: 0x000c, + 0x116a: 0x000c, 0x116b: 0x000c, 0x116c: 0x000c, + 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117f: 0x000c, + // Block 0x46, offset 0x1180 + 0x11b0: 0x000c, 0x11b1: 0x000c, 0x11b2: 0x000c, 0x11b3: 0x000c, 0x11b4: 0x000c, 0x11b5: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, 0x11bb: 0x000c, + 0x11bc: 0x000c, 0x11bd: 0x000c, 0x11be: 0x000c, 0x11bf: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, 0x1202: 0x000c, 0x1203: 0x000c, + 0x1234: 0x000c, + 0x1236: 0x000c, 0x1237: 0x000c, 0x1238: 0x000c, 0x1239: 0x000c, 0x123a: 0x000c, + 0x123c: 0x000c, + // Block 0x49, offset 0x1240 + 0x1242: 0x000c, + 0x126b: 0x000c, 0x126c: 0x000c, 0x126d: 0x000c, 0x126e: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, 0x1272: 0x000c, 0x1273: 0x000c, + // Block 0x4a, offset 0x1280 + 0x1280: 0x000c, 0x1281: 0x000c, + 0x12a2: 0x000c, 0x12a3: 0x000c, + 0x12a4: 0x000c, 0x12a5: 0x000c, 0x12a8: 0x000c, 0x12a9: 0x000c, + 0x12ab: 0x000c, 0x12ac: 0x000c, 0x12ad: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12e6: 0x000c, 0x12e8: 0x000c, 0x12e9: 0x000c, + 0x12ed: 0x000c, 0x12ef: 0x000c, + 0x12f0: 0x000c, 0x12f1: 0x000c, + // Block 0x4c, offset 0x1300 + 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, + // Block 0x4d, offset 0x1340 + 0x1350: 0x000c, 0x1351: 0x000c, + 0x1352: 0x000c, 0x1354: 0x000c, 0x1355: 0x000c, 0x1356: 0x000c, 0x1357: 0x000c, + 0x1358: 0x000c, 0x1359: 0x000c, 0x135a: 0x000c, 0x135b: 0x000c, 0x135c: 0x000c, 0x135d: 0x000c, + 0x135e: 0x000c, 0x135f: 0x000c, 0x1360: 0x000c, 0x1362: 0x000c, 0x1363: 0x000c, + 0x1364: 0x000c, 0x1365: 0x000c, 0x1366: 0x000c, 0x1367: 0x000c, 0x1368: 0x000c, + 0x136d: 0x000c, + 0x1374: 0x000c, + 0x1378: 0x000c, 0x1379: 0x000c, + // Block 0x4e, offset 0x1380 + 0x1380: 0x000c, 0x1381: 0x000c, 0x1382: 0x000c, 0x1383: 0x000c, 0x1384: 0x000c, 0x1385: 0x000c, + 0x1386: 0x000c, 0x1387: 0x000c, 0x1388: 0x000c, 0x1389: 0x000c, 0x138a: 0x000c, 0x138b: 0x000c, + 0x138c: 0x000c, 0x138d: 0x000c, 0x138e: 0x000c, 0x138f: 0x000c, 0x1390: 0x000c, 0x1391: 0x000c, + 0x1392: 0x000c, 0x1393: 0x000c, 0x1394: 0x000c, 0x1395: 0x000c, 0x1396: 0x000c, 0x1397: 0x000c, + 0x1398: 0x000c, 0x1399: 0x000c, 0x139a: 0x000c, 0x139b: 0x000c, 0x139c: 0x000c, 0x139d: 0x000c, + 0x139e: 0x000c, 0x139f: 0x000c, 0x13a0: 0x000c, 0x13a1: 0x000c, 0x13a2: 0x000c, 0x13a3: 0x000c, + 0x13a4: 0x000c, 0x13a5: 0x000c, 0x13a6: 0x000c, 0x13a7: 0x000c, 0x13a8: 0x000c, 0x13a9: 0x000c, + 0x13aa: 0x000c, 0x13ab: 0x000c, 0x13ac: 0x000c, 0x13ad: 0x000c, 0x13ae: 0x000c, 0x13af: 0x000c, + 0x13b0: 0x000c, 0x13b1: 0x000c, 0x13b2: 0x000c, 0x13b3: 0x000c, 0x13b4: 0x000c, 0x13b5: 0x000c, + 0x13b6: 0x000c, 0x13b7: 0x000c, 0x13b8: 0x000c, 0x13b9: 0x000c, 0x13bb: 0x000c, + 0x13bc: 0x000c, 0x13bd: 0x000c, 0x13be: 0x000c, 0x13bf: 0x000c, + // Block 0x4f, offset 0x13c0 + 0x13fd: 0x000a, 0x13ff: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x000a, 0x1401: 0x000a, + 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, + 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x000a, + 0x142d: 0x000a, 0x142e: 0x000a, 0x142f: 0x000a, + 0x143d: 0x000a, 0x143e: 0x000a, + // Block 0x51, offset 0x1440 + 0x1440: 0x0009, 0x1441: 0x0009, 0x1442: 0x0009, 0x1443: 0x0009, 0x1444: 0x0009, 0x1445: 0x0009, + 0x1446: 0x0009, 0x1447: 0x0009, 0x1448: 0x0009, 0x1449: 0x0009, 0x144a: 0x0009, 0x144b: 0x000b, + 0x144c: 0x000b, 0x144d: 0x000b, 0x144f: 0x0001, 0x1450: 0x000a, 0x1451: 0x000a, + 0x1452: 0x000a, 0x1453: 0x000a, 0x1454: 0x000a, 0x1455: 0x000a, 0x1456: 0x000a, 0x1457: 0x000a, + 0x1458: 0x000a, 0x1459: 0x000a, 0x145a: 0x000a, 0x145b: 0x000a, 0x145c: 0x000a, 0x145d: 0x000a, + 0x145e: 0x000a, 0x145f: 0x000a, 0x1460: 0x000a, 0x1461: 0x000a, 0x1462: 0x000a, 0x1463: 0x000a, + 0x1464: 0x000a, 0x1465: 0x000a, 0x1466: 0x000a, 0x1467: 0x000a, 0x1468: 0x0009, 0x1469: 0x0007, + 0x146a: 0x000e, 0x146b: 0x000e, 0x146c: 0x000e, 0x146d: 0x000e, 0x146e: 0x000e, 0x146f: 0x0006, + 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x000a, + 0x1476: 0x000a, 0x1477: 0x000a, 0x1478: 0x000a, 0x1479: 0x000a, 0x147a: 0x000a, 0x147b: 0x000a, + 0x147c: 0x000a, 0x147d: 0x000a, 0x147e: 0x000a, 0x147f: 0x000a, + // Block 0x52, offset 0x1480 + 0x1480: 0x000a, 0x1481: 0x000a, 0x1482: 0x000a, 0x1483: 0x000a, 0x1484: 0x0006, 0x1485: 0x009a, + 0x1486: 0x008a, 0x1487: 0x000a, 0x1488: 0x000a, 0x1489: 0x000a, 0x148a: 0x000a, 0x148b: 0x000a, + 0x148c: 0x000a, 0x148d: 0x000a, 0x148e: 0x000a, 0x148f: 0x000a, 0x1490: 0x000a, 0x1491: 0x000a, + 0x1492: 0x000a, 0x1493: 0x000a, 0x1494: 0x000a, 0x1495: 0x000a, 0x1496: 0x000a, 0x1497: 0x000a, + 0x1498: 0x000a, 0x1499: 0x000a, 0x149a: 0x000a, 0x149b: 0x000a, 0x149c: 0x000a, 0x149d: 0x000a, + 0x149e: 0x000a, 0x149f: 0x0009, 0x14a0: 0x000b, 0x14a1: 0x000b, 0x14a2: 0x000b, 0x14a3: 0x000b, + 0x14a4: 0x000b, 0x14a5: 0x000b, 0x14a6: 0x000e, 0x14a7: 0x000e, 0x14a8: 0x000e, 0x14a9: 0x000e, + 0x14aa: 0x000b, 0x14ab: 0x000b, 0x14ac: 0x000b, 0x14ad: 0x000b, 0x14ae: 0x000b, 0x14af: 0x000b, + 0x14b0: 0x0002, 0x14b4: 0x0002, 0x14b5: 0x0002, + 0x14b6: 0x0002, 0x14b7: 0x0002, 0x14b8: 0x0002, 0x14b9: 0x0002, 0x14ba: 0x0003, 0x14bb: 0x0003, + 0x14bc: 0x000a, 0x14bd: 0x009a, 0x14be: 0x008a, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0002, 0x14c1: 0x0002, 0x14c2: 0x0002, 0x14c3: 0x0002, 0x14c4: 0x0002, 0x14c5: 0x0002, + 0x14c6: 0x0002, 0x14c7: 0x0002, 0x14c8: 0x0002, 0x14c9: 0x0002, 0x14ca: 0x0003, 0x14cb: 0x0003, + 0x14cc: 0x000a, 0x14cd: 0x009a, 0x14ce: 0x008a, + 0x14e0: 0x0004, 0x14e1: 0x0004, 0x14e2: 0x0004, 0x14e3: 0x0004, + 0x14e4: 0x0004, 0x14e5: 0x0004, 0x14e6: 0x0004, 0x14e7: 0x0004, 0x14e8: 0x0004, 0x14e9: 0x0004, + 0x14ea: 0x0004, 0x14eb: 0x0004, 0x14ec: 0x0004, 0x14ed: 0x0004, 0x14ee: 0x0004, 0x14ef: 0x0004, + 0x14f0: 0x0004, 0x14f1: 0x0004, 0x14f2: 0x0004, 0x14f3: 0x0004, 0x14f4: 0x0004, 0x14f5: 0x0004, + 0x14f6: 0x0004, 0x14f7: 0x0004, 0x14f8: 0x0004, 0x14f9: 0x0004, 0x14fa: 0x0004, 0x14fb: 0x0004, + 0x14fc: 0x0004, 0x14fd: 0x0004, 0x14fe: 0x0004, 0x14ff: 0x0004, + // Block 0x54, offset 0x1500 + 0x1500: 0x0004, 0x1501: 0x0004, 0x1502: 0x0004, 0x1503: 0x0004, 0x1504: 0x0004, 0x1505: 0x0004, + 0x1506: 0x0004, 0x1507: 0x0004, 0x1508: 0x0004, 0x1509: 0x0004, 0x150a: 0x0004, 0x150b: 0x0004, + 0x150c: 0x0004, 0x150d: 0x0004, 0x150e: 0x0004, 0x150f: 0x0004, 0x1510: 0x000c, 0x1511: 0x000c, + 0x1512: 0x000c, 0x1513: 0x000c, 0x1514: 0x000c, 0x1515: 0x000c, 0x1516: 0x000c, 0x1517: 0x000c, + 0x1518: 0x000c, 0x1519: 0x000c, 0x151a: 0x000c, 0x151b: 0x000c, 0x151c: 0x000c, 0x151d: 0x000c, + 0x151e: 0x000c, 0x151f: 0x000c, 0x1520: 0x000c, 0x1521: 0x000c, 0x1522: 0x000c, 0x1523: 0x000c, + 0x1524: 0x000c, 0x1525: 0x000c, 0x1526: 0x000c, 0x1527: 0x000c, 0x1528: 0x000c, 0x1529: 0x000c, + 0x152a: 0x000c, 0x152b: 0x000c, 0x152c: 0x000c, 0x152d: 0x000c, 0x152e: 0x000c, 0x152f: 0x000c, + 0x1530: 0x000c, + // Block 0x55, offset 0x1540 + 0x1540: 0x000a, 0x1541: 0x000a, 0x1543: 0x000a, 0x1544: 0x000a, 0x1545: 0x000a, + 0x1546: 0x000a, 0x1548: 0x000a, 0x1549: 0x000a, + 0x1554: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, + 0x1565: 0x000a, 0x1567: 0x000a, 0x1569: 0x000a, + 0x156e: 0x0004, + 0x157a: 0x000a, 0x157b: 0x000a, + // Block 0x56, offset 0x1580 + 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, + 0x158a: 0x000a, 0x158b: 0x000a, + 0x158c: 0x000a, 0x158d: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x000a, 0x15d3: 0x000a, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x000a, 0x1609: 0x000a, 0x160a: 0x000a, 0x160b: 0x000a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x000a, + 0x162a: 0x000a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + 0x1636: 0x000a, 0x1637: 0x000a, 0x1638: 0x000a, 0x1639: 0x000a, 0x163a: 0x000a, 0x163b: 0x000a, + 0x163c: 0x000a, 0x163d: 0x000a, 0x163e: 0x000a, 0x163f: 0x000a, + // Block 0x59, offset 0x1640 + 0x1640: 0x000a, 0x1641: 0x000a, 0x1642: 0x000a, 0x1643: 0x000a, 0x1644: 0x000a, 0x1645: 0x000a, + 0x1646: 0x000a, 0x1647: 0x000a, 0x1648: 0x000a, 0x1649: 0x000a, 0x164a: 0x000a, 0x164b: 0x000a, + 0x164c: 0x000a, 0x164d: 0x000a, 0x164e: 0x000a, 0x164f: 0x000a, 0x1650: 0x000a, 0x1651: 0x000a, + 0x1652: 0x0003, 0x1653: 0x0004, 0x1654: 0x000a, 0x1655: 0x000a, 0x1656: 0x000a, 0x1657: 0x000a, + 0x1658: 0x000a, 0x1659: 0x000a, 0x165a: 0x000a, 0x165b: 0x000a, 0x165c: 0x000a, 0x165d: 0x000a, + 0x165e: 0x000a, 0x165f: 0x000a, 0x1660: 0x000a, 0x1661: 0x000a, 0x1662: 0x000a, 0x1663: 0x000a, + 0x1664: 0x000a, 0x1665: 0x000a, 0x1666: 0x000a, 0x1667: 0x000a, 0x1668: 0x000a, 0x1669: 0x000a, + 0x166a: 0x000a, 0x166b: 0x000a, 0x166c: 0x000a, 0x166d: 0x000a, 0x166e: 0x000a, 0x166f: 0x000a, + 0x1670: 0x000a, 0x1671: 0x000a, 0x1672: 0x000a, 0x1673: 0x000a, 0x1674: 0x000a, 0x1675: 0x000a, + 0x1676: 0x000a, 0x1677: 0x000a, 0x1678: 0x000a, 0x1679: 0x000a, 0x167a: 0x000a, 0x167b: 0x000a, + 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, + // Block 0x5a, offset 0x1680 + 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, + 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x003a, 0x1689: 0x002a, 0x168a: 0x003a, 0x168b: 0x002a, + 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, + 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1695: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, + 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, + 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, + 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x009a, + 0x16aa: 0x008a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, + 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16fb: 0x000a, + 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, 0x16ff: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, + 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, + 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, + 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, + 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, + 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, + 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, + 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, + 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, 0x174b: 0x000a, + 0x174c: 0x000a, 0x174d: 0x000a, 0x174e: 0x000a, 0x174f: 0x000a, 0x1750: 0x000a, 0x1751: 0x000a, + 0x1752: 0x000a, 0x1753: 0x000a, 0x1754: 0x000a, 0x1755: 0x000a, 0x1756: 0x000a, 0x1757: 0x000a, + 0x1758: 0x000a, 0x1759: 0x000a, 0x175a: 0x000a, 0x175b: 0x000a, 0x175c: 0x000a, 0x175d: 0x000a, + 0x175e: 0x000a, 0x175f: 0x000a, 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, + 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, + // Block 0x5e, offset 0x1780 + 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, + 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x000a, 0x1789: 0x000a, 0x178a: 0x000a, + 0x17a0: 0x000a, 0x17a1: 0x000a, 0x17a2: 0x000a, 0x17a3: 0x000a, + 0x17a4: 0x000a, 0x17a5: 0x000a, 0x17a6: 0x000a, 0x17a7: 0x000a, 0x17a8: 0x000a, 0x17a9: 0x000a, + 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, + 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, + 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, + 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, + 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x0002, 0x17c9: 0x0002, 0x17ca: 0x0002, 0x17cb: 0x0002, + 0x17cc: 0x0002, 0x17cd: 0x0002, 0x17ce: 0x0002, 0x17cf: 0x0002, 0x17d0: 0x0002, 0x17d1: 0x0002, + 0x17d2: 0x0002, 0x17d3: 0x0002, 0x17d4: 0x0002, 0x17d5: 0x0002, 0x17d6: 0x0002, 0x17d7: 0x0002, + 0x17d8: 0x0002, 0x17d9: 0x0002, 0x17da: 0x0002, 0x17db: 0x0002, + // Block 0x60, offset 0x1800 + 0x182a: 0x000a, 0x182b: 0x000a, 0x182c: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, + 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, + 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x000a, 0x1869: 0x000a, + 0x186a: 0x000a, 0x186b: 0x000a, 0x186d: 0x000a, 0x186e: 0x000a, 0x186f: 0x000a, + 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x000a, + 0x1886: 0x000a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, + 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, + 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, + 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x003a, 0x18a9: 0x002a, + 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, + 0x18b0: 0x003a, 0x18b1: 0x002a, 0x18b2: 0x003a, 0x18b3: 0x002a, 0x18b4: 0x003a, 0x18b5: 0x002a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x009a, + 0x18c6: 0x008a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, + 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, + 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, + 0x18d8: 0x000a, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x003a, 0x18e7: 0x002a, 0x18e8: 0x003a, 0x18e9: 0x002a, + 0x18ea: 0x003a, 0x18eb: 0x002a, 0x18ec: 0x003a, 0x18ed: 0x002a, 0x18ee: 0x003a, 0x18ef: 0x002a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x007a, 0x1904: 0x006a, 0x1905: 0x009a, + 0x1906: 0x008a, 0x1907: 0x00ba, 0x1908: 0x00aa, 0x1909: 0x009a, 0x190a: 0x008a, 0x190b: 0x007a, + 0x190c: 0x006a, 0x190d: 0x00da, 0x190e: 0x002a, 0x190f: 0x003a, 0x1910: 0x00ca, 0x1911: 0x009a, + 0x1912: 0x008a, 0x1913: 0x007a, 0x1914: 0x006a, 0x1915: 0x009a, 0x1916: 0x008a, 0x1917: 0x00ba, + 0x1918: 0x00aa, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, + 0x1958: 0x003a, 0x1959: 0x002a, 0x195a: 0x003a, 0x195b: 0x002a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x003a, 0x197d: 0x002a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, + 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, + 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1996: 0x000a, 0x1997: 0x000a, + 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, + 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, + 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, + 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, + 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, + 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a, + 0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19c9: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a, + 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, + 0x19d2: 0x000a, 0x19d3: 0x000a, 0x19d4: 0x000a, 0x19d5: 0x000a, 0x19d7: 0x000a, + 0x19d8: 0x000a, 0x19d9: 0x000a, 0x19da: 0x000a, 0x19db: 0x000a, 0x19dc: 0x000a, 0x19dd: 0x000a, + 0x19de: 0x000a, 0x19df: 0x000a, 0x19e0: 0x000a, 0x19e1: 0x000a, 0x19e2: 0x000a, 0x19e3: 0x000a, + 0x19e4: 0x000a, 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, + 0x19ea: 0x000a, 0x19eb: 0x000a, 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a, + 0x19f0: 0x000a, 0x19f1: 0x000a, 0x19f2: 0x000a, 0x19f3: 0x000a, 0x19f4: 0x000a, 0x19f5: 0x000a, + 0x19f6: 0x000a, 0x19f7: 0x000a, 0x19f8: 0x000a, 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, + 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, + // Block 0x68, offset 0x1a00 + 0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a, + 0x1a2a: 0x000a, 0x1a2f: 0x000c, + 0x1a30: 0x000c, 0x1a31: 0x000c, + 0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a, + 0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a, + // Block 0x69, offset 0x1a40 + 0x1a7f: 0x000c, + // Block 0x6a, offset 0x1a80 + 0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c, + 0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c, + 0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c, + 0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c, + 0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c, + 0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, + 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, + 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a, + 0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a, + 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, + 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, + 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, + 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, + 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, + 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, + 0x1b12: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, + 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, + 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, + 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, + 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, + 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, + 0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, + 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, + 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a, + 0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, + 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a, + 0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a, + 0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a, + 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a, + 0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a, + 0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a, + 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a, + 0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a, + 0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a, + 0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a, + 0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a, + 0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a, + 0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a, + 0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a, + 0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c, + 0x1c30: 0x000a, + 0x1c36: 0x000a, 0x1c37: 0x000a, + 0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a, + 0x1c60: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1cbb: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a, + 0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a, + 0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a, + 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, + 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, + 0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d1d: 0x000a, + 0x1d1e: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d50: 0x000a, 0x1d51: 0x000a, + 0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a, + 0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a, + 0x1d5e: 0x000a, 0x1d5f: 0x000a, + 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a, + 0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a, + 0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e5e: 0x000a, 0x1e5f: 0x000a, + 0x1e7f: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e90: 0x000a, 0x1e91: 0x000a, + 0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a, + 0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a, + 0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a, + 0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a, + 0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a, + 0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a, + 0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a, + 0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a, + 0x1ec6: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a, + // Block 0x7d, offset 0x1f40 + 0x1f6f: 0x000c, + 0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c, + 0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c, + 0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a, + // Block 0x7e, offset 0x1f80 + 0x1f9e: 0x000c, 0x1f9f: 0x000c, + // Block 0x7f, offset 0x1fc0 + 0x1ff0: 0x000c, 0x1ff1: 0x000c, + // Block 0x80, offset 0x2000 + 0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a, + 0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a, + 0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a, + 0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a, + 0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a, + 0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a, + // Block 0x81, offset 0x2040 + 0x2048: 0x000a, + // Block 0x82, offset 0x2080 + 0x2082: 0x000c, + 0x2086: 0x000c, 0x208b: 0x000c, + 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a, + 0x20aa: 0x000a, 0x20ab: 0x000a, 0x20ac: 0x000c, + 0x20b8: 0x0004, 0x20b9: 0x0004, + // Block 0x83, offset 0x20c0 + 0x20f4: 0x000a, 0x20f5: 0x000a, + 0x20f6: 0x000a, 0x20f7: 0x000a, + // Block 0x84, offset 0x2100 + 0x2104: 0x000c, 0x2105: 0x000c, + 0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c, + 0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, + 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c, + 0x2130: 0x000c, 0x2131: 0x000c, + 0x213f: 0x000c, + // Block 0x85, offset 0x2140 + 0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c, + 0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c, + // Block 0x86, offset 0x2180 + 0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c, + 0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c, + 0x21f3: 0x000c, + 0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c, + 0x21fc: 0x000c, 0x21fd: 0x000c, + // Block 0x88, offset 0x2200 + 0x2225: 0x000c, + // Block 0x89, offset 0x2240 + 0x2269: 0x000c, + 0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c, + 0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c, + 0x2276: 0x000c, + // Block 0x8a, offset 0x2280 + 0x2283: 0x000c, + 0x228c: 0x000c, + 0x22bc: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c, + 0x22f7: 0x000c, 0x22f8: 0x000c, + 0x22fe: 0x000c, 0x22ff: 0x000c, + // Block 0x8c, offset 0x2300 + 0x2301: 0x000c, + 0x232c: 0x000c, 0x232d: 0x000c, + 0x2336: 0x000c, + // Block 0x8d, offset 0x2340 + 0x236a: 0x000a, 0x236b: 0x000a, + // Block 0x8e, offset 0x2380 + 0x23a5: 0x000c, 0x23a8: 0x000c, + 0x23ad: 0x000c, + // Block 0x8f, offset 0x23c0 + 0x23dd: 0x0001, + 0x23de: 0x000c, 0x23df: 0x0001, 0x23e0: 0x0001, 0x23e1: 0x0001, 0x23e2: 0x0001, 0x23e3: 0x0001, + 0x23e4: 0x0001, 0x23e5: 0x0001, 0x23e6: 0x0001, 0x23e7: 0x0001, 0x23e8: 0x0001, 0x23e9: 0x0003, + 0x23ea: 0x0001, 0x23eb: 0x0001, 0x23ec: 0x0001, 0x23ed: 0x0001, 0x23ee: 0x0001, 0x23ef: 0x0001, + 0x23f0: 0x0001, 0x23f1: 0x0001, 0x23f2: 0x0001, 0x23f3: 0x0001, 0x23f4: 0x0001, 0x23f5: 0x0001, + 0x23f6: 0x0001, 0x23f7: 0x0001, 0x23f8: 0x0001, 0x23f9: 0x0001, 0x23fa: 0x0001, 0x23fb: 0x0001, + 0x23fc: 0x0001, 0x23fd: 0x0001, 0x23fe: 0x0001, 0x23ff: 0x0001, + // Block 0x90, offset 0x2400 + 0x2400: 0x0001, 0x2401: 0x0001, 0x2402: 0x0001, 0x2403: 0x0001, 0x2404: 0x0001, 0x2405: 0x0001, + 0x2406: 0x0001, 0x2407: 0x0001, 0x2408: 0x0001, 0x2409: 0x0001, 0x240a: 0x0001, 0x240b: 0x0001, + 0x240c: 0x0001, 0x240d: 0x0001, 0x240e: 0x0001, 0x240f: 0x0001, 0x2410: 0x000d, 0x2411: 0x000d, + 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, + 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, + 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, + 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, + 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000d, 0x243f: 0x000d, + // Block 0x91, offset 0x2440 + 0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d, + 0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d, + 0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000d, 0x2451: 0x000d, + 0x2452: 0x000d, 0x2453: 0x000d, 0x2454: 0x000d, 0x2455: 0x000d, 0x2456: 0x000d, 0x2457: 0x000d, + 0x2458: 0x000d, 0x2459: 0x000d, 0x245a: 0x000d, 0x245b: 0x000d, 0x245c: 0x000d, 0x245d: 0x000d, + 0x245e: 0x000d, 0x245f: 0x000d, 0x2460: 0x000d, 0x2461: 0x000d, 0x2462: 0x000d, 0x2463: 0x000d, + 0x2464: 0x000d, 0x2465: 0x000d, 0x2466: 0x000d, 0x2467: 0x000d, 0x2468: 0x000d, 0x2469: 0x000d, + 0x246a: 0x000d, 0x246b: 0x000d, 0x246c: 0x000d, 0x246d: 0x000d, 0x246e: 0x000d, 0x246f: 0x000d, + 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, + 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, + 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000a, 0x247f: 0x000a, + // Block 0x92, offset 0x2480 + 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, + 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, + 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000d, 0x2490: 0x000b, 0x2491: 0x000b, + 0x2492: 0x000b, 0x2493: 0x000b, 0x2494: 0x000b, 0x2495: 0x000b, 0x2496: 0x000b, 0x2497: 0x000b, + 0x2498: 0x000b, 0x2499: 0x000b, 0x249a: 0x000b, 0x249b: 0x000b, 0x249c: 0x000b, 0x249d: 0x000b, + 0x249e: 0x000b, 0x249f: 0x000b, 0x24a0: 0x000b, 0x24a1: 0x000b, 0x24a2: 0x000b, 0x24a3: 0x000b, + 0x24a4: 0x000b, 0x24a5: 0x000b, 0x24a6: 0x000b, 0x24a7: 0x000b, 0x24a8: 0x000b, 0x24a9: 0x000b, + 0x24aa: 0x000b, 0x24ab: 0x000b, 0x24ac: 0x000b, 0x24ad: 0x000b, 0x24ae: 0x000b, 0x24af: 0x000b, + 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, + 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, + 0x24bc: 0x000d, 0x24bd: 0x000a, 0x24be: 0x000d, 0x24bf: 0x000d, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000c, 0x24c1: 0x000c, 0x24c2: 0x000c, 0x24c3: 0x000c, 0x24c4: 0x000c, 0x24c5: 0x000c, + 0x24c6: 0x000c, 0x24c7: 0x000c, 0x24c8: 0x000c, 0x24c9: 0x000c, 0x24ca: 0x000c, 0x24cb: 0x000c, + 0x24cc: 0x000c, 0x24cd: 0x000c, 0x24ce: 0x000c, 0x24cf: 0x000c, 0x24d0: 0x000a, 0x24d1: 0x000a, + 0x24d2: 0x000a, 0x24d3: 0x000a, 0x24d4: 0x000a, 0x24d5: 0x000a, 0x24d6: 0x000a, 0x24d7: 0x000a, + 0x24d8: 0x000a, 0x24d9: 0x000a, + 0x24e0: 0x000c, 0x24e1: 0x000c, 0x24e2: 0x000c, 0x24e3: 0x000c, + 0x24e4: 0x000c, 0x24e5: 0x000c, 0x24e6: 0x000c, 0x24e7: 0x000c, 0x24e8: 0x000c, 0x24e9: 0x000c, + 0x24ea: 0x000c, 0x24eb: 0x000c, 0x24ec: 0x000c, 0x24ed: 0x000c, 0x24ee: 0x000c, 0x24ef: 0x000c, + 0x24f0: 0x000a, 0x24f1: 0x000a, 0x24f2: 0x000a, 0x24f3: 0x000a, 0x24f4: 0x000a, 0x24f5: 0x000a, + 0x24f6: 0x000a, 0x24f7: 0x000a, 0x24f8: 0x000a, 0x24f9: 0x000a, 0x24fa: 0x000a, 0x24fb: 0x000a, + 0x24fc: 0x000a, 0x24fd: 0x000a, 0x24fe: 0x000a, 0x24ff: 0x000a, + // Block 0x94, offset 0x2500 + 0x2500: 0x000a, 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x000a, 0x2504: 0x000a, 0x2505: 0x000a, + 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x000a, 0x2509: 0x000a, 0x250a: 0x000a, 0x250b: 0x000a, + 0x250c: 0x000a, 0x250d: 0x000a, 0x250e: 0x000a, 0x250f: 0x000a, 0x2510: 0x0006, 0x2511: 0x000a, + 0x2512: 0x0006, 0x2514: 0x000a, 0x2515: 0x0006, 0x2516: 0x000a, 0x2517: 0x000a, + 0x2518: 0x000a, 0x2519: 0x009a, 0x251a: 0x008a, 0x251b: 0x007a, 0x251c: 0x006a, 0x251d: 0x009a, + 0x251e: 0x008a, 0x251f: 0x0004, 0x2520: 0x000a, 0x2521: 0x000a, 0x2522: 0x0003, 0x2523: 0x0003, + 0x2524: 0x000a, 0x2525: 0x000a, 0x2526: 0x000a, 0x2528: 0x000a, 0x2529: 0x0004, + 0x252a: 0x0004, 0x252b: 0x000a, + 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, + 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, + 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000d, + // Block 0x95, offset 0x2540 + 0x2540: 0x000d, 0x2541: 0x000d, 0x2542: 0x000d, 0x2543: 0x000d, 0x2544: 0x000d, 0x2545: 0x000d, + 0x2546: 0x000d, 0x2547: 0x000d, 0x2548: 0x000d, 0x2549: 0x000d, 0x254a: 0x000d, 0x254b: 0x000d, + 0x254c: 0x000d, 0x254d: 0x000d, 0x254e: 0x000d, 0x254f: 0x000d, 0x2550: 0x000d, 0x2551: 0x000d, + 0x2552: 0x000d, 0x2553: 0x000d, 0x2554: 0x000d, 0x2555: 0x000d, 0x2556: 0x000d, 0x2557: 0x000d, + 0x2558: 0x000d, 0x2559: 0x000d, 0x255a: 0x000d, 0x255b: 0x000d, 0x255c: 0x000d, 0x255d: 0x000d, + 0x255e: 0x000d, 0x255f: 0x000d, 0x2560: 0x000d, 0x2561: 0x000d, 0x2562: 0x000d, 0x2563: 0x000d, + 0x2564: 0x000d, 0x2565: 0x000d, 0x2566: 0x000d, 0x2567: 0x000d, 0x2568: 0x000d, 0x2569: 0x000d, + 0x256a: 0x000d, 0x256b: 0x000d, 0x256c: 0x000d, 0x256d: 0x000d, 0x256e: 0x000d, 0x256f: 0x000d, + 0x2570: 0x000d, 0x2571: 0x000d, 0x2572: 0x000d, 0x2573: 0x000d, 0x2574: 0x000d, 0x2575: 0x000d, + 0x2576: 0x000d, 0x2577: 0x000d, 0x2578: 0x000d, 0x2579: 0x000d, 0x257a: 0x000d, 0x257b: 0x000d, + 0x257c: 0x000d, 0x257d: 0x000d, 0x257e: 0x000d, 0x257f: 0x000b, + // Block 0x96, offset 0x2580 + 0x2581: 0x000a, 0x2582: 0x000a, 0x2583: 0x0004, 0x2584: 0x0004, 0x2585: 0x0004, + 0x2586: 0x000a, 0x2587: 0x000a, 0x2588: 0x003a, 0x2589: 0x002a, 0x258a: 0x000a, 0x258b: 0x0003, + 0x258c: 0x0006, 0x258d: 0x0003, 0x258e: 0x0006, 0x258f: 0x0006, 0x2590: 0x0002, 0x2591: 0x0002, + 0x2592: 0x0002, 0x2593: 0x0002, 0x2594: 0x0002, 0x2595: 0x0002, 0x2596: 0x0002, 0x2597: 0x0002, + 0x2598: 0x0002, 0x2599: 0x0002, 0x259a: 0x0006, 0x259b: 0x000a, 0x259c: 0x000a, 0x259d: 0x000a, + 0x259e: 0x000a, 0x259f: 0x000a, 0x25a0: 0x000a, + 0x25bb: 0x005a, + 0x25bc: 0x000a, 0x25bd: 0x004a, 0x25be: 0x000a, 0x25bf: 0x000a, + // Block 0x97, offset 0x25c0 + 0x25c0: 0x000a, + 0x25db: 0x005a, 0x25dc: 0x000a, 0x25dd: 0x004a, + 0x25de: 0x000a, 0x25df: 0x00fa, 0x25e0: 0x00ea, 0x25e1: 0x000a, 0x25e2: 0x003a, 0x25e3: 0x002a, + 0x25e4: 0x000a, 0x25e5: 0x000a, + // Block 0x98, offset 0x2600 + 0x2620: 0x0004, 0x2621: 0x0004, 0x2622: 0x000a, 0x2623: 0x000a, + 0x2624: 0x000a, 0x2625: 0x0004, 0x2626: 0x0004, 0x2628: 0x000a, 0x2629: 0x000a, + 0x262a: 0x000a, 0x262b: 0x000a, 0x262c: 0x000a, 0x262d: 0x000a, 0x262e: 0x000a, + 0x2630: 0x000b, 0x2631: 0x000b, 0x2632: 0x000b, 0x2633: 0x000b, 0x2634: 0x000b, 0x2635: 0x000b, + 0x2636: 0x000b, 0x2637: 0x000b, 0x2638: 0x000b, 0x2639: 0x000a, 0x263a: 0x000a, 0x263b: 0x000a, + 0x263c: 0x000a, 0x263d: 0x000a, 0x263e: 0x000b, 0x263f: 0x000b, + // Block 0x99, offset 0x2640 + 0x2641: 0x000a, + // Block 0x9a, offset 0x2680 + 0x2680: 0x000a, 0x2681: 0x000a, 0x2682: 0x000a, 0x2683: 0x000a, 0x2684: 0x000a, 0x2685: 0x000a, + 0x2686: 0x000a, 0x2687: 0x000a, 0x2688: 0x000a, 0x2689: 0x000a, 0x268a: 0x000a, 0x268b: 0x000a, + 0x268c: 0x000a, 0x2690: 0x000a, 0x2691: 0x000a, + 0x2692: 0x000a, 0x2693: 0x000a, 0x2694: 0x000a, 0x2695: 0x000a, 0x2696: 0x000a, 0x2697: 0x000a, + 0x2698: 0x000a, 0x2699: 0x000a, 0x269a: 0x000a, 0x269b: 0x000a, 0x269c: 0x000a, + 0x26a0: 0x000a, + // Block 0x9b, offset 0x26c0 + 0x26fd: 0x000c, + // Block 0x9c, offset 0x2700 + 0x2720: 0x000c, 0x2721: 0x0002, 0x2722: 0x0002, 0x2723: 0x0002, + 0x2724: 0x0002, 0x2725: 0x0002, 0x2726: 0x0002, 0x2727: 0x0002, 0x2728: 0x0002, 0x2729: 0x0002, + 0x272a: 0x0002, 0x272b: 0x0002, 0x272c: 0x0002, 0x272d: 0x0002, 0x272e: 0x0002, 0x272f: 0x0002, + 0x2730: 0x0002, 0x2731: 0x0002, 0x2732: 0x0002, 0x2733: 0x0002, 0x2734: 0x0002, 0x2735: 0x0002, + 0x2736: 0x0002, 0x2737: 0x0002, 0x2738: 0x0002, 0x2739: 0x0002, 0x273a: 0x0002, 0x273b: 0x0002, + // Block 0x9d, offset 0x2740 + 0x2776: 0x000c, 0x2777: 0x000c, 0x2778: 0x000c, 0x2779: 0x000c, 0x277a: 0x000c, + // Block 0x9e, offset 0x2780 + 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, + 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, + 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, + 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, + 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, + 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, + 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, + 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, + 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, + 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, + 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, + 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x000a, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x000c, 0x2802: 0x000c, 0x2803: 0x000c, 0x2804: 0x0001, 0x2805: 0x000c, + 0x2806: 0x000c, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x000c, 0x280d: 0x000c, 0x280e: 0x000c, 0x280f: 0x000c, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x000c, 0x2839: 0x000c, 0x283a: 0x000c, 0x283b: 0x0001, + 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x000c, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, + 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, + 0x2864: 0x0001, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, + 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, + 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, + 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x0001, 0x287a: 0x0001, 0x287b: 0x0001, + 0x287c: 0x0001, 0x287d: 0x0001, 0x287e: 0x0001, 0x287f: 0x0001, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, + 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, + 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, + 0x28b0: 0x0001, 0x28b1: 0x0001, 0x28b2: 0x0001, 0x28b3: 0x0001, 0x28b4: 0x0001, 0x28b5: 0x0001, + 0x28b6: 0x0001, 0x28b7: 0x0001, 0x28b8: 0x0001, 0x28b9: 0x000a, 0x28ba: 0x000a, 0x28bb: 0x000a, + 0x28bc: 0x000a, 0x28bd: 0x000a, 0x28be: 0x000a, 0x28bf: 0x000a, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x000d, 0x28c1: 0x000d, 0x28c2: 0x000d, 0x28c3: 0x000d, 0x28c4: 0x000d, 0x28c5: 0x000d, + 0x28c6: 0x000d, 0x28c7: 0x000d, 0x28c8: 0x000d, 0x28c9: 0x000d, 0x28ca: 0x000d, 0x28cb: 0x000d, + 0x28cc: 0x000d, 0x28cd: 0x000d, 0x28ce: 0x000d, 0x28cf: 0x000d, 0x28d0: 0x000d, 0x28d1: 0x000d, + 0x28d2: 0x000d, 0x28d3: 0x000d, 0x28d4: 0x000d, 0x28d5: 0x000d, 0x28d6: 0x000d, 0x28d7: 0x000d, + 0x28d8: 0x000d, 0x28d9: 0x000d, 0x28da: 0x000d, 0x28db: 0x000d, 0x28dc: 0x000d, 0x28dd: 0x000d, + 0x28de: 0x000d, 0x28df: 0x000d, 0x28e0: 0x000d, 0x28e1: 0x000d, 0x28e2: 0x000d, 0x28e3: 0x000d, + 0x28e4: 0x000c, 0x28e5: 0x000c, 0x28e6: 0x000c, 0x28e7: 0x000c, 0x28e8: 0x000d, 0x28e9: 0x000d, + 0x28ea: 0x000d, 0x28eb: 0x000d, 0x28ec: 0x000d, 0x28ed: 0x000d, 0x28ee: 0x000d, 0x28ef: 0x000d, + 0x28f0: 0x0005, 0x28f1: 0x0005, 0x28f2: 0x0005, 0x28f3: 0x0005, 0x28f4: 0x0005, 0x28f5: 0x0005, + 0x28f6: 0x0005, 0x28f7: 0x0005, 0x28f8: 0x0005, 0x28f9: 0x0005, 0x28fa: 0x000d, 0x28fb: 0x000d, + 0x28fc: 0x000d, 0x28fd: 0x000d, 0x28fe: 0x000d, 0x28ff: 0x000d, + // Block 0xa4, offset 0x2900 + 0x2900: 0x0001, 0x2901: 0x0001, 0x2902: 0x0001, 0x2903: 0x0001, 0x2904: 0x0001, 0x2905: 0x0001, + 0x2906: 0x0001, 0x2907: 0x0001, 0x2908: 0x0001, 0x2909: 0x0001, 0x290a: 0x0001, 0x290b: 0x0001, + 0x290c: 0x0001, 0x290d: 0x0001, 0x290e: 0x0001, 0x290f: 0x0001, 0x2910: 0x0001, 0x2911: 0x0001, + 0x2912: 0x0001, 0x2913: 0x0001, 0x2914: 0x0001, 0x2915: 0x0001, 0x2916: 0x0001, 0x2917: 0x0001, + 0x2918: 0x0001, 0x2919: 0x0001, 0x291a: 0x0001, 0x291b: 0x0001, 0x291c: 0x0001, 0x291d: 0x0001, + 0x291e: 0x0001, 0x291f: 0x0001, 0x2920: 0x0005, 0x2921: 0x0005, 0x2922: 0x0005, 0x2923: 0x0005, + 0x2924: 0x0005, 0x2925: 0x0005, 0x2926: 0x0005, 0x2927: 0x0005, 0x2928: 0x0005, 0x2929: 0x0005, + 0x292a: 0x0005, 0x292b: 0x0005, 0x292c: 0x0005, 0x292d: 0x0005, 0x292e: 0x0005, 0x292f: 0x0005, + 0x2930: 0x0005, 0x2931: 0x0005, 0x2932: 0x0005, 0x2933: 0x0005, 0x2934: 0x0005, 0x2935: 0x0005, + 0x2936: 0x0005, 0x2937: 0x0005, 0x2938: 0x0005, 0x2939: 0x0005, 0x293a: 0x0005, 0x293b: 0x0005, + 0x293c: 0x0005, 0x293d: 0x0005, 0x293e: 0x0005, 0x293f: 0x0001, + // Block 0xa5, offset 0x2940 + 0x2940: 0x0001, 0x2941: 0x0001, 0x2942: 0x0001, 0x2943: 0x0001, 0x2944: 0x0001, 0x2945: 0x0001, + 0x2946: 0x0001, 0x2947: 0x0001, 0x2948: 0x0001, 0x2949: 0x0001, 0x294a: 0x0001, 0x294b: 0x0001, + 0x294c: 0x0001, 0x294d: 0x0001, 0x294e: 0x0001, 0x294f: 0x0001, 0x2950: 0x0001, 0x2951: 0x0001, + 0x2952: 0x0001, 0x2953: 0x0001, 0x2954: 0x0001, 0x2955: 0x0001, 0x2956: 0x0001, 0x2957: 0x0001, + 0x2958: 0x0001, 0x2959: 0x0001, 0x295a: 0x0001, 0x295b: 0x0001, 0x295c: 0x0001, 0x295d: 0x0001, + 0x295e: 0x0001, 0x295f: 0x0001, 0x2960: 0x0001, 0x2961: 0x0001, 0x2962: 0x0001, 0x2963: 0x0001, + 0x2964: 0x0001, 0x2965: 0x0001, 0x2966: 0x0001, 0x2967: 0x0001, 0x2968: 0x0001, 0x2969: 0x0001, + 0x296a: 0x0001, 0x296b: 0x000c, 0x296c: 0x000c, 0x296d: 0x0001, 0x296e: 0x0001, 0x296f: 0x0001, + 0x2970: 0x0001, 0x2971: 0x0001, 0x2972: 0x0001, 0x2973: 0x0001, 0x2974: 0x0001, 0x2975: 0x0001, + 0x2976: 0x0001, 0x2977: 0x0001, 0x2978: 0x0001, 0x2979: 0x0001, 0x297a: 0x0001, 0x297b: 0x0001, + 0x297c: 0x0001, 0x297d: 0x0001, 0x297e: 0x0001, 0x297f: 0x0001, + // Block 0xa6, offset 0x2980 + 0x2980: 0x0001, 0x2981: 0x0001, 0x2982: 0x0001, 0x2983: 0x0001, 0x2984: 0x0001, 0x2985: 0x0001, + 0x2986: 0x0001, 0x2987: 0x0001, 0x2988: 0x0001, 0x2989: 0x0001, 0x298a: 0x0001, 0x298b: 0x0001, + 0x298c: 0x0001, 0x298d: 0x0001, 0x298e: 0x0001, 0x298f: 0x0001, 0x2990: 0x0001, 0x2991: 0x0001, + 0x2992: 0x0001, 0x2993: 0x0001, 0x2994: 0x0001, 0x2995: 0x0001, 0x2996: 0x0001, 0x2997: 0x0001, + 0x2998: 0x0001, 0x2999: 0x0001, 0x299a: 0x0001, 0x299b: 0x0001, 0x299c: 0x0001, 0x299d: 0x0001, + 0x299e: 0x0001, 0x299f: 0x0001, 0x29a0: 0x0001, 0x29a1: 0x0001, 0x29a2: 0x0001, 0x29a3: 0x0001, + 0x29a4: 0x0001, 0x29a5: 0x0001, 0x29a6: 0x0001, 0x29a7: 0x0001, 0x29a8: 0x0001, 0x29a9: 0x0001, + 0x29aa: 0x0001, 0x29ab: 0x0001, 0x29ac: 0x0001, 0x29ad: 0x0001, 0x29ae: 0x0001, 0x29af: 0x0001, + 0x29b0: 0x000d, 0x29b1: 0x000d, 0x29b2: 0x000d, 0x29b3: 0x000d, 0x29b4: 0x000d, 0x29b5: 0x000d, + 0x29b6: 0x000d, 0x29b7: 0x000d, 0x29b8: 0x000d, 0x29b9: 0x000d, 0x29ba: 0x000d, 0x29bb: 0x000d, + 0x29bc: 0x000d, 0x29bd: 0x000d, 0x29be: 0x000d, 0x29bf: 0x000d, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x000d, 0x29c1: 0x000d, 0x29c2: 0x000d, 0x29c3: 0x000d, 0x29c4: 0x000d, 0x29c5: 0x000d, + 0x29c6: 0x000c, 0x29c7: 0x000c, 0x29c8: 0x000c, 0x29c9: 0x000c, 0x29ca: 0x000c, 0x29cb: 0x000c, + 0x29cc: 0x000c, 0x29cd: 0x000c, 0x29ce: 0x000c, 0x29cf: 0x000c, 0x29d0: 0x000c, 0x29d1: 0x000d, + 0x29d2: 0x000d, 0x29d3: 0x000d, 0x29d4: 0x000d, 0x29d5: 0x000d, 0x29d6: 0x000d, 0x29d7: 0x000d, + 0x29d8: 0x000d, 0x29d9: 0x000d, 0x29da: 0x000d, 0x29db: 0x000d, 0x29dc: 0x000d, 0x29dd: 0x000d, + 0x29de: 0x000d, 0x29df: 0x000d, 0x29e0: 0x000d, 0x29e1: 0x000d, 0x29e2: 0x000d, 0x29e3: 0x000d, + 0x29e4: 0x000d, 0x29e5: 0x000d, 0x29e6: 0x000d, 0x29e7: 0x000d, 0x29e8: 0x000d, 0x29e9: 0x000d, + 0x29ea: 0x000d, 0x29eb: 0x000d, 0x29ec: 0x000d, 0x29ed: 0x000d, 0x29ee: 0x000d, 0x29ef: 0x000d, + 0x29f0: 0x0001, 0x29f1: 0x0001, 0x29f2: 0x0001, 0x29f3: 0x0001, 0x29f4: 0x0001, 0x29f5: 0x0001, + 0x29f6: 0x0001, 0x29f7: 0x0001, 0x29f8: 0x0001, 0x29f9: 0x0001, 0x29fa: 0x0001, 0x29fb: 0x0001, + 0x29fc: 0x0001, 0x29fd: 0x0001, 0x29fe: 0x0001, 0x29ff: 0x0001, + // Block 0xa8, offset 0x2a00 + 0x2a01: 0x000c, + 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, + 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, 0x2a3f: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x000c, 0x2a41: 0x000c, 0x2a42: 0x000c, 0x2a43: 0x000c, 0x2a44: 0x000c, 0x2a45: 0x000c, + 0x2a46: 0x000c, + 0x2a52: 0x000a, 0x2a53: 0x000a, 0x2a54: 0x000a, 0x2a55: 0x000a, 0x2a56: 0x000a, 0x2a57: 0x000a, + 0x2a58: 0x000a, 0x2a59: 0x000a, 0x2a5a: 0x000a, 0x2a5b: 0x000a, 0x2a5c: 0x000a, 0x2a5d: 0x000a, + 0x2a5e: 0x000a, 0x2a5f: 0x000a, 0x2a60: 0x000a, 0x2a61: 0x000a, 0x2a62: 0x000a, 0x2a63: 0x000a, + 0x2a64: 0x000a, 0x2a65: 0x000a, + 0x2a7f: 0x000c, + // Block 0xaa, offset 0x2a80 + 0x2a80: 0x000c, 0x2a81: 0x000c, + 0x2ab3: 0x000c, 0x2ab4: 0x000c, 0x2ab5: 0x000c, + 0x2ab6: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x000c, 0x2ac1: 0x000c, 0x2ac2: 0x000c, + 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, + 0x2aea: 0x000c, 0x2aeb: 0x000c, 0x2aed: 0x000c, 0x2aee: 0x000c, 0x2aef: 0x000c, + 0x2af0: 0x000c, 0x2af1: 0x000c, 0x2af2: 0x000c, 0x2af3: 0x000c, 0x2af4: 0x000c, + // Block 0xac, offset 0x2b00 + 0x2b33: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, 0x2b41: 0x000c, + 0x2b76: 0x000c, 0x2b77: 0x000c, 0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c, + 0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2b89: 0x000c, 0x2b8a: 0x000c, 0x2b8b: 0x000c, + 0x2b8c: 0x000c, 0x2b8f: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bef: 0x000c, + 0x2bf0: 0x000c, 0x2bf1: 0x000c, 0x2bf4: 0x000c, + 0x2bf6: 0x000c, 0x2bf7: 0x000c, + 0x2bfe: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c1f: 0x000c, 0x2c23: 0x000c, + 0x2c24: 0x000c, 0x2c25: 0x000c, 0x2c26: 0x000c, 0x2c27: 0x000c, 0x2c28: 0x000c, 0x2c29: 0x000c, + 0x2c2a: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x000c, + 0x2c66: 0x000c, 0x2c67: 0x000c, 0x2c68: 0x000c, 0x2c69: 0x000c, + 0x2c6a: 0x000c, 0x2c6b: 0x000c, 0x2c6c: 0x000c, + 0x2c70: 0x000c, 0x2c71: 0x000c, 0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2cb8: 0x000c, 0x2cb9: 0x000c, 0x2cba: 0x000c, 0x2cbb: 0x000c, + 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbe: 0x000c, 0x2cbf: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cc2: 0x000c, 0x2cc3: 0x000c, 0x2cc4: 0x000c, + 0x2cc6: 0x000c, + 0x2cde: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, + 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d3a: 0x000c, + 0x2d3f: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x000c, 0x2d42: 0x000c, 0x2d43: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, + 0x2dbc: 0x000c, 0x2dbd: 0x000c, 0x2dbf: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x000c, + 0x2ddc: 0x000c, 0x2ddd: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, + 0x2e36: 0x000c, 0x2e37: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, + 0x2e3d: 0x000c, 0x2e3f: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e40: 0x000c, + 0x2e60: 0x000a, 0x2e61: 0x000a, 0x2e62: 0x000a, 0x2e63: 0x000a, + 0x2e64: 0x000a, 0x2e65: 0x000a, 0x2e66: 0x000a, 0x2e67: 0x000a, 0x2e68: 0x000a, 0x2e69: 0x000a, + 0x2e6a: 0x000a, 0x2e6b: 0x000a, 0x2e6c: 0x000a, + // Block 0xba, offset 0x2e80 + 0x2eab: 0x000c, 0x2ead: 0x000c, + 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb7: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2edd: 0x000c, + 0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c, + 0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee7: 0x000c, 0x2ee8: 0x000c, 0x2ee9: 0x000c, + 0x2eea: 0x000c, 0x2eeb: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f2f: 0x000c, + 0x2f30: 0x000c, 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, + 0x2f36: 0x000c, 0x2f37: 0x000c, 0x2f39: 0x000c, 0x2f3a: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f7b: 0x000c, + 0x2f7c: 0x000c, 0x2f7e: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2f83: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2fd4: 0x000c, 0x2fd5: 0x000c, 0x2fd6: 0x000c, 0x2fd7: 0x000c, + 0x2fda: 0x000c, 0x2fdb: 0x000c, + 0x2fe0: 0x000c, + // Block 0xc0, offset 0x3000 + 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c, + 0x3006: 0x000c, 0x3009: 0x000c, 0x300a: 0x000c, + 0x3033: 0x000c, 0x3034: 0x000c, 0x3035: 0x000c, + 0x3036: 0x000c, 0x3037: 0x000c, 0x3038: 0x000c, 0x303b: 0x000c, + 0x303c: 0x000c, 0x303d: 0x000c, 0x303e: 0x000c, + // Block 0xc1, offset 0x3040 + 0x3047: 0x000c, + 0x3051: 0x000c, + 0x3052: 0x000c, 0x3053: 0x000c, 0x3054: 0x000c, 0x3055: 0x000c, 0x3056: 0x000c, + 0x3059: 0x000c, 0x305a: 0x000c, 0x305b: 0x000c, + // Block 0xc2, offset 0x3080 + 0x308a: 0x000c, 0x308b: 0x000c, + 0x308c: 0x000c, 0x308d: 0x000c, 0x308e: 0x000c, 0x308f: 0x000c, 0x3090: 0x000c, 0x3091: 0x000c, + 0x3092: 0x000c, 0x3093: 0x000c, 0x3094: 0x000c, 0x3095: 0x000c, 0x3096: 0x000c, + 0x3098: 0x000c, 0x3099: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30f0: 0x000c, 0x30f1: 0x000c, 0x30f2: 0x000c, 0x30f3: 0x000c, 0x30f4: 0x000c, 0x30f5: 0x000c, + 0x30f6: 0x000c, 0x30f8: 0x000c, 0x30f9: 0x000c, 0x30fa: 0x000c, 0x30fb: 0x000c, + 0x30fc: 0x000c, 0x30fd: 0x000c, + // Block 0xc4, offset 0x3100 + 0x3112: 0x000c, 0x3113: 0x000c, 0x3114: 0x000c, 0x3115: 0x000c, 0x3116: 0x000c, 0x3117: 0x000c, + 0x3118: 0x000c, 0x3119: 0x000c, 0x311a: 0x000c, 0x311b: 0x000c, 0x311c: 0x000c, 0x311d: 0x000c, + 0x311e: 0x000c, 0x311f: 0x000c, 0x3120: 0x000c, 0x3121: 0x000c, 0x3122: 0x000c, 0x3123: 0x000c, + 0x3124: 0x000c, 0x3125: 0x000c, 0x3126: 0x000c, 0x3127: 0x000c, + 0x312a: 0x000c, 0x312b: 0x000c, 0x312c: 0x000c, 0x312d: 0x000c, 0x312e: 0x000c, 0x312f: 0x000c, + 0x3130: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3135: 0x000c, + 0x3136: 0x000c, + // Block 0xc5, offset 0x3140 + 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, + 0x3176: 0x000c, 0x317a: 0x000c, + 0x317c: 0x000c, 0x317d: 0x000c, 0x317f: 0x000c, + // Block 0xc6, offset 0x3180 + 0x3180: 0x000c, 0x3181: 0x000c, 0x3182: 0x000c, 0x3183: 0x000c, 0x3184: 0x000c, 0x3185: 0x000c, + 0x3187: 0x000c, + // Block 0xc7, offset 0x31c0 + 0x31d0: 0x000c, 0x31d1: 0x000c, + 0x31d5: 0x000c, 0x31d7: 0x000c, + // Block 0xc8, offset 0x3200 + 0x3233: 0x000c, 0x3234: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3255: 0x000a, 0x3256: 0x000a, 0x3257: 0x000a, + 0x3258: 0x000a, 0x3259: 0x000a, 0x325a: 0x000a, 0x325b: 0x000a, 0x325c: 0x000a, 0x325d: 0x0004, + 0x325e: 0x0004, 0x325f: 0x0004, 0x3260: 0x0004, 0x3261: 0x000a, 0x3262: 0x000a, 0x3263: 0x000a, + 0x3264: 0x000a, 0x3265: 0x000a, 0x3266: 0x000a, 0x3267: 0x000a, 0x3268: 0x000a, 0x3269: 0x000a, + 0x326a: 0x000a, 0x326b: 0x000a, 0x326c: 0x000a, 0x326d: 0x000a, 0x326e: 0x000a, 0x326f: 0x000a, + 0x3270: 0x000a, 0x3271: 0x000a, + // Block 0xca, offset 0x3280 + 0x32b0: 0x000c, 0x32b1: 0x000c, 0x32b2: 0x000c, 0x32b3: 0x000c, 0x32b4: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c, + 0x32f6: 0x000c, + // Block 0xcc, offset 0x3300 + 0x330f: 0x000c, + // Block 0xcd, offset 0x3340 + 0x334f: 0x000c, 0x3350: 0x000c, 0x3351: 0x000c, + 0x3352: 0x000c, + // Block 0xce, offset 0x3380 + 0x33a2: 0x000a, + 0x33a4: 0x000c, + // Block 0xcf, offset 0x33c0 + 0x33dd: 0x000c, + 0x33de: 0x000c, 0x33e0: 0x000b, 0x33e1: 0x000b, 0x33e2: 0x000b, 0x33e3: 0x000b, + // Block 0xd0, offset 0x3400 + 0x3427: 0x000c, 0x3428: 0x000c, 0x3429: 0x000c, + 0x3433: 0x000b, 0x3434: 0x000b, 0x3435: 0x000b, + 0x3436: 0x000b, 0x3437: 0x000b, 0x3438: 0x000b, 0x3439: 0x000b, 0x343a: 0x000b, 0x343b: 0x000c, + 0x343c: 0x000c, 0x343d: 0x000c, 0x343e: 0x000c, 0x343f: 0x000c, + // Block 0xd1, offset 0x3440 + 0x3440: 0x000c, 0x3441: 0x000c, 0x3442: 0x000c, 0x3445: 0x000c, + 0x3446: 0x000c, 0x3447: 0x000c, 0x3448: 0x000c, 0x3449: 0x000c, 0x344a: 0x000c, 0x344b: 0x000c, + 0x346a: 0x000c, 0x346b: 0x000c, 0x346c: 0x000c, 0x346d: 0x000c, + // Block 0xd2, offset 0x3480 + 0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000c, 0x3483: 0x000c, 0x3484: 0x000c, 0x3485: 0x000a, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, + 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, + 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, + 0x34d2: 0x000a, 0x34d3: 0x000a, 0x34d4: 0x000a, 0x34d5: 0x000a, 0x34d6: 0x000a, + // Block 0xd4, offset 0x3500 + 0x351b: 0x000a, + // Block 0xd5, offset 0x3540 + 0x3555: 0x000a, + // Block 0xd6, offset 0x3580 + 0x358f: 0x000a, + // Block 0xd7, offset 0x35c0 + 0x35c9: 0x000a, + // Block 0xd8, offset 0x3600 + 0x3603: 0x000a, + 0x360e: 0x0002, 0x360f: 0x0002, 0x3610: 0x0002, 0x3611: 0x0002, + 0x3612: 0x0002, 0x3613: 0x0002, 0x3614: 0x0002, 0x3615: 0x0002, 0x3616: 0x0002, 0x3617: 0x0002, + 0x3618: 0x0002, 0x3619: 0x0002, 0x361a: 0x0002, 0x361b: 0x0002, 0x361c: 0x0002, 0x361d: 0x0002, + 0x361e: 0x0002, 0x361f: 0x0002, 0x3620: 0x0002, 0x3621: 0x0002, 0x3622: 0x0002, 0x3623: 0x0002, + 0x3624: 0x0002, 0x3625: 0x0002, 0x3626: 0x0002, 0x3627: 0x0002, 0x3628: 0x0002, 0x3629: 0x0002, + 0x362a: 0x0002, 0x362b: 0x0002, 0x362c: 0x0002, 0x362d: 0x0002, 0x362e: 0x0002, 0x362f: 0x0002, + 0x3630: 0x0002, 0x3631: 0x0002, 0x3632: 0x0002, 0x3633: 0x0002, 0x3634: 0x0002, 0x3635: 0x0002, + 0x3636: 0x0002, 0x3637: 0x0002, 0x3638: 0x0002, 0x3639: 0x0002, 0x363a: 0x0002, 0x363b: 0x0002, + 0x363c: 0x0002, 0x363d: 0x0002, 0x363e: 0x0002, 0x363f: 0x0002, + // Block 0xd9, offset 0x3640 + 0x3640: 0x000c, 0x3641: 0x000c, 0x3642: 0x000c, 0x3643: 0x000c, 0x3644: 0x000c, 0x3645: 0x000c, + 0x3646: 0x000c, 0x3647: 0x000c, 0x3648: 0x000c, 0x3649: 0x000c, 0x364a: 0x000c, 0x364b: 0x000c, + 0x364c: 0x000c, 0x364d: 0x000c, 0x364e: 0x000c, 0x364f: 0x000c, 0x3650: 0x000c, 0x3651: 0x000c, + 0x3652: 0x000c, 0x3653: 0x000c, 0x3654: 0x000c, 0x3655: 0x000c, 0x3656: 0x000c, 0x3657: 0x000c, + 0x3658: 0x000c, 0x3659: 0x000c, 0x365a: 0x000c, 0x365b: 0x000c, 0x365c: 0x000c, 0x365d: 0x000c, + 0x365e: 0x000c, 0x365f: 0x000c, 0x3660: 0x000c, 0x3661: 0x000c, 0x3662: 0x000c, 0x3663: 0x000c, + 0x3664: 0x000c, 0x3665: 0x000c, 0x3666: 0x000c, 0x3667: 0x000c, 0x3668: 0x000c, 0x3669: 0x000c, + 0x366a: 0x000c, 0x366b: 0x000c, 0x366c: 0x000c, 0x366d: 0x000c, 0x366e: 0x000c, 0x366f: 0x000c, + 0x3670: 0x000c, 0x3671: 0x000c, 0x3672: 0x000c, 0x3673: 0x000c, 0x3674: 0x000c, 0x3675: 0x000c, + 0x3676: 0x000c, 0x367b: 0x000c, + 0x367c: 0x000c, 0x367d: 0x000c, 0x367e: 0x000c, 0x367f: 0x000c, + // Block 0xda, offset 0x3680 + 0x3680: 0x000c, 0x3681: 0x000c, 0x3682: 0x000c, 0x3683: 0x000c, 0x3684: 0x000c, 0x3685: 0x000c, + 0x3686: 0x000c, 0x3687: 0x000c, 0x3688: 0x000c, 0x3689: 0x000c, 0x368a: 0x000c, 0x368b: 0x000c, + 0x368c: 0x000c, 0x368d: 0x000c, 0x368e: 0x000c, 0x368f: 0x000c, 0x3690: 0x000c, 0x3691: 0x000c, + 0x3692: 0x000c, 0x3693: 0x000c, 0x3694: 0x000c, 0x3695: 0x000c, 0x3696: 0x000c, 0x3697: 0x000c, + 0x3698: 0x000c, 0x3699: 0x000c, 0x369a: 0x000c, 0x369b: 0x000c, 0x369c: 0x000c, 0x369d: 0x000c, + 0x369e: 0x000c, 0x369f: 0x000c, 0x36a0: 0x000c, 0x36a1: 0x000c, 0x36a2: 0x000c, 0x36a3: 0x000c, + 0x36a4: 0x000c, 0x36a5: 0x000c, 0x36a6: 0x000c, 0x36a7: 0x000c, 0x36a8: 0x000c, 0x36a9: 0x000c, + 0x36aa: 0x000c, 0x36ab: 0x000c, 0x36ac: 0x000c, + 0x36b5: 0x000c, + // Block 0xdb, offset 0x36c0 + 0x36c4: 0x000c, + 0x36db: 0x000c, 0x36dc: 0x000c, 0x36dd: 0x000c, + 0x36de: 0x000c, 0x36df: 0x000c, 0x36e1: 0x000c, 0x36e2: 0x000c, 0x36e3: 0x000c, + 0x36e4: 0x000c, 0x36e5: 0x000c, 0x36e6: 0x000c, 0x36e7: 0x000c, 0x36e8: 0x000c, 0x36e9: 0x000c, + 0x36ea: 0x000c, 0x36eb: 0x000c, 0x36ec: 0x000c, 0x36ed: 0x000c, 0x36ee: 0x000c, 0x36ef: 0x000c, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000c, 0x3701: 0x000c, 0x3702: 0x000c, 0x3703: 0x000c, 0x3704: 0x000c, 0x3705: 0x000c, + 0x3706: 0x000c, 0x3708: 0x000c, 0x3709: 0x000c, 0x370a: 0x000c, 0x370b: 0x000c, + 0x370c: 0x000c, 0x370d: 0x000c, 0x370e: 0x000c, 0x370f: 0x000c, 0x3710: 0x000c, 0x3711: 0x000c, + 0x3712: 0x000c, 0x3713: 0x000c, 0x3714: 0x000c, 0x3715: 0x000c, 0x3716: 0x000c, 0x3717: 0x000c, + 0x3718: 0x000c, 0x371b: 0x000c, 0x371c: 0x000c, 0x371d: 0x000c, + 0x371e: 0x000c, 0x371f: 0x000c, 0x3720: 0x000c, 0x3721: 0x000c, 0x3723: 0x000c, + 0x3724: 0x000c, 0x3726: 0x000c, 0x3727: 0x000c, 0x3728: 0x000c, 0x3729: 0x000c, + 0x372a: 0x000c, + // Block 0xdd, offset 0x3740 + 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, + 0x377f: 0x0004, + // Block 0xde, offset 0x3780 + 0x3780: 0x0001, 0x3781: 0x0001, 0x3782: 0x0001, 0x3783: 0x0001, 0x3784: 0x0001, 0x3785: 0x0001, + 0x3786: 0x0001, 0x3787: 0x0001, 0x3788: 0x0001, 0x3789: 0x0001, 0x378a: 0x0001, 0x378b: 0x0001, + 0x378c: 0x0001, 0x378d: 0x0001, 0x378e: 0x0001, 0x378f: 0x0001, 0x3790: 0x000c, 0x3791: 0x000c, + 0x3792: 0x000c, 0x3793: 0x000c, 0x3794: 0x000c, 0x3795: 0x000c, 0x3796: 0x000c, 0x3797: 0x0001, + 0x3798: 0x0001, 0x3799: 0x0001, 0x379a: 0x0001, 0x379b: 0x0001, 0x379c: 0x0001, 0x379d: 0x0001, + 0x379e: 0x0001, 0x379f: 0x0001, 0x37a0: 0x0001, 0x37a1: 0x0001, 0x37a2: 0x0001, 0x37a3: 0x0001, + 0x37a4: 0x0001, 0x37a5: 0x0001, 0x37a6: 0x0001, 0x37a7: 0x0001, 0x37a8: 0x0001, 0x37a9: 0x0001, + 0x37aa: 0x0001, 0x37ab: 0x0001, 0x37ac: 0x0001, 0x37ad: 0x0001, 0x37ae: 0x0001, 0x37af: 0x0001, + 0x37b0: 0x0001, 0x37b1: 0x0001, 0x37b2: 0x0001, 0x37b3: 0x0001, 0x37b4: 0x0001, 0x37b5: 0x0001, + 0x37b6: 0x0001, 0x37b7: 0x0001, 0x37b8: 0x0001, 0x37b9: 0x0001, 0x37ba: 0x0001, 0x37bb: 0x0001, + 0x37bc: 0x0001, 0x37bd: 0x0001, 0x37be: 0x0001, 0x37bf: 0x0001, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x0001, 0x37c1: 0x0001, 0x37c2: 0x0001, 0x37c3: 0x0001, 0x37c4: 0x000c, 0x37c5: 0x000c, + 0x37c6: 0x000c, 0x37c7: 0x000c, 0x37c8: 0x000c, 0x37c9: 0x000c, 0x37ca: 0x000c, 0x37cb: 0x0001, + 0x37cc: 0x0001, 0x37cd: 0x0001, 0x37ce: 0x0001, 0x37cf: 0x0001, 0x37d0: 0x0001, 0x37d1: 0x0001, + 0x37d2: 0x0001, 0x37d3: 0x0001, 0x37d4: 0x0001, 0x37d5: 0x0001, 0x37d6: 0x0001, 0x37d7: 0x0001, + 0x37d8: 0x0001, 0x37d9: 0x0001, 0x37da: 0x0001, 0x37db: 0x0001, 0x37dc: 0x0001, 0x37dd: 0x0001, + 0x37de: 0x0001, 0x37df: 0x0001, 0x37e0: 0x0001, 0x37e1: 0x0001, 0x37e2: 0x0001, 0x37e3: 0x0001, + 0x37e4: 0x0001, 0x37e5: 0x0001, 0x37e6: 0x0001, 0x37e7: 0x0001, 0x37e8: 0x0001, 0x37e9: 0x0001, + 0x37ea: 0x0001, 0x37eb: 0x0001, 0x37ec: 0x0001, 0x37ed: 0x0001, 0x37ee: 0x0001, 0x37ef: 0x0001, + 0x37f0: 0x0001, 0x37f1: 0x0001, 0x37f2: 0x0001, 0x37f3: 0x0001, 0x37f4: 0x0001, 0x37f5: 0x0001, + 0x37f6: 0x0001, 0x37f7: 0x0001, 0x37f8: 0x0001, 0x37f9: 0x0001, 0x37fa: 0x0001, 0x37fb: 0x0001, + 0x37fc: 0x0001, 0x37fd: 0x0001, 0x37fe: 0x0001, 0x37ff: 0x0001, + // Block 0xe0, offset 0x3800 + 0x3800: 0x000d, 0x3801: 0x000d, 0x3802: 0x000d, 0x3803: 0x000d, 0x3804: 0x000d, 0x3805: 0x000d, + 0x3806: 0x000d, 0x3807: 0x000d, 0x3808: 0x000d, 0x3809: 0x000d, 0x380a: 0x000d, 0x380b: 0x000d, + 0x380c: 0x000d, 0x380d: 0x000d, 0x380e: 0x000d, 0x380f: 0x000d, 0x3810: 0x0001, 0x3811: 0x0001, + 0x3812: 0x0001, 0x3813: 0x0001, 0x3814: 0x0001, 0x3815: 0x0001, 0x3816: 0x0001, 0x3817: 0x0001, + 0x3818: 0x0001, 0x3819: 0x0001, 0x381a: 0x0001, 0x381b: 0x0001, 0x381c: 0x0001, 0x381d: 0x0001, + 0x381e: 0x0001, 0x381f: 0x0001, 0x3820: 0x0001, 0x3821: 0x0001, 0x3822: 0x0001, 0x3823: 0x0001, + 0x3824: 0x0001, 0x3825: 0x0001, 0x3826: 0x0001, 0x3827: 0x0001, 0x3828: 0x0001, 0x3829: 0x0001, + 0x382a: 0x0001, 0x382b: 0x0001, 0x382c: 0x0001, 0x382d: 0x0001, 0x382e: 0x0001, 0x382f: 0x0001, + 0x3830: 0x0001, 0x3831: 0x0001, 0x3832: 0x0001, 0x3833: 0x0001, 0x3834: 0x0001, 0x3835: 0x0001, + 0x3836: 0x0001, 0x3837: 0x0001, 0x3838: 0x0001, 0x3839: 0x0001, 0x383a: 0x0001, 0x383b: 0x0001, + 0x383c: 0x0001, 0x383d: 0x0001, 0x383e: 0x0001, 0x383f: 0x0001, + // Block 0xe1, offset 0x3840 + 0x3840: 0x000d, 0x3841: 0x000d, 0x3842: 0x000d, 0x3843: 0x000d, 0x3844: 0x000d, 0x3845: 0x000d, + 0x3846: 0x000d, 0x3847: 0x000d, 0x3848: 0x000d, 0x3849: 0x000d, 0x384a: 0x000d, 0x384b: 0x000d, + 0x384c: 0x000d, 0x384d: 0x000d, 0x384e: 0x000d, 0x384f: 0x000d, 0x3850: 0x000d, 0x3851: 0x000d, + 0x3852: 0x000d, 0x3853: 0x000d, 0x3854: 0x000d, 0x3855: 0x000d, 0x3856: 0x000d, 0x3857: 0x000d, + 0x3858: 0x000d, 0x3859: 0x000d, 0x385a: 0x000d, 0x385b: 0x000d, 0x385c: 0x000d, 0x385d: 0x000d, + 0x385e: 0x000d, 0x385f: 0x000d, 0x3860: 0x000d, 0x3861: 0x000d, 0x3862: 0x000d, 0x3863: 0x000d, + 0x3864: 0x000d, 0x3865: 0x000d, 0x3866: 0x000d, 0x3867: 0x000d, 0x3868: 0x000d, 0x3869: 0x000d, + 0x386a: 0x000d, 0x386b: 0x000d, 0x386c: 0x000d, 0x386d: 0x000d, 0x386e: 0x000d, 0x386f: 0x000d, + 0x3870: 0x000a, 0x3871: 0x000a, 0x3872: 0x000d, 0x3873: 0x000d, 0x3874: 0x000d, 0x3875: 0x000d, + 0x3876: 0x000d, 0x3877: 0x000d, 0x3878: 0x000d, 0x3879: 0x000d, 0x387a: 0x000d, 0x387b: 0x000d, + 0x387c: 0x000d, 0x387d: 0x000d, 0x387e: 0x000d, 0x387f: 0x000d, + // Block 0xe2, offset 0x3880 + 0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a, + 0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a, + 0x388c: 0x000a, 0x388d: 0x000a, 0x388e: 0x000a, 0x388f: 0x000a, 0x3890: 0x000a, 0x3891: 0x000a, + 0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, 0x3896: 0x000a, 0x3897: 0x000a, + 0x3898: 0x000a, 0x3899: 0x000a, 0x389a: 0x000a, 0x389b: 0x000a, 0x389c: 0x000a, 0x389d: 0x000a, + 0x389e: 0x000a, 0x389f: 0x000a, 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a, + 0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a, + 0x38aa: 0x000a, 0x38ab: 0x000a, + 0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a, + 0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, 0x38bb: 0x000a, + 0x38bc: 0x000a, 0x38bd: 0x000a, 0x38be: 0x000a, 0x38bf: 0x000a, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a, + 0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a, + 0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a, + 0x38d2: 0x000a, 0x38d3: 0x000a, + 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a, + 0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a, + 0x38ea: 0x000a, 0x38eb: 0x000a, 0x38ec: 0x000a, 0x38ed: 0x000a, 0x38ee: 0x000a, + 0x38f1: 0x000a, 0x38f2: 0x000a, 0x38f3: 0x000a, 0x38f4: 0x000a, 0x38f5: 0x000a, + 0x38f6: 0x000a, 0x38f7: 0x000a, 0x38f8: 0x000a, 0x38f9: 0x000a, 0x38fa: 0x000a, 0x38fb: 0x000a, + 0x38fc: 0x000a, 0x38fd: 0x000a, 0x38fe: 0x000a, 0x38ff: 0x000a, + // Block 0xe4, offset 0x3900 + 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, + 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, + 0x390c: 0x000a, 0x390d: 0x000a, 0x390e: 0x000a, 0x390f: 0x000a, 0x3911: 0x000a, + 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a, + 0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a, + 0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a, 0x3923: 0x000a, + 0x3924: 0x000a, 0x3925: 0x000a, 0x3926: 0x000a, 0x3927: 0x000a, 0x3928: 0x000a, 0x3929: 0x000a, + 0x392a: 0x000a, 0x392b: 0x000a, 0x392c: 0x000a, 0x392d: 0x000a, 0x392e: 0x000a, 0x392f: 0x000a, + 0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a, + // Block 0xe5, offset 0x3940 + 0x3940: 0x0002, 0x3941: 0x0002, 0x3942: 0x0002, 0x3943: 0x0002, 0x3944: 0x0002, 0x3945: 0x0002, + 0x3946: 0x0002, 0x3947: 0x0002, 0x3948: 0x0002, 0x3949: 0x0002, 0x394a: 0x0002, 0x394b: 0x000a, + 0x394c: 0x000a, 0x394d: 0x000a, 0x394e: 0x000a, 0x394f: 0x000a, + 0x396f: 0x000a, + // Block 0xe6, offset 0x3980 + 0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a, 0x39ae: 0x000a, 0x39af: 0x000a, + // Block 0xe7, offset 0x39c0 + 0x39ed: 0x000a, + // Block 0xe8, offset 0x3a00 + 0x3a20: 0x000a, 0x3a21: 0x000a, 0x3a22: 0x000a, 0x3a23: 0x000a, + 0x3a24: 0x000a, 0x3a25: 0x000a, + // Block 0xe9, offset 0x3a40 + 0x3a40: 0x000a, 0x3a41: 0x000a, 0x3a42: 0x000a, 0x3a43: 0x000a, 0x3a44: 0x000a, 0x3a45: 0x000a, + 0x3a46: 0x000a, 0x3a47: 0x000a, 0x3a48: 0x000a, 0x3a49: 0x000a, 0x3a4a: 0x000a, 0x3a4b: 0x000a, + 0x3a4c: 0x000a, 0x3a4d: 0x000a, 0x3a4e: 0x000a, 0x3a4f: 0x000a, 0x3a50: 0x000a, 0x3a51: 0x000a, + 0x3a52: 0x000a, 0x3a53: 0x000a, 0x3a54: 0x000a, 0x3a55: 0x000a, 0x3a56: 0x000a, 0x3a57: 0x000a, + 0x3a60: 0x000a, 0x3a61: 0x000a, 0x3a62: 0x000a, 0x3a63: 0x000a, + 0x3a64: 0x000a, 0x3a65: 0x000a, 0x3a66: 0x000a, 0x3a67: 0x000a, 0x3a68: 0x000a, 0x3a69: 0x000a, + 0x3a6a: 0x000a, 0x3a6b: 0x000a, 0x3a6c: 0x000a, + 0x3a70: 0x000a, 0x3a71: 0x000a, 0x3a72: 0x000a, 0x3a73: 0x000a, 0x3a74: 0x000a, 0x3a75: 0x000a, + 0x3a76: 0x000a, 0x3a77: 0x000a, 0x3a78: 0x000a, 0x3a79: 0x000a, 0x3a7a: 0x000a, 0x3a7b: 0x000a, + 0x3a7c: 0x000a, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x000a, 0x3a81: 0x000a, 0x3a82: 0x000a, 0x3a83: 0x000a, 0x3a84: 0x000a, 0x3a85: 0x000a, + 0x3a86: 0x000a, 0x3a87: 0x000a, 0x3a88: 0x000a, 0x3a89: 0x000a, 0x3a8a: 0x000a, 0x3a8b: 0x000a, + 0x3a8c: 0x000a, 0x3a8d: 0x000a, 0x3a8e: 0x000a, 0x3a8f: 0x000a, 0x3a90: 0x000a, 0x3a91: 0x000a, + 0x3a92: 0x000a, 0x3a93: 0x000a, 0x3a94: 0x000a, 0x3a95: 0x000a, 0x3a96: 0x000a, 0x3a97: 0x000a, + 0x3a98: 0x000a, + 0x3aa0: 0x000a, 0x3aa1: 0x000a, 0x3aa2: 0x000a, 0x3aa3: 0x000a, + 0x3aa4: 0x000a, 0x3aa5: 0x000a, 0x3aa6: 0x000a, 0x3aa7: 0x000a, 0x3aa8: 0x000a, 0x3aa9: 0x000a, + 0x3aaa: 0x000a, 0x3aab: 0x000a, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x000a, 0x3ac1: 0x000a, 0x3ac2: 0x000a, 0x3ac3: 0x000a, 0x3ac4: 0x000a, 0x3ac5: 0x000a, + 0x3ac6: 0x000a, 0x3ac7: 0x000a, 0x3ac8: 0x000a, 0x3ac9: 0x000a, 0x3aca: 0x000a, 0x3acb: 0x000a, + 0x3ad0: 0x000a, 0x3ad1: 0x000a, + 0x3ad2: 0x000a, 0x3ad3: 0x000a, 0x3ad4: 0x000a, 0x3ad5: 0x000a, 0x3ad6: 0x000a, 0x3ad7: 0x000a, + 0x3ad8: 0x000a, 0x3ad9: 0x000a, 0x3ada: 0x000a, 0x3adb: 0x000a, 0x3adc: 0x000a, 0x3add: 0x000a, + 0x3ade: 0x000a, 0x3adf: 0x000a, 0x3ae0: 0x000a, 0x3ae1: 0x000a, 0x3ae2: 0x000a, 0x3ae3: 0x000a, + 0x3ae4: 0x000a, 0x3ae5: 0x000a, 0x3ae6: 0x000a, 0x3ae7: 0x000a, 0x3ae8: 0x000a, 0x3ae9: 0x000a, + 0x3aea: 0x000a, 0x3aeb: 0x000a, 0x3aec: 0x000a, 0x3aed: 0x000a, 0x3aee: 0x000a, 0x3aef: 0x000a, + 0x3af0: 0x000a, 0x3af1: 0x000a, 0x3af2: 0x000a, 0x3af3: 0x000a, 0x3af4: 0x000a, 0x3af5: 0x000a, + 0x3af6: 0x000a, 0x3af7: 0x000a, 0x3af8: 0x000a, 0x3af9: 0x000a, 0x3afa: 0x000a, 0x3afb: 0x000a, + 0x3afc: 0x000a, 0x3afd: 0x000a, 0x3afe: 0x000a, 0x3aff: 0x000a, + // Block 0xec, offset 0x3b00 + 0x3b00: 0x000a, 0x3b01: 0x000a, 0x3b02: 0x000a, 0x3b03: 0x000a, 0x3b04: 0x000a, 0x3b05: 0x000a, + 0x3b06: 0x000a, 0x3b07: 0x000a, + 0x3b10: 0x000a, 0x3b11: 0x000a, + 0x3b12: 0x000a, 0x3b13: 0x000a, 0x3b14: 0x000a, 0x3b15: 0x000a, 0x3b16: 0x000a, 0x3b17: 0x000a, + 0x3b18: 0x000a, 0x3b19: 0x000a, + 0x3b20: 0x000a, 0x3b21: 0x000a, 0x3b22: 0x000a, 0x3b23: 0x000a, + 0x3b24: 0x000a, 0x3b25: 0x000a, 0x3b26: 0x000a, 0x3b27: 0x000a, 0x3b28: 0x000a, 0x3b29: 0x000a, + 0x3b2a: 0x000a, 0x3b2b: 0x000a, 0x3b2c: 0x000a, 0x3b2d: 0x000a, 0x3b2e: 0x000a, 0x3b2f: 0x000a, + 0x3b30: 0x000a, 0x3b31: 0x000a, 0x3b32: 0x000a, 0x3b33: 0x000a, 0x3b34: 0x000a, 0x3b35: 0x000a, + 0x3b36: 0x000a, 0x3b37: 0x000a, 0x3b38: 0x000a, 0x3b39: 0x000a, 0x3b3a: 0x000a, 0x3b3b: 0x000a, + 0x3b3c: 0x000a, 0x3b3d: 0x000a, 0x3b3e: 0x000a, 0x3b3f: 0x000a, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x000a, 0x3b41: 0x000a, 0x3b42: 0x000a, 0x3b43: 0x000a, 0x3b44: 0x000a, 0x3b45: 0x000a, + 0x3b46: 0x000a, 0x3b47: 0x000a, + 0x3b50: 0x000a, 0x3b51: 0x000a, + 0x3b52: 0x000a, 0x3b53: 0x000a, 0x3b54: 0x000a, 0x3b55: 0x000a, 0x3b56: 0x000a, 0x3b57: 0x000a, + 0x3b58: 0x000a, 0x3b59: 0x000a, 0x3b5a: 0x000a, 0x3b5b: 0x000a, 0x3b5c: 0x000a, 0x3b5d: 0x000a, + 0x3b5e: 0x000a, 0x3b5f: 0x000a, 0x3b60: 0x000a, 0x3b61: 0x000a, 0x3b62: 0x000a, 0x3b63: 0x000a, + 0x3b64: 0x000a, 0x3b65: 0x000a, 0x3b66: 0x000a, 0x3b67: 0x000a, 0x3b68: 0x000a, 0x3b69: 0x000a, + 0x3b6a: 0x000a, 0x3b6b: 0x000a, 0x3b6c: 0x000a, 0x3b6d: 0x000a, + 0x3b70: 0x000a, 0x3b71: 0x000a, + // Block 0xee, offset 0x3b80 + 0x3b80: 0x000a, 0x3b81: 0x000a, 0x3b82: 0x000a, 0x3b83: 0x000a, 0x3b84: 0x000a, 0x3b85: 0x000a, + 0x3b86: 0x000a, 0x3b87: 0x000a, 0x3b88: 0x000a, 0x3b89: 0x000a, 0x3b8a: 0x000a, 0x3b8b: 0x000a, + 0x3b8c: 0x000a, 0x3b8d: 0x000a, 0x3b8e: 0x000a, 0x3b8f: 0x000a, 0x3b90: 0x000a, 0x3b91: 0x000a, + 0x3b92: 0x000a, 0x3b93: 0x000a, 0x3b94: 0x000a, 0x3b95: 0x000a, 0x3b96: 0x000a, 0x3b97: 0x000a, + 0x3b98: 0x000a, 0x3b99: 0x000a, 0x3b9a: 0x000a, 0x3b9b: 0x000a, 0x3b9c: 0x000a, 0x3b9d: 0x000a, + 0x3b9e: 0x000a, 0x3b9f: 0x000a, 0x3ba0: 0x000a, 0x3ba1: 0x000a, 0x3ba2: 0x000a, 0x3ba3: 0x000a, + 0x3ba4: 0x000a, 0x3ba5: 0x000a, 0x3ba6: 0x000a, 0x3ba7: 0x000a, 0x3ba8: 0x000a, 0x3ba9: 0x000a, + 0x3baa: 0x000a, 0x3bab: 0x000a, 0x3bac: 0x000a, 0x3bad: 0x000a, 0x3bae: 0x000a, 0x3baf: 0x000a, + 0x3bb0: 0x000a, 0x3bb1: 0x000a, 0x3bb2: 0x000a, 0x3bb3: 0x000a, 0x3bb4: 0x000a, 0x3bb5: 0x000a, + 0x3bb6: 0x000a, 0x3bb7: 0x000a, 0x3bb8: 0x000a, 0x3bba: 0x000a, 0x3bbb: 0x000a, + 0x3bbc: 0x000a, 0x3bbd: 0x000a, 0x3bbe: 0x000a, 0x3bbf: 0x000a, + // Block 0xef, offset 0x3bc0 + 0x3bc0: 0x000a, 0x3bc1: 0x000a, 0x3bc2: 0x000a, 0x3bc3: 0x000a, 0x3bc4: 0x000a, 0x3bc5: 0x000a, + 0x3bc6: 0x000a, 0x3bc7: 0x000a, 0x3bc8: 0x000a, 0x3bc9: 0x000a, 0x3bca: 0x000a, 0x3bcb: 0x000a, + 0x3bcd: 0x000a, 0x3bce: 0x000a, 0x3bcf: 0x000a, 0x3bd0: 0x000a, 0x3bd1: 0x000a, + 0x3bd2: 0x000a, 0x3bd3: 0x000a, 0x3bd4: 0x000a, 0x3bd5: 0x000a, 0x3bd6: 0x000a, 0x3bd7: 0x000a, + 0x3bd8: 0x000a, 0x3bd9: 0x000a, 0x3bda: 0x000a, 0x3bdb: 0x000a, 0x3bdc: 0x000a, 0x3bdd: 0x000a, + 0x3bde: 0x000a, 0x3bdf: 0x000a, 0x3be0: 0x000a, 0x3be1: 0x000a, 0x3be2: 0x000a, 0x3be3: 0x000a, + 0x3be4: 0x000a, 0x3be5: 0x000a, 0x3be6: 0x000a, 0x3be7: 0x000a, 0x3be8: 0x000a, 0x3be9: 0x000a, + 0x3bea: 0x000a, 0x3beb: 0x000a, 0x3bec: 0x000a, 0x3bed: 0x000a, 0x3bee: 0x000a, 0x3bef: 0x000a, + 0x3bf0: 0x000a, 0x3bf1: 0x000a, 0x3bf2: 0x000a, 0x3bf3: 0x000a, 0x3bf4: 0x000a, 0x3bf5: 0x000a, + 0x3bf6: 0x000a, 0x3bf7: 0x000a, 0x3bf8: 0x000a, 0x3bf9: 0x000a, 0x3bfa: 0x000a, 0x3bfb: 0x000a, + 0x3bfc: 0x000a, 0x3bfd: 0x000a, 0x3bfe: 0x000a, 0x3bff: 0x000a, + // Block 0xf0, offset 0x3c00 + 0x3c00: 0x000a, 0x3c01: 0x000a, 0x3c02: 0x000a, 0x3c03: 0x000a, 0x3c04: 0x000a, 0x3c05: 0x000a, + 0x3c06: 0x000a, 0x3c07: 0x000a, 0x3c08: 0x000a, 0x3c09: 0x000a, 0x3c0a: 0x000a, 0x3c0b: 0x000a, + 0x3c0c: 0x000a, 0x3c0d: 0x000a, 0x3c0e: 0x000a, 0x3c0f: 0x000a, 0x3c10: 0x000a, 0x3c11: 0x000a, + 0x3c12: 0x000a, 0x3c13: 0x000a, + 0x3c20: 0x000a, 0x3c21: 0x000a, 0x3c22: 0x000a, 0x3c23: 0x000a, + 0x3c24: 0x000a, 0x3c25: 0x000a, 0x3c26: 0x000a, 0x3c27: 0x000a, 0x3c28: 0x000a, 0x3c29: 0x000a, + 0x3c2a: 0x000a, 0x3c2b: 0x000a, 0x3c2c: 0x000a, 0x3c2d: 0x000a, + 0x3c30: 0x000a, 0x3c31: 0x000a, 0x3c32: 0x000a, 0x3c33: 0x000a, 0x3c34: 0x000a, + 0x3c38: 0x000a, 0x3c39: 0x000a, 0x3c3a: 0x000a, + // Block 0xf1, offset 0x3c40 + 0x3c40: 0x000a, 0x3c41: 0x000a, 0x3c42: 0x000a, 0x3c43: 0x000a, 0x3c44: 0x000a, 0x3c45: 0x000a, + 0x3c46: 0x000a, + 0x3c50: 0x000a, 0x3c51: 0x000a, + 0x3c52: 0x000a, 0x3c53: 0x000a, 0x3c54: 0x000a, 0x3c55: 0x000a, 0x3c56: 0x000a, 0x3c57: 0x000a, + 0x3c58: 0x000a, 0x3c59: 0x000a, 0x3c5a: 0x000a, 0x3c5b: 0x000a, 0x3c5c: 0x000a, 0x3c5d: 0x000a, + 0x3c5e: 0x000a, 0x3c5f: 0x000a, 0x3c60: 0x000a, 0x3c61: 0x000a, 0x3c62: 0x000a, 0x3c63: 0x000a, + 0x3c64: 0x000a, 0x3c65: 0x000a, 0x3c66: 0x000a, 0x3c67: 0x000a, 0x3c68: 0x000a, + 0x3c70: 0x000a, 0x3c71: 0x000a, 0x3c72: 0x000a, 0x3c73: 0x000a, 0x3c74: 0x000a, 0x3c75: 0x000a, + 0x3c76: 0x000a, + // Block 0xf2, offset 0x3c80 + 0x3c80: 0x000a, 0x3c81: 0x000a, 0x3c82: 0x000a, + 0x3c90: 0x000a, 0x3c91: 0x000a, + 0x3c92: 0x000a, 0x3c93: 0x000a, 0x3c94: 0x000a, 0x3c95: 0x000a, 0x3c96: 0x000a, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0x000a, 0x3cc1: 0x000a, 0x3cc2: 0x000a, 0x3cc3: 0x000a, 0x3cc4: 0x000a, 0x3cc5: 0x000a, + 0x3cc6: 0x000a, 0x3cc7: 0x000a, 0x3cc8: 0x000a, 0x3cc9: 0x000a, 0x3cca: 0x000a, 0x3ccb: 0x000a, + 0x3ccc: 0x000a, 0x3ccd: 0x000a, 0x3cce: 0x000a, 0x3ccf: 0x000a, 0x3cd0: 0x000a, 0x3cd1: 0x000a, + 0x3cd2: 0x000a, 0x3cd4: 0x000a, 0x3cd5: 0x000a, 0x3cd6: 0x000a, 0x3cd7: 0x000a, + 0x3cd8: 0x000a, 0x3cd9: 0x000a, 0x3cda: 0x000a, 0x3cdb: 0x000a, 0x3cdc: 0x000a, 0x3cdd: 0x000a, + 0x3cde: 0x000a, 0x3cdf: 0x000a, 0x3ce0: 0x000a, 0x3ce1: 0x000a, 0x3ce2: 0x000a, 0x3ce3: 0x000a, + 0x3ce4: 0x000a, 0x3ce5: 0x000a, 0x3ce6: 0x000a, 0x3ce7: 0x000a, 0x3ce8: 0x000a, 0x3ce9: 0x000a, + 0x3cea: 0x000a, 0x3ceb: 0x000a, 0x3cec: 0x000a, 0x3ced: 0x000a, 0x3cee: 0x000a, 0x3cef: 0x000a, + 0x3cf0: 0x000a, 0x3cf1: 0x000a, 0x3cf2: 0x000a, 0x3cf3: 0x000a, 0x3cf4: 0x000a, 0x3cf5: 0x000a, + 0x3cf6: 0x000a, 0x3cf7: 0x000a, 0x3cf8: 0x000a, 0x3cf9: 0x000a, 0x3cfa: 0x000a, 0x3cfb: 0x000a, + 0x3cfc: 0x000a, 0x3cfd: 0x000a, 0x3cfe: 0x000a, 0x3cff: 0x000a, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x000a, 0x3d01: 0x000a, 0x3d02: 0x000a, 0x3d03: 0x000a, 0x3d04: 0x000a, 0x3d05: 0x000a, + 0x3d06: 0x000a, 0x3d07: 0x000a, 0x3d08: 0x000a, 0x3d09: 0x000a, 0x3d0a: 0x000a, + 0x3d30: 0x0002, 0x3d31: 0x0002, 0x3d32: 0x0002, 0x3d33: 0x0002, 0x3d34: 0x0002, 0x3d35: 0x0002, + 0x3d36: 0x0002, 0x3d37: 0x0002, 0x3d38: 0x0002, 0x3d39: 0x0002, + // Block 0xf5, offset 0x3d40 + 0x3d7e: 0x000b, 0x3d7f: 0x000b, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x000b, 0x3d81: 0x000b, 0x3d82: 0x000b, 0x3d83: 0x000b, 0x3d84: 0x000b, 0x3d85: 0x000b, + 0x3d86: 0x000b, 0x3d87: 0x000b, 0x3d88: 0x000b, 0x3d89: 0x000b, 0x3d8a: 0x000b, 0x3d8b: 0x000b, + 0x3d8c: 0x000b, 0x3d8d: 0x000b, 0x3d8e: 0x000b, 0x3d8f: 0x000b, 0x3d90: 0x000b, 0x3d91: 0x000b, + 0x3d92: 0x000b, 0x3d93: 0x000b, 0x3d94: 0x000b, 0x3d95: 0x000b, 0x3d96: 0x000b, 0x3d97: 0x000b, + 0x3d98: 0x000b, 0x3d99: 0x000b, 0x3d9a: 0x000b, 0x3d9b: 0x000b, 0x3d9c: 0x000b, 0x3d9d: 0x000b, + 0x3d9e: 0x000b, 0x3d9f: 0x000b, 0x3da0: 0x000b, 0x3da1: 0x000b, 0x3da2: 0x000b, 0x3da3: 0x000b, + 0x3da4: 0x000b, 0x3da5: 0x000b, 0x3da6: 0x000b, 0x3da7: 0x000b, 0x3da8: 0x000b, 0x3da9: 0x000b, + 0x3daa: 0x000b, 0x3dab: 0x000b, 0x3dac: 0x000b, 0x3dad: 0x000b, 0x3dae: 0x000b, 0x3daf: 0x000b, + 0x3db0: 0x000b, 0x3db1: 0x000b, 0x3db2: 0x000b, 0x3db3: 0x000b, 0x3db4: 0x000b, 0x3db5: 0x000b, + 0x3db6: 0x000b, 0x3db7: 0x000b, 0x3db8: 0x000b, 0x3db9: 0x000b, 0x3dba: 0x000b, 0x3dbb: 0x000b, + 0x3dbc: 0x000b, 0x3dbd: 0x000b, 0x3dbe: 0x000b, 0x3dbf: 0x000b, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x000c, 0x3dc1: 0x000c, 0x3dc2: 0x000c, 0x3dc3: 0x000c, 0x3dc4: 0x000c, 0x3dc5: 0x000c, + 0x3dc6: 0x000c, 0x3dc7: 0x000c, 0x3dc8: 0x000c, 0x3dc9: 0x000c, 0x3dca: 0x000c, 0x3dcb: 0x000c, + 0x3dcc: 0x000c, 0x3dcd: 0x000c, 0x3dce: 0x000c, 0x3dcf: 0x000c, 0x3dd0: 0x000c, 0x3dd1: 0x000c, + 0x3dd2: 0x000c, 0x3dd3: 0x000c, 0x3dd4: 0x000c, 0x3dd5: 0x000c, 0x3dd6: 0x000c, 0x3dd7: 0x000c, + 0x3dd8: 0x000c, 0x3dd9: 0x000c, 0x3dda: 0x000c, 0x3ddb: 0x000c, 0x3ddc: 0x000c, 0x3ddd: 0x000c, + 0x3dde: 0x000c, 0x3ddf: 0x000c, 0x3de0: 0x000c, 0x3de1: 0x000c, 0x3de2: 0x000c, 0x3de3: 0x000c, + 0x3de4: 0x000c, 0x3de5: 0x000c, 0x3de6: 0x000c, 0x3de7: 0x000c, 0x3de8: 0x000c, 0x3de9: 0x000c, + 0x3dea: 0x000c, 0x3deb: 0x000c, 0x3dec: 0x000c, 0x3ded: 0x000c, 0x3dee: 0x000c, 0x3def: 0x000c, + 0x3df0: 0x000b, 0x3df1: 0x000b, 0x3df2: 0x000b, 0x3df3: 0x000b, 0x3df4: 0x000b, 0x3df5: 0x000b, + 0x3df6: 0x000b, 0x3df7: 0x000b, 0x3df8: 0x000b, 0x3df9: 0x000b, 0x3dfa: 0x000b, 0x3dfb: 0x000b, + 0x3dfc: 0x000b, 0x3dfd: 0x000b, 0x3dfe: 0x000b, 0x3dff: 0x000b, +} + +// bidiIndex: 24 blocks, 1536 entries, 1536 bytes +// Block 0 is the zero block. +var bidiIndex = [1536]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x136: 0x28, 0x137: 0x29, + 0x138: 0x2a, 0x139: 0x2b, 0x13a: 0x2c, 0x13b: 0x2d, 0x13c: 0x2e, 0x13d: 0x2f, 0x13e: 0x30, 0x13f: 0x31, + // Block 0x5, offset 0x140 + 0x140: 0x32, 0x141: 0x33, 0x142: 0x34, + 0x14d: 0x35, 0x14e: 0x36, + 0x150: 0x37, + 0x15a: 0x38, 0x15c: 0x39, 0x15d: 0x3a, 0x15e: 0x3b, 0x15f: 0x3c, + 0x160: 0x3d, 0x162: 0x3e, 0x164: 0x3f, 0x165: 0x40, 0x167: 0x41, + 0x168: 0x42, 0x169: 0x43, 0x16a: 0x44, 0x16b: 0x45, 0x16c: 0x46, 0x16d: 0x47, 0x16e: 0x48, 0x16f: 0x49, + 0x170: 0x4a, 0x173: 0x4b, 0x177: 0x4c, + 0x17e: 0x4d, 0x17f: 0x4e, + // Block 0x6, offset 0x180 + 0x180: 0x4f, 0x181: 0x50, 0x182: 0x51, 0x183: 0x52, 0x184: 0x53, 0x185: 0x54, 0x186: 0x55, 0x187: 0x56, + 0x188: 0x57, 0x189: 0x56, 0x18a: 0x56, 0x18b: 0x56, 0x18c: 0x58, 0x18d: 0x59, 0x18e: 0x5a, 0x18f: 0x56, + 0x190: 0x5b, 0x191: 0x5c, 0x192: 0x5d, 0x193: 0x5e, 0x194: 0x56, 0x195: 0x56, 0x196: 0x56, 0x197: 0x56, + 0x198: 0x56, 0x199: 0x56, 0x19a: 0x5f, 0x19b: 0x56, 0x19c: 0x56, 0x19d: 0x60, 0x19e: 0x56, 0x19f: 0x61, + 0x1a4: 0x56, 0x1a5: 0x56, 0x1a6: 0x62, 0x1a7: 0x63, + 0x1a8: 0x56, 0x1a9: 0x56, 0x1aa: 0x56, 0x1ab: 0x56, 0x1ac: 0x56, 0x1ad: 0x64, 0x1ae: 0x65, 0x1af: 0x56, + 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, + 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x56, 0x1bd: 0x56, 0x1be: 0x56, 0x1bf: 0x6d, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71, + 0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77, + // Block 0x8, offset 0x200 + 0x237: 0x56, + // Block 0x9, offset 0x240 + 0x252: 0x78, 0x253: 0x79, + 0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f, + 0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86, + 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26d: 0x8b, 0x26f: 0x8c, + // Block 0xa, offset 0x280 + 0x2ac: 0x8d, 0x2ad: 0x8e, 0x2ae: 0x0e, 0x2af: 0x0e, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8f, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x90, + 0x2b8: 0x91, 0x2b9: 0x92, 0x2ba: 0x0e, 0x2bb: 0x93, 0x2bc: 0x94, 0x2bd: 0x95, 0x2bf: 0x96, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x97, 0x2c5: 0x56, 0x2c6: 0x98, 0x2c7: 0x99, + 0x2cb: 0x9a, 0x2cd: 0x9b, + 0x2e0: 0x9c, 0x2e1: 0x9c, 0x2e2: 0x9c, 0x2e3: 0x9c, 0x2e4: 0x9d, 0x2e5: 0x9c, 0x2e6: 0x9c, 0x2e7: 0x9c, + 0x2e8: 0x9e, 0x2e9: 0x9c, 0x2ea: 0x9c, 0x2eb: 0x9f, 0x2ec: 0xa0, 0x2ed: 0x9c, 0x2ee: 0x9c, 0x2ef: 0x9c, + 0x2f0: 0x9c, 0x2f1: 0x9c, 0x2f2: 0x9c, 0x2f3: 0x9c, 0x2f4: 0xa1, 0x2f5: 0x9c, 0x2f6: 0x9c, 0x2f7: 0x9c, + 0x2f8: 0x9c, 0x2f9: 0xa2, 0x2fa: 0xa3, 0x2fb: 0x9c, 0x2fc: 0xa4, 0x2fd: 0xa5, 0x2fe: 0x9c, 0x2ff: 0x9c, + // Block 0xc, offset 0x300 + 0x300: 0xa6, 0x301: 0xa7, 0x302: 0xa8, 0x304: 0xa9, 0x305: 0xaa, 0x306: 0xab, 0x307: 0xac, + 0x308: 0xad, 0x30b: 0xae, 0x30c: 0x26, 0x30d: 0xaf, + 0x310: 0xb0, 0x311: 0xb1, 0x312: 0xb2, 0x313: 0xb3, 0x316: 0xb4, 0x317: 0xb5, + 0x318: 0xb6, 0x319: 0xb7, 0x31a: 0xb8, 0x31c: 0xb9, + 0x320: 0xba, 0x324: 0xbb, 0x325: 0xbc, 0x327: 0xbd, + 0x328: 0xbe, 0x329: 0xbf, 0x32a: 0xc0, + 0x330: 0xc1, 0x332: 0xc2, 0x334: 0xc3, 0x335: 0xc4, 0x336: 0xc5, + 0x33b: 0xc6, 0x33f: 0xc7, + // Block 0xd, offset 0x340 + 0x36b: 0xc8, 0x36c: 0xc9, + 0x37d: 0xca, 0x37e: 0xcb, 0x37f: 0xcc, + // Block 0xe, offset 0x380 + 0x3b2: 0xcd, + // Block 0xf, offset 0x3c0 + 0x3c5: 0xce, 0x3c6: 0xcf, + 0x3c8: 0x56, 0x3c9: 0xd0, 0x3cc: 0x56, 0x3cd: 0xd1, + 0x3db: 0xd2, 0x3dc: 0xd3, 0x3dd: 0xd4, 0x3de: 0xd5, 0x3df: 0xd6, + 0x3e8: 0xd7, 0x3e9: 0xd8, 0x3ea: 0xd9, + // Block 0x10, offset 0x400 + 0x400: 0xda, 0x404: 0xc9, + 0x40b: 0xdb, + 0x420: 0x9c, 0x421: 0x9c, 0x422: 0x9c, 0x423: 0xdc, 0x424: 0x9c, 0x425: 0xdd, 0x426: 0x9c, 0x427: 0x9c, + 0x428: 0x9c, 0x429: 0x9c, 0x42a: 0x9c, 0x42b: 0x9c, 0x42c: 0x9c, 0x42d: 0x9c, 0x42e: 0x9c, 0x42f: 0x9c, + 0x430: 0x9c, 0x431: 0xa4, 0x432: 0x0e, 0x433: 0x9c, 0x434: 0x0e, 0x435: 0xde, 0x436: 0x9c, 0x437: 0x9c, + 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xdf, 0x43c: 0x9c, 0x43d: 0x9c, 0x43e: 0x9c, 0x43f: 0x9c, + // Block 0x11, offset 0x440 + 0x440: 0xe0, 0x441: 0x56, 0x442: 0xe1, 0x443: 0xe2, 0x444: 0xe3, 0x445: 0xe4, 0x446: 0xe5, + 0x449: 0xe6, 0x44c: 0x56, 0x44d: 0x56, 0x44e: 0x56, 0x44f: 0x56, + 0x450: 0x56, 0x451: 0x56, 0x452: 0x56, 0x453: 0x56, 0x454: 0x56, 0x455: 0x56, 0x456: 0x56, 0x457: 0x56, + 0x458: 0x56, 0x459: 0x56, 0x45a: 0x56, 0x45b: 0xe7, 0x45c: 0x56, 0x45d: 0x6c, 0x45e: 0x56, 0x45f: 0xe8, + 0x460: 0xe9, 0x461: 0xea, 0x462: 0xeb, 0x464: 0x56, 0x465: 0xec, 0x466: 0x56, 0x467: 0xed, + 0x468: 0x56, 0x469: 0xee, 0x46a: 0xef, 0x46b: 0xf0, 0x46c: 0x56, 0x46d: 0x56, 0x46e: 0xf1, 0x46f: 0xf2, + 0x47f: 0xf3, + // Block 0x12, offset 0x480 + 0x4bf: 0xf3, + // Block 0x13, offset 0x4c0 + 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, + 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, + 0x4ef: 0x10, + 0x4ff: 0x10, + // Block 0x14, offset 0x500 + 0x50f: 0x10, + 0x51f: 0x10, + 0x52f: 0x10, + 0x53f: 0x10, + // Block 0x15, offset 0x540 + 0x540: 0xf4, 0x541: 0xf4, 0x542: 0xf4, 0x543: 0xf4, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xf5, + 0x548: 0xf4, 0x549: 0xf4, 0x54a: 0xf4, 0x54b: 0xf4, 0x54c: 0xf4, 0x54d: 0xf4, 0x54e: 0xf4, 0x54f: 0xf4, + 0x550: 0xf4, 0x551: 0xf4, 0x552: 0xf4, 0x553: 0xf4, 0x554: 0xf4, 0x555: 0xf4, 0x556: 0xf4, 0x557: 0xf4, + 0x558: 0xf4, 0x559: 0xf4, 0x55a: 0xf4, 0x55b: 0xf4, 0x55c: 0xf4, 0x55d: 0xf4, 0x55e: 0xf4, 0x55f: 0xf4, + 0x560: 0xf4, 0x561: 0xf4, 0x562: 0xf4, 0x563: 0xf4, 0x564: 0xf4, 0x565: 0xf4, 0x566: 0xf4, 0x567: 0xf4, + 0x568: 0xf4, 0x569: 0xf4, 0x56a: 0xf4, 0x56b: 0xf4, 0x56c: 0xf4, 0x56d: 0xf4, 0x56e: 0xf4, 0x56f: 0xf4, + 0x570: 0xf4, 0x571: 0xf4, 0x572: 0xf4, 0x573: 0xf4, 0x574: 0xf4, 0x575: 0xf4, 0x576: 0xf4, 0x577: 0xf4, + 0x578: 0xf4, 0x579: 0xf4, 0x57a: 0xf4, 0x57b: 0xf4, 0x57c: 0xf4, 0x57d: 0xf4, 0x57e: 0xf4, 0x57f: 0xf4, + // Block 0x16, offset 0x580 + 0x58f: 0x10, + 0x59f: 0x10, + 0x5a0: 0x13, + 0x5af: 0x10, + 0x5bf: 0x10, + // Block 0x17, offset 0x5c0 + 0x5cf: 0x10, +} + +// Total table size 17464 bytes (17KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go index 10f5202c6..7e1ae096e 100644 --- a/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +++ b/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go @@ -1,6 +1,6 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -// +build go1.14 +// +build go1.14,!go1.16 package norm diff --git a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go new file mode 100644 index 000000000..9ea1b4214 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go @@ -0,0 +1,7760 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +// +build go1.16 + +package norm + +import "sync" + +const ( + // Version is the Unicode edition from which the tables are derived. + Version = "13.0.0" + + // MaxTransformChunkSize indicates the maximum number of bytes that Transform + // may need to write atomically for any Form. Making a destination buffer at + // least this size ensures that Transform can always make progress and that + // the user does not need to grow the buffer on an ErrShortDst. + MaxTransformChunkSize = 35 + maxNonStarters*4 +) + +var ccc = [56]uint8{ + 0, 1, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, + 36, 84, 91, 103, 107, 118, 122, 129, + 130, 132, 202, 214, 216, 218, 220, 222, + 224, 226, 228, 230, 232, 233, 234, 240, +} + +const ( + firstMulti = 0x1870 + firstCCC = 0x2CAB + endMulti = 0x2F77 + firstLeadingCCC = 0x49C5 + firstCCCZeroExcept = 0x4A8F + firstStarterWithNLead = 0x4AB6 + lastDecomp = 0x4AB8 + maxDecomp = 0x8000 +) + +// decomps: 19128 bytes +var decomps = [...]byte{ + // Bytes 0 - 3f + 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, + 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, + 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, + 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, + 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, + 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, + 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, + 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, + // Bytes 40 - 7f + 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, + 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, + 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, + 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, + 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, + 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, + 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, + 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, + // Bytes 80 - bf + 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, + 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, + 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, + 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, + 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, + 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, + 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, + 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, + // Bytes c0 - ff + 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, + 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, + 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, + 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, + 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, + 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, + 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, + 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, + // Bytes 100 - 13f + 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, + 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, + 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, + 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, + 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB, + 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9, + 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, + 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, + // Bytes 140 - 17f + 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, + 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42, + 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, + 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, + 0x8D, 0x42, 0xCA, 0x90, 0x42, 0xCA, 0x91, 0x42, + 0xCA, 0x92, 0x42, 0xCA, 0x95, 0x42, 0xCA, 0x9D, + 0x42, 0xCA, 0x9F, 0x42, 0xCA, 0xB9, 0x42, 0xCE, + 0x91, 0x42, 0xCE, 0x92, 0x42, 0xCE, 0x93, 0x42, + // Bytes 180 - 1bf + 0xCE, 0x94, 0x42, 0xCE, 0x95, 0x42, 0xCE, 0x96, + 0x42, 0xCE, 0x97, 0x42, 0xCE, 0x98, 0x42, 0xCE, + 0x99, 0x42, 0xCE, 0x9A, 0x42, 0xCE, 0x9B, 0x42, + 0xCE, 0x9C, 0x42, 0xCE, 0x9D, 0x42, 0xCE, 0x9E, + 0x42, 0xCE, 0x9F, 0x42, 0xCE, 0xA0, 0x42, 0xCE, + 0xA1, 0x42, 0xCE, 0xA3, 0x42, 0xCE, 0xA4, 0x42, + 0xCE, 0xA5, 0x42, 0xCE, 0xA6, 0x42, 0xCE, 0xA7, + 0x42, 0xCE, 0xA8, 0x42, 0xCE, 0xA9, 0x42, 0xCE, + // Bytes 1c0 - 1ff + 0xB1, 0x42, 0xCE, 0xB2, 0x42, 0xCE, 0xB3, 0x42, + 0xCE, 0xB4, 0x42, 0xCE, 0xB5, 0x42, 0xCE, 0xB6, + 0x42, 0xCE, 0xB7, 0x42, 0xCE, 0xB8, 0x42, 0xCE, + 0xB9, 0x42, 0xCE, 0xBA, 0x42, 0xCE, 0xBB, 0x42, + 0xCE, 0xBC, 0x42, 0xCE, 0xBD, 0x42, 0xCE, 0xBE, + 0x42, 0xCE, 0xBF, 0x42, 0xCF, 0x80, 0x42, 0xCF, + 0x81, 0x42, 0xCF, 0x82, 0x42, 0xCF, 0x83, 0x42, + 0xCF, 0x84, 0x42, 0xCF, 0x85, 0x42, 0xCF, 0x86, + // Bytes 200 - 23f + 0x42, 0xCF, 0x87, 0x42, 0xCF, 0x88, 0x42, 0xCF, + 0x89, 0x42, 0xCF, 0x9C, 0x42, 0xCF, 0x9D, 0x42, + 0xD0, 0xBD, 0x42, 0xD1, 0x8A, 0x42, 0xD1, 0x8C, + 0x42, 0xD7, 0x90, 0x42, 0xD7, 0x91, 0x42, 0xD7, + 0x92, 0x42, 0xD7, 0x93, 0x42, 0xD7, 0x94, 0x42, + 0xD7, 0x9B, 0x42, 0xD7, 0x9C, 0x42, 0xD7, 0x9D, + 0x42, 0xD7, 0xA2, 0x42, 0xD7, 0xA8, 0x42, 0xD7, + 0xAA, 0x42, 0xD8, 0xA1, 0x42, 0xD8, 0xA7, 0x42, + // Bytes 240 - 27f + 0xD8, 0xA8, 0x42, 0xD8, 0xA9, 0x42, 0xD8, 0xAA, + 0x42, 0xD8, 0xAB, 0x42, 0xD8, 0xAC, 0x42, 0xD8, + 0xAD, 0x42, 0xD8, 0xAE, 0x42, 0xD8, 0xAF, 0x42, + 0xD8, 0xB0, 0x42, 0xD8, 0xB1, 0x42, 0xD8, 0xB2, + 0x42, 0xD8, 0xB3, 0x42, 0xD8, 0xB4, 0x42, 0xD8, + 0xB5, 0x42, 0xD8, 0xB6, 0x42, 0xD8, 0xB7, 0x42, + 0xD8, 0xB8, 0x42, 0xD8, 0xB9, 0x42, 0xD8, 0xBA, + 0x42, 0xD9, 0x81, 0x42, 0xD9, 0x82, 0x42, 0xD9, + // Bytes 280 - 2bf + 0x83, 0x42, 0xD9, 0x84, 0x42, 0xD9, 0x85, 0x42, + 0xD9, 0x86, 0x42, 0xD9, 0x87, 0x42, 0xD9, 0x88, + 0x42, 0xD9, 0x89, 0x42, 0xD9, 0x8A, 0x42, 0xD9, + 0xAE, 0x42, 0xD9, 0xAF, 0x42, 0xD9, 0xB1, 0x42, + 0xD9, 0xB9, 0x42, 0xD9, 0xBA, 0x42, 0xD9, 0xBB, + 0x42, 0xD9, 0xBE, 0x42, 0xD9, 0xBF, 0x42, 0xDA, + 0x80, 0x42, 0xDA, 0x83, 0x42, 0xDA, 0x84, 0x42, + 0xDA, 0x86, 0x42, 0xDA, 0x87, 0x42, 0xDA, 0x88, + // Bytes 2c0 - 2ff + 0x42, 0xDA, 0x8C, 0x42, 0xDA, 0x8D, 0x42, 0xDA, + 0x8E, 0x42, 0xDA, 0x91, 0x42, 0xDA, 0x98, 0x42, + 0xDA, 0xA1, 0x42, 0xDA, 0xA4, 0x42, 0xDA, 0xA6, + 0x42, 0xDA, 0xA9, 0x42, 0xDA, 0xAD, 0x42, 0xDA, + 0xAF, 0x42, 0xDA, 0xB1, 0x42, 0xDA, 0xB3, 0x42, + 0xDA, 0xBA, 0x42, 0xDA, 0xBB, 0x42, 0xDA, 0xBE, + 0x42, 0xDB, 0x81, 0x42, 0xDB, 0x85, 0x42, 0xDB, + 0x86, 0x42, 0xDB, 0x87, 0x42, 0xDB, 0x88, 0x42, + // Bytes 300 - 33f + 0xDB, 0x89, 0x42, 0xDB, 0x8B, 0x42, 0xDB, 0x8C, + 0x42, 0xDB, 0x90, 0x42, 0xDB, 0x92, 0x43, 0xE0, + 0xBC, 0x8B, 0x43, 0xE1, 0x83, 0x9C, 0x43, 0xE1, + 0x84, 0x80, 0x43, 0xE1, 0x84, 0x81, 0x43, 0xE1, + 0x84, 0x82, 0x43, 0xE1, 0x84, 0x83, 0x43, 0xE1, + 0x84, 0x84, 0x43, 0xE1, 0x84, 0x85, 0x43, 0xE1, + 0x84, 0x86, 0x43, 0xE1, 0x84, 0x87, 0x43, 0xE1, + 0x84, 0x88, 0x43, 0xE1, 0x84, 0x89, 0x43, 0xE1, + // Bytes 340 - 37f + 0x84, 0x8A, 0x43, 0xE1, 0x84, 0x8B, 0x43, 0xE1, + 0x84, 0x8C, 0x43, 0xE1, 0x84, 0x8D, 0x43, 0xE1, + 0x84, 0x8E, 0x43, 0xE1, 0x84, 0x8F, 0x43, 0xE1, + 0x84, 0x90, 0x43, 0xE1, 0x84, 0x91, 0x43, 0xE1, + 0x84, 0x92, 0x43, 0xE1, 0x84, 0x94, 0x43, 0xE1, + 0x84, 0x95, 0x43, 0xE1, 0x84, 0x9A, 0x43, 0xE1, + 0x84, 0x9C, 0x43, 0xE1, 0x84, 0x9D, 0x43, 0xE1, + 0x84, 0x9E, 0x43, 0xE1, 0x84, 0xA0, 0x43, 0xE1, + // Bytes 380 - 3bf + 0x84, 0xA1, 0x43, 0xE1, 0x84, 0xA2, 0x43, 0xE1, + 0x84, 0xA3, 0x43, 0xE1, 0x84, 0xA7, 0x43, 0xE1, + 0x84, 0xA9, 0x43, 0xE1, 0x84, 0xAB, 0x43, 0xE1, + 0x84, 0xAC, 0x43, 0xE1, 0x84, 0xAD, 0x43, 0xE1, + 0x84, 0xAE, 0x43, 0xE1, 0x84, 0xAF, 0x43, 0xE1, + 0x84, 0xB2, 0x43, 0xE1, 0x84, 0xB6, 0x43, 0xE1, + 0x85, 0x80, 0x43, 0xE1, 0x85, 0x87, 0x43, 0xE1, + 0x85, 0x8C, 0x43, 0xE1, 0x85, 0x97, 0x43, 0xE1, + // Bytes 3c0 - 3ff + 0x85, 0x98, 0x43, 0xE1, 0x85, 0x99, 0x43, 0xE1, + 0x85, 0xA0, 0x43, 0xE1, 0x86, 0x84, 0x43, 0xE1, + 0x86, 0x85, 0x43, 0xE1, 0x86, 0x88, 0x43, 0xE1, + 0x86, 0x91, 0x43, 0xE1, 0x86, 0x92, 0x43, 0xE1, + 0x86, 0x94, 0x43, 0xE1, 0x86, 0x9E, 0x43, 0xE1, + 0x86, 0xA1, 0x43, 0xE1, 0x87, 0x87, 0x43, 0xE1, + 0x87, 0x88, 0x43, 0xE1, 0x87, 0x8C, 0x43, 0xE1, + 0x87, 0x8E, 0x43, 0xE1, 0x87, 0x93, 0x43, 0xE1, + // Bytes 400 - 43f + 0x87, 0x97, 0x43, 0xE1, 0x87, 0x99, 0x43, 0xE1, + 0x87, 0x9D, 0x43, 0xE1, 0x87, 0x9F, 0x43, 0xE1, + 0x87, 0xB1, 0x43, 0xE1, 0x87, 0xB2, 0x43, 0xE1, + 0xB4, 0x82, 0x43, 0xE1, 0xB4, 0x96, 0x43, 0xE1, + 0xB4, 0x97, 0x43, 0xE1, 0xB4, 0x9C, 0x43, 0xE1, + 0xB4, 0x9D, 0x43, 0xE1, 0xB4, 0xA5, 0x43, 0xE1, + 0xB5, 0xBB, 0x43, 0xE1, 0xB6, 0x85, 0x43, 0xE2, + 0x80, 0x82, 0x43, 0xE2, 0x80, 0x83, 0x43, 0xE2, + // Bytes 440 - 47f + 0x80, 0x90, 0x43, 0xE2, 0x80, 0x93, 0x43, 0xE2, + 0x80, 0x94, 0x43, 0xE2, 0x82, 0xA9, 0x43, 0xE2, + 0x86, 0x90, 0x43, 0xE2, 0x86, 0x91, 0x43, 0xE2, + 0x86, 0x92, 0x43, 0xE2, 0x86, 0x93, 0x43, 0xE2, + 0x88, 0x82, 0x43, 0xE2, 0x88, 0x87, 0x43, 0xE2, + 0x88, 0x91, 0x43, 0xE2, 0x88, 0x92, 0x43, 0xE2, + 0x94, 0x82, 0x43, 0xE2, 0x96, 0xA0, 0x43, 0xE2, + 0x97, 0x8B, 0x43, 0xE2, 0xA6, 0x85, 0x43, 0xE2, + // Bytes 480 - 4bf + 0xA6, 0x86, 0x43, 0xE2, 0xB5, 0xA1, 0x43, 0xE3, + 0x80, 0x81, 0x43, 0xE3, 0x80, 0x82, 0x43, 0xE3, + 0x80, 0x88, 0x43, 0xE3, 0x80, 0x89, 0x43, 0xE3, + 0x80, 0x8A, 0x43, 0xE3, 0x80, 0x8B, 0x43, 0xE3, + 0x80, 0x8C, 0x43, 0xE3, 0x80, 0x8D, 0x43, 0xE3, + 0x80, 0x8E, 0x43, 0xE3, 0x80, 0x8F, 0x43, 0xE3, + 0x80, 0x90, 0x43, 0xE3, 0x80, 0x91, 0x43, 0xE3, + 0x80, 0x92, 0x43, 0xE3, 0x80, 0x94, 0x43, 0xE3, + // Bytes 4c0 - 4ff + 0x80, 0x95, 0x43, 0xE3, 0x80, 0x96, 0x43, 0xE3, + 0x80, 0x97, 0x43, 0xE3, 0x82, 0xA1, 0x43, 0xE3, + 0x82, 0xA2, 0x43, 0xE3, 0x82, 0xA3, 0x43, 0xE3, + 0x82, 0xA4, 0x43, 0xE3, 0x82, 0xA5, 0x43, 0xE3, + 0x82, 0xA6, 0x43, 0xE3, 0x82, 0xA7, 0x43, 0xE3, + 0x82, 0xA8, 0x43, 0xE3, 0x82, 0xA9, 0x43, 0xE3, + 0x82, 0xAA, 0x43, 0xE3, 0x82, 0xAB, 0x43, 0xE3, + 0x82, 0xAD, 0x43, 0xE3, 0x82, 0xAF, 0x43, 0xE3, + // Bytes 500 - 53f + 0x82, 0xB1, 0x43, 0xE3, 0x82, 0xB3, 0x43, 0xE3, + 0x82, 0xB5, 0x43, 0xE3, 0x82, 0xB7, 0x43, 0xE3, + 0x82, 0xB9, 0x43, 0xE3, 0x82, 0xBB, 0x43, 0xE3, + 0x82, 0xBD, 0x43, 0xE3, 0x82, 0xBF, 0x43, 0xE3, + 0x83, 0x81, 0x43, 0xE3, 0x83, 0x83, 0x43, 0xE3, + 0x83, 0x84, 0x43, 0xE3, 0x83, 0x86, 0x43, 0xE3, + 0x83, 0x88, 0x43, 0xE3, 0x83, 0x8A, 0x43, 0xE3, + 0x83, 0x8B, 0x43, 0xE3, 0x83, 0x8C, 0x43, 0xE3, + // Bytes 540 - 57f + 0x83, 0x8D, 0x43, 0xE3, 0x83, 0x8E, 0x43, 0xE3, + 0x83, 0x8F, 0x43, 0xE3, 0x83, 0x92, 0x43, 0xE3, + 0x83, 0x95, 0x43, 0xE3, 0x83, 0x98, 0x43, 0xE3, + 0x83, 0x9B, 0x43, 0xE3, 0x83, 0x9E, 0x43, 0xE3, + 0x83, 0x9F, 0x43, 0xE3, 0x83, 0xA0, 0x43, 0xE3, + 0x83, 0xA1, 0x43, 0xE3, 0x83, 0xA2, 0x43, 0xE3, + 0x83, 0xA3, 0x43, 0xE3, 0x83, 0xA4, 0x43, 0xE3, + 0x83, 0xA5, 0x43, 0xE3, 0x83, 0xA6, 0x43, 0xE3, + // Bytes 580 - 5bf + 0x83, 0xA7, 0x43, 0xE3, 0x83, 0xA8, 0x43, 0xE3, + 0x83, 0xA9, 0x43, 0xE3, 0x83, 0xAA, 0x43, 0xE3, + 0x83, 0xAB, 0x43, 0xE3, 0x83, 0xAC, 0x43, 0xE3, + 0x83, 0xAD, 0x43, 0xE3, 0x83, 0xAF, 0x43, 0xE3, + 0x83, 0xB0, 0x43, 0xE3, 0x83, 0xB1, 0x43, 0xE3, + 0x83, 0xB2, 0x43, 0xE3, 0x83, 0xB3, 0x43, 0xE3, + 0x83, 0xBB, 0x43, 0xE3, 0x83, 0xBC, 0x43, 0xE3, + 0x92, 0x9E, 0x43, 0xE3, 0x92, 0xB9, 0x43, 0xE3, + // Bytes 5c0 - 5ff + 0x92, 0xBB, 0x43, 0xE3, 0x93, 0x9F, 0x43, 0xE3, + 0x94, 0x95, 0x43, 0xE3, 0x9B, 0xAE, 0x43, 0xE3, + 0x9B, 0xBC, 0x43, 0xE3, 0x9E, 0x81, 0x43, 0xE3, + 0xA0, 0xAF, 0x43, 0xE3, 0xA1, 0xA2, 0x43, 0xE3, + 0xA1, 0xBC, 0x43, 0xE3, 0xA3, 0x87, 0x43, 0xE3, + 0xA3, 0xA3, 0x43, 0xE3, 0xA4, 0x9C, 0x43, 0xE3, + 0xA4, 0xBA, 0x43, 0xE3, 0xA8, 0xAE, 0x43, 0xE3, + 0xA9, 0xAC, 0x43, 0xE3, 0xAB, 0xA4, 0x43, 0xE3, + // Bytes 600 - 63f + 0xAC, 0x88, 0x43, 0xE3, 0xAC, 0x99, 0x43, 0xE3, + 0xAD, 0x89, 0x43, 0xE3, 0xAE, 0x9D, 0x43, 0xE3, + 0xB0, 0x98, 0x43, 0xE3, 0xB1, 0x8E, 0x43, 0xE3, + 0xB4, 0xB3, 0x43, 0xE3, 0xB6, 0x96, 0x43, 0xE3, + 0xBA, 0xAC, 0x43, 0xE3, 0xBA, 0xB8, 0x43, 0xE3, + 0xBC, 0x9B, 0x43, 0xE3, 0xBF, 0xBC, 0x43, 0xE4, + 0x80, 0x88, 0x43, 0xE4, 0x80, 0x98, 0x43, 0xE4, + 0x80, 0xB9, 0x43, 0xE4, 0x81, 0x86, 0x43, 0xE4, + // Bytes 640 - 67f + 0x82, 0x96, 0x43, 0xE4, 0x83, 0xA3, 0x43, 0xE4, + 0x84, 0xAF, 0x43, 0xE4, 0x88, 0x82, 0x43, 0xE4, + 0x88, 0xA7, 0x43, 0xE4, 0x8A, 0xA0, 0x43, 0xE4, + 0x8C, 0x81, 0x43, 0xE4, 0x8C, 0xB4, 0x43, 0xE4, + 0x8D, 0x99, 0x43, 0xE4, 0x8F, 0x95, 0x43, 0xE4, + 0x8F, 0x99, 0x43, 0xE4, 0x90, 0x8B, 0x43, 0xE4, + 0x91, 0xAB, 0x43, 0xE4, 0x94, 0xAB, 0x43, 0xE4, + 0x95, 0x9D, 0x43, 0xE4, 0x95, 0xA1, 0x43, 0xE4, + // Bytes 680 - 6bf + 0x95, 0xAB, 0x43, 0xE4, 0x97, 0x97, 0x43, 0xE4, + 0x97, 0xB9, 0x43, 0xE4, 0x98, 0xB5, 0x43, 0xE4, + 0x9A, 0xBE, 0x43, 0xE4, 0x9B, 0x87, 0x43, 0xE4, + 0xA6, 0x95, 0x43, 0xE4, 0xA7, 0xA6, 0x43, 0xE4, + 0xA9, 0xAE, 0x43, 0xE4, 0xA9, 0xB6, 0x43, 0xE4, + 0xAA, 0xB2, 0x43, 0xE4, 0xAC, 0xB3, 0x43, 0xE4, + 0xAF, 0x8E, 0x43, 0xE4, 0xB3, 0x8E, 0x43, 0xE4, + 0xB3, 0xAD, 0x43, 0xE4, 0xB3, 0xB8, 0x43, 0xE4, + // Bytes 6c0 - 6ff + 0xB5, 0x96, 0x43, 0xE4, 0xB8, 0x80, 0x43, 0xE4, + 0xB8, 0x81, 0x43, 0xE4, 0xB8, 0x83, 0x43, 0xE4, + 0xB8, 0x89, 0x43, 0xE4, 0xB8, 0x8A, 0x43, 0xE4, + 0xB8, 0x8B, 0x43, 0xE4, 0xB8, 0x8D, 0x43, 0xE4, + 0xB8, 0x99, 0x43, 0xE4, 0xB8, 0xA6, 0x43, 0xE4, + 0xB8, 0xA8, 0x43, 0xE4, 0xB8, 0xAD, 0x43, 0xE4, + 0xB8, 0xB2, 0x43, 0xE4, 0xB8, 0xB6, 0x43, 0xE4, + 0xB8, 0xB8, 0x43, 0xE4, 0xB8, 0xB9, 0x43, 0xE4, + // Bytes 700 - 73f + 0xB8, 0xBD, 0x43, 0xE4, 0xB8, 0xBF, 0x43, 0xE4, + 0xB9, 0x81, 0x43, 0xE4, 0xB9, 0x99, 0x43, 0xE4, + 0xB9, 0x9D, 0x43, 0xE4, 0xBA, 0x82, 0x43, 0xE4, + 0xBA, 0x85, 0x43, 0xE4, 0xBA, 0x86, 0x43, 0xE4, + 0xBA, 0x8C, 0x43, 0xE4, 0xBA, 0x94, 0x43, 0xE4, + 0xBA, 0xA0, 0x43, 0xE4, 0xBA, 0xA4, 0x43, 0xE4, + 0xBA, 0xAE, 0x43, 0xE4, 0xBA, 0xBA, 0x43, 0xE4, + 0xBB, 0x80, 0x43, 0xE4, 0xBB, 0x8C, 0x43, 0xE4, + // Bytes 740 - 77f + 0xBB, 0xA4, 0x43, 0xE4, 0xBC, 0x81, 0x43, 0xE4, + 0xBC, 0x91, 0x43, 0xE4, 0xBD, 0xA0, 0x43, 0xE4, + 0xBE, 0x80, 0x43, 0xE4, 0xBE, 0x86, 0x43, 0xE4, + 0xBE, 0x8B, 0x43, 0xE4, 0xBE, 0xAE, 0x43, 0xE4, + 0xBE, 0xBB, 0x43, 0xE4, 0xBE, 0xBF, 0x43, 0xE5, + 0x80, 0x82, 0x43, 0xE5, 0x80, 0xAB, 0x43, 0xE5, + 0x81, 0xBA, 0x43, 0xE5, 0x82, 0x99, 0x43, 0xE5, + 0x83, 0x8F, 0x43, 0xE5, 0x83, 0x9A, 0x43, 0xE5, + // Bytes 780 - 7bf + 0x83, 0xA7, 0x43, 0xE5, 0x84, 0xAA, 0x43, 0xE5, + 0x84, 0xBF, 0x43, 0xE5, 0x85, 0x80, 0x43, 0xE5, + 0x85, 0x85, 0x43, 0xE5, 0x85, 0x8D, 0x43, 0xE5, + 0x85, 0x94, 0x43, 0xE5, 0x85, 0xA4, 0x43, 0xE5, + 0x85, 0xA5, 0x43, 0xE5, 0x85, 0xA7, 0x43, 0xE5, + 0x85, 0xA8, 0x43, 0xE5, 0x85, 0xA9, 0x43, 0xE5, + 0x85, 0xAB, 0x43, 0xE5, 0x85, 0xAD, 0x43, 0xE5, + 0x85, 0xB7, 0x43, 0xE5, 0x86, 0x80, 0x43, 0xE5, + // Bytes 7c0 - 7ff + 0x86, 0x82, 0x43, 0xE5, 0x86, 0x8D, 0x43, 0xE5, + 0x86, 0x92, 0x43, 0xE5, 0x86, 0x95, 0x43, 0xE5, + 0x86, 0x96, 0x43, 0xE5, 0x86, 0x97, 0x43, 0xE5, + 0x86, 0x99, 0x43, 0xE5, 0x86, 0xA4, 0x43, 0xE5, + 0x86, 0xAB, 0x43, 0xE5, 0x86, 0xAC, 0x43, 0xE5, + 0x86, 0xB5, 0x43, 0xE5, 0x86, 0xB7, 0x43, 0xE5, + 0x87, 0x89, 0x43, 0xE5, 0x87, 0x8C, 0x43, 0xE5, + 0x87, 0x9C, 0x43, 0xE5, 0x87, 0x9E, 0x43, 0xE5, + // Bytes 800 - 83f + 0x87, 0xA0, 0x43, 0xE5, 0x87, 0xB5, 0x43, 0xE5, + 0x88, 0x80, 0x43, 0xE5, 0x88, 0x83, 0x43, 0xE5, + 0x88, 0x87, 0x43, 0xE5, 0x88, 0x97, 0x43, 0xE5, + 0x88, 0x9D, 0x43, 0xE5, 0x88, 0xA9, 0x43, 0xE5, + 0x88, 0xBA, 0x43, 0xE5, 0x88, 0xBB, 0x43, 0xE5, + 0x89, 0x86, 0x43, 0xE5, 0x89, 0x8D, 0x43, 0xE5, + 0x89, 0xB2, 0x43, 0xE5, 0x89, 0xB7, 0x43, 0xE5, + 0x8A, 0x89, 0x43, 0xE5, 0x8A, 0x9B, 0x43, 0xE5, + // Bytes 840 - 87f + 0x8A, 0xA3, 0x43, 0xE5, 0x8A, 0xB3, 0x43, 0xE5, + 0x8A, 0xB4, 0x43, 0xE5, 0x8B, 0x87, 0x43, 0xE5, + 0x8B, 0x89, 0x43, 0xE5, 0x8B, 0x92, 0x43, 0xE5, + 0x8B, 0x9E, 0x43, 0xE5, 0x8B, 0xA4, 0x43, 0xE5, + 0x8B, 0xB5, 0x43, 0xE5, 0x8B, 0xB9, 0x43, 0xE5, + 0x8B, 0xBA, 0x43, 0xE5, 0x8C, 0x85, 0x43, 0xE5, + 0x8C, 0x86, 0x43, 0xE5, 0x8C, 0x95, 0x43, 0xE5, + 0x8C, 0x97, 0x43, 0xE5, 0x8C, 0x9A, 0x43, 0xE5, + // Bytes 880 - 8bf + 0x8C, 0xB8, 0x43, 0xE5, 0x8C, 0xBB, 0x43, 0xE5, + 0x8C, 0xBF, 0x43, 0xE5, 0x8D, 0x81, 0x43, 0xE5, + 0x8D, 0x84, 0x43, 0xE5, 0x8D, 0x85, 0x43, 0xE5, + 0x8D, 0x89, 0x43, 0xE5, 0x8D, 0x91, 0x43, 0xE5, + 0x8D, 0x94, 0x43, 0xE5, 0x8D, 0x9A, 0x43, 0xE5, + 0x8D, 0x9C, 0x43, 0xE5, 0x8D, 0xA9, 0x43, 0xE5, + 0x8D, 0xB0, 0x43, 0xE5, 0x8D, 0xB3, 0x43, 0xE5, + 0x8D, 0xB5, 0x43, 0xE5, 0x8D, 0xBD, 0x43, 0xE5, + // Bytes 8c0 - 8ff + 0x8D, 0xBF, 0x43, 0xE5, 0x8E, 0x82, 0x43, 0xE5, + 0x8E, 0xB6, 0x43, 0xE5, 0x8F, 0x83, 0x43, 0xE5, + 0x8F, 0x88, 0x43, 0xE5, 0x8F, 0x8A, 0x43, 0xE5, + 0x8F, 0x8C, 0x43, 0xE5, 0x8F, 0x9F, 0x43, 0xE5, + 0x8F, 0xA3, 0x43, 0xE5, 0x8F, 0xA5, 0x43, 0xE5, + 0x8F, 0xAB, 0x43, 0xE5, 0x8F, 0xAF, 0x43, 0xE5, + 0x8F, 0xB1, 0x43, 0xE5, 0x8F, 0xB3, 0x43, 0xE5, + 0x90, 0x86, 0x43, 0xE5, 0x90, 0x88, 0x43, 0xE5, + // Bytes 900 - 93f + 0x90, 0x8D, 0x43, 0xE5, 0x90, 0x8F, 0x43, 0xE5, + 0x90, 0x9D, 0x43, 0xE5, 0x90, 0xB8, 0x43, 0xE5, + 0x90, 0xB9, 0x43, 0xE5, 0x91, 0x82, 0x43, 0xE5, + 0x91, 0x88, 0x43, 0xE5, 0x91, 0xA8, 0x43, 0xE5, + 0x92, 0x9E, 0x43, 0xE5, 0x92, 0xA2, 0x43, 0xE5, + 0x92, 0xBD, 0x43, 0xE5, 0x93, 0xB6, 0x43, 0xE5, + 0x94, 0x90, 0x43, 0xE5, 0x95, 0x8F, 0x43, 0xE5, + 0x95, 0x93, 0x43, 0xE5, 0x95, 0x95, 0x43, 0xE5, + // Bytes 940 - 97f + 0x95, 0xA3, 0x43, 0xE5, 0x96, 0x84, 0x43, 0xE5, + 0x96, 0x87, 0x43, 0xE5, 0x96, 0x99, 0x43, 0xE5, + 0x96, 0x9D, 0x43, 0xE5, 0x96, 0xAB, 0x43, 0xE5, + 0x96, 0xB3, 0x43, 0xE5, 0x96, 0xB6, 0x43, 0xE5, + 0x97, 0x80, 0x43, 0xE5, 0x97, 0x82, 0x43, 0xE5, + 0x97, 0xA2, 0x43, 0xE5, 0x98, 0x86, 0x43, 0xE5, + 0x99, 0x91, 0x43, 0xE5, 0x99, 0xA8, 0x43, 0xE5, + 0x99, 0xB4, 0x43, 0xE5, 0x9B, 0x97, 0x43, 0xE5, + // Bytes 980 - 9bf + 0x9B, 0x9B, 0x43, 0xE5, 0x9B, 0xB9, 0x43, 0xE5, + 0x9C, 0x96, 0x43, 0xE5, 0x9C, 0x97, 0x43, 0xE5, + 0x9C, 0x9F, 0x43, 0xE5, 0x9C, 0xB0, 0x43, 0xE5, + 0x9E, 0x8B, 0x43, 0xE5, 0x9F, 0x8E, 0x43, 0xE5, + 0x9F, 0xB4, 0x43, 0xE5, 0xA0, 0x8D, 0x43, 0xE5, + 0xA0, 0xB1, 0x43, 0xE5, 0xA0, 0xB2, 0x43, 0xE5, + 0xA1, 0x80, 0x43, 0xE5, 0xA1, 0x9A, 0x43, 0xE5, + 0xA1, 0x9E, 0x43, 0xE5, 0xA2, 0xA8, 0x43, 0xE5, + // Bytes 9c0 - 9ff + 0xA2, 0xAC, 0x43, 0xE5, 0xA2, 0xB3, 0x43, 0xE5, + 0xA3, 0x98, 0x43, 0xE5, 0xA3, 0x9F, 0x43, 0xE5, + 0xA3, 0xAB, 0x43, 0xE5, 0xA3, 0xAE, 0x43, 0xE5, + 0xA3, 0xB0, 0x43, 0xE5, 0xA3, 0xB2, 0x43, 0xE5, + 0xA3, 0xB7, 0x43, 0xE5, 0xA4, 0x82, 0x43, 0xE5, + 0xA4, 0x86, 0x43, 0xE5, 0xA4, 0x8A, 0x43, 0xE5, + 0xA4, 0x95, 0x43, 0xE5, 0xA4, 0x9A, 0x43, 0xE5, + 0xA4, 0x9C, 0x43, 0xE5, 0xA4, 0xA2, 0x43, 0xE5, + // Bytes a00 - a3f + 0xA4, 0xA7, 0x43, 0xE5, 0xA4, 0xA9, 0x43, 0xE5, + 0xA5, 0x84, 0x43, 0xE5, 0xA5, 0x88, 0x43, 0xE5, + 0xA5, 0x91, 0x43, 0xE5, 0xA5, 0x94, 0x43, 0xE5, + 0xA5, 0xA2, 0x43, 0xE5, 0xA5, 0xB3, 0x43, 0xE5, + 0xA7, 0x98, 0x43, 0xE5, 0xA7, 0xAC, 0x43, 0xE5, + 0xA8, 0x9B, 0x43, 0xE5, 0xA8, 0xA7, 0x43, 0xE5, + 0xA9, 0xA2, 0x43, 0xE5, 0xA9, 0xA6, 0x43, 0xE5, + 0xAA, 0xB5, 0x43, 0xE5, 0xAC, 0x88, 0x43, 0xE5, + // Bytes a40 - a7f + 0xAC, 0xA8, 0x43, 0xE5, 0xAC, 0xBE, 0x43, 0xE5, + 0xAD, 0x90, 0x43, 0xE5, 0xAD, 0x97, 0x43, 0xE5, + 0xAD, 0xA6, 0x43, 0xE5, 0xAE, 0x80, 0x43, 0xE5, + 0xAE, 0x85, 0x43, 0xE5, 0xAE, 0x97, 0x43, 0xE5, + 0xAF, 0x83, 0x43, 0xE5, 0xAF, 0x98, 0x43, 0xE5, + 0xAF, 0xA7, 0x43, 0xE5, 0xAF, 0xAE, 0x43, 0xE5, + 0xAF, 0xB3, 0x43, 0xE5, 0xAF, 0xB8, 0x43, 0xE5, + 0xAF, 0xBF, 0x43, 0xE5, 0xB0, 0x86, 0x43, 0xE5, + // Bytes a80 - abf + 0xB0, 0x8F, 0x43, 0xE5, 0xB0, 0xA2, 0x43, 0xE5, + 0xB0, 0xB8, 0x43, 0xE5, 0xB0, 0xBF, 0x43, 0xE5, + 0xB1, 0xA0, 0x43, 0xE5, 0xB1, 0xA2, 0x43, 0xE5, + 0xB1, 0xA4, 0x43, 0xE5, 0xB1, 0xA5, 0x43, 0xE5, + 0xB1, 0xAE, 0x43, 0xE5, 0xB1, 0xB1, 0x43, 0xE5, + 0xB2, 0x8D, 0x43, 0xE5, 0xB3, 0x80, 0x43, 0xE5, + 0xB4, 0x99, 0x43, 0xE5, 0xB5, 0x83, 0x43, 0xE5, + 0xB5, 0x90, 0x43, 0xE5, 0xB5, 0xAB, 0x43, 0xE5, + // Bytes ac0 - aff + 0xB5, 0xAE, 0x43, 0xE5, 0xB5, 0xBC, 0x43, 0xE5, + 0xB6, 0xB2, 0x43, 0xE5, 0xB6, 0xBA, 0x43, 0xE5, + 0xB7, 0x9B, 0x43, 0xE5, 0xB7, 0xA1, 0x43, 0xE5, + 0xB7, 0xA2, 0x43, 0xE5, 0xB7, 0xA5, 0x43, 0xE5, + 0xB7, 0xA6, 0x43, 0xE5, 0xB7, 0xB1, 0x43, 0xE5, + 0xB7, 0xBD, 0x43, 0xE5, 0xB7, 0xBE, 0x43, 0xE5, + 0xB8, 0xA8, 0x43, 0xE5, 0xB8, 0xBD, 0x43, 0xE5, + 0xB9, 0xA9, 0x43, 0xE5, 0xB9, 0xB2, 0x43, 0xE5, + // Bytes b00 - b3f + 0xB9, 0xB4, 0x43, 0xE5, 0xB9, 0xBA, 0x43, 0xE5, + 0xB9, 0xBC, 0x43, 0xE5, 0xB9, 0xBF, 0x43, 0xE5, + 0xBA, 0xA6, 0x43, 0xE5, 0xBA, 0xB0, 0x43, 0xE5, + 0xBA, 0xB3, 0x43, 0xE5, 0xBA, 0xB6, 0x43, 0xE5, + 0xBB, 0x89, 0x43, 0xE5, 0xBB, 0x8A, 0x43, 0xE5, + 0xBB, 0x92, 0x43, 0xE5, 0xBB, 0x93, 0x43, 0xE5, + 0xBB, 0x99, 0x43, 0xE5, 0xBB, 0xAC, 0x43, 0xE5, + 0xBB, 0xB4, 0x43, 0xE5, 0xBB, 0xBE, 0x43, 0xE5, + // Bytes b40 - b7f + 0xBC, 0x84, 0x43, 0xE5, 0xBC, 0x8B, 0x43, 0xE5, + 0xBC, 0x93, 0x43, 0xE5, 0xBC, 0xA2, 0x43, 0xE5, + 0xBD, 0x90, 0x43, 0xE5, 0xBD, 0x93, 0x43, 0xE5, + 0xBD, 0xA1, 0x43, 0xE5, 0xBD, 0xA2, 0x43, 0xE5, + 0xBD, 0xA9, 0x43, 0xE5, 0xBD, 0xAB, 0x43, 0xE5, + 0xBD, 0xB3, 0x43, 0xE5, 0xBE, 0x8B, 0x43, 0xE5, + 0xBE, 0x8C, 0x43, 0xE5, 0xBE, 0x97, 0x43, 0xE5, + 0xBE, 0x9A, 0x43, 0xE5, 0xBE, 0xA9, 0x43, 0xE5, + // Bytes b80 - bbf + 0xBE, 0xAD, 0x43, 0xE5, 0xBF, 0x83, 0x43, 0xE5, + 0xBF, 0x8D, 0x43, 0xE5, 0xBF, 0x97, 0x43, 0xE5, + 0xBF, 0xB5, 0x43, 0xE5, 0xBF, 0xB9, 0x43, 0xE6, + 0x80, 0x92, 0x43, 0xE6, 0x80, 0x9C, 0x43, 0xE6, + 0x81, 0xB5, 0x43, 0xE6, 0x82, 0x81, 0x43, 0xE6, + 0x82, 0x94, 0x43, 0xE6, 0x83, 0x87, 0x43, 0xE6, + 0x83, 0x98, 0x43, 0xE6, 0x83, 0xA1, 0x43, 0xE6, + 0x84, 0x88, 0x43, 0xE6, 0x85, 0x84, 0x43, 0xE6, + // Bytes bc0 - bff + 0x85, 0x88, 0x43, 0xE6, 0x85, 0x8C, 0x43, 0xE6, + 0x85, 0x8E, 0x43, 0xE6, 0x85, 0xA0, 0x43, 0xE6, + 0x85, 0xA8, 0x43, 0xE6, 0x85, 0xBA, 0x43, 0xE6, + 0x86, 0x8E, 0x43, 0xE6, 0x86, 0x90, 0x43, 0xE6, + 0x86, 0xA4, 0x43, 0xE6, 0x86, 0xAF, 0x43, 0xE6, + 0x86, 0xB2, 0x43, 0xE6, 0x87, 0x9E, 0x43, 0xE6, + 0x87, 0xB2, 0x43, 0xE6, 0x87, 0xB6, 0x43, 0xE6, + 0x88, 0x80, 0x43, 0xE6, 0x88, 0x88, 0x43, 0xE6, + // Bytes c00 - c3f + 0x88, 0x90, 0x43, 0xE6, 0x88, 0x9B, 0x43, 0xE6, + 0x88, 0xAE, 0x43, 0xE6, 0x88, 0xB4, 0x43, 0xE6, + 0x88, 0xB6, 0x43, 0xE6, 0x89, 0x8B, 0x43, 0xE6, + 0x89, 0x93, 0x43, 0xE6, 0x89, 0x9D, 0x43, 0xE6, + 0x8A, 0x95, 0x43, 0xE6, 0x8A, 0xB1, 0x43, 0xE6, + 0x8B, 0x89, 0x43, 0xE6, 0x8B, 0x8F, 0x43, 0xE6, + 0x8B, 0x93, 0x43, 0xE6, 0x8B, 0x94, 0x43, 0xE6, + 0x8B, 0xBC, 0x43, 0xE6, 0x8B, 0xBE, 0x43, 0xE6, + // Bytes c40 - c7f + 0x8C, 0x87, 0x43, 0xE6, 0x8C, 0xBD, 0x43, 0xE6, + 0x8D, 0x90, 0x43, 0xE6, 0x8D, 0x95, 0x43, 0xE6, + 0x8D, 0xA8, 0x43, 0xE6, 0x8D, 0xBB, 0x43, 0xE6, + 0x8E, 0x83, 0x43, 0xE6, 0x8E, 0xA0, 0x43, 0xE6, + 0x8E, 0xA9, 0x43, 0xE6, 0x8F, 0x84, 0x43, 0xE6, + 0x8F, 0x85, 0x43, 0xE6, 0x8F, 0xA4, 0x43, 0xE6, + 0x90, 0x9C, 0x43, 0xE6, 0x90, 0xA2, 0x43, 0xE6, + 0x91, 0x92, 0x43, 0xE6, 0x91, 0xA9, 0x43, 0xE6, + // Bytes c80 - cbf + 0x91, 0xB7, 0x43, 0xE6, 0x91, 0xBE, 0x43, 0xE6, + 0x92, 0x9A, 0x43, 0xE6, 0x92, 0x9D, 0x43, 0xE6, + 0x93, 0x84, 0x43, 0xE6, 0x94, 0xAF, 0x43, 0xE6, + 0x94, 0xB4, 0x43, 0xE6, 0x95, 0x8F, 0x43, 0xE6, + 0x95, 0x96, 0x43, 0xE6, 0x95, 0xAC, 0x43, 0xE6, + 0x95, 0xB8, 0x43, 0xE6, 0x96, 0x87, 0x43, 0xE6, + 0x96, 0x97, 0x43, 0xE6, 0x96, 0x99, 0x43, 0xE6, + 0x96, 0xA4, 0x43, 0xE6, 0x96, 0xB0, 0x43, 0xE6, + // Bytes cc0 - cff + 0x96, 0xB9, 0x43, 0xE6, 0x97, 0x85, 0x43, 0xE6, + 0x97, 0xA0, 0x43, 0xE6, 0x97, 0xA2, 0x43, 0xE6, + 0x97, 0xA3, 0x43, 0xE6, 0x97, 0xA5, 0x43, 0xE6, + 0x98, 0x93, 0x43, 0xE6, 0x98, 0xA0, 0x43, 0xE6, + 0x99, 0x89, 0x43, 0xE6, 0x99, 0xB4, 0x43, 0xE6, + 0x9A, 0x88, 0x43, 0xE6, 0x9A, 0x91, 0x43, 0xE6, + 0x9A, 0x9C, 0x43, 0xE6, 0x9A, 0xB4, 0x43, 0xE6, + 0x9B, 0x86, 0x43, 0xE6, 0x9B, 0xB0, 0x43, 0xE6, + // Bytes d00 - d3f + 0x9B, 0xB4, 0x43, 0xE6, 0x9B, 0xB8, 0x43, 0xE6, + 0x9C, 0x80, 0x43, 0xE6, 0x9C, 0x88, 0x43, 0xE6, + 0x9C, 0x89, 0x43, 0xE6, 0x9C, 0x97, 0x43, 0xE6, + 0x9C, 0x9B, 0x43, 0xE6, 0x9C, 0xA1, 0x43, 0xE6, + 0x9C, 0xA8, 0x43, 0xE6, 0x9D, 0x8E, 0x43, 0xE6, + 0x9D, 0x93, 0x43, 0xE6, 0x9D, 0x96, 0x43, 0xE6, + 0x9D, 0x9E, 0x43, 0xE6, 0x9D, 0xBB, 0x43, 0xE6, + 0x9E, 0x85, 0x43, 0xE6, 0x9E, 0x97, 0x43, 0xE6, + // Bytes d40 - d7f + 0x9F, 0xB3, 0x43, 0xE6, 0x9F, 0xBA, 0x43, 0xE6, + 0xA0, 0x97, 0x43, 0xE6, 0xA0, 0x9F, 0x43, 0xE6, + 0xA0, 0xAA, 0x43, 0xE6, 0xA1, 0x92, 0x43, 0xE6, + 0xA2, 0x81, 0x43, 0xE6, 0xA2, 0x85, 0x43, 0xE6, + 0xA2, 0x8E, 0x43, 0xE6, 0xA2, 0xA8, 0x43, 0xE6, + 0xA4, 0x94, 0x43, 0xE6, 0xA5, 0x82, 0x43, 0xE6, + 0xA6, 0xA3, 0x43, 0xE6, 0xA7, 0xAA, 0x43, 0xE6, + 0xA8, 0x82, 0x43, 0xE6, 0xA8, 0x93, 0x43, 0xE6, + // Bytes d80 - dbf + 0xAA, 0xA8, 0x43, 0xE6, 0xAB, 0x93, 0x43, 0xE6, + 0xAB, 0x9B, 0x43, 0xE6, 0xAC, 0x84, 0x43, 0xE6, + 0xAC, 0xA0, 0x43, 0xE6, 0xAC, 0xA1, 0x43, 0xE6, + 0xAD, 0x94, 0x43, 0xE6, 0xAD, 0xA2, 0x43, 0xE6, + 0xAD, 0xA3, 0x43, 0xE6, 0xAD, 0xB2, 0x43, 0xE6, + 0xAD, 0xB7, 0x43, 0xE6, 0xAD, 0xB9, 0x43, 0xE6, + 0xAE, 0x9F, 0x43, 0xE6, 0xAE, 0xAE, 0x43, 0xE6, + 0xAE, 0xB3, 0x43, 0xE6, 0xAE, 0xBA, 0x43, 0xE6, + // Bytes dc0 - dff + 0xAE, 0xBB, 0x43, 0xE6, 0xAF, 0x8B, 0x43, 0xE6, + 0xAF, 0x8D, 0x43, 0xE6, 0xAF, 0x94, 0x43, 0xE6, + 0xAF, 0x9B, 0x43, 0xE6, 0xB0, 0x8F, 0x43, 0xE6, + 0xB0, 0x94, 0x43, 0xE6, 0xB0, 0xB4, 0x43, 0xE6, + 0xB1, 0x8E, 0x43, 0xE6, 0xB1, 0xA7, 0x43, 0xE6, + 0xB2, 0x88, 0x43, 0xE6, 0xB2, 0xBF, 0x43, 0xE6, + 0xB3, 0x8C, 0x43, 0xE6, 0xB3, 0x8D, 0x43, 0xE6, + 0xB3, 0xA5, 0x43, 0xE6, 0xB3, 0xA8, 0x43, 0xE6, + // Bytes e00 - e3f + 0xB4, 0x96, 0x43, 0xE6, 0xB4, 0x9B, 0x43, 0xE6, + 0xB4, 0x9E, 0x43, 0xE6, 0xB4, 0xB4, 0x43, 0xE6, + 0xB4, 0xBE, 0x43, 0xE6, 0xB5, 0x81, 0x43, 0xE6, + 0xB5, 0xA9, 0x43, 0xE6, 0xB5, 0xAA, 0x43, 0xE6, + 0xB5, 0xB7, 0x43, 0xE6, 0xB5, 0xB8, 0x43, 0xE6, + 0xB6, 0x85, 0x43, 0xE6, 0xB7, 0x8B, 0x43, 0xE6, + 0xB7, 0x9A, 0x43, 0xE6, 0xB7, 0xAA, 0x43, 0xE6, + 0xB7, 0xB9, 0x43, 0xE6, 0xB8, 0x9A, 0x43, 0xE6, + // Bytes e40 - e7f + 0xB8, 0xAF, 0x43, 0xE6, 0xB9, 0xAE, 0x43, 0xE6, + 0xBA, 0x80, 0x43, 0xE6, 0xBA, 0x9C, 0x43, 0xE6, + 0xBA, 0xBA, 0x43, 0xE6, 0xBB, 0x87, 0x43, 0xE6, + 0xBB, 0x8B, 0x43, 0xE6, 0xBB, 0x91, 0x43, 0xE6, + 0xBB, 0x9B, 0x43, 0xE6, 0xBC, 0x8F, 0x43, 0xE6, + 0xBC, 0x94, 0x43, 0xE6, 0xBC, 0xA2, 0x43, 0xE6, + 0xBC, 0xA3, 0x43, 0xE6, 0xBD, 0xAE, 0x43, 0xE6, + 0xBF, 0x86, 0x43, 0xE6, 0xBF, 0xAB, 0x43, 0xE6, + // Bytes e80 - ebf + 0xBF, 0xBE, 0x43, 0xE7, 0x80, 0x9B, 0x43, 0xE7, + 0x80, 0x9E, 0x43, 0xE7, 0x80, 0xB9, 0x43, 0xE7, + 0x81, 0x8A, 0x43, 0xE7, 0x81, 0xAB, 0x43, 0xE7, + 0x81, 0xB0, 0x43, 0xE7, 0x81, 0xB7, 0x43, 0xE7, + 0x81, 0xBD, 0x43, 0xE7, 0x82, 0x99, 0x43, 0xE7, + 0x82, 0xAD, 0x43, 0xE7, 0x83, 0x88, 0x43, 0xE7, + 0x83, 0x99, 0x43, 0xE7, 0x84, 0xA1, 0x43, 0xE7, + 0x85, 0x85, 0x43, 0xE7, 0x85, 0x89, 0x43, 0xE7, + // Bytes ec0 - eff + 0x85, 0xAE, 0x43, 0xE7, 0x86, 0x9C, 0x43, 0xE7, + 0x87, 0x8E, 0x43, 0xE7, 0x87, 0x90, 0x43, 0xE7, + 0x88, 0x90, 0x43, 0xE7, 0x88, 0x9B, 0x43, 0xE7, + 0x88, 0xA8, 0x43, 0xE7, 0x88, 0xAA, 0x43, 0xE7, + 0x88, 0xAB, 0x43, 0xE7, 0x88, 0xB5, 0x43, 0xE7, + 0x88, 0xB6, 0x43, 0xE7, 0x88, 0xBB, 0x43, 0xE7, + 0x88, 0xBF, 0x43, 0xE7, 0x89, 0x87, 0x43, 0xE7, + 0x89, 0x90, 0x43, 0xE7, 0x89, 0x99, 0x43, 0xE7, + // Bytes f00 - f3f + 0x89, 0x9B, 0x43, 0xE7, 0x89, 0xA2, 0x43, 0xE7, + 0x89, 0xB9, 0x43, 0xE7, 0x8A, 0x80, 0x43, 0xE7, + 0x8A, 0x95, 0x43, 0xE7, 0x8A, 0xAC, 0x43, 0xE7, + 0x8A, 0xAF, 0x43, 0xE7, 0x8B, 0x80, 0x43, 0xE7, + 0x8B, 0xBC, 0x43, 0xE7, 0x8C, 0xAA, 0x43, 0xE7, + 0x8D, 0xB5, 0x43, 0xE7, 0x8D, 0xBA, 0x43, 0xE7, + 0x8E, 0x84, 0x43, 0xE7, 0x8E, 0x87, 0x43, 0xE7, + 0x8E, 0x89, 0x43, 0xE7, 0x8E, 0x8B, 0x43, 0xE7, + // Bytes f40 - f7f + 0x8E, 0xA5, 0x43, 0xE7, 0x8E, 0xB2, 0x43, 0xE7, + 0x8F, 0x9E, 0x43, 0xE7, 0x90, 0x86, 0x43, 0xE7, + 0x90, 0x89, 0x43, 0xE7, 0x90, 0xA2, 0x43, 0xE7, + 0x91, 0x87, 0x43, 0xE7, 0x91, 0x9C, 0x43, 0xE7, + 0x91, 0xA9, 0x43, 0xE7, 0x91, 0xB1, 0x43, 0xE7, + 0x92, 0x85, 0x43, 0xE7, 0x92, 0x89, 0x43, 0xE7, + 0x92, 0x98, 0x43, 0xE7, 0x93, 0x8A, 0x43, 0xE7, + 0x93, 0x9C, 0x43, 0xE7, 0x93, 0xA6, 0x43, 0xE7, + // Bytes f80 - fbf + 0x94, 0x86, 0x43, 0xE7, 0x94, 0x98, 0x43, 0xE7, + 0x94, 0x9F, 0x43, 0xE7, 0x94, 0xA4, 0x43, 0xE7, + 0x94, 0xA8, 0x43, 0xE7, 0x94, 0xB0, 0x43, 0xE7, + 0x94, 0xB2, 0x43, 0xE7, 0x94, 0xB3, 0x43, 0xE7, + 0x94, 0xB7, 0x43, 0xE7, 0x94, 0xBB, 0x43, 0xE7, + 0x94, 0xBE, 0x43, 0xE7, 0x95, 0x99, 0x43, 0xE7, + 0x95, 0xA5, 0x43, 0xE7, 0x95, 0xB0, 0x43, 0xE7, + 0x96, 0x8B, 0x43, 0xE7, 0x96, 0x92, 0x43, 0xE7, + // Bytes fc0 - fff + 0x97, 0xA2, 0x43, 0xE7, 0x98, 0x90, 0x43, 0xE7, + 0x98, 0x9D, 0x43, 0xE7, 0x98, 0x9F, 0x43, 0xE7, + 0x99, 0x82, 0x43, 0xE7, 0x99, 0xA9, 0x43, 0xE7, + 0x99, 0xB6, 0x43, 0xE7, 0x99, 0xBD, 0x43, 0xE7, + 0x9A, 0xAE, 0x43, 0xE7, 0x9A, 0xBF, 0x43, 0xE7, + 0x9B, 0x8A, 0x43, 0xE7, 0x9B, 0x9B, 0x43, 0xE7, + 0x9B, 0xA3, 0x43, 0xE7, 0x9B, 0xA7, 0x43, 0xE7, + 0x9B, 0xAE, 0x43, 0xE7, 0x9B, 0xB4, 0x43, 0xE7, + // Bytes 1000 - 103f + 0x9C, 0x81, 0x43, 0xE7, 0x9C, 0x9E, 0x43, 0xE7, + 0x9C, 0x9F, 0x43, 0xE7, 0x9D, 0x80, 0x43, 0xE7, + 0x9D, 0x8A, 0x43, 0xE7, 0x9E, 0x8B, 0x43, 0xE7, + 0x9E, 0xA7, 0x43, 0xE7, 0x9F, 0x9B, 0x43, 0xE7, + 0x9F, 0xA2, 0x43, 0xE7, 0x9F, 0xB3, 0x43, 0xE7, + 0xA1, 0x8E, 0x43, 0xE7, 0xA1, 0xAB, 0x43, 0xE7, + 0xA2, 0x8C, 0x43, 0xE7, 0xA2, 0x91, 0x43, 0xE7, + 0xA3, 0x8A, 0x43, 0xE7, 0xA3, 0x8C, 0x43, 0xE7, + // Bytes 1040 - 107f + 0xA3, 0xBB, 0x43, 0xE7, 0xA4, 0xAA, 0x43, 0xE7, + 0xA4, 0xBA, 0x43, 0xE7, 0xA4, 0xBC, 0x43, 0xE7, + 0xA4, 0xBE, 0x43, 0xE7, 0xA5, 0x88, 0x43, 0xE7, + 0xA5, 0x89, 0x43, 0xE7, 0xA5, 0x90, 0x43, 0xE7, + 0xA5, 0x96, 0x43, 0xE7, 0xA5, 0x9D, 0x43, 0xE7, + 0xA5, 0x9E, 0x43, 0xE7, 0xA5, 0xA5, 0x43, 0xE7, + 0xA5, 0xBF, 0x43, 0xE7, 0xA6, 0x81, 0x43, 0xE7, + 0xA6, 0x8D, 0x43, 0xE7, 0xA6, 0x8E, 0x43, 0xE7, + // Bytes 1080 - 10bf + 0xA6, 0x8F, 0x43, 0xE7, 0xA6, 0xAE, 0x43, 0xE7, + 0xA6, 0xB8, 0x43, 0xE7, 0xA6, 0xBE, 0x43, 0xE7, + 0xA7, 0x8A, 0x43, 0xE7, 0xA7, 0x98, 0x43, 0xE7, + 0xA7, 0xAB, 0x43, 0xE7, 0xA8, 0x9C, 0x43, 0xE7, + 0xA9, 0x80, 0x43, 0xE7, 0xA9, 0x8A, 0x43, 0xE7, + 0xA9, 0x8F, 0x43, 0xE7, 0xA9, 0xB4, 0x43, 0xE7, + 0xA9, 0xBA, 0x43, 0xE7, 0xAA, 0x81, 0x43, 0xE7, + 0xAA, 0xB1, 0x43, 0xE7, 0xAB, 0x8B, 0x43, 0xE7, + // Bytes 10c0 - 10ff + 0xAB, 0xAE, 0x43, 0xE7, 0xAB, 0xB9, 0x43, 0xE7, + 0xAC, 0xA0, 0x43, 0xE7, 0xAE, 0x8F, 0x43, 0xE7, + 0xAF, 0x80, 0x43, 0xE7, 0xAF, 0x86, 0x43, 0xE7, + 0xAF, 0x89, 0x43, 0xE7, 0xB0, 0xBE, 0x43, 0xE7, + 0xB1, 0xA0, 0x43, 0xE7, 0xB1, 0xB3, 0x43, 0xE7, + 0xB1, 0xBB, 0x43, 0xE7, 0xB2, 0x92, 0x43, 0xE7, + 0xB2, 0xBE, 0x43, 0xE7, 0xB3, 0x92, 0x43, 0xE7, + 0xB3, 0x96, 0x43, 0xE7, 0xB3, 0xA3, 0x43, 0xE7, + // Bytes 1100 - 113f + 0xB3, 0xA7, 0x43, 0xE7, 0xB3, 0xA8, 0x43, 0xE7, + 0xB3, 0xB8, 0x43, 0xE7, 0xB4, 0x80, 0x43, 0xE7, + 0xB4, 0x90, 0x43, 0xE7, 0xB4, 0xA2, 0x43, 0xE7, + 0xB4, 0xAF, 0x43, 0xE7, 0xB5, 0x82, 0x43, 0xE7, + 0xB5, 0x9B, 0x43, 0xE7, 0xB5, 0xA3, 0x43, 0xE7, + 0xB6, 0xA0, 0x43, 0xE7, 0xB6, 0xBE, 0x43, 0xE7, + 0xB7, 0x87, 0x43, 0xE7, 0xB7, 0xB4, 0x43, 0xE7, + 0xB8, 0x82, 0x43, 0xE7, 0xB8, 0x89, 0x43, 0xE7, + // Bytes 1140 - 117f + 0xB8, 0xB7, 0x43, 0xE7, 0xB9, 0x81, 0x43, 0xE7, + 0xB9, 0x85, 0x43, 0xE7, 0xBC, 0xB6, 0x43, 0xE7, + 0xBC, 0xBE, 0x43, 0xE7, 0xBD, 0x91, 0x43, 0xE7, + 0xBD, 0xB2, 0x43, 0xE7, 0xBD, 0xB9, 0x43, 0xE7, + 0xBD, 0xBA, 0x43, 0xE7, 0xBE, 0x85, 0x43, 0xE7, + 0xBE, 0x8A, 0x43, 0xE7, 0xBE, 0x95, 0x43, 0xE7, + 0xBE, 0x9A, 0x43, 0xE7, 0xBE, 0xBD, 0x43, 0xE7, + 0xBF, 0xBA, 0x43, 0xE8, 0x80, 0x81, 0x43, 0xE8, + // Bytes 1180 - 11bf + 0x80, 0x85, 0x43, 0xE8, 0x80, 0x8C, 0x43, 0xE8, + 0x80, 0x92, 0x43, 0xE8, 0x80, 0xB3, 0x43, 0xE8, + 0x81, 0x86, 0x43, 0xE8, 0x81, 0xA0, 0x43, 0xE8, + 0x81, 0xAF, 0x43, 0xE8, 0x81, 0xB0, 0x43, 0xE8, + 0x81, 0xBE, 0x43, 0xE8, 0x81, 0xBF, 0x43, 0xE8, + 0x82, 0x89, 0x43, 0xE8, 0x82, 0x8B, 0x43, 0xE8, + 0x82, 0xAD, 0x43, 0xE8, 0x82, 0xB2, 0x43, 0xE8, + 0x84, 0x83, 0x43, 0xE8, 0x84, 0xBE, 0x43, 0xE8, + // Bytes 11c0 - 11ff + 0x87, 0x98, 0x43, 0xE8, 0x87, 0xA3, 0x43, 0xE8, + 0x87, 0xA8, 0x43, 0xE8, 0x87, 0xAA, 0x43, 0xE8, + 0x87, 0xAD, 0x43, 0xE8, 0x87, 0xB3, 0x43, 0xE8, + 0x87, 0xBC, 0x43, 0xE8, 0x88, 0x81, 0x43, 0xE8, + 0x88, 0x84, 0x43, 0xE8, 0x88, 0x8C, 0x43, 0xE8, + 0x88, 0x98, 0x43, 0xE8, 0x88, 0x9B, 0x43, 0xE8, + 0x88, 0x9F, 0x43, 0xE8, 0x89, 0xAE, 0x43, 0xE8, + 0x89, 0xAF, 0x43, 0xE8, 0x89, 0xB2, 0x43, 0xE8, + // Bytes 1200 - 123f + 0x89, 0xB8, 0x43, 0xE8, 0x89, 0xB9, 0x43, 0xE8, + 0x8A, 0x8B, 0x43, 0xE8, 0x8A, 0x91, 0x43, 0xE8, + 0x8A, 0x9D, 0x43, 0xE8, 0x8A, 0xB1, 0x43, 0xE8, + 0x8A, 0xB3, 0x43, 0xE8, 0x8A, 0xBD, 0x43, 0xE8, + 0x8B, 0xA5, 0x43, 0xE8, 0x8B, 0xA6, 0x43, 0xE8, + 0x8C, 0x9D, 0x43, 0xE8, 0x8C, 0xA3, 0x43, 0xE8, + 0x8C, 0xB6, 0x43, 0xE8, 0x8D, 0x92, 0x43, 0xE8, + 0x8D, 0x93, 0x43, 0xE8, 0x8D, 0xA3, 0x43, 0xE8, + // Bytes 1240 - 127f + 0x8E, 0xAD, 0x43, 0xE8, 0x8E, 0xBD, 0x43, 0xE8, + 0x8F, 0x89, 0x43, 0xE8, 0x8F, 0x8A, 0x43, 0xE8, + 0x8F, 0x8C, 0x43, 0xE8, 0x8F, 0x9C, 0x43, 0xE8, + 0x8F, 0xA7, 0x43, 0xE8, 0x8F, 0xAF, 0x43, 0xE8, + 0x8F, 0xB1, 0x43, 0xE8, 0x90, 0xBD, 0x43, 0xE8, + 0x91, 0x89, 0x43, 0xE8, 0x91, 0x97, 0x43, 0xE8, + 0x93, 0xAE, 0x43, 0xE8, 0x93, 0xB1, 0x43, 0xE8, + 0x93, 0xB3, 0x43, 0xE8, 0x93, 0xBC, 0x43, 0xE8, + // Bytes 1280 - 12bf + 0x94, 0x96, 0x43, 0xE8, 0x95, 0xA4, 0x43, 0xE8, + 0x97, 0x8D, 0x43, 0xE8, 0x97, 0xBA, 0x43, 0xE8, + 0x98, 0x86, 0x43, 0xE8, 0x98, 0x92, 0x43, 0xE8, + 0x98, 0xAD, 0x43, 0xE8, 0x98, 0xBF, 0x43, 0xE8, + 0x99, 0x8D, 0x43, 0xE8, 0x99, 0x90, 0x43, 0xE8, + 0x99, 0x9C, 0x43, 0xE8, 0x99, 0xA7, 0x43, 0xE8, + 0x99, 0xA9, 0x43, 0xE8, 0x99, 0xAB, 0x43, 0xE8, + 0x9A, 0x88, 0x43, 0xE8, 0x9A, 0xA9, 0x43, 0xE8, + // Bytes 12c0 - 12ff + 0x9B, 0xA2, 0x43, 0xE8, 0x9C, 0x8E, 0x43, 0xE8, + 0x9C, 0xA8, 0x43, 0xE8, 0x9D, 0xAB, 0x43, 0xE8, + 0x9D, 0xB9, 0x43, 0xE8, 0x9E, 0x86, 0x43, 0xE8, + 0x9E, 0xBA, 0x43, 0xE8, 0x9F, 0xA1, 0x43, 0xE8, + 0xA0, 0x81, 0x43, 0xE8, 0xA0, 0x9F, 0x43, 0xE8, + 0xA1, 0x80, 0x43, 0xE8, 0xA1, 0x8C, 0x43, 0xE8, + 0xA1, 0xA0, 0x43, 0xE8, 0xA1, 0xA3, 0x43, 0xE8, + 0xA3, 0x82, 0x43, 0xE8, 0xA3, 0x8F, 0x43, 0xE8, + // Bytes 1300 - 133f + 0xA3, 0x97, 0x43, 0xE8, 0xA3, 0x9E, 0x43, 0xE8, + 0xA3, 0xA1, 0x43, 0xE8, 0xA3, 0xB8, 0x43, 0xE8, + 0xA3, 0xBA, 0x43, 0xE8, 0xA4, 0x90, 0x43, 0xE8, + 0xA5, 0x81, 0x43, 0xE8, 0xA5, 0xA4, 0x43, 0xE8, + 0xA5, 0xBE, 0x43, 0xE8, 0xA6, 0x86, 0x43, 0xE8, + 0xA6, 0x8B, 0x43, 0xE8, 0xA6, 0x96, 0x43, 0xE8, + 0xA7, 0x92, 0x43, 0xE8, 0xA7, 0xA3, 0x43, 0xE8, + 0xA8, 0x80, 0x43, 0xE8, 0xAA, 0xA0, 0x43, 0xE8, + // Bytes 1340 - 137f + 0xAA, 0xAA, 0x43, 0xE8, 0xAA, 0xBF, 0x43, 0xE8, + 0xAB, 0x8B, 0x43, 0xE8, 0xAB, 0x92, 0x43, 0xE8, + 0xAB, 0x96, 0x43, 0xE8, 0xAB, 0xAD, 0x43, 0xE8, + 0xAB, 0xB8, 0x43, 0xE8, 0xAB, 0xBE, 0x43, 0xE8, + 0xAC, 0x81, 0x43, 0xE8, 0xAC, 0xB9, 0x43, 0xE8, + 0xAD, 0x98, 0x43, 0xE8, 0xAE, 0x80, 0x43, 0xE8, + 0xAE, 0x8A, 0x43, 0xE8, 0xB0, 0xB7, 0x43, 0xE8, + 0xB1, 0x86, 0x43, 0xE8, 0xB1, 0x88, 0x43, 0xE8, + // Bytes 1380 - 13bf + 0xB1, 0x95, 0x43, 0xE8, 0xB1, 0xB8, 0x43, 0xE8, + 0xB2, 0x9D, 0x43, 0xE8, 0xB2, 0xA1, 0x43, 0xE8, + 0xB2, 0xA9, 0x43, 0xE8, 0xB2, 0xAB, 0x43, 0xE8, + 0xB3, 0x81, 0x43, 0xE8, 0xB3, 0x82, 0x43, 0xE8, + 0xB3, 0x87, 0x43, 0xE8, 0xB3, 0x88, 0x43, 0xE8, + 0xB3, 0x93, 0x43, 0xE8, 0xB4, 0x88, 0x43, 0xE8, + 0xB4, 0x9B, 0x43, 0xE8, 0xB5, 0xA4, 0x43, 0xE8, + 0xB5, 0xB0, 0x43, 0xE8, 0xB5, 0xB7, 0x43, 0xE8, + // Bytes 13c0 - 13ff + 0xB6, 0xB3, 0x43, 0xE8, 0xB6, 0xBC, 0x43, 0xE8, + 0xB7, 0x8B, 0x43, 0xE8, 0xB7, 0xAF, 0x43, 0xE8, + 0xB7, 0xB0, 0x43, 0xE8, 0xBA, 0xAB, 0x43, 0xE8, + 0xBB, 0x8A, 0x43, 0xE8, 0xBB, 0x94, 0x43, 0xE8, + 0xBC, 0xA6, 0x43, 0xE8, 0xBC, 0xAA, 0x43, 0xE8, + 0xBC, 0xB8, 0x43, 0xE8, 0xBC, 0xBB, 0x43, 0xE8, + 0xBD, 0xA2, 0x43, 0xE8, 0xBE, 0x9B, 0x43, 0xE8, + 0xBE, 0x9E, 0x43, 0xE8, 0xBE, 0xB0, 0x43, 0xE8, + // Bytes 1400 - 143f + 0xBE, 0xB5, 0x43, 0xE8, 0xBE, 0xB6, 0x43, 0xE9, + 0x80, 0xA3, 0x43, 0xE9, 0x80, 0xB8, 0x43, 0xE9, + 0x81, 0x8A, 0x43, 0xE9, 0x81, 0xA9, 0x43, 0xE9, + 0x81, 0xB2, 0x43, 0xE9, 0x81, 0xBC, 0x43, 0xE9, + 0x82, 0x8F, 0x43, 0xE9, 0x82, 0x91, 0x43, 0xE9, + 0x82, 0x94, 0x43, 0xE9, 0x83, 0x8E, 0x43, 0xE9, + 0x83, 0x9E, 0x43, 0xE9, 0x83, 0xB1, 0x43, 0xE9, + 0x83, 0xBD, 0x43, 0xE9, 0x84, 0x91, 0x43, 0xE9, + // Bytes 1440 - 147f + 0x84, 0x9B, 0x43, 0xE9, 0x85, 0x89, 0x43, 0xE9, + 0x85, 0x8D, 0x43, 0xE9, 0x85, 0xAA, 0x43, 0xE9, + 0x86, 0x99, 0x43, 0xE9, 0x86, 0xB4, 0x43, 0xE9, + 0x87, 0x86, 0x43, 0xE9, 0x87, 0x8C, 0x43, 0xE9, + 0x87, 0x8F, 0x43, 0xE9, 0x87, 0x91, 0x43, 0xE9, + 0x88, 0xB4, 0x43, 0xE9, 0x88, 0xB8, 0x43, 0xE9, + 0x89, 0xB6, 0x43, 0xE9, 0x89, 0xBC, 0x43, 0xE9, + 0x8B, 0x97, 0x43, 0xE9, 0x8B, 0x98, 0x43, 0xE9, + // Bytes 1480 - 14bf + 0x8C, 0x84, 0x43, 0xE9, 0x8D, 0x8A, 0x43, 0xE9, + 0x8F, 0xB9, 0x43, 0xE9, 0x90, 0x95, 0x43, 0xE9, + 0x95, 0xB7, 0x43, 0xE9, 0x96, 0x80, 0x43, 0xE9, + 0x96, 0x8B, 0x43, 0xE9, 0x96, 0xAD, 0x43, 0xE9, + 0x96, 0xB7, 0x43, 0xE9, 0x98, 0x9C, 0x43, 0xE9, + 0x98, 0xAE, 0x43, 0xE9, 0x99, 0x8B, 0x43, 0xE9, + 0x99, 0x8D, 0x43, 0xE9, 0x99, 0xB5, 0x43, 0xE9, + 0x99, 0xB8, 0x43, 0xE9, 0x99, 0xBC, 0x43, 0xE9, + // Bytes 14c0 - 14ff + 0x9A, 0x86, 0x43, 0xE9, 0x9A, 0xA3, 0x43, 0xE9, + 0x9A, 0xB6, 0x43, 0xE9, 0x9A, 0xB7, 0x43, 0xE9, + 0x9A, 0xB8, 0x43, 0xE9, 0x9A, 0xB9, 0x43, 0xE9, + 0x9B, 0x83, 0x43, 0xE9, 0x9B, 0xA2, 0x43, 0xE9, + 0x9B, 0xA3, 0x43, 0xE9, 0x9B, 0xA8, 0x43, 0xE9, + 0x9B, 0xB6, 0x43, 0xE9, 0x9B, 0xB7, 0x43, 0xE9, + 0x9C, 0xA3, 0x43, 0xE9, 0x9C, 0xB2, 0x43, 0xE9, + 0x9D, 0x88, 0x43, 0xE9, 0x9D, 0x91, 0x43, 0xE9, + // Bytes 1500 - 153f + 0x9D, 0x96, 0x43, 0xE9, 0x9D, 0x9E, 0x43, 0xE9, + 0x9D, 0xA2, 0x43, 0xE9, 0x9D, 0xA9, 0x43, 0xE9, + 0x9F, 0x8B, 0x43, 0xE9, 0x9F, 0x9B, 0x43, 0xE9, + 0x9F, 0xA0, 0x43, 0xE9, 0x9F, 0xAD, 0x43, 0xE9, + 0x9F, 0xB3, 0x43, 0xE9, 0x9F, 0xBF, 0x43, 0xE9, + 0xA0, 0x81, 0x43, 0xE9, 0xA0, 0x85, 0x43, 0xE9, + 0xA0, 0x8B, 0x43, 0xE9, 0xA0, 0x98, 0x43, 0xE9, + 0xA0, 0xA9, 0x43, 0xE9, 0xA0, 0xBB, 0x43, 0xE9, + // Bytes 1540 - 157f + 0xA1, 0x9E, 0x43, 0xE9, 0xA2, 0xA8, 0x43, 0xE9, + 0xA3, 0x9B, 0x43, 0xE9, 0xA3, 0x9F, 0x43, 0xE9, + 0xA3, 0xA2, 0x43, 0xE9, 0xA3, 0xAF, 0x43, 0xE9, + 0xA3, 0xBC, 0x43, 0xE9, 0xA4, 0xA8, 0x43, 0xE9, + 0xA4, 0xA9, 0x43, 0xE9, 0xA6, 0x96, 0x43, 0xE9, + 0xA6, 0x99, 0x43, 0xE9, 0xA6, 0xA7, 0x43, 0xE9, + 0xA6, 0xAC, 0x43, 0xE9, 0xA7, 0x82, 0x43, 0xE9, + 0xA7, 0xB1, 0x43, 0xE9, 0xA7, 0xBE, 0x43, 0xE9, + // Bytes 1580 - 15bf + 0xA9, 0xAA, 0x43, 0xE9, 0xAA, 0xA8, 0x43, 0xE9, + 0xAB, 0x98, 0x43, 0xE9, 0xAB, 0x9F, 0x43, 0xE9, + 0xAC, 0x92, 0x43, 0xE9, 0xAC, 0xA5, 0x43, 0xE9, + 0xAC, 0xAF, 0x43, 0xE9, 0xAC, 0xB2, 0x43, 0xE9, + 0xAC, 0xBC, 0x43, 0xE9, 0xAD, 0x9A, 0x43, 0xE9, + 0xAD, 0xAF, 0x43, 0xE9, 0xB1, 0x80, 0x43, 0xE9, + 0xB1, 0x97, 0x43, 0xE9, 0xB3, 0xA5, 0x43, 0xE9, + 0xB3, 0xBD, 0x43, 0xE9, 0xB5, 0xA7, 0x43, 0xE9, + // Bytes 15c0 - 15ff + 0xB6, 0xB4, 0x43, 0xE9, 0xB7, 0xBA, 0x43, 0xE9, + 0xB8, 0x9E, 0x43, 0xE9, 0xB9, 0xB5, 0x43, 0xE9, + 0xB9, 0xBF, 0x43, 0xE9, 0xBA, 0x97, 0x43, 0xE9, + 0xBA, 0x9F, 0x43, 0xE9, 0xBA, 0xA5, 0x43, 0xE9, + 0xBA, 0xBB, 0x43, 0xE9, 0xBB, 0x83, 0x43, 0xE9, + 0xBB, 0x8D, 0x43, 0xE9, 0xBB, 0x8E, 0x43, 0xE9, + 0xBB, 0x91, 0x43, 0xE9, 0xBB, 0xB9, 0x43, 0xE9, + 0xBB, 0xBD, 0x43, 0xE9, 0xBB, 0xBE, 0x43, 0xE9, + // Bytes 1600 - 163f + 0xBC, 0x85, 0x43, 0xE9, 0xBC, 0x8E, 0x43, 0xE9, + 0xBC, 0x8F, 0x43, 0xE9, 0xBC, 0x93, 0x43, 0xE9, + 0xBC, 0x96, 0x43, 0xE9, 0xBC, 0xA0, 0x43, 0xE9, + 0xBC, 0xBB, 0x43, 0xE9, 0xBD, 0x83, 0x43, 0xE9, + 0xBD, 0x8A, 0x43, 0xE9, 0xBD, 0x92, 0x43, 0xE9, + 0xBE, 0x8D, 0x43, 0xE9, 0xBE, 0x8E, 0x43, 0xE9, + 0xBE, 0x9C, 0x43, 0xE9, 0xBE, 0x9F, 0x43, 0xE9, + 0xBE, 0xA0, 0x43, 0xEA, 0x9C, 0xA7, 0x43, 0xEA, + // Bytes 1640 - 167f + 0x9D, 0xAF, 0x43, 0xEA, 0xAC, 0xB7, 0x43, 0xEA, + 0xAD, 0x92, 0x44, 0xF0, 0xA0, 0x84, 0xA2, 0x44, + 0xF0, 0xA0, 0x94, 0x9C, 0x44, 0xF0, 0xA0, 0x94, + 0xA5, 0x44, 0xF0, 0xA0, 0x95, 0x8B, 0x44, 0xF0, + 0xA0, 0x98, 0xBA, 0x44, 0xF0, 0xA0, 0xA0, 0x84, + 0x44, 0xF0, 0xA0, 0xA3, 0x9E, 0x44, 0xF0, 0xA0, + 0xA8, 0xAC, 0x44, 0xF0, 0xA0, 0xAD, 0xA3, 0x44, + 0xF0, 0xA1, 0x93, 0xA4, 0x44, 0xF0, 0xA1, 0x9A, + // Bytes 1680 - 16bf + 0xA8, 0x44, 0xF0, 0xA1, 0x9B, 0xAA, 0x44, 0xF0, + 0xA1, 0xA7, 0x88, 0x44, 0xF0, 0xA1, 0xAC, 0x98, + 0x44, 0xF0, 0xA1, 0xB4, 0x8B, 0x44, 0xF0, 0xA1, + 0xB7, 0xA4, 0x44, 0xF0, 0xA1, 0xB7, 0xA6, 0x44, + 0xF0, 0xA2, 0x86, 0x83, 0x44, 0xF0, 0xA2, 0x86, + 0x9F, 0x44, 0xF0, 0xA2, 0x8C, 0xB1, 0x44, 0xF0, + 0xA2, 0x9B, 0x94, 0x44, 0xF0, 0xA2, 0xA1, 0x84, + 0x44, 0xF0, 0xA2, 0xA1, 0x8A, 0x44, 0xF0, 0xA2, + // Bytes 16c0 - 16ff + 0xAC, 0x8C, 0x44, 0xF0, 0xA2, 0xAF, 0xB1, 0x44, + 0xF0, 0xA3, 0x80, 0x8A, 0x44, 0xF0, 0xA3, 0x8A, + 0xB8, 0x44, 0xF0, 0xA3, 0x8D, 0x9F, 0x44, 0xF0, + 0xA3, 0x8E, 0x93, 0x44, 0xF0, 0xA3, 0x8E, 0x9C, + 0x44, 0xF0, 0xA3, 0x8F, 0x83, 0x44, 0xF0, 0xA3, + 0x8F, 0x95, 0x44, 0xF0, 0xA3, 0x91, 0xAD, 0x44, + 0xF0, 0xA3, 0x9A, 0xA3, 0x44, 0xF0, 0xA3, 0xA2, + 0xA7, 0x44, 0xF0, 0xA3, 0xAA, 0x8D, 0x44, 0xF0, + // Bytes 1700 - 173f + 0xA3, 0xAB, 0xBA, 0x44, 0xF0, 0xA3, 0xB2, 0xBC, + 0x44, 0xF0, 0xA3, 0xB4, 0x9E, 0x44, 0xF0, 0xA3, + 0xBB, 0x91, 0x44, 0xF0, 0xA3, 0xBD, 0x9E, 0x44, + 0xF0, 0xA3, 0xBE, 0x8E, 0x44, 0xF0, 0xA4, 0x89, + 0xA3, 0x44, 0xF0, 0xA4, 0x8B, 0xAE, 0x44, 0xF0, + 0xA4, 0x8E, 0xAB, 0x44, 0xF0, 0xA4, 0x98, 0x88, + 0x44, 0xF0, 0xA4, 0x9C, 0xB5, 0x44, 0xF0, 0xA4, + 0xA0, 0x94, 0x44, 0xF0, 0xA4, 0xB0, 0xB6, 0x44, + // Bytes 1740 - 177f + 0xF0, 0xA4, 0xB2, 0x92, 0x44, 0xF0, 0xA4, 0xBE, + 0xA1, 0x44, 0xF0, 0xA4, 0xBE, 0xB8, 0x44, 0xF0, + 0xA5, 0x81, 0x84, 0x44, 0xF0, 0xA5, 0x83, 0xB2, + 0x44, 0xF0, 0xA5, 0x83, 0xB3, 0x44, 0xF0, 0xA5, + 0x84, 0x99, 0x44, 0xF0, 0xA5, 0x84, 0xB3, 0x44, + 0xF0, 0xA5, 0x89, 0x89, 0x44, 0xF0, 0xA5, 0x90, + 0x9D, 0x44, 0xF0, 0xA5, 0x98, 0xA6, 0x44, 0xF0, + 0xA5, 0x9A, 0x9A, 0x44, 0xF0, 0xA5, 0x9B, 0x85, + // Bytes 1780 - 17bf + 0x44, 0xF0, 0xA5, 0xA5, 0xBC, 0x44, 0xF0, 0xA5, + 0xAA, 0xA7, 0x44, 0xF0, 0xA5, 0xAE, 0xAB, 0x44, + 0xF0, 0xA5, 0xB2, 0x80, 0x44, 0xF0, 0xA5, 0xB3, + 0x90, 0x44, 0xF0, 0xA5, 0xBE, 0x86, 0x44, 0xF0, + 0xA6, 0x87, 0x9A, 0x44, 0xF0, 0xA6, 0x88, 0xA8, + 0x44, 0xF0, 0xA6, 0x89, 0x87, 0x44, 0xF0, 0xA6, + 0x8B, 0x99, 0x44, 0xF0, 0xA6, 0x8C, 0xBE, 0x44, + 0xF0, 0xA6, 0x93, 0x9A, 0x44, 0xF0, 0xA6, 0x94, + // Bytes 17c0 - 17ff + 0xA3, 0x44, 0xF0, 0xA6, 0x96, 0xA8, 0x44, 0xF0, + 0xA6, 0x9E, 0xA7, 0x44, 0xF0, 0xA6, 0x9E, 0xB5, + 0x44, 0xF0, 0xA6, 0xAC, 0xBC, 0x44, 0xF0, 0xA6, + 0xB0, 0xB6, 0x44, 0xF0, 0xA6, 0xB3, 0x95, 0x44, + 0xF0, 0xA6, 0xB5, 0xAB, 0x44, 0xF0, 0xA6, 0xBC, + 0xAC, 0x44, 0xF0, 0xA6, 0xBE, 0xB1, 0x44, 0xF0, + 0xA7, 0x83, 0x92, 0x44, 0xF0, 0xA7, 0x8F, 0x8A, + 0x44, 0xF0, 0xA7, 0x99, 0xA7, 0x44, 0xF0, 0xA7, + // Bytes 1800 - 183f + 0xA2, 0xAE, 0x44, 0xF0, 0xA7, 0xA5, 0xA6, 0x44, + 0xF0, 0xA7, 0xB2, 0xA8, 0x44, 0xF0, 0xA7, 0xBB, + 0x93, 0x44, 0xF0, 0xA7, 0xBC, 0xAF, 0x44, 0xF0, + 0xA8, 0x97, 0x92, 0x44, 0xF0, 0xA8, 0x97, 0xAD, + 0x44, 0xF0, 0xA8, 0x9C, 0xAE, 0x44, 0xF0, 0xA8, + 0xAF, 0xBA, 0x44, 0xF0, 0xA8, 0xB5, 0xB7, 0x44, + 0xF0, 0xA9, 0x85, 0x85, 0x44, 0xF0, 0xA9, 0x87, + 0x9F, 0x44, 0xF0, 0xA9, 0x88, 0x9A, 0x44, 0xF0, + // Bytes 1840 - 187f + 0xA9, 0x90, 0x8A, 0x44, 0xF0, 0xA9, 0x92, 0x96, + 0x44, 0xF0, 0xA9, 0x96, 0xB6, 0x44, 0xF0, 0xA9, + 0xAC, 0xB0, 0x44, 0xF0, 0xAA, 0x83, 0x8E, 0x44, + 0xF0, 0xAA, 0x84, 0x85, 0x44, 0xF0, 0xAA, 0x88, + 0x8E, 0x44, 0xF0, 0xAA, 0x8A, 0x91, 0x44, 0xF0, + 0xAA, 0x8E, 0x92, 0x44, 0xF0, 0xAA, 0x98, 0x80, + 0x42, 0x21, 0x21, 0x42, 0x21, 0x3F, 0x42, 0x2E, + 0x2E, 0x42, 0x30, 0x2C, 0x42, 0x30, 0x2E, 0x42, + // Bytes 1880 - 18bf + 0x31, 0x2C, 0x42, 0x31, 0x2E, 0x42, 0x31, 0x30, + 0x42, 0x31, 0x31, 0x42, 0x31, 0x32, 0x42, 0x31, + 0x33, 0x42, 0x31, 0x34, 0x42, 0x31, 0x35, 0x42, + 0x31, 0x36, 0x42, 0x31, 0x37, 0x42, 0x31, 0x38, + 0x42, 0x31, 0x39, 0x42, 0x32, 0x2C, 0x42, 0x32, + 0x2E, 0x42, 0x32, 0x30, 0x42, 0x32, 0x31, 0x42, + 0x32, 0x32, 0x42, 0x32, 0x33, 0x42, 0x32, 0x34, + 0x42, 0x32, 0x35, 0x42, 0x32, 0x36, 0x42, 0x32, + // Bytes 18c0 - 18ff + 0x37, 0x42, 0x32, 0x38, 0x42, 0x32, 0x39, 0x42, + 0x33, 0x2C, 0x42, 0x33, 0x2E, 0x42, 0x33, 0x30, + 0x42, 0x33, 0x31, 0x42, 0x33, 0x32, 0x42, 0x33, + 0x33, 0x42, 0x33, 0x34, 0x42, 0x33, 0x35, 0x42, + 0x33, 0x36, 0x42, 0x33, 0x37, 0x42, 0x33, 0x38, + 0x42, 0x33, 0x39, 0x42, 0x34, 0x2C, 0x42, 0x34, + 0x2E, 0x42, 0x34, 0x30, 0x42, 0x34, 0x31, 0x42, + 0x34, 0x32, 0x42, 0x34, 0x33, 0x42, 0x34, 0x34, + // Bytes 1900 - 193f + 0x42, 0x34, 0x35, 0x42, 0x34, 0x36, 0x42, 0x34, + 0x37, 0x42, 0x34, 0x38, 0x42, 0x34, 0x39, 0x42, + 0x35, 0x2C, 0x42, 0x35, 0x2E, 0x42, 0x35, 0x30, + 0x42, 0x36, 0x2C, 0x42, 0x36, 0x2E, 0x42, 0x37, + 0x2C, 0x42, 0x37, 0x2E, 0x42, 0x38, 0x2C, 0x42, + 0x38, 0x2E, 0x42, 0x39, 0x2C, 0x42, 0x39, 0x2E, + 0x42, 0x3D, 0x3D, 0x42, 0x3F, 0x21, 0x42, 0x3F, + 0x3F, 0x42, 0x41, 0x55, 0x42, 0x42, 0x71, 0x42, + // Bytes 1940 - 197f + 0x43, 0x44, 0x42, 0x44, 0x4A, 0x42, 0x44, 0x5A, + 0x42, 0x44, 0x7A, 0x42, 0x47, 0x42, 0x42, 0x47, + 0x79, 0x42, 0x48, 0x50, 0x42, 0x48, 0x56, 0x42, + 0x48, 0x67, 0x42, 0x48, 0x7A, 0x42, 0x49, 0x49, + 0x42, 0x49, 0x4A, 0x42, 0x49, 0x55, 0x42, 0x49, + 0x56, 0x42, 0x49, 0x58, 0x42, 0x4B, 0x42, 0x42, + 0x4B, 0x4B, 0x42, 0x4B, 0x4D, 0x42, 0x4C, 0x4A, + 0x42, 0x4C, 0x6A, 0x42, 0x4D, 0x42, 0x42, 0x4D, + // Bytes 1980 - 19bf + 0x43, 0x42, 0x4D, 0x44, 0x42, 0x4D, 0x52, 0x42, + 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, 0x4E, 0x4A, + 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, 0x42, 0x50, + 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, 0x61, 0x42, + 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, 0x53, 0x4D, + 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, 0x42, 0x54, + 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, 0x43, 0x42, + 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, 0x58, 0x49, + // Bytes 19c0 - 19ff + 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, 0x42, 0x63, + 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, 0x61, 0x42, + 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, 0x64, 0x7A, + 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, 0x42, 0x66, + 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, 0x6D, 0x42, + 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, 0x69, 0x6A, + 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, 0x42, 0x69, + 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, 0x56, 0x42, + // Bytes 1a00 - 1a3f + 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, 0x6B, 0x6C, + 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, 0x42, 0x6C, + 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, 0x6E, 0x42, + 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, 0x6D, 0x33, + 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, 0x42, 0x6D, + 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, 0x67, 0x42, + 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, 0x6D, 0x73, + 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, 0x42, 0x6E, + // Bytes 1a40 - 1a7f + 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, 0x6A, 0x42, + 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, 0x6F, 0x56, + 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, 0x42, 0x70, + 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, 0x63, 0x42, + 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, 0x73, 0x74, + 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, 0x43, 0x28, + 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, 0x43, 0x28, + 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, 0x43, 0x28, + // Bytes 1a80 - 1abf + 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, 0x43, 0x28, + 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, 0x43, 0x28, + 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, 0x43, 0x28, + 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, 0x43, 0x28, + 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, 0x43, 0x28, + 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, 0x43, 0x28, + 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, 0x43, 0x28, + 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, 0x43, 0x28, + // Bytes 1ac0 - 1aff + 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, 0x43, 0x28, + 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, 0x43, 0x28, + 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, 0x43, 0x28, + 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, 0x43, 0x28, + 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, 0x43, 0x28, + 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, 0x43, 0x28, + 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, 0x43, 0x28, + 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, 0x43, 0x28, + // Bytes 1b00 - 1b3f + 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, 0x43, 0x28, + 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, 0x43, 0x28, + 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, 0x43, 0x28, + 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, 0x43, 0x28, + 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, 0x43, 0x28, + 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, 0x43, 0x28, + 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, 0x43, 0x28, + 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, 0x43, 0x28, + // Bytes 1b40 - 1b7f + 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, 0x43, 0x28, + 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, 0x43, 0x28, + 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, 0x43, 0x28, + 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, 0x43, 0x28, + 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, 0x43, 0x31, + 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, 0x43, 0x31, + 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, 0x43, 0x31, + 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, 0x43, 0x31, + // Bytes 1b80 - 1bbf + 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, 0x43, 0x31, + 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, 0x43, 0x32, + 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, 0x43, 0x3D, + 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, 0x43, 0x46, + 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, 0x43, 0x47, + 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, 0x43, 0x4C, + 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, 0x43, 0x4D, + 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, 0x43, 0x4D, + // Bytes 1bc0 - 1bff + 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, 0x43, 0x50, + 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, 0x43, 0x54, + 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, 0x43, 0x56, + 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, 0x43, 0x61, + 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, 0x43, 0x61, + 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, 0x43, 0x63, + 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, 0x43, 0x63, + 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, 0x43, 0x63, + // Bytes 1c00 - 1c3f + 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, 0x43, 0x64, + 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, 0x43, 0x66, + 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, 0x43, 0x67, + 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, 0x43, 0x69, + 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, 0x43, 0x6B, + 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, 0x43, 0x6B, + 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, 0x43, 0x6C, + 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, 0x43, 0x6D, + // Bytes 1c40 - 1c7f + 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, 0x43, 0x6D, + 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, 0x43, 0x72, + 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, 0x43, 0x78, + 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, 0x43, 0xC2, + 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, 0x43, 0xCE, + 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, 0x43, 0xCE, + 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, 0x43, 0xCE, + 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, 0x43, 0xCE, + // Bytes 1c80 - 1cbf + 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, 0x44, 0x28, + 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, 0x31, 0x29, + 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, 0x28, 0x31, + 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, 0x29, 0x44, + 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, 0x31, 0x36, + 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, 0x44, 0x28, + 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, 0x39, 0x29, + 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, 0x30, 0xE7, + // Bytes 1cc0 - 1cff + 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, 0x84, 0x44, + 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, 0xE6, 0x9C, + 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, 0x44, 0x32, + 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, 0x9C, 0x88, + 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, 0x33, 0xE6, + 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, 0x88, 0x44, + 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, 0xE6, 0x97, + 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, 0x44, 0x34, + // Bytes 1d00 - 1d3f + 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, 0x97, 0xA5, + 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, 0x35, 0xE7, + 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, 0xA5, 0x44, + 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, 0xE7, 0x82, + 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, 0x44, 0x37, + 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, 0x82, 0xB9, + 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, 0x38, 0xE6, + 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, 0xB9, 0x44, + // Bytes 1d40 - 1d7f + 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, 0xE6, 0x9C, + 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, 0x44, 0x56, + 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, 0x6D, 0x2E, + 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, 0x70, 0x2E, + 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, 0x69, 0x44, + 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, 0xB4, 0xD5, + 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, 0x44, 0xD5, + 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, 0xD5, 0xB6, + // Bytes 1d80 - 1dbf + 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, 0xD7, 0x90, + 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, 0xB4, 0x44, + 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, 0xA8, 0xD8, + 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, 0x44, 0xD8, + 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, 0xD8, 0xB2, + 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, 0xD8, 0xA8, + 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, 0x87, 0x44, + 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, 0xA8, 0xD9, + // Bytes 1dc0 - 1dff + 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, 0x44, 0xD8, + 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, 0xD8, 0xAE, + 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, 0xD8, 0xAA, + 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, 0x85, 0x44, + 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, 0xAA, 0xD9, + 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, 0x44, 0xD8, + 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, 0xD8, 0xAC, + 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, 0xD8, 0xAB, + // Bytes 1e00 - 1e3f + 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, 0x85, 0x44, + 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, 0xAB, 0xD9, + 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, 0x44, 0xD8, + 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, 0xD8, 0xAD, + 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, 0xD8, 0xAC, + 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, 0x8A, 0x44, + 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, 0xAD, 0xD9, + 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, 0x44, 0xD8, + // Bytes 1e40 - 1e7f + 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, 0xD8, 0xAC, + 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, 0xD8, 0xAE, + 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, 0x89, 0x44, + 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, 0xB3, 0xD8, + 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, 0x44, 0xD8, + 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, 0xD8, 0xB1, + 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, 0xD8, 0xB3, + 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, 0x89, 0x44, + // Bytes 1e80 - 1ebf + 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, 0xB4, 0xD8, + 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, 0x44, 0xD8, + 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, 0xD8, 0xB1, + 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, 0xD8, 0xB4, + 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, 0x89, 0x44, + 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, 0xB5, 0xD8, + 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, 0x44, 0xD8, + 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, 0xD9, 0x85, + // Bytes 1ec0 - 1eff + 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, 0xD8, 0xB5, + 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, 0xAC, 0x44, + 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, 0xB6, 0xD8, + 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, 0x44, 0xD8, + 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, 0xD9, 0x89, + 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, 0xD8, 0xB7, + 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, 0x85, 0x44, + 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, 0xB7, 0xD9, + // Bytes 1f00 - 1f3f + 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, 0x44, 0xD8, + 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, 0xD9, 0x85, + 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, 0xD8, 0xB9, + 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, 0xAC, 0x44, + 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, 0xBA, 0xD9, + 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, 0x44, 0xD9, + 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, 0xD8, 0xAD, + 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, 0xD9, 0x81, + // Bytes 1f40 - 1f7f + 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, 0x89, 0x44, + 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, 0x82, 0xD8, + 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, 0x44, 0xD9, + 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, 0xD9, 0x8A, + 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, 0xD9, 0x83, + 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, 0xAD, 0x44, + 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, 0x83, 0xD9, + 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, 0x44, 0xD9, + // Bytes 1f80 - 1fbf + 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, 0xD9, 0x8A, + 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, 0xD9, 0x84, + 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, 0xAD, 0x44, + 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, 0x84, 0xD9, + 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, 0x44, 0xD9, + 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, 0xD9, 0x8A, + 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, 0xD9, 0x85, + 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, 0xAD, 0x44, + // Bytes 1fc0 - 1fff + 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, 0x85, 0xD9, + 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, 0x44, 0xD9, + 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, 0xD8, 0xAC, + 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, 0xD9, 0x86, + 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, 0xB1, 0x44, + 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, 0x86, 0xD9, + 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, 0x44, 0xD9, + 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, 0xD9, 0x89, + // Bytes 2000 - 203f + 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, 0xD9, 0x87, + 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, 0x85, 0x44, + 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, 0x87, 0xD9, + 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, 0x44, 0xD9, + 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, 0xD8, 0xAD, + 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, 0xD9, 0x8A, + 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, 0xB2, 0x44, + 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, 0x8A, 0xD9, + // Bytes 2040 - 207f + 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, 0x44, 0xD9, + 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, 0xD9, 0x8A, + 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, 0xDB, 0x87, + 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, 0x80, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x86, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, 0x45, 0x28, + // Bytes 2080 - 20bf + 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8C, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x91, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, 0x45, 0x28, + 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, 0xE4, 0xB8, + 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x89, 0x29, + // Bytes 20c0 - 20ff + 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, 0x45, 0x28, + 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, 0xE4, 0xBA, + 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, 0xA3, 0x29, + 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, 0x45, 0x28, + 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, 0xE5, 0x85, + 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, 0xAD, 0x29, + 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, 0x45, 0x28, + 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, 0xE5, 0x8D, + // Bytes 2100 - 213f + 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, 0x8D, 0x29, + 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, 0x45, 0x28, + 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, 0xE5, 0x9C, + 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, 0xA6, 0x29, + 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, 0x45, 0x28, + 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, 0xE6, 0x9C, + 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, 0xA8, 0x29, + 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, 0x45, 0x28, + // Bytes 2140 - 217f + 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, 0xE7, 0x81, + 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, 0xB9, 0x29, + 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, 0x45, 0x28, + 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, 0xE7, 0xA5, + 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, 0xAD, 0x29, + 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, 0x45, 0x28, + 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, 0xE8, 0xB2, + 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, 0x87, 0x29, + // Bytes 2180 - 21bf + 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, 0x45, 0x30, + 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0x30, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, 0x9C, 0x88, + 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x31, + 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x31, 0xE6, + 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x32, 0xE7, + // Bytes 21c0 - 21ff + 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, 0x97, 0xA5, + 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, 0x45, 0x31, + 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x34, 0xE7, + 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, 0x97, 0xA5, + 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, 0x45, 0x31, + 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x36, 0xE7, + 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, 0x97, 0xA5, + 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, 0x45, 0x31, + // Bytes 2200 - 223f + 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x38, 0xE7, + 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, 0x97, 0xA5, + 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x34, + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x38, + // Bytes 2240 - 227f + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, 0x45, 0x32, + 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x30, 0xE7, + 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, 0x97, 0xA5, + 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, 0x45, 0x32, + 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x32, 0xE7, + 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, 0x97, 0xA5, + 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, 0x45, 0x32, + 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x34, 0xE7, + // Bytes 2280 - 22bf + 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, 0x97, 0xA5, + 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x38, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, 0x97, 0xA5, + 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x32, + 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, 0x30, 0xE6, + 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, 0x97, 0xA5, + 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, 0x45, 0x33, + // Bytes 22c0 - 22ff + 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, 0xE2, 0x81, + 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, 0x84, 0x35, + 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x35, + 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, 0xE2, 0x81, + 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, 0x95, 0x6D, + 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, 0x45, 0x6D, + 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, 0xE2, 0x81, + 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, 0x88, 0x95, + // Bytes 2300 - 233f + 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, 0x95, 0x73, + 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, 0xD9, 0x8A, + 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, + 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD8, + 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD8, 0xAA, + 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD8, + 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, 0xD8, 0xAD, + 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, + // Bytes 2340 - 237f + 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x89, + 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, + 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, + 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xAA, + 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, 0xAA, 0xD9, + 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, + 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x8A, + // Bytes 2380 - 23bf + 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, 0xAD, 0x46, + 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, + 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAD, + 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xAD, 0xD9, + 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, 0xD8, + 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, 0xD9, 0x89, + 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, + // Bytes 23c0 - 23ff + 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, 0x46, 0xD8, + 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, + 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, 0xB3, 0xD9, + 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAC, 0xD9, + 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, 0x85, + 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, + 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, + // Bytes 2400 - 243f + 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB5, + 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, 0xB5, 0xD8, + 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, 0xD9, 0x84, + 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, 0x84, 0xDB, + 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, 0xD9, 0x85, + 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x89, 0x46, + 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, + 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xB7, + // Bytes 2440 - 247f + 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB7, 0xD9, + 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, + 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x85, + 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x89, 0x46, + 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, + 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xBA, + 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xBA, 0xD9, + // Bytes 2480 - 24bf + 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, 0xD8, 0xAE, + 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, 0x85, 0xD9, + 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, 0xDB, 0x92, + 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, 0xAD, 0x46, + 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, + 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x83, + 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x83, 0xD9, + 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAC, + // Bytes 24c0 - 24ff + 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, + 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x8A, + 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x85, 0x46, + 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD9, + 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x84, + 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD9, + 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD8, + // Bytes 2500 - 253f + 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD8, 0xAE, + 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x85, 0x46, + 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, + 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD9, 0x85, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, + 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAE, + 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, + 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x8A, + // Bytes 2540 - 257f + 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD9, + 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x86, + 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, + 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAD, + 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, + 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x8A, + 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x89, 0x46, + // Bytes 2580 - 25bf + 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, + 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD9, 0x87, + 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD8, + 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, + 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xA7, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, 0x46, 0xD9, + // Bytes 25c0 - 25ff + 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, 0xD9, 0x8A, + 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, 0x8A, 0xD9, + 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x86, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x87, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, 0xD9, 0x8A, + // Bytes 2600 - 263f + 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, + 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, + 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x90, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x95, 0x46, + 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, 0x46, 0xE0, + 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, 0xE0, 0xBA, + 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, 0xBB, 0x8D, + // Bytes 2640 - 267f + 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, 0x80, 0xE0, + 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, 0xE0, 0xBE, + 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, 0xBE, 0xB7, + 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, 0xB7, 0x46, + 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, + 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, + 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBE, 0x92, + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0x9C, 0xE0, + // Bytes 2680 - 26bf + 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, 0xE0, 0xBE, + 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, 0xBE, 0xB7, + 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, 0xB7, 0x46, + 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x46, 0xE2, + 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, 0xE2, 0x88, + 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, 0x88, 0xAE, + 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, 0xBB, 0xE3, + 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, 0xE3, 0x82, + // Bytes 26c0 - 26ff + 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, + 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0xB3, 0x46, + 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, 0x46, 0xE3, + 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, + 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, 0x83, 0x9B, + 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, 0x9F, 0xE3, + 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, 0xE3, 0x83, + 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xA0, + // Bytes 2700 - 273f + 0x46, 0xE4, 0xBB, 0xA4, 0xE5, 0x92, 0x8C, 0x46, + 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, 0x46, 0xE5, + 0xB9, 0xB3, 0xE6, 0x88, 0x90, 0x46, 0xE6, 0x98, + 0x8E, 0xE6, 0xB2, 0xBB, 0x46, 0xE6, 0x98, 0xAD, + 0xE5, 0x92, 0x8C, 0x47, 0x72, 0x61, 0x64, 0xE2, + 0x88, 0x95, 0x73, 0x47, 0xE3, 0x80, 0x94, 0x53, + 0xE3, 0x80, 0x95, 0x48, 0x28, 0xE1, 0x84, 0x80, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + // Bytes 2740 - 277f + 0x82, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, + 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x89, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8B, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, + // Bytes 2780 - 27bf + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + 0x8C, 0xE1, 0x85, 0xAE, 0x29, 0x48, 0x28, 0xE1, + 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x92, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x72, 0x61, 0x64, 0xE2, 0x88, + // Bytes 27c0 - 27ff + 0x95, 0x73, 0x32, 0x48, 0xD8, 0xA7, 0xD9, 0x83, + 0xD8, 0xA8, 0xD8, 0xB1, 0x48, 0xD8, 0xA7, 0xD9, + 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x48, 0xD8, 0xB1, + 0xD8, 0xB3, 0xD9, 0x88, 0xD9, 0x84, 0x48, 0xD8, + 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, 0x84, 0x48, + 0xD8, 0xB5, 0xD9, 0x84, 0xD8, 0xB9, 0xD9, 0x85, + 0x48, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, + 0x87, 0x48, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, + // Bytes 2800 - 283f + 0xD8, 0xAF, 0x48, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, + 0x84, 0xD9, 0x85, 0x49, 0xE2, 0x80, 0xB2, 0xE2, + 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x49, 0xE2, 0x80, + 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x49, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, + 0xAB, 0x49, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, + 0xE2, 0x88, 0xAE, 0x49, 0xE3, 0x80, 0x94, 0xE4, + 0xB8, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, + // Bytes 2840 - 287f + 0x94, 0xE4, 0xBA, 0x8C, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x80, 0x94, 0xE5, 0x8B, 0x9D, 0xE3, 0x80, + 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0xAE, 0x89, + 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, + 0x89, 0x93, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, + 0x94, 0xE6, 0x95, 0x97, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x80, 0x94, 0xE6, 0x9C, 0xAC, 0xE3, 0x80, + 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, 0x82, 0xB9, + // Bytes 2880 - 28bf + 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, + 0x9B, 0x97, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x82, + 0xA2, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, + 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x81, 0x49, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xA9, + 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x82, 0xAA, 0xE3, + 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, + 0xAA, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x49, + // Bytes 28c0 - 28ff + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0xAA, 0x49, 0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, 0xB3, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0x8A, 0x49, 0xE3, 0x82, + 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49, + 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x88, 0x49, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xB7, 0x49, 0xE3, 0x83, 0x88, 0xE3, + // Bytes 2900 - 293f + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, + 0x8E, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x49, + 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0x84, 0x49, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x92, 0xE3, + 0x82, 0x9A, 0xE3, 0x82, 0xB3, 0x49, 0xE3, 0x83, + 0x95, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xB3, 0x49, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, + // Bytes 2940 - 297f + 0xBD, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x83, 0xAB, + 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x9B, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, + 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xB3, 0x49, + 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83, + 0xAB, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x8F, 0x49, 0xE3, 0x83, 0x9E, 0xE3, + 0x83, 0xAB, 0xE3, 0x82, 0xAF, 0x49, 0xE3, 0x83, + // Bytes 2980 - 29bf + 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, + 0xE3, 0x83, 0xA6, 0xE3, 0x82, 0xA2, 0xE3, 0x83, + 0xB3, 0x49, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0x4C, 0xE2, 0x80, 0xB2, 0xE2, + 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0x4C, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, + 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x4C, 0xE3, 0x82, + 0xA2, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x95, 0xE3, + // Bytes 29c0 - 29ff + 0x82, 0xA1, 0x4C, 0xE3, 0x82, 0xA8, 0xE3, 0x83, + 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xBC, 0x4C, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, 0x82, 0xAB, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x9E, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xA9, + 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE3, + 0x82, 0xAB, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAA, + // Bytes 2a00 - 2a3f + 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xBC, + 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xA5, 0xE3, + 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, + 0x83, 0xA0, 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x83, + 0xAD, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x8D, 0x4C, + 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xA4, 0xE3, 0x82, + // Bytes 2a40 - 2a7f + 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x82, 0xBF, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, + 0xB9, 0x4C, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, 0x4C, 0xE3, + 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0x95, 0xE3, + 0x82, 0xA3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, + 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0xE3, + // Bytes 2a80 - 2abf + 0x83, 0xBC, 0xE3, 0x82, 0xBF, 0x4C, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0x8B, 0xE3, + 0x83, 0x92, 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x4C, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xAB, 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x9E, + 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, + 0xAD, 0x4C, 0xE3, 0x83, 0x9F, 0xE3, 0x82, 0xAF, + // Bytes 2ac0 - 2aff + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, + 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAA, 0xE3, + 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, + 0x4C, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3, + 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0x4C, 0xE6, 0xA0, + 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, 0xBC, 0x9A, 0xE7, + 0xA4, 0xBE, 0x4E, 0x28, 0xE1, 0x84, 0x8B, 0xE1, + // Bytes 2b00 - 2b3f + 0x85, 0xA9, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xAE, + 0x29, 0x4F, 0xD8, 0xAC, 0xD9, 0x84, 0x20, 0xD8, + 0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, + 0x87, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x88, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, + 0xA2, 0x4F, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, + // Bytes 2b40 - 2b7f + 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83, + 0x88, 0x4F, 0xE3, 0x82, 0xB5, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xA0, 0x4F, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAC, 0xE3, 0x83, + 0xAB, 0x4F, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0xBF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAB, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, + // Bytes 2b80 - 2bbf + 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x88, 0x4F, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xB3, + 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xA7, 0xE3, 0x83, + 0xB3, 0x4F, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x88, 0xE3, 0x83, + 0xB3, 0x4F, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xAB, 0x51, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, + // Bytes 2bc0 - 2bff + 0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA5, 0xE1, + 0x86, 0xAB, 0x29, 0x52, 0xE3, 0x82, 0xAD, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBF, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0x52, 0xE3, + 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0xA0, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, + 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + // Bytes 2c00 - 2c3f + 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x52, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0xE3, 0x82, + 0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xA4, 0xE3, + 0x83, 0xAD, 0x52, 0xE3, 0x83, 0x8F, 0xE3, 0x82, + 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBB, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x52, 0xE3, 0x83, + // Bytes 2c40 - 2c7f + 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0xE3, + 0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, + 0x52, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, + 0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xA7, + 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x9F, 0xE3, + 0x83, 0xAA, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x52, 0xE3, + 0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, + // Bytes 2c80 - 2cbf + 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xB3, 0x61, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, + 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, + 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, + 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, + 0x84, 0xD9, 0x85, 0x06, 0xE0, 0xA7, 0x87, 0xE0, + 0xA6, 0xBE, 0x01, 0x06, 0xE0, 0xA7, 0x87, 0xE0, + 0xA7, 0x97, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, + // Bytes 2cc0 - 2cff + 0xAC, 0xBE, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, + 0xAD, 0x96, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, + 0xAD, 0x97, 0x01, 0x06, 0xE0, 0xAE, 0x92, 0xE0, + 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, + 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, + 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, 0x87, 0xE0, + 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xB2, 0xBF, 0xE0, + 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, + // Bytes 2d00 - 2d3f + 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, + 0xB3, 0x96, 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, + 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, + 0xB5, 0x97, 0x01, 0x06, 0xE0, 0xB5, 0x87, 0xE0, + 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB7, 0x99, 0xE0, + 0xB7, 0x9F, 0x01, 0x06, 0xE1, 0x80, 0xA5, 0xE1, + 0x80, 0xAE, 0x01, 0x06, 0xE1, 0xAC, 0x85, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x87, 0xE1, + // Bytes 2d40 - 2d7f + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x89, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x8B, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x8D, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x91, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBA, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBC, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBE, 0xE1, + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBF, 0xE1, + // Bytes 2d80 - 2dbf + 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAD, 0x82, 0xE1, + 0xAC, 0xB5, 0x01, 0x08, 0xF0, 0x91, 0x84, 0xB1, + 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, 0xF0, 0x91, + 0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, + 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, 0x8C, 0xBE, + 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, + 0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, + 0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, 0xF0, 0x91, + // Bytes 2dc0 - 2dff + 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, 0x01, 0x08, + 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBD, + 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, 0xF0, 0x91, + 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB9, + 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, + 0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, 0x01, 0x09, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, 0xB3, + 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, + // Bytes 2e00 - 2e3f + 0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x44, 0x44, 0x5A, + 0xCC, 0x8C, 0xCD, 0x44, 0x44, 0x7A, 0xCC, 0x8C, + 0xCD, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xCD, 0x46, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x46, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x46, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x46, + 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, 0x46, + // Bytes 2e40 - 2e7f + 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01, 0x46, + 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01, 0x46, + // Bytes 2e80 - 2ebf + 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01, 0x46, + 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01, 0x49, + 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0x99, 0x11, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, 0x85, + 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, 0x01, + // Bytes 2ec0 - 2eff + 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE3, + 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x9B, + 0xE3, 0x82, 0x9A, 0x11, 0x4C, 0xE3, 0x83, 0xA4, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82, + 0x99, 0x11, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, 0x85, + 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, 0xE1, + 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, 0xE3, + // Bytes 2f00 - 2f3f + 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x82, 0xB7, + 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, + 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, + 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52, + // Bytes 2f40 - 2f7f + 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0x11, 0x52, 0xE3, 0x83, 0x95, 0xE3, + 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x86, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, 0x86, + 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, 0x03, + 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, 0xB8, + // Bytes 2f80 - 2fbf + 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, 0x41, + 0xCC, 0x80, 0xCD, 0x03, 0x41, 0xCC, 0x81, 0xCD, + 0x03, 0x41, 0xCC, 0x83, 0xCD, 0x03, 0x41, 0xCC, + 0x84, 0xCD, 0x03, 0x41, 0xCC, 0x89, 0xCD, 0x03, + 0x41, 0xCC, 0x8C, 0xCD, 0x03, 0x41, 0xCC, 0x8F, + 0xCD, 0x03, 0x41, 0xCC, 0x91, 0xCD, 0x03, 0x41, + 0xCC, 0xA5, 0xB9, 0x03, 0x41, 0xCC, 0xA8, 0xA9, + 0x03, 0x42, 0xCC, 0x87, 0xCD, 0x03, 0x42, 0xCC, + // Bytes 2fc0 - 2fff + 0xA3, 0xB9, 0x03, 0x42, 0xCC, 0xB1, 0xB9, 0x03, + 0x43, 0xCC, 0x81, 0xCD, 0x03, 0x43, 0xCC, 0x82, + 0xCD, 0x03, 0x43, 0xCC, 0x87, 0xCD, 0x03, 0x43, + 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, 0x87, 0xCD, + 0x03, 0x44, 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, + 0xA3, 0xB9, 0x03, 0x44, 0xCC, 0xA7, 0xA9, 0x03, + 0x44, 0xCC, 0xAD, 0xB9, 0x03, 0x44, 0xCC, 0xB1, + 0xB9, 0x03, 0x45, 0xCC, 0x80, 0xCD, 0x03, 0x45, + // Bytes 3000 - 303f + 0xCC, 0x81, 0xCD, 0x03, 0x45, 0xCC, 0x83, 0xCD, + 0x03, 0x45, 0xCC, 0x86, 0xCD, 0x03, 0x45, 0xCC, + 0x87, 0xCD, 0x03, 0x45, 0xCC, 0x88, 0xCD, 0x03, + 0x45, 0xCC, 0x89, 0xCD, 0x03, 0x45, 0xCC, 0x8C, + 0xCD, 0x03, 0x45, 0xCC, 0x8F, 0xCD, 0x03, 0x45, + 0xCC, 0x91, 0xCD, 0x03, 0x45, 0xCC, 0xA8, 0xA9, + 0x03, 0x45, 0xCC, 0xAD, 0xB9, 0x03, 0x45, 0xCC, + 0xB0, 0xB9, 0x03, 0x46, 0xCC, 0x87, 0xCD, 0x03, + // Bytes 3040 - 307f + 0x47, 0xCC, 0x81, 0xCD, 0x03, 0x47, 0xCC, 0x82, + 0xCD, 0x03, 0x47, 0xCC, 0x84, 0xCD, 0x03, 0x47, + 0xCC, 0x86, 0xCD, 0x03, 0x47, 0xCC, 0x87, 0xCD, + 0x03, 0x47, 0xCC, 0x8C, 0xCD, 0x03, 0x47, 0xCC, + 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0x82, 0xCD, 0x03, + 0x48, 0xCC, 0x87, 0xCD, 0x03, 0x48, 0xCC, 0x88, + 0xCD, 0x03, 0x48, 0xCC, 0x8C, 0xCD, 0x03, 0x48, + 0xCC, 0xA3, 0xB9, 0x03, 0x48, 0xCC, 0xA7, 0xA9, + // Bytes 3080 - 30bf + 0x03, 0x48, 0xCC, 0xAE, 0xB9, 0x03, 0x49, 0xCC, + 0x80, 0xCD, 0x03, 0x49, 0xCC, 0x81, 0xCD, 0x03, + 0x49, 0xCC, 0x82, 0xCD, 0x03, 0x49, 0xCC, 0x83, + 0xCD, 0x03, 0x49, 0xCC, 0x84, 0xCD, 0x03, 0x49, + 0xCC, 0x86, 0xCD, 0x03, 0x49, 0xCC, 0x87, 0xCD, + 0x03, 0x49, 0xCC, 0x89, 0xCD, 0x03, 0x49, 0xCC, + 0x8C, 0xCD, 0x03, 0x49, 0xCC, 0x8F, 0xCD, 0x03, + 0x49, 0xCC, 0x91, 0xCD, 0x03, 0x49, 0xCC, 0xA3, + // Bytes 30c0 - 30ff + 0xB9, 0x03, 0x49, 0xCC, 0xA8, 0xA9, 0x03, 0x49, + 0xCC, 0xB0, 0xB9, 0x03, 0x4A, 0xCC, 0x82, 0xCD, + 0x03, 0x4B, 0xCC, 0x81, 0xCD, 0x03, 0x4B, 0xCC, + 0x8C, 0xCD, 0x03, 0x4B, 0xCC, 0xA3, 0xB9, 0x03, + 0x4B, 0xCC, 0xA7, 0xA9, 0x03, 0x4B, 0xCC, 0xB1, + 0xB9, 0x03, 0x4C, 0xCC, 0x81, 0xCD, 0x03, 0x4C, + 0xCC, 0x8C, 0xCD, 0x03, 0x4C, 0xCC, 0xA7, 0xA9, + 0x03, 0x4C, 0xCC, 0xAD, 0xB9, 0x03, 0x4C, 0xCC, + // Bytes 3100 - 313f + 0xB1, 0xB9, 0x03, 0x4D, 0xCC, 0x81, 0xCD, 0x03, + 0x4D, 0xCC, 0x87, 0xCD, 0x03, 0x4D, 0xCC, 0xA3, + 0xB9, 0x03, 0x4E, 0xCC, 0x80, 0xCD, 0x03, 0x4E, + 0xCC, 0x81, 0xCD, 0x03, 0x4E, 0xCC, 0x83, 0xCD, + 0x03, 0x4E, 0xCC, 0x87, 0xCD, 0x03, 0x4E, 0xCC, + 0x8C, 0xCD, 0x03, 0x4E, 0xCC, 0xA3, 0xB9, 0x03, + 0x4E, 0xCC, 0xA7, 0xA9, 0x03, 0x4E, 0xCC, 0xAD, + 0xB9, 0x03, 0x4E, 0xCC, 0xB1, 0xB9, 0x03, 0x4F, + // Bytes 3140 - 317f + 0xCC, 0x80, 0xCD, 0x03, 0x4F, 0xCC, 0x81, 0xCD, + 0x03, 0x4F, 0xCC, 0x86, 0xCD, 0x03, 0x4F, 0xCC, + 0x89, 0xCD, 0x03, 0x4F, 0xCC, 0x8B, 0xCD, 0x03, + 0x4F, 0xCC, 0x8C, 0xCD, 0x03, 0x4F, 0xCC, 0x8F, + 0xCD, 0x03, 0x4F, 0xCC, 0x91, 0xCD, 0x03, 0x50, + 0xCC, 0x81, 0xCD, 0x03, 0x50, 0xCC, 0x87, 0xCD, + 0x03, 0x52, 0xCC, 0x81, 0xCD, 0x03, 0x52, 0xCC, + 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x8C, 0xCD, 0x03, + // Bytes 3180 - 31bf + 0x52, 0xCC, 0x8F, 0xCD, 0x03, 0x52, 0xCC, 0x91, + 0xCD, 0x03, 0x52, 0xCC, 0xA7, 0xA9, 0x03, 0x52, + 0xCC, 0xB1, 0xB9, 0x03, 0x53, 0xCC, 0x82, 0xCD, + 0x03, 0x53, 0xCC, 0x87, 0xCD, 0x03, 0x53, 0xCC, + 0xA6, 0xB9, 0x03, 0x53, 0xCC, 0xA7, 0xA9, 0x03, + 0x54, 0xCC, 0x87, 0xCD, 0x03, 0x54, 0xCC, 0x8C, + 0xCD, 0x03, 0x54, 0xCC, 0xA3, 0xB9, 0x03, 0x54, + 0xCC, 0xA6, 0xB9, 0x03, 0x54, 0xCC, 0xA7, 0xA9, + // Bytes 31c0 - 31ff + 0x03, 0x54, 0xCC, 0xAD, 0xB9, 0x03, 0x54, 0xCC, + 0xB1, 0xB9, 0x03, 0x55, 0xCC, 0x80, 0xCD, 0x03, + 0x55, 0xCC, 0x81, 0xCD, 0x03, 0x55, 0xCC, 0x82, + 0xCD, 0x03, 0x55, 0xCC, 0x86, 0xCD, 0x03, 0x55, + 0xCC, 0x89, 0xCD, 0x03, 0x55, 0xCC, 0x8A, 0xCD, + 0x03, 0x55, 0xCC, 0x8B, 0xCD, 0x03, 0x55, 0xCC, + 0x8C, 0xCD, 0x03, 0x55, 0xCC, 0x8F, 0xCD, 0x03, + 0x55, 0xCC, 0x91, 0xCD, 0x03, 0x55, 0xCC, 0xA3, + // Bytes 3200 - 323f + 0xB9, 0x03, 0x55, 0xCC, 0xA4, 0xB9, 0x03, 0x55, + 0xCC, 0xA8, 0xA9, 0x03, 0x55, 0xCC, 0xAD, 0xB9, + 0x03, 0x55, 0xCC, 0xB0, 0xB9, 0x03, 0x56, 0xCC, + 0x83, 0xCD, 0x03, 0x56, 0xCC, 0xA3, 0xB9, 0x03, + 0x57, 0xCC, 0x80, 0xCD, 0x03, 0x57, 0xCC, 0x81, + 0xCD, 0x03, 0x57, 0xCC, 0x82, 0xCD, 0x03, 0x57, + 0xCC, 0x87, 0xCD, 0x03, 0x57, 0xCC, 0x88, 0xCD, + 0x03, 0x57, 0xCC, 0xA3, 0xB9, 0x03, 0x58, 0xCC, + // Bytes 3240 - 327f + 0x87, 0xCD, 0x03, 0x58, 0xCC, 0x88, 0xCD, 0x03, + 0x59, 0xCC, 0x80, 0xCD, 0x03, 0x59, 0xCC, 0x81, + 0xCD, 0x03, 0x59, 0xCC, 0x82, 0xCD, 0x03, 0x59, + 0xCC, 0x83, 0xCD, 0x03, 0x59, 0xCC, 0x84, 0xCD, + 0x03, 0x59, 0xCC, 0x87, 0xCD, 0x03, 0x59, 0xCC, + 0x88, 0xCD, 0x03, 0x59, 0xCC, 0x89, 0xCD, 0x03, + 0x59, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC, 0x81, + 0xCD, 0x03, 0x5A, 0xCC, 0x82, 0xCD, 0x03, 0x5A, + // Bytes 3280 - 32bf + 0xCC, 0x87, 0xCD, 0x03, 0x5A, 0xCC, 0x8C, 0xCD, + 0x03, 0x5A, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC, + 0xB1, 0xB9, 0x03, 0x61, 0xCC, 0x80, 0xCD, 0x03, + 0x61, 0xCC, 0x81, 0xCD, 0x03, 0x61, 0xCC, 0x83, + 0xCD, 0x03, 0x61, 0xCC, 0x84, 0xCD, 0x03, 0x61, + 0xCC, 0x89, 0xCD, 0x03, 0x61, 0xCC, 0x8C, 0xCD, + 0x03, 0x61, 0xCC, 0x8F, 0xCD, 0x03, 0x61, 0xCC, + 0x91, 0xCD, 0x03, 0x61, 0xCC, 0xA5, 0xB9, 0x03, + // Bytes 32c0 - 32ff + 0x61, 0xCC, 0xA8, 0xA9, 0x03, 0x62, 0xCC, 0x87, + 0xCD, 0x03, 0x62, 0xCC, 0xA3, 0xB9, 0x03, 0x62, + 0xCC, 0xB1, 0xB9, 0x03, 0x63, 0xCC, 0x81, 0xCD, + 0x03, 0x63, 0xCC, 0x82, 0xCD, 0x03, 0x63, 0xCC, + 0x87, 0xCD, 0x03, 0x63, 0xCC, 0x8C, 0xCD, 0x03, + 0x64, 0xCC, 0x87, 0xCD, 0x03, 0x64, 0xCC, 0x8C, + 0xCD, 0x03, 0x64, 0xCC, 0xA3, 0xB9, 0x03, 0x64, + 0xCC, 0xA7, 0xA9, 0x03, 0x64, 0xCC, 0xAD, 0xB9, + // Bytes 3300 - 333f + 0x03, 0x64, 0xCC, 0xB1, 0xB9, 0x03, 0x65, 0xCC, + 0x80, 0xCD, 0x03, 0x65, 0xCC, 0x81, 0xCD, 0x03, + 0x65, 0xCC, 0x83, 0xCD, 0x03, 0x65, 0xCC, 0x86, + 0xCD, 0x03, 0x65, 0xCC, 0x87, 0xCD, 0x03, 0x65, + 0xCC, 0x88, 0xCD, 0x03, 0x65, 0xCC, 0x89, 0xCD, + 0x03, 0x65, 0xCC, 0x8C, 0xCD, 0x03, 0x65, 0xCC, + 0x8F, 0xCD, 0x03, 0x65, 0xCC, 0x91, 0xCD, 0x03, + 0x65, 0xCC, 0xA8, 0xA9, 0x03, 0x65, 0xCC, 0xAD, + // Bytes 3340 - 337f + 0xB9, 0x03, 0x65, 0xCC, 0xB0, 0xB9, 0x03, 0x66, + 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x81, 0xCD, + 0x03, 0x67, 0xCC, 0x82, 0xCD, 0x03, 0x67, 0xCC, + 0x84, 0xCD, 0x03, 0x67, 0xCC, 0x86, 0xCD, 0x03, + 0x67, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x8C, + 0xCD, 0x03, 0x67, 0xCC, 0xA7, 0xA9, 0x03, 0x68, + 0xCC, 0x82, 0xCD, 0x03, 0x68, 0xCC, 0x87, 0xCD, + 0x03, 0x68, 0xCC, 0x88, 0xCD, 0x03, 0x68, 0xCC, + // Bytes 3380 - 33bf + 0x8C, 0xCD, 0x03, 0x68, 0xCC, 0xA3, 0xB9, 0x03, + 0x68, 0xCC, 0xA7, 0xA9, 0x03, 0x68, 0xCC, 0xAE, + 0xB9, 0x03, 0x68, 0xCC, 0xB1, 0xB9, 0x03, 0x69, + 0xCC, 0x80, 0xCD, 0x03, 0x69, 0xCC, 0x81, 0xCD, + 0x03, 0x69, 0xCC, 0x82, 0xCD, 0x03, 0x69, 0xCC, + 0x83, 0xCD, 0x03, 0x69, 0xCC, 0x84, 0xCD, 0x03, + 0x69, 0xCC, 0x86, 0xCD, 0x03, 0x69, 0xCC, 0x89, + 0xCD, 0x03, 0x69, 0xCC, 0x8C, 0xCD, 0x03, 0x69, + // Bytes 33c0 - 33ff + 0xCC, 0x8F, 0xCD, 0x03, 0x69, 0xCC, 0x91, 0xCD, + 0x03, 0x69, 0xCC, 0xA3, 0xB9, 0x03, 0x69, 0xCC, + 0xA8, 0xA9, 0x03, 0x69, 0xCC, 0xB0, 0xB9, 0x03, + 0x6A, 0xCC, 0x82, 0xCD, 0x03, 0x6A, 0xCC, 0x8C, + 0xCD, 0x03, 0x6B, 0xCC, 0x81, 0xCD, 0x03, 0x6B, + 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, 0xA3, 0xB9, + 0x03, 0x6B, 0xCC, 0xA7, 0xA9, 0x03, 0x6B, 0xCC, + 0xB1, 0xB9, 0x03, 0x6C, 0xCC, 0x81, 0xCD, 0x03, + // Bytes 3400 - 343f + 0x6C, 0xCC, 0x8C, 0xCD, 0x03, 0x6C, 0xCC, 0xA7, + 0xA9, 0x03, 0x6C, 0xCC, 0xAD, 0xB9, 0x03, 0x6C, + 0xCC, 0xB1, 0xB9, 0x03, 0x6D, 0xCC, 0x81, 0xCD, + 0x03, 0x6D, 0xCC, 0x87, 0xCD, 0x03, 0x6D, 0xCC, + 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0x80, 0xCD, 0x03, + 0x6E, 0xCC, 0x81, 0xCD, 0x03, 0x6E, 0xCC, 0x83, + 0xCD, 0x03, 0x6E, 0xCC, 0x87, 0xCD, 0x03, 0x6E, + 0xCC, 0x8C, 0xCD, 0x03, 0x6E, 0xCC, 0xA3, 0xB9, + // Bytes 3440 - 347f + 0x03, 0x6E, 0xCC, 0xA7, 0xA9, 0x03, 0x6E, 0xCC, + 0xAD, 0xB9, 0x03, 0x6E, 0xCC, 0xB1, 0xB9, 0x03, + 0x6F, 0xCC, 0x80, 0xCD, 0x03, 0x6F, 0xCC, 0x81, + 0xCD, 0x03, 0x6F, 0xCC, 0x86, 0xCD, 0x03, 0x6F, + 0xCC, 0x89, 0xCD, 0x03, 0x6F, 0xCC, 0x8B, 0xCD, + 0x03, 0x6F, 0xCC, 0x8C, 0xCD, 0x03, 0x6F, 0xCC, + 0x8F, 0xCD, 0x03, 0x6F, 0xCC, 0x91, 0xCD, 0x03, + 0x70, 0xCC, 0x81, 0xCD, 0x03, 0x70, 0xCC, 0x87, + // Bytes 3480 - 34bf + 0xCD, 0x03, 0x72, 0xCC, 0x81, 0xCD, 0x03, 0x72, + 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, 0x8C, 0xCD, + 0x03, 0x72, 0xCC, 0x8F, 0xCD, 0x03, 0x72, 0xCC, + 0x91, 0xCD, 0x03, 0x72, 0xCC, 0xA7, 0xA9, 0x03, + 0x72, 0xCC, 0xB1, 0xB9, 0x03, 0x73, 0xCC, 0x82, + 0xCD, 0x03, 0x73, 0xCC, 0x87, 0xCD, 0x03, 0x73, + 0xCC, 0xA6, 0xB9, 0x03, 0x73, 0xCC, 0xA7, 0xA9, + 0x03, 0x74, 0xCC, 0x87, 0xCD, 0x03, 0x74, 0xCC, + // Bytes 34c0 - 34ff + 0x88, 0xCD, 0x03, 0x74, 0xCC, 0x8C, 0xCD, 0x03, + 0x74, 0xCC, 0xA3, 0xB9, 0x03, 0x74, 0xCC, 0xA6, + 0xB9, 0x03, 0x74, 0xCC, 0xA7, 0xA9, 0x03, 0x74, + 0xCC, 0xAD, 0xB9, 0x03, 0x74, 0xCC, 0xB1, 0xB9, + 0x03, 0x75, 0xCC, 0x80, 0xCD, 0x03, 0x75, 0xCC, + 0x81, 0xCD, 0x03, 0x75, 0xCC, 0x82, 0xCD, 0x03, + 0x75, 0xCC, 0x86, 0xCD, 0x03, 0x75, 0xCC, 0x89, + 0xCD, 0x03, 0x75, 0xCC, 0x8A, 0xCD, 0x03, 0x75, + // Bytes 3500 - 353f + 0xCC, 0x8B, 0xCD, 0x03, 0x75, 0xCC, 0x8C, 0xCD, + 0x03, 0x75, 0xCC, 0x8F, 0xCD, 0x03, 0x75, 0xCC, + 0x91, 0xCD, 0x03, 0x75, 0xCC, 0xA3, 0xB9, 0x03, + 0x75, 0xCC, 0xA4, 0xB9, 0x03, 0x75, 0xCC, 0xA8, + 0xA9, 0x03, 0x75, 0xCC, 0xAD, 0xB9, 0x03, 0x75, + 0xCC, 0xB0, 0xB9, 0x03, 0x76, 0xCC, 0x83, 0xCD, + 0x03, 0x76, 0xCC, 0xA3, 0xB9, 0x03, 0x77, 0xCC, + 0x80, 0xCD, 0x03, 0x77, 0xCC, 0x81, 0xCD, 0x03, + // Bytes 3540 - 357f + 0x77, 0xCC, 0x82, 0xCD, 0x03, 0x77, 0xCC, 0x87, + 0xCD, 0x03, 0x77, 0xCC, 0x88, 0xCD, 0x03, 0x77, + 0xCC, 0x8A, 0xCD, 0x03, 0x77, 0xCC, 0xA3, 0xB9, + 0x03, 0x78, 0xCC, 0x87, 0xCD, 0x03, 0x78, 0xCC, + 0x88, 0xCD, 0x03, 0x79, 0xCC, 0x80, 0xCD, 0x03, + 0x79, 0xCC, 0x81, 0xCD, 0x03, 0x79, 0xCC, 0x82, + 0xCD, 0x03, 0x79, 0xCC, 0x83, 0xCD, 0x03, 0x79, + 0xCC, 0x84, 0xCD, 0x03, 0x79, 0xCC, 0x87, 0xCD, + // Bytes 3580 - 35bf + 0x03, 0x79, 0xCC, 0x88, 0xCD, 0x03, 0x79, 0xCC, + 0x89, 0xCD, 0x03, 0x79, 0xCC, 0x8A, 0xCD, 0x03, + 0x79, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC, 0x81, + 0xCD, 0x03, 0x7A, 0xCC, 0x82, 0xCD, 0x03, 0x7A, + 0xCC, 0x87, 0xCD, 0x03, 0x7A, 0xCC, 0x8C, 0xCD, + 0x03, 0x7A, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC, + 0xB1, 0xB9, 0x04, 0xC2, 0xA8, 0xCC, 0x80, 0xCE, + 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x04, 0xC2, + // Bytes 35c0 - 35ff + 0xA8, 0xCD, 0x82, 0xCE, 0x04, 0xC3, 0x86, 0xCC, + 0x81, 0xCD, 0x04, 0xC3, 0x86, 0xCC, 0x84, 0xCD, + 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xCD, 0x04, 0xC3, + 0xA6, 0xCC, 0x81, 0xCD, 0x04, 0xC3, 0xA6, 0xCC, + 0x84, 0xCD, 0x04, 0xC3, 0xB8, 0xCC, 0x81, 0xCD, + 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xCD, 0x04, 0xC6, + 0xB7, 0xCC, 0x8C, 0xCD, 0x04, 0xCA, 0x92, 0xCC, + 0x8C, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x80, 0xCD, + // Bytes 3600 - 363f + 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x04, 0xCE, + 0x91, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0x91, 0xCC, + 0x86, 0xCD, 0x04, 0xCE, 0x91, 0xCD, 0x85, 0xDD, + 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0x95, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0x97, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xDD, 0x04, 0xCE, + 0x99, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x99, 0xCC, + // Bytes 3640 - 367f + 0x81, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x84, 0xCD, + 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xCD, 0x04, 0xCE, + 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xCD, 0x04, 0xCE, + 0xA5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, + 0x81, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x84, 0xCD, + 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xCD, 0x04, 0xCE, + // Bytes 3680 - 36bf + 0xA5, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xDD, 0x04, 0xCE, + 0xB1, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0xB1, 0xCC, + 0x86, 0xCD, 0x04, 0xCE, 0xB1, 0xCD, 0x85, 0xDD, + 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0xB5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xB7, 0xCD, + 0x85, 0xDD, 0x04, 0xCE, 0xB9, 0xCC, 0x80, 0xCD, + // Bytes 36c0 - 36ff + 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x04, 0xCE, + 0xB9, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0xB9, 0xCC, + 0x86, 0xCD, 0x04, 0xCE, 0xB9, 0xCD, 0x82, 0xCD, + 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0xBF, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x81, 0xCC, + 0x93, 0xCD, 0x04, 0xCF, 0x81, 0xCC, 0x94, 0xCD, + 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xCD, 0x04, 0xCF, + 0x85, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x85, 0xCC, + // Bytes 3700 - 373f + 0x84, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x86, 0xCD, + 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xCD, 0x04, 0xCF, + 0x89, 0xCD, 0x85, 0xDD, 0x04, 0xCF, 0x92, 0xCC, + 0x81, 0xCD, 0x04, 0xCF, 0x92, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0x90, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x90, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0x93, 0xCC, 0x81, 0xCD, + 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xCD, 0x04, 0xD0, + // Bytes 3740 - 377f + 0x95, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x95, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x86, 0xCD, + 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0x97, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x98, 0xCC, + 0x80, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x84, 0xCD, + 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xCD, 0x04, 0xD0, + 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x9A, 0xCC, + 0x81, 0xCD, 0x04, 0xD0, 0x9E, 0xCC, 0x88, 0xCD, + // Bytes 3780 - 37bf + 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xCD, 0x04, 0xD0, + 0xA3, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, 0xCD, + 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0xAB, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xAD, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x86, 0xCD, + 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0xB3, 0xCC, 0x81, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, + // Bytes 37c0 - 37ff + 0x80, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x86, 0xCD, + 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0xB6, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB6, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xB7, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xCD, 0x04, 0xD0, + 0xB8, 0xCC, 0x84, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, + 0x86, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xCD, 0x04, 0xD0, + // Bytes 3800 - 383f + 0xBE, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x83, 0xCC, + 0x84, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x86, 0xCD, + 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xCD, 0x04, 0xD1, + 0x83, 0xCC, 0x8B, 0xCD, 0x04, 0xD1, 0x87, 0xCC, + 0x88, 0xCD, 0x04, 0xD1, 0x8B, 0xCC, 0x88, 0xCD, + 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xCD, 0x04, 0xD1, + 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0xB4, 0xCC, + 0x8F, 0xCD, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, 0xCD, + // Bytes 3840 - 387f + 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD3, + 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA8, 0xCC, + 0x88, 0xCD, 0x04, 0xD3, 0xA9, 0xCC, 0x88, 0xCD, + 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x04, 0xD8, + 0xA7, 0xD9, 0x94, 0xCD, 0x04, 0xD8, 0xA7, 0xD9, + 0x95, 0xB9, 0x04, 0xD9, 0x88, 0xD9, 0x94, 0xCD, + 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, 0x04, 0xDB, + 0x81, 0xD9, 0x94, 0xCD, 0x04, 0xDB, 0x92, 0xD9, + // Bytes 3880 - 38bf + 0x94, 0xCD, 0x04, 0xDB, 0x95, 0xD9, 0x94, 0xCD, + 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, + 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x41, + 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x41, 0xCC, + 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x41, 0xCC, 0x86, + 0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, + 0x81, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x83, + 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, 0xCE, + // Bytes 38c0 - 38ff + 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, + 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x41, + 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC, + 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x41, 0xCC, 0xA3, + 0xCC, 0x86, 0xCE, 0x05, 0x43, 0xCC, 0xA7, 0xCC, + 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x80, + 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, 0xCE, + 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, + // Bytes 3900 - 393f + 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x45, + 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC, + 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0xA3, + 0xCC, 0x82, 0xCE, 0x05, 0x45, 0xCC, 0xA7, 0xCC, + 0x86, 0xCE, 0x05, 0x49, 0xCC, 0x88, 0xCC, 0x81, + 0xCE, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, + 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, + 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x4F, + // Bytes 3940 - 397f + 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC, + 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x4F, 0xCC, 0x83, + 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC, + 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x88, + 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, 0xCE, + 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, + 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x4F, + 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC, + // Bytes 3980 - 39bf + 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, + 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, + 0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x89, + 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, + 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, + 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x52, + 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x53, 0xCC, + 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0x8C, + // Bytes 39c0 - 39ff + 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0xA3, 0xCC, + 0x87, 0xCE, 0x05, 0x55, 0xCC, 0x83, 0xCC, 0x81, + 0xCE, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, 0xCE, + 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x05, + 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x55, + 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x55, 0xCC, + 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x55, 0xCC, 0x9B, + 0xCC, 0x80, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, + // Bytes 3a00 - 3a3f + 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x83, + 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, + 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, + 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x61, + 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, + 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x82, + 0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, + 0x80, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x81, + // Bytes 3a40 - 3a7f + 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, 0xCE, + 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCE, 0x05, + 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x61, + 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x61, 0xCC, + 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0xA3, + 0xCC, 0x82, 0xCE, 0x05, 0x61, 0xCC, 0xA3, 0xCC, + 0x86, 0xCE, 0x05, 0x63, 0xCC, 0xA7, 0xCC, 0x81, + 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, 0xCE, + // Bytes 3a80 - 3abf + 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, + 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x65, + 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x65, 0xCC, + 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x65, 0xCC, 0x84, + 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0xA3, 0xCC, + 0x82, 0xCE, 0x05, 0x65, 0xCC, 0xA7, 0xCC, 0x86, + 0xCE, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, 0xCE, + 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, + // Bytes 3ac0 - 3aff + 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x6F, + 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, + 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x6F, 0xCC, 0x82, + 0xCC, 0x89, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, + 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x84, + 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, 0xCE, + 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, + 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x6F, + // Bytes 3b00 - 3b3f + 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, + 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, + 0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, + 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x83, + 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, + 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, + 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x6F, + 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x72, 0xCC, + // Bytes 3b40 - 3b7f + 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x73, 0xCC, 0x81, + 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0x8C, 0xCC, + 0x87, 0xCE, 0x05, 0x73, 0xCC, 0xA3, 0xCC, 0x87, + 0xCE, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, 0xCE, + 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCE, 0x05, + 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x05, 0x75, + 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC, + 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x75, 0xCC, 0x88, + // Bytes 3b80 - 3bbf + 0xCC, 0x8C, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, + 0x80, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x81, + 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0xCE, + 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, 0x05, + 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, 0xE1, + 0xBE, 0xBF, 0xCC, 0x80, 0xCE, 0x05, 0xE1, 0xBE, + 0xBF, 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBE, 0xBF, + 0xCD, 0x82, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, + // Bytes 3bc0 - 3bff + 0x80, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, 0x81, + 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, 0xCE, + 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, + 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x92, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, 0xB8, + // Bytes 3c00 - 3c3f + 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, + 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x83, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, 0x05, + // Bytes 3c40 - 3c7f + 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, + 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB3, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, 0x05, + // Bytes 3c80 - 3cbf + 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x83, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + // Bytes 3cc0 - 3cff + 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xAB, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, 0x06, + 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + // Bytes 3d00 - 3d3f + 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + // Bytes 3d40 - 3d7f + 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + // Bytes 3d80 - 3dbf + 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + // Bytes 3dc0 - 3dff + 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, + // Bytes 3e00 - 3e3f + 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + // Bytes 3e40 - 3e7f + 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + // Bytes 3e80 - 3ebf + 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + // Bytes 3ec0 - 3eff + 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, + 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, + 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, + // Bytes 3f00 - 3f3f + 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, + 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x89, 0x06, + 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x15, 0x06, + 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 3f40 - 3f7f + 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 3f80 - 3fbf + 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 3fc0 - 3fff + 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 4000 - 403f + 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 4040 - 407f + 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x11, 0x06, + // Bytes 4080 - 40bf + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x06, + // Bytes 40c0 - 40ff + 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x08, + 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, + // Bytes 4100 - 413f + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + // Bytes 4140 - 417f + 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, + // Bytes 4180 - 41bf + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, + // Bytes 41c0 - 41ff + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + // Bytes 4200 - 423f + 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, + // Bytes 4240 - 427f + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, 0xBA, + 0x0D, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, 0x91, + 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0xA5, + 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x42, 0xC2, 0xB4, + 0x01, 0x43, 0x20, 0xCC, 0x81, 0xCD, 0x43, 0x20, + 0xCC, 0x83, 0xCD, 0x43, 0x20, 0xCC, 0x84, 0xCD, + // Bytes 4280 - 42bf + 0x43, 0x20, 0xCC, 0x85, 0xCD, 0x43, 0x20, 0xCC, + 0x86, 0xCD, 0x43, 0x20, 0xCC, 0x87, 0xCD, 0x43, + 0x20, 0xCC, 0x88, 0xCD, 0x43, 0x20, 0xCC, 0x8A, + 0xCD, 0x43, 0x20, 0xCC, 0x8B, 0xCD, 0x43, 0x20, + 0xCC, 0x93, 0xCD, 0x43, 0x20, 0xCC, 0x94, 0xCD, + 0x43, 0x20, 0xCC, 0xA7, 0xA9, 0x43, 0x20, 0xCC, + 0xA8, 0xA9, 0x43, 0x20, 0xCC, 0xB3, 0xB9, 0x43, + 0x20, 0xCD, 0x82, 0xCD, 0x43, 0x20, 0xCD, 0x85, + // Bytes 42c0 - 42ff + 0xDD, 0x43, 0x20, 0xD9, 0x8B, 0x5D, 0x43, 0x20, + 0xD9, 0x8C, 0x61, 0x43, 0x20, 0xD9, 0x8D, 0x65, + 0x43, 0x20, 0xD9, 0x8E, 0x69, 0x43, 0x20, 0xD9, + 0x8F, 0x6D, 0x43, 0x20, 0xD9, 0x90, 0x71, 0x43, + 0x20, 0xD9, 0x91, 0x75, 0x43, 0x20, 0xD9, 0x92, + 0x79, 0x43, 0x41, 0xCC, 0x8A, 0xCD, 0x43, 0x73, + 0xCC, 0x87, 0xCD, 0x44, 0x20, 0xE3, 0x82, 0x99, + 0x11, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x11, 0x44, + // Bytes 4300 - 433f + 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x44, 0xCE, 0x91, + 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x95, 0xCC, 0x81, + 0xCD, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xCD, 0x44, + 0xCE, 0x99, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x9F, + 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x81, + 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x44, + 0xCE, 0xA9, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB1, + 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB5, 0xCC, 0x81, + // Bytes 4340 - 437f + 0xCD, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x44, + 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xBF, + 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x85, 0xCC, 0x81, + 0xCD, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x44, + 0xD7, 0x90, 0xD6, 0xB7, 0x35, 0x44, 0xD7, 0x90, + 0xD6, 0xB8, 0x39, 0x44, 0xD7, 0x90, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x45, 0x44, + 0xD7, 0x91, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0x92, + // Bytes 4380 - 43bf + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x93, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x45, 0x44, + 0xD7, 0x95, 0xD6, 0xB9, 0x3D, 0x44, 0xD7, 0x95, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x96, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x45, 0x44, + 0xD7, 0x99, 0xD6, 0xB4, 0x29, 0x44, 0xD7, 0x99, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9A, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x45, 0x44, + // Bytes 43c0 - 43ff + 0xD7, 0x9B, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0x9C, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9E, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x45, 0x44, + 0xD7, 0xA1, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA3, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x4D, 0x44, + 0xD7, 0xA6, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA7, + 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA8, 0xD6, 0xBC, + // Bytes 4400 - 443f + 0x45, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x45, 0x44, + 0xD7, 0xA9, 0xD7, 0x81, 0x51, 0x44, 0xD7, 0xA9, + 0xD7, 0x82, 0x55, 0x44, 0xD7, 0xAA, 0xD6, 0xBC, + 0x45, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x35, 0x44, + 0xD8, 0xA7, 0xD9, 0x8B, 0x5D, 0x44, 0xD8, 0xA7, + 0xD9, 0x93, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x94, + 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x44, + 0xD8, 0xB0, 0xD9, 0xB0, 0x7D, 0x44, 0xD8, 0xB1, + // Bytes 4440 - 447f + 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x80, 0xD9, 0x8B, + 0x5D, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x69, 0x44, + 0xD9, 0x80, 0xD9, 0x8F, 0x6D, 0x44, 0xD9, 0x80, + 0xD9, 0x90, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x91, + 0x75, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x79, 0x44, + 0xD9, 0x87, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x88, + 0xD9, 0x94, 0xCD, 0x44, 0xD9, 0x89, 0xD9, 0xB0, + 0x7D, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, 0x44, + // Bytes 4480 - 44bf + 0xDB, 0x92, 0xD9, 0x94, 0xCD, 0x44, 0xDB, 0x95, + 0xD9, 0x94, 0xCD, 0x45, 0x20, 0xCC, 0x88, 0xCC, + 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x81, + 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0xCE, + 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x45, + 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x45, 0x20, + 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xCC, + 0x94, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x94, + // Bytes 44c0 - 44ff + 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x94, 0xCD, + 0x82, 0xCE, 0x45, 0x20, 0xD9, 0x8C, 0xD9, 0x91, + 0x76, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, 0x76, + 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x76, 0x45, + 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x45, 0x20, + 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, + 0x91, 0xD9, 0xB0, 0x7E, 0x45, 0xE2, 0xAB, 0x9D, + 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, 0x88, + // Bytes 4500 - 453f + 0xCC, 0x81, 0xCE, 0x46, 0xCF, 0x85, 0xCC, 0x88, + 0xCC, 0x81, 0xCE, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, + 0xD7, 0x81, 0x52, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, + 0xD7, 0x82, 0x56, 0x46, 0xD9, 0x80, 0xD9, 0x8E, + 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x8F, + 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x90, + 0xD9, 0x91, 0x76, 0x46, 0xE0, 0xA4, 0x95, 0xE0, + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x96, 0xE0, + // Bytes 4540 - 457f + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x97, 0xE0, + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x9C, 0xE0, + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xA1, 0xE0, + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xA2, 0xE0, + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAB, 0xE0, + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAF, 0xE0, + 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xA1, 0xE0, + 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xA2, 0xE0, + // Bytes 4580 - 45bf + 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xAF, 0xE0, + 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x96, 0xE0, + 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x97, 0xE0, + 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x9C, 0xE0, + 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xAB, 0xE0, + 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xB2, 0xE0, + 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xB8, 0xE0, + 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, 0xA1, 0xE0, + // Bytes 45c0 - 45ff + 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, 0xA2, 0xE0, + 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xBE, 0xB2, 0xE0, + 0xBE, 0x80, 0xA1, 0x46, 0xE0, 0xBE, 0xB3, 0xE0, + 0xBE, 0x80, 0xA1, 0x46, 0xE3, 0x83, 0x86, 0xE3, + 0x82, 0x99, 0x11, 0x48, 0xF0, 0x9D, 0x85, 0x97, + 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, + 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, + 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, + // Bytes 4600 - 463f + 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, + 0x85, 0xA5, 0xB1, 0x49, 0xE0, 0xBE, 0xB2, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x49, 0xE0, + 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, + 0xA2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, + 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, + 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, + // Bytes 4640 - 467f + 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + 0x85, 0xB0, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB1, + 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xB2, 0x4C, + 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, + 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, + 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, + // Bytes 4680 - 46bf + 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, + 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, + 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, + 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x83, + 0x41, 0xCC, 0x82, 0xCD, 0x83, 0x41, 0xCC, 0x86, + 0xCD, 0x83, 0x41, 0xCC, 0x87, 0xCD, 0x83, 0x41, + 0xCC, 0x88, 0xCD, 0x83, 0x41, 0xCC, 0x8A, 0xCD, + 0x83, 0x41, 0xCC, 0xA3, 0xB9, 0x83, 0x43, 0xCC, + // Bytes 46c0 - 46ff + 0xA7, 0xA9, 0x83, 0x45, 0xCC, 0x82, 0xCD, 0x83, + 0x45, 0xCC, 0x84, 0xCD, 0x83, 0x45, 0xCC, 0xA3, + 0xB9, 0x83, 0x45, 0xCC, 0xA7, 0xA9, 0x83, 0x49, + 0xCC, 0x88, 0xCD, 0x83, 0x4C, 0xCC, 0xA3, 0xB9, + 0x83, 0x4F, 0xCC, 0x82, 0xCD, 0x83, 0x4F, 0xCC, + 0x83, 0xCD, 0x83, 0x4F, 0xCC, 0x84, 0xCD, 0x83, + 0x4F, 0xCC, 0x87, 0xCD, 0x83, 0x4F, 0xCC, 0x88, + 0xCD, 0x83, 0x4F, 0xCC, 0x9B, 0xB1, 0x83, 0x4F, + // Bytes 4700 - 473f + 0xCC, 0xA3, 0xB9, 0x83, 0x4F, 0xCC, 0xA8, 0xA9, + 0x83, 0x52, 0xCC, 0xA3, 0xB9, 0x83, 0x53, 0xCC, + 0x81, 0xCD, 0x83, 0x53, 0xCC, 0x8C, 0xCD, 0x83, + 0x53, 0xCC, 0xA3, 0xB9, 0x83, 0x55, 0xCC, 0x83, + 0xCD, 0x83, 0x55, 0xCC, 0x84, 0xCD, 0x83, 0x55, + 0xCC, 0x88, 0xCD, 0x83, 0x55, 0xCC, 0x9B, 0xB1, + 0x83, 0x61, 0xCC, 0x82, 0xCD, 0x83, 0x61, 0xCC, + 0x86, 0xCD, 0x83, 0x61, 0xCC, 0x87, 0xCD, 0x83, + // Bytes 4740 - 477f + 0x61, 0xCC, 0x88, 0xCD, 0x83, 0x61, 0xCC, 0x8A, + 0xCD, 0x83, 0x61, 0xCC, 0xA3, 0xB9, 0x83, 0x63, + 0xCC, 0xA7, 0xA9, 0x83, 0x65, 0xCC, 0x82, 0xCD, + 0x83, 0x65, 0xCC, 0x84, 0xCD, 0x83, 0x65, 0xCC, + 0xA3, 0xB9, 0x83, 0x65, 0xCC, 0xA7, 0xA9, 0x83, + 0x69, 0xCC, 0x88, 0xCD, 0x83, 0x6C, 0xCC, 0xA3, + 0xB9, 0x83, 0x6F, 0xCC, 0x82, 0xCD, 0x83, 0x6F, + 0xCC, 0x83, 0xCD, 0x83, 0x6F, 0xCC, 0x84, 0xCD, + // Bytes 4780 - 47bf + 0x83, 0x6F, 0xCC, 0x87, 0xCD, 0x83, 0x6F, 0xCC, + 0x88, 0xCD, 0x83, 0x6F, 0xCC, 0x9B, 0xB1, 0x83, + 0x6F, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, 0xCC, 0xA8, + 0xA9, 0x83, 0x72, 0xCC, 0xA3, 0xB9, 0x83, 0x73, + 0xCC, 0x81, 0xCD, 0x83, 0x73, 0xCC, 0x8C, 0xCD, + 0x83, 0x73, 0xCC, 0xA3, 0xB9, 0x83, 0x75, 0xCC, + 0x83, 0xCD, 0x83, 0x75, 0xCC, 0x84, 0xCD, 0x83, + 0x75, 0xCC, 0x88, 0xCD, 0x83, 0x75, 0xCC, 0x9B, + // Bytes 47c0 - 47ff + 0xB1, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x84, + 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x95, + 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x95, 0xCC, 0x94, + 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x84, + 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x99, + 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x99, 0xCC, 0x94, + 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xCD, 0x84, + 0xCE, 0x9F, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA5, + // Bytes 4800 - 483f + 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x93, + 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x84, + 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x84, 0xCE, 0xB1, + 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x93, + 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x84, + 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x84, 0xCE, 0xB5, + 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB5, 0xCC, 0x94, + 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x84, + // Bytes 4840 - 487f + 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB7, + 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x94, + 0xCD, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x84, + 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x84, 0xCE, 0xB9, + 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x94, + 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xCD, 0x84, + 0xCE, 0xBF, 0xCC, 0x94, 0xCD, 0x84, 0xCF, 0x85, + 0xCC, 0x88, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x93, + // Bytes 4880 - 48bf + 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x84, + 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x84, 0xCF, 0x89, + 0xCC, 0x81, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x93, + 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x84, + 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x86, 0xCE, 0x91, + 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91, + 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91, + 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x91, + // Bytes 48c0 - 48ff + 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91, + 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91, + 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x97, + 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97, + 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x97, + 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x97, + 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97, + 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x97, + // Bytes 4900 - 493f + 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9, + 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xA9, + 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xA9, + 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9, + 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xA9, + 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xA9, + 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1, + 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB1, + // Bytes 4940 - 497f + 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1, + 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1, + 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB1, + 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1, + 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB7, + 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7, + 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7, + 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB7, + // Bytes 4980 - 49bf + 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7, + 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCF, 0x89, + 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89, + 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCF, 0x89, + 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCF, 0x89, + 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89, + 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCF, 0x89, + // Bytes 49c0 - 49ff + 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x42, 0xCC, 0x80, + 0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, 0x33, 0x42, + 0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, 0x85, 0xA1, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA5, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43, 0xE1, + // Bytes 4a00 - 4a3f + 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA9, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAD, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB1, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01, 0x00, + // Bytes 4a40 - 4a7f + 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB5, + 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, 0x00, + 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43, 0xE1, + 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB0, + 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01, 0x00, + 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43, 0xE1, + 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB4, + // Bytes 4a80 - 4abf + 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, 0x00, + 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x33, 0x43, + 0xE3, 0x82, 0x99, 0x11, 0x04, 0x43, 0xE3, 0x82, + 0x9A, 0x11, 0x04, 0x46, 0xE0, 0xBD, 0xB1, 0xE0, + 0xBD, 0xB2, 0xA2, 0x27, 0x46, 0xE0, 0xBD, 0xB1, + 0xE0, 0xBD, 0xB4, 0xA6, 0x27, 0x46, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x27, 0x00, 0x01, +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfcValues[c0] + } + i := nfcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfcValues[c0] + } + i := nfcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// nfcTrie. Total size: 10680 bytes (10.43 KiB). Checksum: a555db76d4becdd2. +type nfcTrie struct{} + +func newNfcTrie(i int) *nfcTrie { + return &nfcTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 46: + return uint16(nfcValues[n<<6+uint32(b)]) + default: + n -= 46 + return uint16(nfcSparse.lookup(n, b)) + } +} + +// nfcValues: 48 blocks, 3072 entries, 6144 bytes +// The third block is the zero block. +var nfcValues = [3072]uint16{ + // Block 0x0, offset 0x0 + 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, + // Block 0x1, offset 0x40 + 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, + 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, + 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, + 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, + 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, + 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, + 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, + 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, + 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, + 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x2f86, 0xc1: 0x2f8b, 0xc2: 0x469f, 0xc3: 0x2f90, 0xc4: 0x46ae, 0xc5: 0x46b3, + 0xc6: 0xa000, 0xc7: 0x46bd, 0xc8: 0x2ff9, 0xc9: 0x2ffe, 0xca: 0x46c2, 0xcb: 0x3012, + 0xcc: 0x3085, 0xcd: 0x308a, 0xce: 0x308f, 0xcf: 0x46d6, 0xd1: 0x311b, + 0xd2: 0x313e, 0xd3: 0x3143, 0xd4: 0x46e0, 0xd5: 0x46e5, 0xd6: 0x46f4, + 0xd8: 0xa000, 0xd9: 0x31ca, 0xda: 0x31cf, 0xdb: 0x31d4, 0xdc: 0x4726, 0xdd: 0x324c, + 0xe0: 0x3292, 0xe1: 0x3297, 0xe2: 0x4730, 0xe3: 0x329c, + 0xe4: 0x473f, 0xe5: 0x4744, 0xe6: 0xa000, 0xe7: 0x474e, 0xe8: 0x3305, 0xe9: 0x330a, + 0xea: 0x4753, 0xeb: 0x331e, 0xec: 0x3396, 0xed: 0x339b, 0xee: 0x33a0, 0xef: 0x4767, + 0xf1: 0x342c, 0xf2: 0x344f, 0xf3: 0x3454, 0xf4: 0x4771, 0xf5: 0x4776, + 0xf6: 0x4785, 0xf8: 0xa000, 0xf9: 0x34e0, 0xfa: 0x34e5, 0xfb: 0x34ea, + 0xfc: 0x47b7, 0xfd: 0x3567, 0xff: 0x3580, + // Block 0x4, offset 0x100 + 0x100: 0x2f95, 0x101: 0x32a1, 0x102: 0x46a4, 0x103: 0x4735, 0x104: 0x2fb3, 0x105: 0x32bf, + 0x106: 0x2fc7, 0x107: 0x32d3, 0x108: 0x2fcc, 0x109: 0x32d8, 0x10a: 0x2fd1, 0x10b: 0x32dd, + 0x10c: 0x2fd6, 0x10d: 0x32e2, 0x10e: 0x2fe0, 0x10f: 0x32ec, + 0x112: 0x46c7, 0x113: 0x4758, 0x114: 0x3008, 0x115: 0x3314, 0x116: 0x300d, 0x117: 0x3319, + 0x118: 0x302b, 0x119: 0x3337, 0x11a: 0x301c, 0x11b: 0x3328, 0x11c: 0x3044, 0x11d: 0x3350, + 0x11e: 0x304e, 0x11f: 0x335a, 0x120: 0x3053, 0x121: 0x335f, 0x122: 0x305d, 0x123: 0x3369, + 0x124: 0x3062, 0x125: 0x336e, 0x128: 0x3094, 0x129: 0x33a5, + 0x12a: 0x3099, 0x12b: 0x33aa, 0x12c: 0x309e, 0x12d: 0x33af, 0x12e: 0x30c1, 0x12f: 0x33cd, + 0x130: 0x30a3, 0x134: 0x30cb, 0x135: 0x33d7, + 0x136: 0x30df, 0x137: 0x33f0, 0x139: 0x30e9, 0x13a: 0x33fa, 0x13b: 0x30f3, + 0x13c: 0x3404, 0x13d: 0x30ee, 0x13e: 0x33ff, + // Block 0x5, offset 0x140 + 0x143: 0x3116, 0x144: 0x3427, 0x145: 0x312f, + 0x146: 0x3440, 0x147: 0x3125, 0x148: 0x3436, + 0x14c: 0x46ea, 0x14d: 0x477b, 0x14e: 0x3148, 0x14f: 0x3459, 0x150: 0x3152, 0x151: 0x3463, + 0x154: 0x3170, 0x155: 0x3481, 0x156: 0x3189, 0x157: 0x349a, + 0x158: 0x317a, 0x159: 0x348b, 0x15a: 0x470d, 0x15b: 0x479e, 0x15c: 0x3193, 0x15d: 0x34a4, + 0x15e: 0x31a2, 0x15f: 0x34b3, 0x160: 0x4712, 0x161: 0x47a3, 0x162: 0x31bb, 0x163: 0x34d1, + 0x164: 0x31ac, 0x165: 0x34c2, 0x168: 0x471c, 0x169: 0x47ad, + 0x16a: 0x4721, 0x16b: 0x47b2, 0x16c: 0x31d9, 0x16d: 0x34ef, 0x16e: 0x31e3, 0x16f: 0x34f9, + 0x170: 0x31e8, 0x171: 0x34fe, 0x172: 0x3206, 0x173: 0x351c, 0x174: 0x3229, 0x175: 0x353f, + 0x176: 0x3251, 0x177: 0x356c, 0x178: 0x3265, 0x179: 0x3274, 0x17a: 0x3594, 0x17b: 0x327e, + 0x17c: 0x359e, 0x17d: 0x3283, 0x17e: 0x35a3, 0x17f: 0xa000, + // Block 0x6, offset 0x180 + 0x184: 0x8100, 0x185: 0x8100, + 0x186: 0x8100, + 0x18d: 0x2f9f, 0x18e: 0x32ab, 0x18f: 0x30ad, 0x190: 0x33b9, 0x191: 0x3157, + 0x192: 0x3468, 0x193: 0x31ed, 0x194: 0x3503, 0x195: 0x39e6, 0x196: 0x3b75, 0x197: 0x39df, + 0x198: 0x3b6e, 0x199: 0x39ed, 0x19a: 0x3b7c, 0x19b: 0x39d8, 0x19c: 0x3b67, + 0x19e: 0x38c7, 0x19f: 0x3a56, 0x1a0: 0x38c0, 0x1a1: 0x3a4f, 0x1a2: 0x35ca, 0x1a3: 0x35dc, + 0x1a6: 0x3058, 0x1a7: 0x3364, 0x1a8: 0x30d5, 0x1a9: 0x33e6, + 0x1aa: 0x4703, 0x1ab: 0x4794, 0x1ac: 0x39a7, 0x1ad: 0x3b36, 0x1ae: 0x35ee, 0x1af: 0x35f4, + 0x1b0: 0x33dc, 0x1b4: 0x303f, 0x1b5: 0x334b, + 0x1b8: 0x3111, 0x1b9: 0x3422, 0x1ba: 0x38ce, 0x1bb: 0x3a5d, + 0x1bc: 0x35c4, 0x1bd: 0x35d6, 0x1be: 0x35d0, 0x1bf: 0x35e2, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2fa4, 0x1c1: 0x32b0, 0x1c2: 0x2fa9, 0x1c3: 0x32b5, 0x1c4: 0x3021, 0x1c5: 0x332d, + 0x1c6: 0x3026, 0x1c7: 0x3332, 0x1c8: 0x30b2, 0x1c9: 0x33be, 0x1ca: 0x30b7, 0x1cb: 0x33c3, + 0x1cc: 0x315c, 0x1cd: 0x346d, 0x1ce: 0x3161, 0x1cf: 0x3472, 0x1d0: 0x317f, 0x1d1: 0x3490, + 0x1d2: 0x3184, 0x1d3: 0x3495, 0x1d4: 0x31f2, 0x1d5: 0x3508, 0x1d6: 0x31f7, 0x1d7: 0x350d, + 0x1d8: 0x319d, 0x1d9: 0x34ae, 0x1da: 0x31b6, 0x1db: 0x34cc, + 0x1de: 0x3071, 0x1df: 0x337d, + 0x1e6: 0x46a9, 0x1e7: 0x473a, 0x1e8: 0x46d1, 0x1e9: 0x4762, + 0x1ea: 0x3976, 0x1eb: 0x3b05, 0x1ec: 0x3953, 0x1ed: 0x3ae2, 0x1ee: 0x46ef, 0x1ef: 0x4780, + 0x1f0: 0x396f, 0x1f1: 0x3afe, 0x1f2: 0x325b, 0x1f3: 0x3576, + // Block 0x8, offset 0x200 + 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, + 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, + 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, + 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, + 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, + 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, + 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, + 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, + 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, + 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, + // Block 0x9, offset 0x240 + 0x240: 0x49c5, 0x241: 0x49ca, 0x242: 0x9933, 0x243: 0x49cf, 0x244: 0x4a88, 0x245: 0x9937, + 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, + 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, + 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, + 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, + 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, + 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, + 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, + 0x274: 0x0173, + 0x27a: 0x8100, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x8100, 0x285: 0x35b8, + 0x286: 0x3600, 0x287: 0x00ce, 0x288: 0x361e, 0x289: 0x362a, 0x28a: 0x363c, + 0x28c: 0x365a, 0x28e: 0x366c, 0x28f: 0x368a, 0x290: 0x3e1f, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x364e, 0x2ab: 0x367e, 0x2ac: 0x4815, 0x2ad: 0x36ae, 0x2ae: 0x483f, 0x2af: 0x36c0, + 0x2b0: 0x3e87, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x3738, 0x2c1: 0x3744, 0x2c3: 0x3732, + 0x2c6: 0xa000, 0x2c7: 0x3720, + 0x2cc: 0x3774, 0x2cd: 0x375c, 0x2ce: 0x3786, 0x2d0: 0xa000, + 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x3768, 0x2da: 0xa000, + 0x2de: 0xa000, 0x2e3: 0xa000, + 0x2e7: 0xa000, + 0x2eb: 0xa000, 0x2ed: 0xa000, + 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, + 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37ec, 0x2fa: 0xa000, + 0x2fe: 0xa000, + // Block 0xc, offset 0x300 + 0x301: 0x374a, 0x302: 0x37ce, + 0x310: 0x3726, 0x311: 0x37aa, + 0x312: 0x372c, 0x313: 0x37b0, 0x316: 0x373e, 0x317: 0x37c2, + 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3840, 0x31b: 0x3846, 0x31c: 0x3750, 0x31d: 0x37d4, + 0x31e: 0x3756, 0x31f: 0x37da, 0x322: 0x3762, 0x323: 0x37e6, + 0x324: 0x376e, 0x325: 0x37f2, 0x326: 0x377a, 0x327: 0x37fe, 0x328: 0xa000, 0x329: 0xa000, + 0x32a: 0x384c, 0x32b: 0x3852, 0x32c: 0x37a4, 0x32d: 0x3828, 0x32e: 0x3780, 0x32f: 0x3804, + 0x330: 0x378c, 0x331: 0x3810, 0x332: 0x3792, 0x333: 0x3816, 0x334: 0x3798, 0x335: 0x381c, + 0x338: 0x379e, 0x339: 0x3822, + // Block 0xd, offset 0x340 + 0x351: 0x812e, + 0x352: 0x8133, 0x353: 0x8133, 0x354: 0x8133, 0x355: 0x8133, 0x356: 0x812e, 0x357: 0x8133, + 0x358: 0x8133, 0x359: 0x8133, 0x35a: 0x812f, 0x35b: 0x812e, 0x35c: 0x8133, 0x35d: 0x8133, + 0x35e: 0x8133, 0x35f: 0x8133, 0x360: 0x8133, 0x361: 0x8133, 0x362: 0x812e, 0x363: 0x812e, + 0x364: 0x812e, 0x365: 0x812e, 0x366: 0x812e, 0x367: 0x812e, 0x368: 0x8133, 0x369: 0x8133, + 0x36a: 0x812e, 0x36b: 0x8133, 0x36c: 0x8133, 0x36d: 0x812f, 0x36e: 0x8132, 0x36f: 0x8133, + 0x370: 0x8106, 0x371: 0x8107, 0x372: 0x8108, 0x373: 0x8109, 0x374: 0x810a, 0x375: 0x810b, + 0x376: 0x810c, 0x377: 0x810d, 0x378: 0x810e, 0x379: 0x810f, 0x37a: 0x810f, 0x37b: 0x8110, + 0x37c: 0x8111, 0x37d: 0x8112, 0x37f: 0x8113, + // Block 0xe, offset 0x380 + 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8117, + 0x38c: 0x8118, 0x38d: 0x8119, 0x38e: 0x811a, 0x38f: 0x811b, 0x390: 0x811c, 0x391: 0x811d, + 0x392: 0x811e, 0x393: 0x9933, 0x394: 0x9933, 0x395: 0x992e, 0x396: 0x812e, 0x397: 0x8133, + 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x8133, 0x39b: 0x8133, 0x39c: 0x812e, 0x39d: 0x8133, + 0x39e: 0x8133, 0x39f: 0x812e, + 0x3b0: 0x811f, + // Block 0xf, offset 0x3c0 + 0x3d3: 0x812e, 0x3d4: 0x8133, 0x3d5: 0x8133, 0x3d6: 0x8133, 0x3d7: 0x8133, + 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x8133, 0x3dd: 0x8133, + 0x3de: 0x8133, 0x3df: 0x8133, 0x3e0: 0x8133, 0x3e1: 0x8133, 0x3e3: 0x812e, + 0x3e4: 0x8133, 0x3e5: 0x8133, 0x3e6: 0x812e, 0x3e7: 0x8133, 0x3e8: 0x8133, 0x3e9: 0x812e, + 0x3ea: 0x8133, 0x3eb: 0x8133, 0x3ec: 0x8133, 0x3ed: 0x812e, 0x3ee: 0x812e, 0x3ef: 0x812e, + 0x3f0: 0x8117, 0x3f1: 0x8118, 0x3f2: 0x8119, 0x3f3: 0x8133, 0x3f4: 0x8133, 0x3f5: 0x8133, + 0x3f6: 0x812e, 0x3f7: 0x8133, 0x3f8: 0x8133, 0x3f9: 0x812e, 0x3fa: 0x812e, 0x3fb: 0x8133, + 0x3fc: 0x8133, 0x3fd: 0x8133, 0x3fe: 0x8133, 0x3ff: 0x8133, + // Block 0x10, offset 0x400 + 0x405: 0xa000, + 0x406: 0x2d33, 0x407: 0xa000, 0x408: 0x2d3b, 0x409: 0xa000, 0x40a: 0x2d43, 0x40b: 0xa000, + 0x40c: 0x2d4b, 0x40d: 0xa000, 0x40e: 0x2d53, 0x411: 0xa000, + 0x412: 0x2d5b, + 0x434: 0x8103, 0x435: 0x9900, + 0x43a: 0xa000, 0x43b: 0x2d63, + 0x43c: 0xa000, 0x43d: 0x2d6b, 0x43e: 0xa000, 0x43f: 0xa000, + // Block 0x11, offset 0x440 + 0x440: 0x8133, 0x441: 0x8133, 0x442: 0x812e, 0x443: 0x8133, 0x444: 0x8133, 0x445: 0x8133, + 0x446: 0x8133, 0x447: 0x8133, 0x448: 0x8133, 0x449: 0x8133, 0x44a: 0x812e, 0x44b: 0x8133, + 0x44c: 0x8133, 0x44d: 0x8136, 0x44e: 0x812b, 0x44f: 0x812e, 0x450: 0x812a, 0x451: 0x8133, + 0x452: 0x8133, 0x453: 0x8133, 0x454: 0x8133, 0x455: 0x8133, 0x456: 0x8133, 0x457: 0x8133, + 0x458: 0x8133, 0x459: 0x8133, 0x45a: 0x8133, 0x45b: 0x8133, 0x45c: 0x8133, 0x45d: 0x8133, + 0x45e: 0x8133, 0x45f: 0x8133, 0x460: 0x8133, 0x461: 0x8133, 0x462: 0x8133, 0x463: 0x8133, + 0x464: 0x8133, 0x465: 0x8133, 0x466: 0x8133, 0x467: 0x8133, 0x468: 0x8133, 0x469: 0x8133, + 0x46a: 0x8133, 0x46b: 0x8133, 0x46c: 0x8133, 0x46d: 0x8133, 0x46e: 0x8133, 0x46f: 0x8133, + 0x470: 0x8133, 0x471: 0x8133, 0x472: 0x8133, 0x473: 0x8133, 0x474: 0x8133, 0x475: 0x8133, + 0x476: 0x8134, 0x477: 0x8132, 0x478: 0x8132, 0x479: 0x812e, 0x47b: 0x8133, + 0x47c: 0x8135, 0x47d: 0x812e, 0x47e: 0x8133, 0x47f: 0x812e, + // Block 0x12, offset 0x480 + 0x480: 0x2fae, 0x481: 0x32ba, 0x482: 0x2fb8, 0x483: 0x32c4, 0x484: 0x2fbd, 0x485: 0x32c9, + 0x486: 0x2fc2, 0x487: 0x32ce, 0x488: 0x38e3, 0x489: 0x3a72, 0x48a: 0x2fdb, 0x48b: 0x32e7, + 0x48c: 0x2fe5, 0x48d: 0x32f1, 0x48e: 0x2ff4, 0x48f: 0x3300, 0x490: 0x2fea, 0x491: 0x32f6, + 0x492: 0x2fef, 0x493: 0x32fb, 0x494: 0x3906, 0x495: 0x3a95, 0x496: 0x390d, 0x497: 0x3a9c, + 0x498: 0x3030, 0x499: 0x333c, 0x49a: 0x3035, 0x49b: 0x3341, 0x49c: 0x391b, 0x49d: 0x3aaa, + 0x49e: 0x303a, 0x49f: 0x3346, 0x4a0: 0x3049, 0x4a1: 0x3355, 0x4a2: 0x3067, 0x4a3: 0x3373, + 0x4a4: 0x3076, 0x4a5: 0x3382, 0x4a6: 0x306c, 0x4a7: 0x3378, 0x4a8: 0x307b, 0x4a9: 0x3387, + 0x4aa: 0x3080, 0x4ab: 0x338c, 0x4ac: 0x30c6, 0x4ad: 0x33d2, 0x4ae: 0x3922, 0x4af: 0x3ab1, + 0x4b0: 0x30d0, 0x4b1: 0x33e1, 0x4b2: 0x30da, 0x4b3: 0x33eb, 0x4b4: 0x30e4, 0x4b5: 0x33f5, + 0x4b6: 0x46db, 0x4b7: 0x476c, 0x4b8: 0x3929, 0x4b9: 0x3ab8, 0x4ba: 0x30fd, 0x4bb: 0x340e, + 0x4bc: 0x30f8, 0x4bd: 0x3409, 0x4be: 0x3102, 0x4bf: 0x3413, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x3107, 0x4c1: 0x3418, 0x4c2: 0x310c, 0x4c3: 0x341d, 0x4c4: 0x3120, 0x4c5: 0x3431, + 0x4c6: 0x312a, 0x4c7: 0x343b, 0x4c8: 0x3139, 0x4c9: 0x344a, 0x4ca: 0x3134, 0x4cb: 0x3445, + 0x4cc: 0x394c, 0x4cd: 0x3adb, 0x4ce: 0x395a, 0x4cf: 0x3ae9, 0x4d0: 0x3961, 0x4d1: 0x3af0, + 0x4d2: 0x3968, 0x4d3: 0x3af7, 0x4d4: 0x3166, 0x4d5: 0x3477, 0x4d6: 0x316b, 0x4d7: 0x347c, + 0x4d8: 0x3175, 0x4d9: 0x3486, 0x4da: 0x4708, 0x4db: 0x4799, 0x4dc: 0x39ae, 0x4dd: 0x3b3d, + 0x4de: 0x318e, 0x4df: 0x349f, 0x4e0: 0x3198, 0x4e1: 0x34a9, 0x4e2: 0x4717, 0x4e3: 0x47a8, + 0x4e4: 0x39b5, 0x4e5: 0x3b44, 0x4e6: 0x39bc, 0x4e7: 0x3b4b, 0x4e8: 0x39c3, 0x4e9: 0x3b52, + 0x4ea: 0x31a7, 0x4eb: 0x34b8, 0x4ec: 0x31b1, 0x4ed: 0x34c7, 0x4ee: 0x31c5, 0x4ef: 0x34db, + 0x4f0: 0x31c0, 0x4f1: 0x34d6, 0x4f2: 0x3201, 0x4f3: 0x3517, 0x4f4: 0x3210, 0x4f5: 0x3526, + 0x4f6: 0x320b, 0x4f7: 0x3521, 0x4f8: 0x39ca, 0x4f9: 0x3b59, 0x4fa: 0x39d1, 0x4fb: 0x3b60, + 0x4fc: 0x3215, 0x4fd: 0x352b, 0x4fe: 0x321a, 0x4ff: 0x3530, + // Block 0x14, offset 0x500 + 0x500: 0x321f, 0x501: 0x3535, 0x502: 0x3224, 0x503: 0x353a, 0x504: 0x3233, 0x505: 0x3549, + 0x506: 0x322e, 0x507: 0x3544, 0x508: 0x3238, 0x509: 0x3553, 0x50a: 0x323d, 0x50b: 0x3558, + 0x50c: 0x3242, 0x50d: 0x355d, 0x50e: 0x3260, 0x50f: 0x357b, 0x510: 0x3279, 0x511: 0x3599, + 0x512: 0x3288, 0x513: 0x35a8, 0x514: 0x328d, 0x515: 0x35ad, 0x516: 0x3391, 0x517: 0x34bd, + 0x518: 0x354e, 0x519: 0x358a, 0x51b: 0x35e8, + 0x520: 0x46b8, 0x521: 0x4749, 0x522: 0x2f9a, 0x523: 0x32a6, + 0x524: 0x388f, 0x525: 0x3a1e, 0x526: 0x3888, 0x527: 0x3a17, 0x528: 0x389d, 0x529: 0x3a2c, + 0x52a: 0x3896, 0x52b: 0x3a25, 0x52c: 0x38d5, 0x52d: 0x3a64, 0x52e: 0x38ab, 0x52f: 0x3a3a, + 0x530: 0x38a4, 0x531: 0x3a33, 0x532: 0x38b9, 0x533: 0x3a48, 0x534: 0x38b2, 0x535: 0x3a41, + 0x536: 0x38dc, 0x537: 0x3a6b, 0x538: 0x46cc, 0x539: 0x475d, 0x53a: 0x3017, 0x53b: 0x3323, + 0x53c: 0x3003, 0x53d: 0x330f, 0x53e: 0x38f1, 0x53f: 0x3a80, + // Block 0x15, offset 0x540 + 0x540: 0x38ea, 0x541: 0x3a79, 0x542: 0x38ff, 0x543: 0x3a8e, 0x544: 0x38f8, 0x545: 0x3a87, + 0x546: 0x3914, 0x547: 0x3aa3, 0x548: 0x30a8, 0x549: 0x33b4, 0x54a: 0x30bc, 0x54b: 0x33c8, + 0x54c: 0x46fe, 0x54d: 0x478f, 0x54e: 0x314d, 0x54f: 0x345e, 0x550: 0x3937, 0x551: 0x3ac6, + 0x552: 0x3930, 0x553: 0x3abf, 0x554: 0x3945, 0x555: 0x3ad4, 0x556: 0x393e, 0x557: 0x3acd, + 0x558: 0x39a0, 0x559: 0x3b2f, 0x55a: 0x3984, 0x55b: 0x3b13, 0x55c: 0x397d, 0x55d: 0x3b0c, + 0x55e: 0x3992, 0x55f: 0x3b21, 0x560: 0x398b, 0x561: 0x3b1a, 0x562: 0x3999, 0x563: 0x3b28, + 0x564: 0x31fc, 0x565: 0x3512, 0x566: 0x31de, 0x567: 0x34f4, 0x568: 0x39fb, 0x569: 0x3b8a, + 0x56a: 0x39f4, 0x56b: 0x3b83, 0x56c: 0x3a09, 0x56d: 0x3b98, 0x56e: 0x3a02, 0x56f: 0x3b91, + 0x570: 0x3a10, 0x571: 0x3b9f, 0x572: 0x3247, 0x573: 0x3562, 0x574: 0x326f, 0x575: 0x358f, + 0x576: 0x326a, 0x577: 0x3585, 0x578: 0x3256, 0x579: 0x3571, + // Block 0x16, offset 0x580 + 0x580: 0x481b, 0x581: 0x4821, 0x582: 0x4935, 0x583: 0x494d, 0x584: 0x493d, 0x585: 0x4955, + 0x586: 0x4945, 0x587: 0x495d, 0x588: 0x47c1, 0x589: 0x47c7, 0x58a: 0x48a5, 0x58b: 0x48bd, + 0x58c: 0x48ad, 0x58d: 0x48c5, 0x58e: 0x48b5, 0x58f: 0x48cd, 0x590: 0x482d, 0x591: 0x4833, + 0x592: 0x3dcf, 0x593: 0x3ddf, 0x594: 0x3dd7, 0x595: 0x3de7, + 0x598: 0x47cd, 0x599: 0x47d3, 0x59a: 0x3cff, 0x59b: 0x3d0f, 0x59c: 0x3d07, 0x59d: 0x3d17, + 0x5a0: 0x4845, 0x5a1: 0x484b, 0x5a2: 0x4965, 0x5a3: 0x497d, + 0x5a4: 0x496d, 0x5a5: 0x4985, 0x5a6: 0x4975, 0x5a7: 0x498d, 0x5a8: 0x47d9, 0x5a9: 0x47df, + 0x5aa: 0x48d5, 0x5ab: 0x48ed, 0x5ac: 0x48dd, 0x5ad: 0x48f5, 0x5ae: 0x48e5, 0x5af: 0x48fd, + 0x5b0: 0x485d, 0x5b1: 0x4863, 0x5b2: 0x3e2f, 0x5b3: 0x3e47, 0x5b4: 0x3e37, 0x5b5: 0x3e4f, + 0x5b6: 0x3e3f, 0x5b7: 0x3e57, 0x5b8: 0x47e5, 0x5b9: 0x47eb, 0x5ba: 0x3d2f, 0x5bb: 0x3d47, + 0x5bc: 0x3d37, 0x5bd: 0x3d4f, 0x5be: 0x3d3f, 0x5bf: 0x3d57, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x4869, 0x5c1: 0x486f, 0x5c2: 0x3e5f, 0x5c3: 0x3e6f, 0x5c4: 0x3e67, 0x5c5: 0x3e77, + 0x5c8: 0x47f1, 0x5c9: 0x47f7, 0x5ca: 0x3d5f, 0x5cb: 0x3d6f, + 0x5cc: 0x3d67, 0x5cd: 0x3d77, 0x5d0: 0x487b, 0x5d1: 0x4881, + 0x5d2: 0x3e97, 0x5d3: 0x3eaf, 0x5d4: 0x3e9f, 0x5d5: 0x3eb7, 0x5d6: 0x3ea7, 0x5d7: 0x3ebf, + 0x5d9: 0x47fd, 0x5db: 0x3d7f, 0x5dd: 0x3d87, + 0x5df: 0x3d8f, 0x5e0: 0x4893, 0x5e1: 0x4899, 0x5e2: 0x4995, 0x5e3: 0x49ad, + 0x5e4: 0x499d, 0x5e5: 0x49b5, 0x5e6: 0x49a5, 0x5e7: 0x49bd, 0x5e8: 0x4803, 0x5e9: 0x4809, + 0x5ea: 0x4905, 0x5eb: 0x491d, 0x5ec: 0x490d, 0x5ed: 0x4925, 0x5ee: 0x4915, 0x5ef: 0x492d, + 0x5f0: 0x480f, 0x5f1: 0x4335, 0x5f2: 0x36a8, 0x5f3: 0x433b, 0x5f4: 0x4839, 0x5f5: 0x4341, + 0x5f6: 0x36ba, 0x5f7: 0x4347, 0x5f8: 0x36d8, 0x5f9: 0x434d, 0x5fa: 0x36f0, 0x5fb: 0x4353, + 0x5fc: 0x4887, 0x5fd: 0x4359, + // Block 0x18, offset 0x600 + 0x600: 0x3db7, 0x601: 0x3dbf, 0x602: 0x419b, 0x603: 0x41b9, 0x604: 0x41a5, 0x605: 0x41c3, + 0x606: 0x41af, 0x607: 0x41cd, 0x608: 0x3cef, 0x609: 0x3cf7, 0x60a: 0x40e7, 0x60b: 0x4105, + 0x60c: 0x40f1, 0x60d: 0x410f, 0x60e: 0x40fb, 0x60f: 0x4119, 0x610: 0x3dff, 0x611: 0x3e07, + 0x612: 0x41d7, 0x613: 0x41f5, 0x614: 0x41e1, 0x615: 0x41ff, 0x616: 0x41eb, 0x617: 0x4209, + 0x618: 0x3d1f, 0x619: 0x3d27, 0x61a: 0x4123, 0x61b: 0x4141, 0x61c: 0x412d, 0x61d: 0x414b, + 0x61e: 0x4137, 0x61f: 0x4155, 0x620: 0x3ed7, 0x621: 0x3edf, 0x622: 0x4213, 0x623: 0x4231, + 0x624: 0x421d, 0x625: 0x423b, 0x626: 0x4227, 0x627: 0x4245, 0x628: 0x3d97, 0x629: 0x3d9f, + 0x62a: 0x415f, 0x62b: 0x417d, 0x62c: 0x4169, 0x62d: 0x4187, 0x62e: 0x4173, 0x62f: 0x4191, + 0x630: 0x369c, 0x631: 0x3696, 0x632: 0x3da7, 0x633: 0x36a2, 0x634: 0x3daf, + 0x636: 0x4827, 0x637: 0x3dc7, 0x638: 0x360c, 0x639: 0x3606, 0x63a: 0x35fa, 0x63b: 0x4305, + 0x63c: 0x3612, 0x63d: 0x8100, 0x63e: 0x01d6, 0x63f: 0xa100, + // Block 0x19, offset 0x640 + 0x640: 0x8100, 0x641: 0x35be, 0x642: 0x3def, 0x643: 0x36b4, 0x644: 0x3df7, + 0x646: 0x4851, 0x647: 0x3e0f, 0x648: 0x3618, 0x649: 0x430b, 0x64a: 0x3624, 0x64b: 0x4311, + 0x64c: 0x3630, 0x64d: 0x3ba6, 0x64e: 0x3bad, 0x64f: 0x3bb4, 0x650: 0x36cc, 0x651: 0x36c6, + 0x652: 0x3e17, 0x653: 0x44fb, 0x656: 0x36d2, 0x657: 0x3e27, + 0x658: 0x3648, 0x659: 0x3642, 0x65a: 0x3636, 0x65b: 0x4317, 0x65d: 0x3bbb, + 0x65e: 0x3bc2, 0x65f: 0x3bc9, 0x660: 0x3702, 0x661: 0x36fc, 0x662: 0x3e7f, 0x663: 0x4503, + 0x664: 0x36e4, 0x665: 0x36ea, 0x666: 0x3708, 0x667: 0x3e8f, 0x668: 0x3678, 0x669: 0x3672, + 0x66a: 0x3666, 0x66b: 0x4323, 0x66c: 0x3660, 0x66d: 0x35b2, 0x66e: 0x42ff, 0x66f: 0x0081, + 0x672: 0x3ec7, 0x673: 0x370e, 0x674: 0x3ecf, + 0x676: 0x489f, 0x677: 0x3ee7, 0x678: 0x3654, 0x679: 0x431d, 0x67a: 0x3684, 0x67b: 0x432f, + 0x67c: 0x3690, 0x67d: 0x426d, 0x67e: 0xa100, + // Block 0x1a, offset 0x680 + 0x681: 0x3c1d, 0x683: 0xa000, 0x684: 0x3c24, 0x685: 0xa000, + 0x687: 0x3c2b, 0x688: 0xa000, 0x689: 0x3c32, + 0x68d: 0xa000, + 0x6a0: 0x2f7c, 0x6a1: 0xa000, 0x6a2: 0x3c40, + 0x6a4: 0xa000, 0x6a5: 0xa000, + 0x6ad: 0x3c39, 0x6ae: 0x2f77, 0x6af: 0x2f81, + 0x6b0: 0x3c47, 0x6b1: 0x3c4e, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c55, 0x6b5: 0x3c5c, + 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c63, 0x6b9: 0x3c6a, 0x6ba: 0xa000, 0x6bb: 0xa000, + 0x6bc: 0xa000, 0x6bd: 0xa000, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3c71, 0x6c1: 0x3c78, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c8d, 0x6c5: 0x3c94, + 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c9b, 0x6c9: 0x3ca2, + 0x6d1: 0xa000, + 0x6d2: 0xa000, + 0x6e2: 0xa000, + 0x6e8: 0xa000, 0x6e9: 0xa000, + 0x6eb: 0xa000, 0x6ec: 0x3cb7, 0x6ed: 0x3cbe, 0x6ee: 0x3cc5, 0x6ef: 0x3ccc, + 0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000, + // Block 0x1c, offset 0x700 + 0x706: 0xa000, 0x70b: 0xa000, + 0x70c: 0x3f1f, 0x70d: 0xa000, 0x70e: 0x3f27, 0x70f: 0xa000, 0x710: 0x3f2f, 0x711: 0xa000, + 0x712: 0x3f37, 0x713: 0xa000, 0x714: 0x3f3f, 0x715: 0xa000, 0x716: 0x3f47, 0x717: 0xa000, + 0x718: 0x3f4f, 0x719: 0xa000, 0x71a: 0x3f57, 0x71b: 0xa000, 0x71c: 0x3f5f, 0x71d: 0xa000, + 0x71e: 0x3f67, 0x71f: 0xa000, 0x720: 0x3f6f, 0x721: 0xa000, 0x722: 0x3f77, + 0x724: 0xa000, 0x725: 0x3f7f, 0x726: 0xa000, 0x727: 0x3f87, 0x728: 0xa000, 0x729: 0x3f8f, + 0x72f: 0xa000, + 0x730: 0x3f97, 0x731: 0x3f9f, 0x732: 0xa000, 0x733: 0x3fa7, 0x734: 0x3faf, 0x735: 0xa000, + 0x736: 0x3fb7, 0x737: 0x3fbf, 0x738: 0xa000, 0x739: 0x3fc7, 0x73a: 0x3fcf, 0x73b: 0xa000, + 0x73c: 0x3fd7, 0x73d: 0x3fdf, + // Block 0x1d, offset 0x740 + 0x754: 0x3f17, + 0x759: 0x9904, 0x75a: 0x9904, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, + 0x75e: 0x3fe7, + 0x766: 0xa000, + 0x76b: 0xa000, 0x76c: 0x3ff7, 0x76d: 0xa000, 0x76e: 0x3fff, 0x76f: 0xa000, + 0x770: 0x4007, 0x771: 0xa000, 0x772: 0x400f, 0x773: 0xa000, 0x774: 0x4017, 0x775: 0xa000, + 0x776: 0x401f, 0x777: 0xa000, 0x778: 0x4027, 0x779: 0xa000, 0x77a: 0x402f, 0x77b: 0xa000, + 0x77c: 0x4037, 0x77d: 0xa000, 0x77e: 0x403f, 0x77f: 0xa000, + // Block 0x1e, offset 0x780 + 0x780: 0x4047, 0x781: 0xa000, 0x782: 0x404f, 0x784: 0xa000, 0x785: 0x4057, + 0x786: 0xa000, 0x787: 0x405f, 0x788: 0xa000, 0x789: 0x4067, + 0x78f: 0xa000, 0x790: 0x406f, 0x791: 0x4077, + 0x792: 0xa000, 0x793: 0x407f, 0x794: 0x4087, 0x795: 0xa000, 0x796: 0x408f, 0x797: 0x4097, + 0x798: 0xa000, 0x799: 0x409f, 0x79a: 0x40a7, 0x79b: 0xa000, 0x79c: 0x40af, 0x79d: 0x40b7, + 0x7af: 0xa000, + 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fef, + 0x7b7: 0x40bf, 0x7b8: 0x40c7, 0x7b9: 0x40cf, 0x7ba: 0x40d7, + 0x7bd: 0xa000, 0x7be: 0x40df, + // Block 0x1f, offset 0x7c0 + 0x7c0: 0x137a, 0x7c1: 0x0cfe, 0x7c2: 0x13d6, 0x7c3: 0x13a2, 0x7c4: 0x0e5a, 0x7c5: 0x06ee, + 0x7c6: 0x08e2, 0x7c7: 0x162e, 0x7c8: 0x162e, 0x7c9: 0x0a0e, 0x7ca: 0x1462, 0x7cb: 0x0946, + 0x7cc: 0x0a0a, 0x7cd: 0x0bf2, 0x7ce: 0x0fd2, 0x7cf: 0x1162, 0x7d0: 0x129a, 0x7d1: 0x12d6, + 0x7d2: 0x130a, 0x7d3: 0x141e, 0x7d4: 0x0d76, 0x7d5: 0x0e02, 0x7d6: 0x0eae, 0x7d7: 0x0f46, + 0x7d8: 0x1262, 0x7d9: 0x144a, 0x7da: 0x1576, 0x7db: 0x0712, 0x7dc: 0x08b6, 0x7dd: 0x0d8a, + 0x7de: 0x0ed2, 0x7df: 0x1296, 0x7e0: 0x15c6, 0x7e1: 0x0ab6, 0x7e2: 0x0e7a, 0x7e3: 0x1286, + 0x7e4: 0x131a, 0x7e5: 0x0c26, 0x7e6: 0x11be, 0x7e7: 0x12e2, 0x7e8: 0x0b22, 0x7e9: 0x0d12, + 0x7ea: 0x0e1a, 0x7eb: 0x0f1e, 0x7ec: 0x142a, 0x7ed: 0x0752, 0x7ee: 0x07ea, 0x7ef: 0x0856, + 0x7f0: 0x0c8e, 0x7f1: 0x0d82, 0x7f2: 0x0ece, 0x7f3: 0x0ff2, 0x7f4: 0x117a, 0x7f5: 0x128e, + 0x7f6: 0x12a6, 0x7f7: 0x13ca, 0x7f8: 0x14f2, 0x7f9: 0x15a6, 0x7fa: 0x15c2, 0x7fb: 0x102e, + 0x7fc: 0x106e, 0x7fd: 0x1126, 0x7fe: 0x1246, 0x7ff: 0x147e, + // Block 0x20, offset 0x800 + 0x800: 0x15ce, 0x801: 0x134e, 0x802: 0x09ca, 0x803: 0x0b3e, 0x804: 0x10de, 0x805: 0x119e, + 0x806: 0x0f02, 0x807: 0x1036, 0x808: 0x139a, 0x809: 0x14ea, 0x80a: 0x09c6, 0x80b: 0x0a92, + 0x80c: 0x0d7a, 0x80d: 0x0e2e, 0x80e: 0x0e62, 0x80f: 0x1116, 0x810: 0x113e, 0x811: 0x14aa, + 0x812: 0x0852, 0x813: 0x11aa, 0x814: 0x07f6, 0x815: 0x07f2, 0x816: 0x109a, 0x817: 0x112a, + 0x818: 0x125e, 0x819: 0x14b2, 0x81a: 0x136a, 0x81b: 0x0c2a, 0x81c: 0x0d76, 0x81d: 0x135a, + 0x81e: 0x06fa, 0x81f: 0x0a66, 0x820: 0x0b96, 0x821: 0x0f32, 0x822: 0x0fb2, 0x823: 0x0876, + 0x824: 0x103e, 0x825: 0x0762, 0x826: 0x0b7a, 0x827: 0x06da, 0x828: 0x0dee, 0x829: 0x0ca6, + 0x82a: 0x1112, 0x82b: 0x08ca, 0x82c: 0x09b6, 0x82d: 0x0ffe, 0x82e: 0x1266, 0x82f: 0x133e, + 0x830: 0x0dba, 0x831: 0x13fa, 0x832: 0x0de6, 0x833: 0x0c3a, 0x834: 0x121e, 0x835: 0x0c5a, + 0x836: 0x0fae, 0x837: 0x072e, 0x838: 0x07aa, 0x839: 0x07ee, 0x83a: 0x0d56, 0x83b: 0x10fe, + 0x83c: 0x11f6, 0x83d: 0x134a, 0x83e: 0x145e, 0x83f: 0x085e, + // Block 0x21, offset 0x840 + 0x840: 0x0912, 0x841: 0x0a1a, 0x842: 0x0b32, 0x843: 0x0cc2, 0x844: 0x0e7e, 0x845: 0x1042, + 0x846: 0x149a, 0x847: 0x157e, 0x848: 0x15d2, 0x849: 0x15ea, 0x84a: 0x083a, 0x84b: 0x0cf6, + 0x84c: 0x0da6, 0x84d: 0x13ee, 0x84e: 0x0afe, 0x84f: 0x0bda, 0x850: 0x0bf6, 0x851: 0x0c86, + 0x852: 0x0e6e, 0x853: 0x0eba, 0x854: 0x0f6a, 0x855: 0x108e, 0x856: 0x1132, 0x857: 0x1196, + 0x858: 0x13de, 0x859: 0x126e, 0x85a: 0x1406, 0x85b: 0x1482, 0x85c: 0x0812, 0x85d: 0x083e, + 0x85e: 0x0926, 0x85f: 0x0eaa, 0x860: 0x12f6, 0x861: 0x133e, 0x862: 0x0b1e, 0x863: 0x0b8e, + 0x864: 0x0c52, 0x865: 0x0db2, 0x866: 0x10da, 0x867: 0x0f26, 0x868: 0x073e, 0x869: 0x0982, + 0x86a: 0x0a66, 0x86b: 0x0aca, 0x86c: 0x0b9a, 0x86d: 0x0f42, 0x86e: 0x0f5e, 0x86f: 0x116e, + 0x870: 0x118e, 0x871: 0x1466, 0x872: 0x14e6, 0x873: 0x14f6, 0x874: 0x1532, 0x875: 0x0756, + 0x876: 0x1082, 0x877: 0x1452, 0x878: 0x14ce, 0x879: 0x0bb2, 0x87a: 0x071a, 0x87b: 0x077a, + 0x87c: 0x0a6a, 0x87d: 0x0a8a, 0x87e: 0x0cb2, 0x87f: 0x0d76, + // Block 0x22, offset 0x880 + 0x880: 0x0ec6, 0x881: 0x0fce, 0x882: 0x127a, 0x883: 0x141a, 0x884: 0x1626, 0x885: 0x0ce6, + 0x886: 0x14a6, 0x887: 0x0836, 0x888: 0x0d32, 0x889: 0x0d3e, 0x88a: 0x0e12, 0x88b: 0x0e4a, + 0x88c: 0x0f4e, 0x88d: 0x0faa, 0x88e: 0x102a, 0x88f: 0x110e, 0x890: 0x153e, 0x891: 0x07b2, + 0x892: 0x0c06, 0x893: 0x14b6, 0x894: 0x076a, 0x895: 0x0aae, 0x896: 0x0e32, 0x897: 0x13e2, + 0x898: 0x0b6a, 0x899: 0x0bba, 0x89a: 0x0d46, 0x89b: 0x0f32, 0x89c: 0x14be, 0x89d: 0x081a, + 0x89e: 0x0902, 0x89f: 0x0a9a, 0x8a0: 0x0cd6, 0x8a1: 0x0d22, 0x8a2: 0x0d62, 0x8a3: 0x0df6, + 0x8a4: 0x0f4a, 0x8a5: 0x0fbe, 0x8a6: 0x115a, 0x8a7: 0x12fa, 0x8a8: 0x1306, 0x8a9: 0x145a, + 0x8aa: 0x14da, 0x8ab: 0x0886, 0x8ac: 0x0e4e, 0x8ad: 0x0906, 0x8ae: 0x0eca, 0x8af: 0x0f6e, + 0x8b0: 0x128a, 0x8b1: 0x14c2, 0x8b2: 0x15ae, 0x8b3: 0x15d6, 0x8b4: 0x0d3a, 0x8b5: 0x0e2a, + 0x8b6: 0x11c6, 0x8b7: 0x10ba, 0x8b8: 0x10c6, 0x8b9: 0x10ea, 0x8ba: 0x0f1a, 0x8bb: 0x0ea2, + 0x8bc: 0x1366, 0x8bd: 0x0736, 0x8be: 0x122e, 0x8bf: 0x081e, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x080e, 0x8c1: 0x0b0e, 0x8c2: 0x0c2e, 0x8c3: 0x10f6, 0x8c4: 0x0a56, 0x8c5: 0x0e06, + 0x8c6: 0x0cf2, 0x8c7: 0x13ea, 0x8c8: 0x12ea, 0x8c9: 0x14ae, 0x8ca: 0x1326, 0x8cb: 0x0b2a, + 0x8cc: 0x078a, 0x8cd: 0x095e, 0x8d0: 0x09b2, + 0x8d2: 0x0ce2, 0x8d5: 0x07fa, 0x8d6: 0x0f22, 0x8d7: 0x0fe6, + 0x8d8: 0x104a, 0x8d9: 0x1066, 0x8da: 0x106a, 0x8db: 0x107e, 0x8dc: 0x14fe, 0x8dd: 0x10ee, + 0x8de: 0x1172, 0x8e0: 0x1292, 0x8e2: 0x1356, + 0x8e5: 0x140a, 0x8e6: 0x1436, + 0x8ea: 0x1552, 0x8eb: 0x1556, 0x8ec: 0x155a, 0x8ed: 0x15be, 0x8ee: 0x142e, 0x8ef: 0x14ca, + 0x8f0: 0x075a, 0x8f1: 0x077e, 0x8f2: 0x0792, 0x8f3: 0x084e, 0x8f4: 0x085a, 0x8f5: 0x089a, + 0x8f6: 0x094e, 0x8f7: 0x096a, 0x8f8: 0x0972, 0x8f9: 0x09ae, 0x8fa: 0x09ba, 0x8fb: 0x0a96, + 0x8fc: 0x0a9e, 0x8fd: 0x0ba6, 0x8fe: 0x0bce, 0x8ff: 0x0bd6, + // Block 0x24, offset 0x900 + 0x900: 0x0bee, 0x901: 0x0c9a, 0x902: 0x0cca, 0x903: 0x0cea, 0x904: 0x0d5a, 0x905: 0x0e1e, + 0x906: 0x0e3a, 0x907: 0x0e6a, 0x908: 0x0ebe, 0x909: 0x0ede, 0x90a: 0x0f52, 0x90b: 0x1032, + 0x90c: 0x104e, 0x90d: 0x1056, 0x90e: 0x1052, 0x90f: 0x105a, 0x910: 0x105e, 0x911: 0x1062, + 0x912: 0x1076, 0x913: 0x107a, 0x914: 0x109e, 0x915: 0x10b2, 0x916: 0x10ce, 0x917: 0x1132, + 0x918: 0x113a, 0x919: 0x1142, 0x91a: 0x1156, 0x91b: 0x117e, 0x91c: 0x11ce, 0x91d: 0x1202, + 0x91e: 0x1202, 0x91f: 0x126a, 0x920: 0x1312, 0x921: 0x132a, 0x922: 0x135e, 0x923: 0x1362, + 0x924: 0x13a6, 0x925: 0x13aa, 0x926: 0x1402, 0x927: 0x140a, 0x928: 0x14de, 0x929: 0x1522, + 0x92a: 0x153a, 0x92b: 0x0b9e, 0x92c: 0x1721, 0x92d: 0x11e6, + 0x930: 0x06e2, 0x931: 0x07e6, 0x932: 0x07a6, 0x933: 0x074e, 0x934: 0x078e, 0x935: 0x07ba, + 0x936: 0x084a, 0x937: 0x0866, 0x938: 0x094e, 0x939: 0x093a, 0x93a: 0x094a, 0x93b: 0x0966, + 0x93c: 0x09b2, 0x93d: 0x09c2, 0x93e: 0x0a06, 0x93f: 0x0a12, + // Block 0x25, offset 0x940 + 0x940: 0x0a2e, 0x941: 0x0a3e, 0x942: 0x0b26, 0x943: 0x0b2e, 0x944: 0x0b5e, 0x945: 0x0b7e, + 0x946: 0x0bae, 0x947: 0x0bc6, 0x948: 0x0bb6, 0x949: 0x0bd6, 0x94a: 0x0bca, 0x94b: 0x0bee, + 0x94c: 0x0c0a, 0x94d: 0x0c62, 0x94e: 0x0c6e, 0x94f: 0x0c76, 0x950: 0x0c9e, 0x951: 0x0ce2, + 0x952: 0x0d12, 0x953: 0x0d16, 0x954: 0x0d2a, 0x955: 0x0daa, 0x956: 0x0dba, 0x957: 0x0e12, + 0x958: 0x0e5e, 0x959: 0x0e56, 0x95a: 0x0e6a, 0x95b: 0x0e86, 0x95c: 0x0ebe, 0x95d: 0x1016, + 0x95e: 0x0ee2, 0x95f: 0x0f16, 0x960: 0x0f22, 0x961: 0x0f62, 0x962: 0x0f7e, 0x963: 0x0fa2, + 0x964: 0x0fc6, 0x965: 0x0fca, 0x966: 0x0fe6, 0x967: 0x0fea, 0x968: 0x0ffa, 0x969: 0x100e, + 0x96a: 0x100a, 0x96b: 0x103a, 0x96c: 0x10b6, 0x96d: 0x10ce, 0x96e: 0x10e6, 0x96f: 0x111e, + 0x970: 0x1132, 0x971: 0x114e, 0x972: 0x117e, 0x973: 0x1232, 0x974: 0x125a, 0x975: 0x12ce, + 0x976: 0x1316, 0x977: 0x1322, 0x978: 0x132a, 0x979: 0x1342, 0x97a: 0x1356, 0x97b: 0x1346, + 0x97c: 0x135e, 0x97d: 0x135a, 0x97e: 0x1352, 0x97f: 0x1362, + // Block 0x26, offset 0x980 + 0x980: 0x136e, 0x981: 0x13aa, 0x982: 0x13e6, 0x983: 0x1416, 0x984: 0x144e, 0x985: 0x146e, + 0x986: 0x14ba, 0x987: 0x14de, 0x988: 0x14fe, 0x989: 0x1512, 0x98a: 0x1522, 0x98b: 0x152e, + 0x98c: 0x153a, 0x98d: 0x158e, 0x98e: 0x162e, 0x98f: 0x16b8, 0x990: 0x16b3, 0x991: 0x16e5, + 0x992: 0x060a, 0x993: 0x0632, 0x994: 0x0636, 0x995: 0x1767, 0x996: 0x1794, 0x997: 0x180c, + 0x998: 0x161a, 0x999: 0x162a, + // Block 0x27, offset 0x9c0 + 0x9c0: 0x06fe, 0x9c1: 0x06f6, 0x9c2: 0x0706, 0x9c3: 0x164a, 0x9c4: 0x074a, 0x9c5: 0x075a, + 0x9c6: 0x075e, 0x9c7: 0x0766, 0x9c8: 0x076e, 0x9c9: 0x0772, 0x9ca: 0x077e, 0x9cb: 0x0776, + 0x9cc: 0x05b6, 0x9cd: 0x165e, 0x9ce: 0x0792, 0x9cf: 0x0796, 0x9d0: 0x079a, 0x9d1: 0x07b6, + 0x9d2: 0x164f, 0x9d3: 0x05ba, 0x9d4: 0x07a2, 0x9d5: 0x07c2, 0x9d6: 0x1659, 0x9d7: 0x07d2, + 0x9d8: 0x07da, 0x9d9: 0x073a, 0x9da: 0x07e2, 0x9db: 0x07e6, 0x9dc: 0x1834, 0x9dd: 0x0802, + 0x9de: 0x080a, 0x9df: 0x05c2, 0x9e0: 0x0822, 0x9e1: 0x0826, 0x9e2: 0x082e, 0x9e3: 0x0832, + 0x9e4: 0x05c6, 0x9e5: 0x084a, 0x9e6: 0x084e, 0x9e7: 0x085a, 0x9e8: 0x0866, 0x9e9: 0x086a, + 0x9ea: 0x086e, 0x9eb: 0x0876, 0x9ec: 0x0896, 0x9ed: 0x089a, 0x9ee: 0x08a2, 0x9ef: 0x08b2, + 0x9f0: 0x08ba, 0x9f1: 0x08be, 0x9f2: 0x08be, 0x9f3: 0x08be, 0x9f4: 0x166d, 0x9f5: 0x0e96, + 0x9f6: 0x08d2, 0x9f7: 0x08da, 0x9f8: 0x1672, 0x9f9: 0x08e6, 0x9fa: 0x08ee, 0x9fb: 0x08f6, + 0x9fc: 0x091e, 0x9fd: 0x090a, 0x9fe: 0x0916, 0x9ff: 0x091a, + // Block 0x28, offset 0xa00 + 0xa00: 0x0922, 0xa01: 0x092a, 0xa02: 0x092e, 0xa03: 0x0936, 0xa04: 0x093e, 0xa05: 0x0942, + 0xa06: 0x0942, 0xa07: 0x094a, 0xa08: 0x0952, 0xa09: 0x0956, 0xa0a: 0x0962, 0xa0b: 0x0986, + 0xa0c: 0x096a, 0xa0d: 0x098a, 0xa0e: 0x096e, 0xa0f: 0x0976, 0xa10: 0x080e, 0xa11: 0x09d2, + 0xa12: 0x099a, 0xa13: 0x099e, 0xa14: 0x09a2, 0xa15: 0x0996, 0xa16: 0x09aa, 0xa17: 0x09a6, + 0xa18: 0x09be, 0xa19: 0x1677, 0xa1a: 0x09da, 0xa1b: 0x09de, 0xa1c: 0x09e6, 0xa1d: 0x09f2, + 0xa1e: 0x09fa, 0xa1f: 0x0a16, 0xa20: 0x167c, 0xa21: 0x1681, 0xa22: 0x0a22, 0xa23: 0x0a26, + 0xa24: 0x0a2a, 0xa25: 0x0a1e, 0xa26: 0x0a32, 0xa27: 0x05ca, 0xa28: 0x05ce, 0xa29: 0x0a3a, + 0xa2a: 0x0a42, 0xa2b: 0x0a42, 0xa2c: 0x1686, 0xa2d: 0x0a5e, 0xa2e: 0x0a62, 0xa2f: 0x0a66, + 0xa30: 0x0a6e, 0xa31: 0x168b, 0xa32: 0x0a76, 0xa33: 0x0a7a, 0xa34: 0x0b52, 0xa35: 0x0a82, + 0xa36: 0x05d2, 0xa37: 0x0a8e, 0xa38: 0x0a9e, 0xa39: 0x0aaa, 0xa3a: 0x0aa6, 0xa3b: 0x1695, + 0xa3c: 0x0ab2, 0xa3d: 0x169a, 0xa3e: 0x0abe, 0xa3f: 0x0aba, + // Block 0x29, offset 0xa40 + 0xa40: 0x0ac2, 0xa41: 0x0ad2, 0xa42: 0x0ad6, 0xa43: 0x05d6, 0xa44: 0x0ae6, 0xa45: 0x0aee, + 0xa46: 0x0af2, 0xa47: 0x0af6, 0xa48: 0x05da, 0xa49: 0x169f, 0xa4a: 0x05de, 0xa4b: 0x0b12, + 0xa4c: 0x0b16, 0xa4d: 0x0b1a, 0xa4e: 0x0b22, 0xa4f: 0x1866, 0xa50: 0x0b3a, 0xa51: 0x16a9, + 0xa52: 0x16a9, 0xa53: 0x11da, 0xa54: 0x0b4a, 0xa55: 0x0b4a, 0xa56: 0x05e2, 0xa57: 0x16cc, + 0xa58: 0x179e, 0xa59: 0x0b5a, 0xa5a: 0x0b62, 0xa5b: 0x05e6, 0xa5c: 0x0b76, 0xa5d: 0x0b86, + 0xa5e: 0x0b8a, 0xa5f: 0x0b92, 0xa60: 0x0ba2, 0xa61: 0x05ee, 0xa62: 0x05ea, 0xa63: 0x0ba6, + 0xa64: 0x16ae, 0xa65: 0x0baa, 0xa66: 0x0bbe, 0xa67: 0x0bc2, 0xa68: 0x0bc6, 0xa69: 0x0bc2, + 0xa6a: 0x0bd2, 0xa6b: 0x0bd6, 0xa6c: 0x0be6, 0xa6d: 0x0bde, 0xa6e: 0x0be2, 0xa6f: 0x0bea, + 0xa70: 0x0bee, 0xa71: 0x0bf2, 0xa72: 0x0bfe, 0xa73: 0x0c02, 0xa74: 0x0c1a, 0xa75: 0x0c22, + 0xa76: 0x0c32, 0xa77: 0x0c46, 0xa78: 0x16bd, 0xa79: 0x0c42, 0xa7a: 0x0c36, 0xa7b: 0x0c4e, + 0xa7c: 0x0c56, 0xa7d: 0x0c6a, 0xa7e: 0x16c2, 0xa7f: 0x0c72, + // Block 0x2a, offset 0xa80 + 0xa80: 0x0c66, 0xa81: 0x0c5e, 0xa82: 0x05f2, 0xa83: 0x0c7a, 0xa84: 0x0c82, 0xa85: 0x0c8a, + 0xa86: 0x0c7e, 0xa87: 0x05f6, 0xa88: 0x0c9a, 0xa89: 0x0ca2, 0xa8a: 0x16c7, 0xa8b: 0x0cce, + 0xa8c: 0x0d02, 0xa8d: 0x0cde, 0xa8e: 0x0602, 0xa8f: 0x0cea, 0xa90: 0x05fe, 0xa91: 0x05fa, + 0xa92: 0x07c6, 0xa93: 0x07ca, 0xa94: 0x0d06, 0xa95: 0x0cee, 0xa96: 0x11ae, 0xa97: 0x0666, + 0xa98: 0x0d12, 0xa99: 0x0d16, 0xa9a: 0x0d1a, 0xa9b: 0x0d2e, 0xa9c: 0x0d26, 0xa9d: 0x16e0, + 0xa9e: 0x0606, 0xa9f: 0x0d42, 0xaa0: 0x0d36, 0xaa1: 0x0d52, 0xaa2: 0x0d5a, 0xaa3: 0x16ea, + 0xaa4: 0x0d5e, 0xaa5: 0x0d4a, 0xaa6: 0x0d66, 0xaa7: 0x060a, 0xaa8: 0x0d6a, 0xaa9: 0x0d6e, + 0xaaa: 0x0d72, 0xaab: 0x0d7e, 0xaac: 0x16ef, 0xaad: 0x0d86, 0xaae: 0x060e, 0xaaf: 0x0d92, + 0xab0: 0x16f4, 0xab1: 0x0d96, 0xab2: 0x0612, 0xab3: 0x0da2, 0xab4: 0x0dae, 0xab5: 0x0dba, + 0xab6: 0x0dbe, 0xab7: 0x16f9, 0xab8: 0x1690, 0xab9: 0x16fe, 0xaba: 0x0dde, 0xabb: 0x1703, + 0xabc: 0x0dea, 0xabd: 0x0df2, 0xabe: 0x0de2, 0xabf: 0x0dfe, + // Block 0x2b, offset 0xac0 + 0xac0: 0x0e0e, 0xac1: 0x0e1e, 0xac2: 0x0e12, 0xac3: 0x0e16, 0xac4: 0x0e22, 0xac5: 0x0e26, + 0xac6: 0x1708, 0xac7: 0x0e0a, 0xac8: 0x0e3e, 0xac9: 0x0e42, 0xaca: 0x0616, 0xacb: 0x0e56, + 0xacc: 0x0e52, 0xacd: 0x170d, 0xace: 0x0e36, 0xacf: 0x0e72, 0xad0: 0x1712, 0xad1: 0x1717, + 0xad2: 0x0e76, 0xad3: 0x0e8a, 0xad4: 0x0e86, 0xad5: 0x0e82, 0xad6: 0x061a, 0xad7: 0x0e8e, + 0xad8: 0x0e9e, 0xad9: 0x0e9a, 0xada: 0x0ea6, 0xadb: 0x1654, 0xadc: 0x0eb6, 0xadd: 0x171c, + 0xade: 0x0ec2, 0xadf: 0x1726, 0xae0: 0x0ed6, 0xae1: 0x0ee2, 0xae2: 0x0ef6, 0xae3: 0x172b, + 0xae4: 0x0f0a, 0xae5: 0x0f0e, 0xae6: 0x1730, 0xae7: 0x1735, 0xae8: 0x0f2a, 0xae9: 0x0f3a, + 0xaea: 0x061e, 0xaeb: 0x0f3e, 0xaec: 0x0622, 0xaed: 0x0622, 0xaee: 0x0f56, 0xaef: 0x0f5a, + 0xaf0: 0x0f62, 0xaf1: 0x0f66, 0xaf2: 0x0f72, 0xaf3: 0x0626, 0xaf4: 0x0f8a, 0xaf5: 0x173a, + 0xaf6: 0x0fa6, 0xaf7: 0x173f, 0xaf8: 0x0fb2, 0xaf9: 0x16a4, 0xafa: 0x0fc2, 0xafb: 0x1744, + 0xafc: 0x1749, 0xafd: 0x174e, 0xafe: 0x062a, 0xaff: 0x062e, + // Block 0x2c, offset 0xb00 + 0xb00: 0x0ffa, 0xb01: 0x1758, 0xb02: 0x1753, 0xb03: 0x175d, 0xb04: 0x1762, 0xb05: 0x1002, + 0xb06: 0x1006, 0xb07: 0x1006, 0xb08: 0x100e, 0xb09: 0x0636, 0xb0a: 0x1012, 0xb0b: 0x063a, + 0xb0c: 0x063e, 0xb0d: 0x176c, 0xb0e: 0x1026, 0xb0f: 0x102e, 0xb10: 0x103a, 0xb11: 0x0642, + 0xb12: 0x1771, 0xb13: 0x105e, 0xb14: 0x1776, 0xb15: 0x177b, 0xb16: 0x107e, 0xb17: 0x1096, + 0xb18: 0x0646, 0xb19: 0x109e, 0xb1a: 0x10a2, 0xb1b: 0x10a6, 0xb1c: 0x1780, 0xb1d: 0x1785, + 0xb1e: 0x1785, 0xb1f: 0x10be, 0xb20: 0x064a, 0xb21: 0x178a, 0xb22: 0x10d2, 0xb23: 0x10d6, + 0xb24: 0x064e, 0xb25: 0x178f, 0xb26: 0x10f2, 0xb27: 0x0652, 0xb28: 0x1102, 0xb29: 0x10fa, + 0xb2a: 0x110a, 0xb2b: 0x1799, 0xb2c: 0x1122, 0xb2d: 0x0656, 0xb2e: 0x112e, 0xb2f: 0x1136, + 0xb30: 0x1146, 0xb31: 0x065a, 0xb32: 0x17a3, 0xb33: 0x17a8, 0xb34: 0x065e, 0xb35: 0x17ad, + 0xb36: 0x115e, 0xb37: 0x17b2, 0xb38: 0x116a, 0xb39: 0x1176, 0xb3a: 0x117e, 0xb3b: 0x17b7, + 0xb3c: 0x17bc, 0xb3d: 0x1192, 0xb3e: 0x17c1, 0xb3f: 0x119a, + // Block 0x2d, offset 0xb40 + 0xb40: 0x16d1, 0xb41: 0x0662, 0xb42: 0x11b2, 0xb43: 0x11b6, 0xb44: 0x066a, 0xb45: 0x11ba, + 0xb46: 0x0a36, 0xb47: 0x17c6, 0xb48: 0x17cb, 0xb49: 0x16d6, 0xb4a: 0x16db, 0xb4b: 0x11da, + 0xb4c: 0x11de, 0xb4d: 0x13f6, 0xb4e: 0x066e, 0xb4f: 0x120a, 0xb50: 0x1206, 0xb51: 0x120e, + 0xb52: 0x0842, 0xb53: 0x1212, 0xb54: 0x1216, 0xb55: 0x121a, 0xb56: 0x1222, 0xb57: 0x17d0, + 0xb58: 0x121e, 0xb59: 0x1226, 0xb5a: 0x123a, 0xb5b: 0x123e, 0xb5c: 0x122a, 0xb5d: 0x1242, + 0xb5e: 0x1256, 0xb5f: 0x126a, 0xb60: 0x1236, 0xb61: 0x124a, 0xb62: 0x124e, 0xb63: 0x1252, + 0xb64: 0x17d5, 0xb65: 0x17df, 0xb66: 0x17da, 0xb67: 0x0672, 0xb68: 0x1272, 0xb69: 0x1276, + 0xb6a: 0x127e, 0xb6b: 0x17f3, 0xb6c: 0x1282, 0xb6d: 0x17e4, 0xb6e: 0x0676, 0xb6f: 0x067a, + 0xb70: 0x17e9, 0xb71: 0x17ee, 0xb72: 0x067e, 0xb73: 0x12a2, 0xb74: 0x12a6, 0xb75: 0x12aa, + 0xb76: 0x12ae, 0xb77: 0x12ba, 0xb78: 0x12b6, 0xb79: 0x12c2, 0xb7a: 0x12be, 0xb7b: 0x12ce, + 0xb7c: 0x12c6, 0xb7d: 0x12ca, 0xb7e: 0x12d2, 0xb7f: 0x0682, + // Block 0x2e, offset 0xb80 + 0xb80: 0x12da, 0xb81: 0x12de, 0xb82: 0x0686, 0xb83: 0x12ee, 0xb84: 0x12f2, 0xb85: 0x17f8, + 0xb86: 0x12fe, 0xb87: 0x1302, 0xb88: 0x068a, 0xb89: 0x130e, 0xb8a: 0x05be, 0xb8b: 0x17fd, + 0xb8c: 0x1802, 0xb8d: 0x068e, 0xb8e: 0x0692, 0xb8f: 0x133a, 0xb90: 0x1352, 0xb91: 0x136e, + 0xb92: 0x137e, 0xb93: 0x1807, 0xb94: 0x1392, 0xb95: 0x1396, 0xb96: 0x13ae, 0xb97: 0x13ba, + 0xb98: 0x1811, 0xb99: 0x1663, 0xb9a: 0x13c6, 0xb9b: 0x13c2, 0xb9c: 0x13ce, 0xb9d: 0x1668, + 0xb9e: 0x13da, 0xb9f: 0x13e6, 0xba0: 0x1816, 0xba1: 0x181b, 0xba2: 0x1426, 0xba3: 0x1432, + 0xba4: 0x143a, 0xba5: 0x1820, 0xba6: 0x143e, 0xba7: 0x146a, 0xba8: 0x1476, 0xba9: 0x147a, + 0xbaa: 0x1472, 0xbab: 0x1486, 0xbac: 0x148a, 0xbad: 0x1825, 0xbae: 0x1496, 0xbaf: 0x0696, + 0xbb0: 0x149e, 0xbb1: 0x182a, 0xbb2: 0x069a, 0xbb3: 0x14d6, 0xbb4: 0x0ac6, 0xbb5: 0x14ee, + 0xbb6: 0x182f, 0xbb7: 0x1839, 0xbb8: 0x069e, 0xbb9: 0x06a2, 0xbba: 0x1516, 0xbbb: 0x183e, + 0xbbc: 0x06a6, 0xbbd: 0x1843, 0xbbe: 0x152e, 0xbbf: 0x152e, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x1536, 0xbc1: 0x1848, 0xbc2: 0x154e, 0xbc3: 0x06aa, 0xbc4: 0x155e, 0xbc5: 0x156a, + 0xbc6: 0x1572, 0xbc7: 0x157a, 0xbc8: 0x06ae, 0xbc9: 0x184d, 0xbca: 0x158e, 0xbcb: 0x15aa, + 0xbcc: 0x15b6, 0xbcd: 0x06b2, 0xbce: 0x06b6, 0xbcf: 0x15ba, 0xbd0: 0x1852, 0xbd1: 0x06ba, + 0xbd2: 0x1857, 0xbd3: 0x185c, 0xbd4: 0x1861, 0xbd5: 0x15de, 0xbd6: 0x06be, 0xbd7: 0x15f2, + 0xbd8: 0x15fa, 0xbd9: 0x15fe, 0xbda: 0x1606, 0xbdb: 0x160e, 0xbdc: 0x1616, 0xbdd: 0x186b, +} + +// nfcIndex: 22 blocks, 1408 entries, 1408 bytes +// Block 0 is the zero block. +var nfcIndex = [1408]uint8{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32, + 0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35, + 0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, + 0xf0: 0x13, + // Block 0x4, offset 0x100 + 0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40, + 0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47, + 0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d, + 0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55, + // Block 0x5, offset 0x140 + 0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b, + 0x14d: 0x5c, + 0x15c: 0x5d, 0x15f: 0x5e, + 0x162: 0x5f, 0x164: 0x60, + 0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16b: 0x64, 0x16c: 0x0e, 0x16d: 0x65, 0x16e: 0x66, 0x16f: 0x67, + 0x170: 0x68, 0x173: 0x69, 0x177: 0x0f, + 0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17, + // Block 0x6, offset 0x180 + 0x180: 0x6a, 0x183: 0x6b, 0x184: 0x6c, 0x186: 0x6d, 0x187: 0x6e, + 0x188: 0x6f, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x70, 0x18c: 0x71, + 0x1ab: 0x72, + 0x1b3: 0x73, 0x1b5: 0x74, 0x1b7: 0x75, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x76, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x77, 0x1c5: 0x78, + 0x1c9: 0x79, 0x1cc: 0x7a, 0x1cd: 0x7b, + // Block 0x8, offset 0x200 + 0x219: 0x7c, 0x21a: 0x7d, 0x21b: 0x7e, + 0x220: 0x7f, 0x223: 0x80, 0x224: 0x81, 0x225: 0x82, 0x226: 0x83, 0x227: 0x84, + 0x22a: 0x85, 0x22b: 0x86, 0x22f: 0x87, + 0x230: 0x88, 0x231: 0x89, 0x232: 0x8a, 0x233: 0x8b, 0x234: 0x8c, 0x235: 0x8d, 0x236: 0x8e, 0x237: 0x88, + 0x238: 0x89, 0x239: 0x8a, 0x23a: 0x8b, 0x23b: 0x8c, 0x23c: 0x8d, 0x23d: 0x8e, 0x23e: 0x88, 0x23f: 0x89, + // Block 0x9, offset 0x240 + 0x240: 0x8a, 0x241: 0x8b, 0x242: 0x8c, 0x243: 0x8d, 0x244: 0x8e, 0x245: 0x88, 0x246: 0x89, 0x247: 0x8a, + 0x248: 0x8b, 0x249: 0x8c, 0x24a: 0x8d, 0x24b: 0x8e, 0x24c: 0x88, 0x24d: 0x89, 0x24e: 0x8a, 0x24f: 0x8b, + 0x250: 0x8c, 0x251: 0x8d, 0x252: 0x8e, 0x253: 0x88, 0x254: 0x89, 0x255: 0x8a, 0x256: 0x8b, 0x257: 0x8c, + 0x258: 0x8d, 0x259: 0x8e, 0x25a: 0x88, 0x25b: 0x89, 0x25c: 0x8a, 0x25d: 0x8b, 0x25e: 0x8c, 0x25f: 0x8d, + 0x260: 0x8e, 0x261: 0x88, 0x262: 0x89, 0x263: 0x8a, 0x264: 0x8b, 0x265: 0x8c, 0x266: 0x8d, 0x267: 0x8e, + 0x268: 0x88, 0x269: 0x89, 0x26a: 0x8a, 0x26b: 0x8b, 0x26c: 0x8c, 0x26d: 0x8d, 0x26e: 0x8e, 0x26f: 0x88, + 0x270: 0x89, 0x271: 0x8a, 0x272: 0x8b, 0x273: 0x8c, 0x274: 0x8d, 0x275: 0x8e, 0x276: 0x88, 0x277: 0x89, + 0x278: 0x8a, 0x279: 0x8b, 0x27a: 0x8c, 0x27b: 0x8d, 0x27c: 0x8e, 0x27d: 0x88, 0x27e: 0x89, 0x27f: 0x8a, + // Block 0xa, offset 0x280 + 0x280: 0x8b, 0x281: 0x8c, 0x282: 0x8d, 0x283: 0x8e, 0x284: 0x88, 0x285: 0x89, 0x286: 0x8a, 0x287: 0x8b, + 0x288: 0x8c, 0x289: 0x8d, 0x28a: 0x8e, 0x28b: 0x88, 0x28c: 0x89, 0x28d: 0x8a, 0x28e: 0x8b, 0x28f: 0x8c, + 0x290: 0x8d, 0x291: 0x8e, 0x292: 0x88, 0x293: 0x89, 0x294: 0x8a, 0x295: 0x8b, 0x296: 0x8c, 0x297: 0x8d, + 0x298: 0x8e, 0x299: 0x88, 0x29a: 0x89, 0x29b: 0x8a, 0x29c: 0x8b, 0x29d: 0x8c, 0x29e: 0x8d, 0x29f: 0x8e, + 0x2a0: 0x88, 0x2a1: 0x89, 0x2a2: 0x8a, 0x2a3: 0x8b, 0x2a4: 0x8c, 0x2a5: 0x8d, 0x2a6: 0x8e, 0x2a7: 0x88, + 0x2a8: 0x89, 0x2a9: 0x8a, 0x2aa: 0x8b, 0x2ab: 0x8c, 0x2ac: 0x8d, 0x2ad: 0x8e, 0x2ae: 0x88, 0x2af: 0x89, + 0x2b0: 0x8a, 0x2b1: 0x8b, 0x2b2: 0x8c, 0x2b3: 0x8d, 0x2b4: 0x8e, 0x2b5: 0x88, 0x2b6: 0x89, 0x2b7: 0x8a, + 0x2b8: 0x8b, 0x2b9: 0x8c, 0x2ba: 0x8d, 0x2bb: 0x8e, 0x2bc: 0x88, 0x2bd: 0x89, 0x2be: 0x8a, 0x2bf: 0x8b, + // Block 0xb, offset 0x2c0 + 0x2c0: 0x8c, 0x2c1: 0x8d, 0x2c2: 0x8e, 0x2c3: 0x88, 0x2c4: 0x89, 0x2c5: 0x8a, 0x2c6: 0x8b, 0x2c7: 0x8c, + 0x2c8: 0x8d, 0x2c9: 0x8e, 0x2ca: 0x88, 0x2cb: 0x89, 0x2cc: 0x8a, 0x2cd: 0x8b, 0x2ce: 0x8c, 0x2cf: 0x8d, + 0x2d0: 0x8e, 0x2d1: 0x88, 0x2d2: 0x89, 0x2d3: 0x8a, 0x2d4: 0x8b, 0x2d5: 0x8c, 0x2d6: 0x8d, 0x2d7: 0x8e, + 0x2d8: 0x88, 0x2d9: 0x89, 0x2da: 0x8a, 0x2db: 0x8b, 0x2dc: 0x8c, 0x2dd: 0x8d, 0x2de: 0x8f, + // Block 0xc, offset 0x300 + 0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20, + 0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x90, 0x32d: 0x91, 0x32e: 0x92, + 0x331: 0x93, 0x332: 0x94, 0x333: 0x95, 0x334: 0x96, + 0x338: 0x97, 0x339: 0x98, 0x33a: 0x99, 0x33b: 0x9a, 0x33e: 0x9b, 0x33f: 0x9c, + // Block 0xd, offset 0x340 + 0x347: 0x9d, + 0x34b: 0x9e, 0x34d: 0x9f, + 0x368: 0xa0, 0x36b: 0xa1, + 0x374: 0xa2, + 0x37a: 0xa3, 0x37d: 0xa4, + // Block 0xe, offset 0x380 + 0x381: 0xa5, 0x382: 0xa6, 0x384: 0xa7, 0x385: 0x83, 0x387: 0xa8, + 0x388: 0xa9, 0x38b: 0xaa, 0x38c: 0xab, 0x38d: 0xac, + 0x391: 0xad, 0x392: 0xae, 0x393: 0xaf, 0x396: 0xb0, 0x397: 0xb1, + 0x398: 0x74, 0x39a: 0xb2, 0x39c: 0xb3, + 0x3a0: 0xb4, 0x3a4: 0xb5, 0x3a5: 0xb6, 0x3a7: 0xb7, + 0x3a8: 0xb8, 0x3a9: 0xb9, 0x3aa: 0xba, + 0x3b0: 0x74, 0x3b5: 0xbb, 0x3b6: 0xbc, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xbd, 0x3ec: 0xbe, + 0x3ff: 0xbf, + // Block 0x10, offset 0x400 + 0x432: 0xc0, + // Block 0x11, offset 0x440 + 0x445: 0xc1, 0x446: 0xc2, 0x447: 0xc3, + 0x449: 0xc4, + // Block 0x12, offset 0x480 + 0x480: 0xc5, 0x484: 0xbe, + 0x48b: 0xc6, + 0x4a3: 0xc7, 0x4a5: 0xc8, + // Block 0x13, offset 0x4c0 + 0x4c8: 0xc9, + // Block 0x14, offset 0x500 + 0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c, + 0x528: 0x2d, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfcSparseOffset: 156 entries, 312 bytes +var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x72, 0x79, 0x7c, 0x84, 0x88, 0x8c, 0x8e, 0x90, 0x99, 0x9d, 0xa4, 0xa9, 0xac, 0xb6, 0xb9, 0xc0, 0xc8, 0xcb, 0xcd, 0xd0, 0xd2, 0xd7, 0xe8, 0xf4, 0xf6, 0xfc, 0xfe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10b, 0x10e, 0x110, 0x113, 0x116, 0x11a, 0x120, 0x122, 0x12b, 0x12d, 0x130, 0x132, 0x13d, 0x141, 0x14f, 0x152, 0x158, 0x15e, 0x169, 0x16d, 0x16f, 0x171, 0x173, 0x175, 0x177, 0x17d, 0x181, 0x183, 0x185, 0x18d, 0x191, 0x194, 0x196, 0x198, 0x19b, 0x19e, 0x1a0, 0x1a2, 0x1a4, 0x1a6, 0x1ac, 0x1af, 0x1b1, 0x1b8, 0x1be, 0x1c4, 0x1cc, 0x1d2, 0x1d8, 0x1de, 0x1e2, 0x1f0, 0x1f9, 0x1fc, 0x1ff, 0x201, 0x204, 0x206, 0x20a, 0x20f, 0x211, 0x213, 0x218, 0x21e, 0x220, 0x222, 0x224, 0x22a, 0x22d, 0x22f, 0x231, 0x237, 0x23a, 0x242, 0x249, 0x24c, 0x24f, 0x251, 0x254, 0x25c, 0x260, 0x267, 0x26a, 0x270, 0x272, 0x275, 0x277, 0x27a, 0x27f, 0x281, 0x283, 0x285, 0x287, 0x289, 0x28c, 0x28e, 0x290, 0x292, 0x294, 0x296, 0x2a3, 0x2ad, 0x2af, 0x2b1, 0x2b7, 0x2b9, 0x2bb, 0x2be} + +// nfcSparseValues: 704 entries, 2816 bytes +var nfcSparseValues = [704]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0000, lo: 0x04}, + {value: 0xa100, lo: 0xa8, hi: 0xa8}, + {value: 0x8100, lo: 0xaf, hi: 0xaf}, + {value: 0x8100, lo: 0xb4, hi: 0xb4}, + {value: 0x8100, lo: 0xb8, hi: 0xb8}, + // Block 0x1, offset 0x5 + {value: 0x0091, lo: 0x03}, + {value: 0x46f9, lo: 0xa0, hi: 0xa1}, + {value: 0x472b, lo: 0xaf, hi: 0xb0}, + {value: 0xa000, lo: 0xb7, hi: 0xb7}, + // Block 0x2, offset 0x9 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + // Block 0x3, offset 0xb + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x98, hi: 0x9d}, + // Block 0x4, offset 0xd + {value: 0x0006, lo: 0x0a}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x85, hi: 0x85}, + {value: 0xa000, lo: 0x89, hi: 0x89}, + {value: 0x4857, lo: 0x8a, hi: 0x8a}, + {value: 0x4875, lo: 0x8b, hi: 0x8b}, + {value: 0x36de, lo: 0x8c, hi: 0x8c}, + {value: 0x36f6, lo: 0x8d, hi: 0x8d}, + {value: 0x488d, lo: 0x8e, hi: 0x8e}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x3714, lo: 0x93, hi: 0x94}, + // Block 0x5, offset 0x18 + {value: 0x0000, lo: 0x0f}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0xa000, lo: 0x8d, hi: 0x8d}, + {value: 0x37bc, lo: 0x90, hi: 0x90}, + {value: 0x37c8, lo: 0x91, hi: 0x91}, + {value: 0x37b6, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x382e, lo: 0x97, hi: 0x97}, + {value: 0x37f8, lo: 0x9c, hi: 0x9c}, + {value: 0x37e0, lo: 0x9d, hi: 0x9d}, + {value: 0x380a, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x3834, lo: 0xb6, hi: 0xb6}, + {value: 0x383a, lo: 0xb7, hi: 0xb7}, + // Block 0x6, offset 0x28 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x83, hi: 0x87}, + // Block 0x7, offset 0x2a + {value: 0x0001, lo: 0x04}, + {value: 0x8114, lo: 0x81, hi: 0x82}, + {value: 0x8133, lo: 0x84, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + {value: 0x810e, lo: 0x87, hi: 0x87}, + // Block 0x8, offset 0x2f + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x97}, + {value: 0x811a, lo: 0x98, hi: 0x98}, + {value: 0x811b, lo: 0x99, hi: 0x99}, + {value: 0x811c, lo: 0x9a, hi: 0x9a}, + {value: 0x3858, lo: 0xa2, hi: 0xa2}, + {value: 0x385e, lo: 0xa3, hi: 0xa3}, + {value: 0x386a, lo: 0xa4, hi: 0xa4}, + {value: 0x3864, lo: 0xa5, hi: 0xa5}, + {value: 0x3870, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x9, offset 0x3a + {value: 0x0000, lo: 0x0e}, + {value: 0x3882, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x3876, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x387c, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8133, lo: 0x96, hi: 0x9c}, + {value: 0x8133, lo: 0x9f, hi: 0xa2}, + {value: 0x812e, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa4, hi: 0xa4}, + {value: 0x8133, lo: 0xa7, hi: 0xa8}, + {value: 0x812e, lo: 0xaa, hi: 0xaa}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + // Block 0xa, offset 0x49 + {value: 0x0000, lo: 0x0c}, + {value: 0x8120, lo: 0x91, hi: 0x91}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x812e, lo: 0xb1, hi: 0xb1}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb5, hi: 0xb6}, + {value: 0x812e, lo: 0xb7, hi: 0xb9}, + {value: 0x8133, lo: 0xba, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbc}, + {value: 0x8133, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbe, hi: 0xbe}, + {value: 0x8133, lo: 0xbf, hi: 0xbf}, + // Block 0xb, offset 0x56 + {value: 0x0005, lo: 0x07}, + {value: 0x8133, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x812e, lo: 0x82, hi: 0x83}, + {value: 0x812e, lo: 0x84, hi: 0x85}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x812e, lo: 0x88, hi: 0x89}, + {value: 0x8133, lo: 0x8a, hi: 0x8a}, + // Block 0xc, offset 0x5e + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0xab, hi: 0xb1}, + {value: 0x812e, lo: 0xb2, hi: 0xb2}, + {value: 0x8133, lo: 0xb3, hi: 0xb3}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0xd, offset 0x63 + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0x96, hi: 0x99}, + {value: 0x8133, lo: 0x9b, hi: 0xa3}, + {value: 0x8133, lo: 0xa5, hi: 0xa7}, + {value: 0x8133, lo: 0xa9, hi: 0xad}, + // Block 0xe, offset 0x68 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + // Block 0xf, offset 0x6a + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3eef, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ef7, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3eff, lo: 0xb4, hi: 0xb4}, + {value: 0x9903, lo: 0xbc, hi: 0xbc}, + // Block 0x10, offset 0x72 + {value: 0x0008, lo: 0x06}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x91, hi: 0x91}, + {value: 0x812e, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x93, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x94}, + {value: 0x4533, lo: 0x98, hi: 0x9f}, + // Block 0x11, offset 0x79 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x12, offset 0x7c + {value: 0x0008, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cab, lo: 0x8b, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x4573, lo: 0x9c, hi: 0x9d}, + {value: 0x4583, lo: 0x9f, hi: 0x9f}, + {value: 0x8133, lo: 0xbe, hi: 0xbe}, + // Block 0x13, offset 0x84 + {value: 0x0000, lo: 0x03}, + {value: 0x45ab, lo: 0xb3, hi: 0xb3}, + {value: 0x45b3, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x14, offset 0x88 + {value: 0x0008, lo: 0x03}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x458b, lo: 0x99, hi: 0x9b}, + {value: 0x45a3, lo: 0x9e, hi: 0x9e}, + // Block 0x15, offset 0x8c + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x16, offset 0x8e + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + // Block 0x17, offset 0x90 + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cc3, lo: 0x88, hi: 0x88}, + {value: 0x2cbb, lo: 0x8b, hi: 0x8b}, + {value: 0x2ccb, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45bb, lo: 0x9c, hi: 0x9c}, + {value: 0x45c3, lo: 0x9d, hi: 0x9d}, + // Block 0x18, offset 0x99 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cd3, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x19, offset 0x9d + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cdb, lo: 0x8a, hi: 0x8a}, + {value: 0x2ceb, lo: 0x8b, hi: 0x8b}, + {value: 0x2ce3, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1a, offset 0xa4 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3f07, lo: 0x88, hi: 0x88}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8121, lo: 0x95, hi: 0x96}, + // Block 0x1b, offset 0xa9 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1c, offset 0xac + {value: 0x0000, lo: 0x09}, + {value: 0x2cf3, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cfb, lo: 0x87, hi: 0x87}, + {value: 0x2d03, lo: 0x88, hi: 0x88}, + {value: 0x2f67, lo: 0x8a, hi: 0x8a}, + {value: 0x2def, lo: 0x8b, hi: 0x8b}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1d, offset 0xb6 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1e, offset 0xb9 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2d0b, lo: 0x8a, hi: 0x8a}, + {value: 0x2d1b, lo: 0x8b, hi: 0x8b}, + {value: 0x2d13, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1f, offset 0xc0 + {value: 0x6bdd, lo: 0x07}, + {value: 0x9905, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3f0f, lo: 0x9a, hi: 0x9a}, + {value: 0x2f6f, lo: 0x9c, hi: 0x9c}, + {value: 0x2dfa, lo: 0x9d, hi: 0x9d}, + {value: 0x2d23, lo: 0x9e, hi: 0x9f}, + // Block 0x20, offset 0xc8 + {value: 0x0000, lo: 0x02}, + {value: 0x8123, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x21, offset 0xcb + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0x88, hi: 0x8b}, + // Block 0x22, offset 0xcd + {value: 0x0000, lo: 0x02}, + {value: 0x8125, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x23, offset 0xd0 + {value: 0x0000, lo: 0x01}, + {value: 0x8126, lo: 0x88, hi: 0x8b}, + // Block 0x24, offset 0xd2 + {value: 0x0000, lo: 0x04}, + {value: 0x812e, lo: 0x98, hi: 0x99}, + {value: 0x812e, lo: 0xb5, hi: 0xb5}, + {value: 0x812e, lo: 0xb7, hi: 0xb7}, + {value: 0x812c, lo: 0xb9, hi: 0xb9}, + // Block 0x25, offset 0xd7 + {value: 0x0000, lo: 0x10}, + {value: 0x264a, lo: 0x83, hi: 0x83}, + {value: 0x2651, lo: 0x8d, hi: 0x8d}, + {value: 0x2658, lo: 0x92, hi: 0x92}, + {value: 0x265f, lo: 0x97, hi: 0x97}, + {value: 0x2666, lo: 0x9c, hi: 0x9c}, + {value: 0x2643, lo: 0xa9, hi: 0xa9}, + {value: 0x8127, lo: 0xb1, hi: 0xb1}, + {value: 0x8128, lo: 0xb2, hi: 0xb2}, + {value: 0x4a9b, lo: 0xb3, hi: 0xb3}, + {value: 0x8129, lo: 0xb4, hi: 0xb4}, + {value: 0x4aa4, lo: 0xb5, hi: 0xb5}, + {value: 0x45cb, lo: 0xb6, hi: 0xb6}, + {value: 0x8200, lo: 0xb7, hi: 0xb7}, + {value: 0x45d3, lo: 0xb8, hi: 0xb8}, + {value: 0x8200, lo: 0xb9, hi: 0xb9}, + {value: 0x8128, lo: 0xba, hi: 0xbd}, + // Block 0x26, offset 0xe8 + {value: 0x0000, lo: 0x0b}, + {value: 0x8128, lo: 0x80, hi: 0x80}, + {value: 0x4aad, lo: 0x81, hi: 0x81}, + {value: 0x8133, lo: 0x82, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0x86, hi: 0x87}, + {value: 0x2674, lo: 0x93, hi: 0x93}, + {value: 0x267b, lo: 0x9d, hi: 0x9d}, + {value: 0x2682, lo: 0xa2, hi: 0xa2}, + {value: 0x2689, lo: 0xa7, hi: 0xa7}, + {value: 0x2690, lo: 0xac, hi: 0xac}, + {value: 0x266d, lo: 0xb9, hi: 0xb9}, + // Block 0x27, offset 0xf4 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x86, hi: 0x86}, + // Block 0x28, offset 0xf6 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d2b, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x29, offset 0xfc + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + // Block 0x2a, offset 0xfe + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2b, offset 0x100 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2c, offset 0x102 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2d, offset 0x104 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2e, offset 0x106 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9d, hi: 0x9f}, + // Block 0x2f, offset 0x108 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x94, hi: 0x94}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x30, offset 0x10b + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x9d, hi: 0x9d}, + // Block 0x31, offset 0x10e + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + // Block 0x32, offset 0x110 + {value: 0x0004, lo: 0x02}, + {value: 0x812f, lo: 0xb9, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbb}, + // Block 0x33, offset 0x113 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x97, hi: 0x97}, + {value: 0x812e, lo: 0x98, hi: 0x98}, + // Block 0x34, offset 0x116 + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + {value: 0x8133, lo: 0xb5, hi: 0xbc}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x35, offset 0x11a + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + {value: 0x812e, lo: 0xb5, hi: 0xba}, + {value: 0x8133, lo: 0xbb, hi: 0xbc}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x120 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x80, hi: 0x80}, + // Block 0x37, offset 0x122 + {value: 0x0000, lo: 0x08}, + {value: 0x2d73, lo: 0x80, hi: 0x80}, + {value: 0x2d7b, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d83, lo: 0x83, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xab, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xac}, + {value: 0x8133, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x12b + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x12d + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xa6, hi: 0xa6}, + {value: 0x8105, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x130 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x132 + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812e, lo: 0x95, hi: 0x99}, + {value: 0x8133, lo: 0x9a, hi: 0x9b}, + {value: 0x812e, lo: 0x9c, hi: 0x9f}, + {value: 0x8133, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x8133, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x13d + {value: 0x0004, lo: 0x03}, + {value: 0x0436, lo: 0x80, hi: 0x81}, + {value: 0x8100, lo: 0x97, hi: 0x97}, + {value: 0x8100, lo: 0xbe, hi: 0xbe}, + // Block 0x3d, offset 0x141 + {value: 0x0000, lo: 0x0d}, + {value: 0x8133, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8133, lo: 0x9b, hi: 0x9c}, + {value: 0x8133, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xa7}, + {value: 0x812e, lo: 0xa8, hi: 0xa8}, + {value: 0x8133, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xaf}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + // Block 0x3e, offset 0x14f + {value: 0x4292, lo: 0x02}, + {value: 0x01bb, lo: 0xa6, hi: 0xa6}, + {value: 0x0057, lo: 0xaa, hi: 0xab}, + // Block 0x3f, offset 0x152 + {value: 0x0007, lo: 0x05}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bd0, lo: 0x9a, hi: 0x9b}, + {value: 0x3bde, lo: 0xae, hi: 0xae}, + // Block 0x40, offset 0x158 + {value: 0x000e, lo: 0x05}, + {value: 0x3be5, lo: 0x8d, hi: 0x8e}, + {value: 0x3bec, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x41, offset 0x15e + {value: 0x63f1, lo: 0x0a}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3bfa, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3c01, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3c08, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3c0f, lo: 0xa4, hi: 0xa5}, + {value: 0x3c16, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x42, offset 0x169 + {value: 0x0007, lo: 0x03}, + {value: 0x3c7f, lo: 0xa0, hi: 0xa1}, + {value: 0x3ca9, lo: 0xa2, hi: 0xa3}, + {value: 0x3cd3, lo: 0xaa, hi: 0xad}, + // Block 0x43, offset 0x16d + {value: 0x0004, lo: 0x01}, + {value: 0x048e, lo: 0xa9, hi: 0xaa}, + // Block 0x44, offset 0x16f + {value: 0x0000, lo: 0x01}, + {value: 0x44f4, lo: 0x9c, hi: 0x9c}, + // Block 0x45, offset 0x171 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xaf, hi: 0xb1}, + // Block 0x46, offset 0x173 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x47, offset 0x175 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa0, hi: 0xbf}, + // Block 0x48, offset 0x177 + {value: 0x0000, lo: 0x05}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x8134, lo: 0xac, hi: 0xac}, + {value: 0x812f, lo: 0xad, hi: 0xad}, + {value: 0x8130, lo: 0xae, hi: 0xaf}, + // Block 0x49, offset 0x17d + {value: 0x0000, lo: 0x03}, + {value: 0x4ab6, lo: 0xb3, hi: 0xb3}, + {value: 0x4ab6, lo: 0xb5, hi: 0xb6}, + {value: 0x4ab6, lo: 0xba, hi: 0xbf}, + // Block 0x4a, offset 0x181 + {value: 0x0000, lo: 0x01}, + {value: 0x4ab6, lo: 0x8f, hi: 0xa3}, + // Block 0x4b, offset 0x183 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xae, hi: 0xbe}, + // Block 0x4c, offset 0x185 + {value: 0x0000, lo: 0x07}, + {value: 0x8100, lo: 0x84, hi: 0x84}, + {value: 0x8100, lo: 0x87, hi: 0x87}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + {value: 0x8100, lo: 0x9e, hi: 0x9e}, + {value: 0x8100, lo: 0xa1, hi: 0xa1}, + {value: 0x8100, lo: 0xb2, hi: 0xb2}, + {value: 0x8100, lo: 0xbb, hi: 0xbb}, + // Block 0x4d, offset 0x18d + {value: 0x0000, lo: 0x03}, + {value: 0x8100, lo: 0x80, hi: 0x80}, + {value: 0x8100, lo: 0x8b, hi: 0x8b}, + {value: 0x8100, lo: 0x8e, hi: 0x8e}, + // Block 0x4e, offset 0x191 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + {value: 0x8133, lo: 0xb4, hi: 0xbd}, + // Block 0x4f, offset 0x194 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9e, hi: 0x9f}, + // Block 0x50, offset 0x196 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb1}, + // Block 0x51, offset 0x198 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xac, hi: 0xac}, + // Block 0x52, offset 0x19b + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xa0, hi: 0xb1}, + // Block 0x53, offset 0x19e + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xab, hi: 0xad}, + // Block 0x54, offset 0x1a0 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x93, hi: 0x93}, + // Block 0x55, offset 0x1a2 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb3, hi: 0xb3}, + // Block 0x56, offset 0x1a4 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + // Block 0x57, offset 0x1a6 + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb7, hi: 0xb8}, + {value: 0x8133, lo: 0xbe, hi: 0xbf}, + // Block 0x58, offset 0x1ac + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + // Block 0x59, offset 0x1af + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xad, hi: 0xad}, + // Block 0x5a, offset 0x1b1 + {value: 0x0000, lo: 0x06}, + {value: 0xe500, lo: 0x80, hi: 0x80}, + {value: 0xc600, lo: 0x81, hi: 0x9b}, + {value: 0xe500, lo: 0x9c, hi: 0x9c}, + {value: 0xc600, lo: 0x9d, hi: 0xb7}, + {value: 0xe500, lo: 0xb8, hi: 0xb8}, + {value: 0xc600, lo: 0xb9, hi: 0xbf}, + // Block 0x5b, offset 0x1b8 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x93}, + {value: 0xe500, lo: 0x94, hi: 0x94}, + {value: 0xc600, lo: 0x95, hi: 0xaf}, + {value: 0xe500, lo: 0xb0, hi: 0xb0}, + {value: 0xc600, lo: 0xb1, hi: 0xbf}, + // Block 0x5c, offset 0x1be + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8b}, + {value: 0xe500, lo: 0x8c, hi: 0x8c}, + {value: 0xc600, lo: 0x8d, hi: 0xa7}, + {value: 0xe500, lo: 0xa8, hi: 0xa8}, + {value: 0xc600, lo: 0xa9, hi: 0xbf}, + // Block 0x5d, offset 0x1c4 + {value: 0x0000, lo: 0x07}, + {value: 0xc600, lo: 0x80, hi: 0x83}, + {value: 0xe500, lo: 0x84, hi: 0x84}, + {value: 0xc600, lo: 0x85, hi: 0x9f}, + {value: 0xe500, lo: 0xa0, hi: 0xa0}, + {value: 0xc600, lo: 0xa1, hi: 0xbb}, + {value: 0xe500, lo: 0xbc, hi: 0xbc}, + {value: 0xc600, lo: 0xbd, hi: 0xbf}, + // Block 0x5e, offset 0x1cc + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x97}, + {value: 0xe500, lo: 0x98, hi: 0x98}, + {value: 0xc600, lo: 0x99, hi: 0xb3}, + {value: 0xe500, lo: 0xb4, hi: 0xb4}, + {value: 0xc600, lo: 0xb5, hi: 0xbf}, + // Block 0x5f, offset 0x1d2 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8f}, + {value: 0xe500, lo: 0x90, hi: 0x90}, + {value: 0xc600, lo: 0x91, hi: 0xab}, + {value: 0xe500, lo: 0xac, hi: 0xac}, + {value: 0xc600, lo: 0xad, hi: 0xbf}, + // Block 0x60, offset 0x1d8 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + {value: 0xe500, lo: 0xa4, hi: 0xa4}, + {value: 0xc600, lo: 0xa5, hi: 0xbf}, + // Block 0x61, offset 0x1de + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x62, offset 0x1e2 + {value: 0x0006, lo: 0x0d}, + {value: 0x43a7, lo: 0x9d, hi: 0x9d}, + {value: 0x8116, lo: 0x9e, hi: 0x9e}, + {value: 0x4419, lo: 0x9f, hi: 0x9f}, + {value: 0x4407, lo: 0xaa, hi: 0xab}, + {value: 0x450b, lo: 0xac, hi: 0xac}, + {value: 0x4513, lo: 0xad, hi: 0xad}, + {value: 0x435f, lo: 0xae, hi: 0xb1}, + {value: 0x437d, lo: 0xb2, hi: 0xb4}, + {value: 0x4395, lo: 0xb5, hi: 0xb6}, + {value: 0x43a1, lo: 0xb8, hi: 0xb8}, + {value: 0x43ad, lo: 0xb9, hi: 0xbb}, + {value: 0x43c5, lo: 0xbc, hi: 0xbc}, + {value: 0x43cb, lo: 0xbe, hi: 0xbe}, + // Block 0x63, offset 0x1f0 + {value: 0x0006, lo: 0x08}, + {value: 0x43d1, lo: 0x80, hi: 0x81}, + {value: 0x43dd, lo: 0x83, hi: 0x84}, + {value: 0x43ef, lo: 0x86, hi: 0x89}, + {value: 0x4413, lo: 0x8a, hi: 0x8a}, + {value: 0x438f, lo: 0x8b, hi: 0x8b}, + {value: 0x4377, lo: 0x8c, hi: 0x8c}, + {value: 0x43bf, lo: 0x8d, hi: 0x8d}, + {value: 0x43e9, lo: 0x8e, hi: 0x8e}, + // Block 0x64, offset 0x1f9 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0xa4, hi: 0xa5}, + {value: 0x8100, lo: 0xb0, hi: 0xb1}, + // Block 0x65, offset 0x1fc + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x9b, hi: 0x9d}, + {value: 0x8200, lo: 0x9e, hi: 0xa3}, + // Block 0x66, offset 0x1ff + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x90, hi: 0x90}, + // Block 0x67, offset 0x201 + {value: 0x0000, lo: 0x02}, + {value: 0x8100, lo: 0x99, hi: 0x99}, + {value: 0x8200, lo: 0xb2, hi: 0xb4}, + // Block 0x68, offset 0x204 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xbc, hi: 0xbd}, + // Block 0x69, offset 0x206 + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0xa0, hi: 0xa6}, + {value: 0x812e, lo: 0xa7, hi: 0xad}, + {value: 0x8133, lo: 0xae, hi: 0xaf}, + // Block 0x6a, offset 0x20a + {value: 0x0000, lo: 0x04}, + {value: 0x8100, lo: 0x89, hi: 0x8c}, + {value: 0x8100, lo: 0xb0, hi: 0xb2}, + {value: 0x8100, lo: 0xb4, hi: 0xb4}, + {value: 0x8100, lo: 0xb6, hi: 0xbf}, + // Block 0x6b, offset 0x20f + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x81, hi: 0x8c}, + // Block 0x6c, offset 0x211 + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0xb5, hi: 0xba}, + // Block 0x6d, offset 0x213 + {value: 0x0000, lo: 0x04}, + {value: 0x4ab6, lo: 0x9e, hi: 0x9f}, + {value: 0x4ab6, lo: 0xa3, hi: 0xa3}, + {value: 0x4ab6, lo: 0xa5, hi: 0xa6}, + {value: 0x4ab6, lo: 0xaa, hi: 0xaf}, + // Block 0x6e, offset 0x218 + {value: 0x0000, lo: 0x05}, + {value: 0x4ab6, lo: 0x82, hi: 0x87}, + {value: 0x4ab6, lo: 0x8a, hi: 0x8f}, + {value: 0x4ab6, lo: 0x92, hi: 0x97}, + {value: 0x4ab6, lo: 0x9a, hi: 0x9c}, + {value: 0x8100, lo: 0xa3, hi: 0xa3}, + // Block 0x6f, offset 0x21e + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0x70, offset 0x220 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xa0, hi: 0xa0}, + // Block 0x71, offset 0x222 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb6, hi: 0xba}, + // Block 0x72, offset 0x224 + {value: 0x002d, lo: 0x05}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + {value: 0x8133, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x73, offset 0x22a + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xa5, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + // Block 0x74, offset 0x22d + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa4, hi: 0xa7}, + // Block 0x75, offset 0x22f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + // Block 0x76, offset 0x231 + {value: 0x0000, lo: 0x05}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x8133, lo: 0x88, hi: 0x8a}, + {value: 0x812e, lo: 0x8b, hi: 0x8b}, + {value: 0x8133, lo: 0x8c, hi: 0x8c}, + {value: 0x812e, lo: 0x8d, hi: 0x90}, + // Block 0x77, offset 0x237 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x78, offset 0x23a + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x424f, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4259, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x4263, lo: 0xab, hi: 0xab}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x79, offset 0x242 + {value: 0x0000, lo: 0x06}, + {value: 0x8133, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d8b, lo: 0xae, hi: 0xae}, + {value: 0x2d95, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8105, lo: 0xb3, hi: 0xb4}, + // Block 0x7a, offset 0x249 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0x7b, offset 0x24c + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb5, hi: 0xb5}, + {value: 0x8103, lo: 0xb6, hi: 0xb6}, + // Block 0x7c, offset 0x24f + {value: 0x0002, lo: 0x01}, + {value: 0x8103, lo: 0xa9, hi: 0xaa}, + // Block 0x7d, offset 0x251 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x7e, offset 0x254 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d9f, lo: 0x8b, hi: 0x8b}, + {value: 0x2da9, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8133, lo: 0xa6, hi: 0xac}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + // Block 0x7f, offset 0x25c + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x86, hi: 0x86}, + {value: 0x8133, lo: 0x9e, hi: 0x9e}, + // Block 0x80, offset 0x260 + {value: 0x6b4d, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2dbd, lo: 0xbb, hi: 0xbb}, + {value: 0x2db3, lo: 0xbc, hi: 0xbd}, + {value: 0x2dc7, lo: 0xbe, hi: 0xbe}, + // Block 0x81, offset 0x267 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x82, offset 0x26a + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dd1, lo: 0xba, hi: 0xba}, + {value: 0x2ddb, lo: 0xbb, hi: 0xbb}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x83, offset 0x270 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x80, hi: 0x80}, + // Block 0x84, offset 0x272 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x85, offset 0x275 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xab, hi: 0xab}, + // Block 0x86, offset 0x277 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb9, hi: 0xb9}, + {value: 0x8103, lo: 0xba, hi: 0xba}, + // Block 0x87, offset 0x27a + {value: 0x0000, lo: 0x04}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb5, hi: 0xb5}, + {value: 0x2de5, lo: 0xb8, hi: 0xb8}, + {value: 0x8105, lo: 0xbd, hi: 0xbe}, + // Block 0x88, offset 0x27f + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x89, offset 0x281 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + // Block 0x8a, offset 0x283 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x8b, offset 0x285 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x87, hi: 0x87}, + // Block 0x8c, offset 0x287 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x99, hi: 0x99}, + // Block 0x8d, offset 0x289 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0x82, hi: 0x82}, + {value: 0x8105, lo: 0x84, hi: 0x85}, + // Block 0x8e, offset 0x28c + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x97, hi: 0x97}, + // Block 0x8f, offset 0x28e + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x90, offset 0x290 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb6}, + // Block 0x91, offset 0x292 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb0, hi: 0xb1}, + // Block 0x92, offset 0x294 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x93, offset 0x296 + {value: 0x0000, lo: 0x0c}, + {value: 0x45e3, lo: 0x9e, hi: 0x9e}, + {value: 0x45ed, lo: 0x9f, hi: 0x9f}, + {value: 0x4621, lo: 0xa0, hi: 0xa0}, + {value: 0x462f, lo: 0xa1, hi: 0xa1}, + {value: 0x463d, lo: 0xa2, hi: 0xa2}, + {value: 0x464b, lo: 0xa3, hi: 0xa3}, + {value: 0x4659, lo: 0xa4, hi: 0xa4}, + {value: 0x812c, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8131, lo: 0xad, hi: 0xad}, + {value: 0x812c, lo: 0xae, hi: 0xb2}, + {value: 0x812e, lo: 0xbb, hi: 0xbf}, + // Block 0x94, offset 0x2a3 + {value: 0x0000, lo: 0x09}, + {value: 0x812e, lo: 0x80, hi: 0x82}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8b}, + {value: 0x8133, lo: 0xaa, hi: 0xad}, + {value: 0x45f7, lo: 0xbb, hi: 0xbb}, + {value: 0x4601, lo: 0xbc, hi: 0xbc}, + {value: 0x4667, lo: 0xbd, hi: 0xbd}, + {value: 0x4683, lo: 0xbe, hi: 0xbe}, + {value: 0x4675, lo: 0xbf, hi: 0xbf}, + // Block 0x95, offset 0x2ad + {value: 0x0000, lo: 0x01}, + {value: 0x4691, lo: 0x80, hi: 0x80}, + // Block 0x96, offset 0x2af + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x82, hi: 0x84}, + // Block 0x97, offset 0x2b1 + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0x80, hi: 0x86}, + {value: 0x8133, lo: 0x88, hi: 0x98}, + {value: 0x8133, lo: 0x9b, hi: 0xa1}, + {value: 0x8133, lo: 0xa3, hi: 0xa4}, + {value: 0x8133, lo: 0xa6, hi: 0xaa}, + // Block 0x98, offset 0x2b7 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xac, hi: 0xaf}, + // Block 0x99, offset 0x2b9 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x90, hi: 0x96}, + // Block 0x9a, offset 0x2bb + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x84, hi: 0x89}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0x9b, offset 0x2be + {value: 0x0000, lo: 0x01}, + {value: 0x8100, lo: 0x93, hi: 0x93}, +} + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfkcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfkcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfkcValues[c0] + } + i := nfkcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return nfkcValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := nfkcIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = nfkcIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = nfkcIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return nfkcValues[c0] + } + i := nfkcIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = nfkcIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// nfkcTrie. Total size: 18768 bytes (18.33 KiB). Checksum: c51186dd2412943d. +type nfkcTrie struct{} + +func newNfkcTrie(i int) *nfkcTrie { + return &nfkcTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { + switch { + case n < 92: + return uint16(nfkcValues[n<<6+uint32(b)]) + default: + n -= 92 + return uint16(nfkcSparse.lookup(n, b)) + } +} + +// nfkcValues: 94 blocks, 6016 entries, 12032 bytes +// The third block is the zero block. +var nfkcValues = [6016]uint16{ + // Block 0x0, offset 0x0 + 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, + // Block 0x1, offset 0x40 + 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, + 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, + 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, + 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, + 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, + 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, + 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, + 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, + 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, + 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x2f86, 0xc1: 0x2f8b, 0xc2: 0x469f, 0xc3: 0x2f90, 0xc4: 0x46ae, 0xc5: 0x46b3, + 0xc6: 0xa000, 0xc7: 0x46bd, 0xc8: 0x2ff9, 0xc9: 0x2ffe, 0xca: 0x46c2, 0xcb: 0x3012, + 0xcc: 0x3085, 0xcd: 0x308a, 0xce: 0x308f, 0xcf: 0x46d6, 0xd1: 0x311b, + 0xd2: 0x313e, 0xd3: 0x3143, 0xd4: 0x46e0, 0xd5: 0x46e5, 0xd6: 0x46f4, + 0xd8: 0xa000, 0xd9: 0x31ca, 0xda: 0x31cf, 0xdb: 0x31d4, 0xdc: 0x4726, 0xdd: 0x324c, + 0xe0: 0x3292, 0xe1: 0x3297, 0xe2: 0x4730, 0xe3: 0x329c, + 0xe4: 0x473f, 0xe5: 0x4744, 0xe6: 0xa000, 0xe7: 0x474e, 0xe8: 0x3305, 0xe9: 0x330a, + 0xea: 0x4753, 0xeb: 0x331e, 0xec: 0x3396, 0xed: 0x339b, 0xee: 0x33a0, 0xef: 0x4767, + 0xf1: 0x342c, 0xf2: 0x344f, 0xf3: 0x3454, 0xf4: 0x4771, 0xf5: 0x4776, + 0xf6: 0x4785, 0xf8: 0xa000, 0xf9: 0x34e0, 0xfa: 0x34e5, 0xfb: 0x34ea, + 0xfc: 0x47b7, 0xfd: 0x3567, 0xff: 0x3580, + // Block 0x4, offset 0x100 + 0x100: 0x2f95, 0x101: 0x32a1, 0x102: 0x46a4, 0x103: 0x4735, 0x104: 0x2fb3, 0x105: 0x32bf, + 0x106: 0x2fc7, 0x107: 0x32d3, 0x108: 0x2fcc, 0x109: 0x32d8, 0x10a: 0x2fd1, 0x10b: 0x32dd, + 0x10c: 0x2fd6, 0x10d: 0x32e2, 0x10e: 0x2fe0, 0x10f: 0x32ec, + 0x112: 0x46c7, 0x113: 0x4758, 0x114: 0x3008, 0x115: 0x3314, 0x116: 0x300d, 0x117: 0x3319, + 0x118: 0x302b, 0x119: 0x3337, 0x11a: 0x301c, 0x11b: 0x3328, 0x11c: 0x3044, 0x11d: 0x3350, + 0x11e: 0x304e, 0x11f: 0x335a, 0x120: 0x3053, 0x121: 0x335f, 0x122: 0x305d, 0x123: 0x3369, + 0x124: 0x3062, 0x125: 0x336e, 0x128: 0x3094, 0x129: 0x33a5, + 0x12a: 0x3099, 0x12b: 0x33aa, 0x12c: 0x309e, 0x12d: 0x33af, 0x12e: 0x30c1, 0x12f: 0x33cd, + 0x130: 0x30a3, 0x132: 0x1960, 0x133: 0x19ed, 0x134: 0x30cb, 0x135: 0x33d7, + 0x136: 0x30df, 0x137: 0x33f0, 0x139: 0x30e9, 0x13a: 0x33fa, 0x13b: 0x30f3, + 0x13c: 0x3404, 0x13d: 0x30ee, 0x13e: 0x33ff, 0x13f: 0x1bb2, + // Block 0x5, offset 0x140 + 0x140: 0x1c3a, 0x143: 0x3116, 0x144: 0x3427, 0x145: 0x312f, + 0x146: 0x3440, 0x147: 0x3125, 0x148: 0x3436, 0x149: 0x1c62, + 0x14c: 0x46ea, 0x14d: 0x477b, 0x14e: 0x3148, 0x14f: 0x3459, 0x150: 0x3152, 0x151: 0x3463, + 0x154: 0x3170, 0x155: 0x3481, 0x156: 0x3189, 0x157: 0x349a, + 0x158: 0x317a, 0x159: 0x348b, 0x15a: 0x470d, 0x15b: 0x479e, 0x15c: 0x3193, 0x15d: 0x34a4, + 0x15e: 0x31a2, 0x15f: 0x34b3, 0x160: 0x4712, 0x161: 0x47a3, 0x162: 0x31bb, 0x163: 0x34d1, + 0x164: 0x31ac, 0x165: 0x34c2, 0x168: 0x471c, 0x169: 0x47ad, + 0x16a: 0x4721, 0x16b: 0x47b2, 0x16c: 0x31d9, 0x16d: 0x34ef, 0x16e: 0x31e3, 0x16f: 0x34f9, + 0x170: 0x31e8, 0x171: 0x34fe, 0x172: 0x3206, 0x173: 0x351c, 0x174: 0x3229, 0x175: 0x353f, + 0x176: 0x3251, 0x177: 0x356c, 0x178: 0x3265, 0x179: 0x3274, 0x17a: 0x3594, 0x17b: 0x327e, + 0x17c: 0x359e, 0x17d: 0x3283, 0x17e: 0x35a3, 0x17f: 0x00a7, + // Block 0x6, offset 0x180 + 0x184: 0x2e05, 0x185: 0x2e0b, + 0x186: 0x2e11, 0x187: 0x1975, 0x188: 0x1978, 0x189: 0x1a0e, 0x18a: 0x198d, 0x18b: 0x1990, + 0x18c: 0x1a44, 0x18d: 0x2f9f, 0x18e: 0x32ab, 0x18f: 0x30ad, 0x190: 0x33b9, 0x191: 0x3157, + 0x192: 0x3468, 0x193: 0x31ed, 0x194: 0x3503, 0x195: 0x39e6, 0x196: 0x3b75, 0x197: 0x39df, + 0x198: 0x3b6e, 0x199: 0x39ed, 0x19a: 0x3b7c, 0x19b: 0x39d8, 0x19c: 0x3b67, + 0x19e: 0x38c7, 0x19f: 0x3a56, 0x1a0: 0x38c0, 0x1a1: 0x3a4f, 0x1a2: 0x35ca, 0x1a3: 0x35dc, + 0x1a6: 0x3058, 0x1a7: 0x3364, 0x1a8: 0x30d5, 0x1a9: 0x33e6, + 0x1aa: 0x4703, 0x1ab: 0x4794, 0x1ac: 0x39a7, 0x1ad: 0x3b36, 0x1ae: 0x35ee, 0x1af: 0x35f4, + 0x1b0: 0x33dc, 0x1b1: 0x1945, 0x1b2: 0x1948, 0x1b3: 0x19d5, 0x1b4: 0x303f, 0x1b5: 0x334b, + 0x1b8: 0x3111, 0x1b9: 0x3422, 0x1ba: 0x38ce, 0x1bb: 0x3a5d, + 0x1bc: 0x35c4, 0x1bd: 0x35d6, 0x1be: 0x35d0, 0x1bf: 0x35e2, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x2fa4, 0x1c1: 0x32b0, 0x1c2: 0x2fa9, 0x1c3: 0x32b5, 0x1c4: 0x3021, 0x1c5: 0x332d, + 0x1c6: 0x3026, 0x1c7: 0x3332, 0x1c8: 0x30b2, 0x1c9: 0x33be, 0x1ca: 0x30b7, 0x1cb: 0x33c3, + 0x1cc: 0x315c, 0x1cd: 0x346d, 0x1ce: 0x3161, 0x1cf: 0x3472, 0x1d0: 0x317f, 0x1d1: 0x3490, + 0x1d2: 0x3184, 0x1d3: 0x3495, 0x1d4: 0x31f2, 0x1d5: 0x3508, 0x1d6: 0x31f7, 0x1d7: 0x350d, + 0x1d8: 0x319d, 0x1d9: 0x34ae, 0x1da: 0x31b6, 0x1db: 0x34cc, + 0x1de: 0x3071, 0x1df: 0x337d, + 0x1e6: 0x46a9, 0x1e7: 0x473a, 0x1e8: 0x46d1, 0x1e9: 0x4762, + 0x1ea: 0x3976, 0x1eb: 0x3b05, 0x1ec: 0x3953, 0x1ed: 0x3ae2, 0x1ee: 0x46ef, 0x1ef: 0x4780, + 0x1f0: 0x396f, 0x1f1: 0x3afe, 0x1f2: 0x325b, 0x1f3: 0x3576, + // Block 0x8, offset 0x200 + 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, + 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, + 0x20c: 0x9933, 0x20d: 0x8133, 0x20e: 0x8133, 0x20f: 0x9933, 0x210: 0x8133, 0x211: 0x9933, + 0x212: 0x8133, 0x213: 0x9933, 0x214: 0x9933, 0x215: 0x8134, 0x216: 0x812e, 0x217: 0x812e, + 0x218: 0x812e, 0x219: 0x812e, 0x21a: 0x8134, 0x21b: 0x992c, 0x21c: 0x812e, 0x21d: 0x812e, + 0x21e: 0x812e, 0x21f: 0x812e, 0x220: 0x812e, 0x221: 0x812a, 0x222: 0x812a, 0x223: 0x992e, + 0x224: 0x992e, 0x225: 0x992e, 0x226: 0x992e, 0x227: 0x992a, 0x228: 0x992a, 0x229: 0x812e, + 0x22a: 0x812e, 0x22b: 0x812e, 0x22c: 0x812e, 0x22d: 0x992e, 0x22e: 0x992e, 0x22f: 0x812e, + 0x230: 0x992e, 0x231: 0x992e, 0x232: 0x812e, 0x233: 0x812e, 0x234: 0x8101, 0x235: 0x8101, + 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, + 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, + // Block 0x9, offset 0x240 + 0x240: 0x49c5, 0x241: 0x49ca, 0x242: 0x9933, 0x243: 0x49cf, 0x244: 0x4a88, 0x245: 0x9937, + 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, + 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, + 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, + 0x258: 0x8134, 0x259: 0x812e, 0x25a: 0x812e, 0x25b: 0x8133, 0x25c: 0x8135, 0x25d: 0x8136, + 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, + 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, + 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, + 0x274: 0x0173, + 0x27a: 0x42bc, + 0x27e: 0x0037, + // Block 0xa, offset 0x280 + 0x284: 0x4271, 0x285: 0x4492, + 0x286: 0x3600, 0x287: 0x00ce, 0x288: 0x361e, 0x289: 0x362a, 0x28a: 0x363c, + 0x28c: 0x365a, 0x28e: 0x366c, 0x28f: 0x368a, 0x290: 0x3e1f, 0x291: 0xa000, + 0x295: 0xa000, 0x297: 0xa000, + 0x299: 0xa000, + 0x29f: 0xa000, 0x2a1: 0xa000, + 0x2a5: 0xa000, 0x2a9: 0xa000, + 0x2aa: 0x364e, 0x2ab: 0x367e, 0x2ac: 0x4815, 0x2ad: 0x36ae, 0x2ae: 0x483f, 0x2af: 0x36c0, + 0x2b0: 0x3e87, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2b7: 0xa000, 0x2b9: 0xa000, + 0x2bf: 0xa000, + // Block 0xb, offset 0x2c0 + 0x2c1: 0xa000, 0x2c5: 0xa000, + 0x2c9: 0xa000, 0x2ca: 0x4857, 0x2cb: 0x4875, + 0x2cc: 0x36de, 0x2cd: 0x36f6, 0x2ce: 0x488d, 0x2d0: 0x01c1, 0x2d1: 0x01d3, + 0x2d2: 0x01af, 0x2d3: 0x4323, 0x2d4: 0x4329, 0x2d5: 0x01fd, 0x2d6: 0x01eb, + 0x2f0: 0x01d9, 0x2f1: 0x01ee, 0x2f2: 0x01f1, 0x2f4: 0x018b, 0x2f5: 0x01ca, + 0x2f9: 0x01a9, + // Block 0xc, offset 0x300 + 0x300: 0x3738, 0x301: 0x3744, 0x303: 0x3732, + 0x306: 0xa000, 0x307: 0x3720, + 0x30c: 0x3774, 0x30d: 0x375c, 0x30e: 0x3786, 0x310: 0xa000, + 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, + 0x318: 0xa000, 0x319: 0x3768, 0x31a: 0xa000, + 0x31e: 0xa000, 0x323: 0xa000, + 0x327: 0xa000, + 0x32b: 0xa000, 0x32d: 0xa000, + 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, + 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37ec, 0x33a: 0xa000, + 0x33e: 0xa000, + // Block 0xd, offset 0x340 + 0x341: 0x374a, 0x342: 0x37ce, + 0x350: 0x3726, 0x351: 0x37aa, + 0x352: 0x372c, 0x353: 0x37b0, 0x356: 0x373e, 0x357: 0x37c2, + 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3840, 0x35b: 0x3846, 0x35c: 0x3750, 0x35d: 0x37d4, + 0x35e: 0x3756, 0x35f: 0x37da, 0x362: 0x3762, 0x363: 0x37e6, + 0x364: 0x376e, 0x365: 0x37f2, 0x366: 0x377a, 0x367: 0x37fe, 0x368: 0xa000, 0x369: 0xa000, + 0x36a: 0x384c, 0x36b: 0x3852, 0x36c: 0x37a4, 0x36d: 0x3828, 0x36e: 0x3780, 0x36f: 0x3804, + 0x370: 0x378c, 0x371: 0x3810, 0x372: 0x3792, 0x373: 0x3816, 0x374: 0x3798, 0x375: 0x381c, + 0x378: 0x379e, 0x379: 0x3822, + // Block 0xe, offset 0x380 + 0x387: 0x1d67, + 0x391: 0x812e, + 0x392: 0x8133, 0x393: 0x8133, 0x394: 0x8133, 0x395: 0x8133, 0x396: 0x812e, 0x397: 0x8133, + 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x812f, 0x39b: 0x812e, 0x39c: 0x8133, 0x39d: 0x8133, + 0x39e: 0x8133, 0x39f: 0x8133, 0x3a0: 0x8133, 0x3a1: 0x8133, 0x3a2: 0x812e, 0x3a3: 0x812e, + 0x3a4: 0x812e, 0x3a5: 0x812e, 0x3a6: 0x812e, 0x3a7: 0x812e, 0x3a8: 0x8133, 0x3a9: 0x8133, + 0x3aa: 0x812e, 0x3ab: 0x8133, 0x3ac: 0x8133, 0x3ad: 0x812f, 0x3ae: 0x8132, 0x3af: 0x8133, + 0x3b0: 0x8106, 0x3b1: 0x8107, 0x3b2: 0x8108, 0x3b3: 0x8109, 0x3b4: 0x810a, 0x3b5: 0x810b, + 0x3b6: 0x810c, 0x3b7: 0x810d, 0x3b8: 0x810e, 0x3b9: 0x810f, 0x3ba: 0x810f, 0x3bb: 0x8110, + 0x3bc: 0x8111, 0x3bd: 0x8112, 0x3bf: 0x8113, + // Block 0xf, offset 0x3c0 + 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8117, + 0x3cc: 0x8118, 0x3cd: 0x8119, 0x3ce: 0x811a, 0x3cf: 0x811b, 0x3d0: 0x811c, 0x3d1: 0x811d, + 0x3d2: 0x811e, 0x3d3: 0x9933, 0x3d4: 0x9933, 0x3d5: 0x992e, 0x3d6: 0x812e, 0x3d7: 0x8133, + 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x812e, 0x3dd: 0x8133, + 0x3de: 0x8133, 0x3df: 0x812e, + 0x3f0: 0x811f, 0x3f5: 0x1d8a, + 0x3f6: 0x2019, 0x3f7: 0x2055, 0x3f8: 0x2050, + // Block 0x10, offset 0x400 + 0x413: 0x812e, 0x414: 0x8133, 0x415: 0x8133, 0x416: 0x8133, 0x417: 0x8133, + 0x418: 0x8133, 0x419: 0x8133, 0x41a: 0x8133, 0x41b: 0x8133, 0x41c: 0x8133, 0x41d: 0x8133, + 0x41e: 0x8133, 0x41f: 0x8133, 0x420: 0x8133, 0x421: 0x8133, 0x423: 0x812e, + 0x424: 0x8133, 0x425: 0x8133, 0x426: 0x812e, 0x427: 0x8133, 0x428: 0x8133, 0x429: 0x812e, + 0x42a: 0x8133, 0x42b: 0x8133, 0x42c: 0x8133, 0x42d: 0x812e, 0x42e: 0x812e, 0x42f: 0x812e, + 0x430: 0x8117, 0x431: 0x8118, 0x432: 0x8119, 0x433: 0x8133, 0x434: 0x8133, 0x435: 0x8133, + 0x436: 0x812e, 0x437: 0x8133, 0x438: 0x8133, 0x439: 0x812e, 0x43a: 0x812e, 0x43b: 0x8133, + 0x43c: 0x8133, 0x43d: 0x8133, 0x43e: 0x8133, 0x43f: 0x8133, + // Block 0x11, offset 0x440 + 0x445: 0xa000, + 0x446: 0x2d33, 0x447: 0xa000, 0x448: 0x2d3b, 0x449: 0xa000, 0x44a: 0x2d43, 0x44b: 0xa000, + 0x44c: 0x2d4b, 0x44d: 0xa000, 0x44e: 0x2d53, 0x451: 0xa000, + 0x452: 0x2d5b, + 0x474: 0x8103, 0x475: 0x9900, + 0x47a: 0xa000, 0x47b: 0x2d63, + 0x47c: 0xa000, 0x47d: 0x2d6b, 0x47e: 0xa000, 0x47f: 0xa000, + // Block 0x12, offset 0x480 + 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8, + 0x486: 0x0416, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107, + 0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0, + 0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x041a, 0x495: 0x041e, 0x496: 0x00a1, 0x497: 0x00a9, + 0x498: 0x00ab, 0x499: 0x0426, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x042a, 0x49d: 0x01c1, + 0x49e: 0x01c4, 0x49f: 0x01c7, 0x4a0: 0x01fd, 0x4a1: 0x0200, 0x4a2: 0x0093, 0x4a3: 0x00a5, + 0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01c1, 0x4a7: 0x01c4, 0x4a8: 0x01ee, 0x4a9: 0x01fd, + 0x4aa: 0x0200, + 0x4b8: 0x020f, + // Block 0x13, offset 0x4c0 + 0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101, + 0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116, + 0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042e, 0x4e8: 0x016d, 0x4e9: 0x0128, + 0x4ea: 0x0432, 0x4eb: 0x0170, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137, + 0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec, + 0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x0422, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5, + 0x4fc: 0x0161, 0x4fd: 0x0164, 0x4fe: 0x0167, 0x4ff: 0x01d3, + // Block 0x14, offset 0x500 + 0x500: 0x8133, 0x501: 0x8133, 0x502: 0x812e, 0x503: 0x8133, 0x504: 0x8133, 0x505: 0x8133, + 0x506: 0x8133, 0x507: 0x8133, 0x508: 0x8133, 0x509: 0x8133, 0x50a: 0x812e, 0x50b: 0x8133, + 0x50c: 0x8133, 0x50d: 0x8136, 0x50e: 0x812b, 0x50f: 0x812e, 0x510: 0x812a, 0x511: 0x8133, + 0x512: 0x8133, 0x513: 0x8133, 0x514: 0x8133, 0x515: 0x8133, 0x516: 0x8133, 0x517: 0x8133, + 0x518: 0x8133, 0x519: 0x8133, 0x51a: 0x8133, 0x51b: 0x8133, 0x51c: 0x8133, 0x51d: 0x8133, + 0x51e: 0x8133, 0x51f: 0x8133, 0x520: 0x8133, 0x521: 0x8133, 0x522: 0x8133, 0x523: 0x8133, + 0x524: 0x8133, 0x525: 0x8133, 0x526: 0x8133, 0x527: 0x8133, 0x528: 0x8133, 0x529: 0x8133, + 0x52a: 0x8133, 0x52b: 0x8133, 0x52c: 0x8133, 0x52d: 0x8133, 0x52e: 0x8133, 0x52f: 0x8133, + 0x530: 0x8133, 0x531: 0x8133, 0x532: 0x8133, 0x533: 0x8133, 0x534: 0x8133, 0x535: 0x8133, + 0x536: 0x8134, 0x537: 0x8132, 0x538: 0x8132, 0x539: 0x812e, 0x53b: 0x8133, + 0x53c: 0x8135, 0x53d: 0x812e, 0x53e: 0x8133, 0x53f: 0x812e, + // Block 0x15, offset 0x540 + 0x540: 0x2fae, 0x541: 0x32ba, 0x542: 0x2fb8, 0x543: 0x32c4, 0x544: 0x2fbd, 0x545: 0x32c9, + 0x546: 0x2fc2, 0x547: 0x32ce, 0x548: 0x38e3, 0x549: 0x3a72, 0x54a: 0x2fdb, 0x54b: 0x32e7, + 0x54c: 0x2fe5, 0x54d: 0x32f1, 0x54e: 0x2ff4, 0x54f: 0x3300, 0x550: 0x2fea, 0x551: 0x32f6, + 0x552: 0x2fef, 0x553: 0x32fb, 0x554: 0x3906, 0x555: 0x3a95, 0x556: 0x390d, 0x557: 0x3a9c, + 0x558: 0x3030, 0x559: 0x333c, 0x55a: 0x3035, 0x55b: 0x3341, 0x55c: 0x391b, 0x55d: 0x3aaa, + 0x55e: 0x303a, 0x55f: 0x3346, 0x560: 0x3049, 0x561: 0x3355, 0x562: 0x3067, 0x563: 0x3373, + 0x564: 0x3076, 0x565: 0x3382, 0x566: 0x306c, 0x567: 0x3378, 0x568: 0x307b, 0x569: 0x3387, + 0x56a: 0x3080, 0x56b: 0x338c, 0x56c: 0x30c6, 0x56d: 0x33d2, 0x56e: 0x3922, 0x56f: 0x3ab1, + 0x570: 0x30d0, 0x571: 0x33e1, 0x572: 0x30da, 0x573: 0x33eb, 0x574: 0x30e4, 0x575: 0x33f5, + 0x576: 0x46db, 0x577: 0x476c, 0x578: 0x3929, 0x579: 0x3ab8, 0x57a: 0x30fd, 0x57b: 0x340e, + 0x57c: 0x30f8, 0x57d: 0x3409, 0x57e: 0x3102, 0x57f: 0x3413, + // Block 0x16, offset 0x580 + 0x580: 0x3107, 0x581: 0x3418, 0x582: 0x310c, 0x583: 0x341d, 0x584: 0x3120, 0x585: 0x3431, + 0x586: 0x312a, 0x587: 0x343b, 0x588: 0x3139, 0x589: 0x344a, 0x58a: 0x3134, 0x58b: 0x3445, + 0x58c: 0x394c, 0x58d: 0x3adb, 0x58e: 0x395a, 0x58f: 0x3ae9, 0x590: 0x3961, 0x591: 0x3af0, + 0x592: 0x3968, 0x593: 0x3af7, 0x594: 0x3166, 0x595: 0x3477, 0x596: 0x316b, 0x597: 0x347c, + 0x598: 0x3175, 0x599: 0x3486, 0x59a: 0x4708, 0x59b: 0x4799, 0x59c: 0x39ae, 0x59d: 0x3b3d, + 0x59e: 0x318e, 0x59f: 0x349f, 0x5a0: 0x3198, 0x5a1: 0x34a9, 0x5a2: 0x4717, 0x5a3: 0x47a8, + 0x5a4: 0x39b5, 0x5a5: 0x3b44, 0x5a6: 0x39bc, 0x5a7: 0x3b4b, 0x5a8: 0x39c3, 0x5a9: 0x3b52, + 0x5aa: 0x31a7, 0x5ab: 0x34b8, 0x5ac: 0x31b1, 0x5ad: 0x34c7, 0x5ae: 0x31c5, 0x5af: 0x34db, + 0x5b0: 0x31c0, 0x5b1: 0x34d6, 0x5b2: 0x3201, 0x5b3: 0x3517, 0x5b4: 0x3210, 0x5b5: 0x3526, + 0x5b6: 0x320b, 0x5b7: 0x3521, 0x5b8: 0x39ca, 0x5b9: 0x3b59, 0x5ba: 0x39d1, 0x5bb: 0x3b60, + 0x5bc: 0x3215, 0x5bd: 0x352b, 0x5be: 0x321a, 0x5bf: 0x3530, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x321f, 0x5c1: 0x3535, 0x5c2: 0x3224, 0x5c3: 0x353a, 0x5c4: 0x3233, 0x5c5: 0x3549, + 0x5c6: 0x322e, 0x5c7: 0x3544, 0x5c8: 0x3238, 0x5c9: 0x3553, 0x5ca: 0x323d, 0x5cb: 0x3558, + 0x5cc: 0x3242, 0x5cd: 0x355d, 0x5ce: 0x3260, 0x5cf: 0x357b, 0x5d0: 0x3279, 0x5d1: 0x3599, + 0x5d2: 0x3288, 0x5d3: 0x35a8, 0x5d4: 0x328d, 0x5d5: 0x35ad, 0x5d6: 0x3391, 0x5d7: 0x34bd, + 0x5d8: 0x354e, 0x5d9: 0x358a, 0x5da: 0x1be6, 0x5db: 0x42ee, + 0x5e0: 0x46b8, 0x5e1: 0x4749, 0x5e2: 0x2f9a, 0x5e3: 0x32a6, + 0x5e4: 0x388f, 0x5e5: 0x3a1e, 0x5e6: 0x3888, 0x5e7: 0x3a17, 0x5e8: 0x389d, 0x5e9: 0x3a2c, + 0x5ea: 0x3896, 0x5eb: 0x3a25, 0x5ec: 0x38d5, 0x5ed: 0x3a64, 0x5ee: 0x38ab, 0x5ef: 0x3a3a, + 0x5f0: 0x38a4, 0x5f1: 0x3a33, 0x5f2: 0x38b9, 0x5f3: 0x3a48, 0x5f4: 0x38b2, 0x5f5: 0x3a41, + 0x5f6: 0x38dc, 0x5f7: 0x3a6b, 0x5f8: 0x46cc, 0x5f9: 0x475d, 0x5fa: 0x3017, 0x5fb: 0x3323, + 0x5fc: 0x3003, 0x5fd: 0x330f, 0x5fe: 0x38f1, 0x5ff: 0x3a80, + // Block 0x18, offset 0x600 + 0x600: 0x38ea, 0x601: 0x3a79, 0x602: 0x38ff, 0x603: 0x3a8e, 0x604: 0x38f8, 0x605: 0x3a87, + 0x606: 0x3914, 0x607: 0x3aa3, 0x608: 0x30a8, 0x609: 0x33b4, 0x60a: 0x30bc, 0x60b: 0x33c8, + 0x60c: 0x46fe, 0x60d: 0x478f, 0x60e: 0x314d, 0x60f: 0x345e, 0x610: 0x3937, 0x611: 0x3ac6, + 0x612: 0x3930, 0x613: 0x3abf, 0x614: 0x3945, 0x615: 0x3ad4, 0x616: 0x393e, 0x617: 0x3acd, + 0x618: 0x39a0, 0x619: 0x3b2f, 0x61a: 0x3984, 0x61b: 0x3b13, 0x61c: 0x397d, 0x61d: 0x3b0c, + 0x61e: 0x3992, 0x61f: 0x3b21, 0x620: 0x398b, 0x621: 0x3b1a, 0x622: 0x3999, 0x623: 0x3b28, + 0x624: 0x31fc, 0x625: 0x3512, 0x626: 0x31de, 0x627: 0x34f4, 0x628: 0x39fb, 0x629: 0x3b8a, + 0x62a: 0x39f4, 0x62b: 0x3b83, 0x62c: 0x3a09, 0x62d: 0x3b98, 0x62e: 0x3a02, 0x62f: 0x3b91, + 0x630: 0x3a10, 0x631: 0x3b9f, 0x632: 0x3247, 0x633: 0x3562, 0x634: 0x326f, 0x635: 0x358f, + 0x636: 0x326a, 0x637: 0x3585, 0x638: 0x3256, 0x639: 0x3571, + // Block 0x19, offset 0x640 + 0x640: 0x481b, 0x641: 0x4821, 0x642: 0x4935, 0x643: 0x494d, 0x644: 0x493d, 0x645: 0x4955, + 0x646: 0x4945, 0x647: 0x495d, 0x648: 0x47c1, 0x649: 0x47c7, 0x64a: 0x48a5, 0x64b: 0x48bd, + 0x64c: 0x48ad, 0x64d: 0x48c5, 0x64e: 0x48b5, 0x64f: 0x48cd, 0x650: 0x482d, 0x651: 0x4833, + 0x652: 0x3dcf, 0x653: 0x3ddf, 0x654: 0x3dd7, 0x655: 0x3de7, + 0x658: 0x47cd, 0x659: 0x47d3, 0x65a: 0x3cff, 0x65b: 0x3d0f, 0x65c: 0x3d07, 0x65d: 0x3d17, + 0x660: 0x4845, 0x661: 0x484b, 0x662: 0x4965, 0x663: 0x497d, + 0x664: 0x496d, 0x665: 0x4985, 0x666: 0x4975, 0x667: 0x498d, 0x668: 0x47d9, 0x669: 0x47df, + 0x66a: 0x48d5, 0x66b: 0x48ed, 0x66c: 0x48dd, 0x66d: 0x48f5, 0x66e: 0x48e5, 0x66f: 0x48fd, + 0x670: 0x485d, 0x671: 0x4863, 0x672: 0x3e2f, 0x673: 0x3e47, 0x674: 0x3e37, 0x675: 0x3e4f, + 0x676: 0x3e3f, 0x677: 0x3e57, 0x678: 0x47e5, 0x679: 0x47eb, 0x67a: 0x3d2f, 0x67b: 0x3d47, + 0x67c: 0x3d37, 0x67d: 0x3d4f, 0x67e: 0x3d3f, 0x67f: 0x3d57, + // Block 0x1a, offset 0x680 + 0x680: 0x4869, 0x681: 0x486f, 0x682: 0x3e5f, 0x683: 0x3e6f, 0x684: 0x3e67, 0x685: 0x3e77, + 0x688: 0x47f1, 0x689: 0x47f7, 0x68a: 0x3d5f, 0x68b: 0x3d6f, + 0x68c: 0x3d67, 0x68d: 0x3d77, 0x690: 0x487b, 0x691: 0x4881, + 0x692: 0x3e97, 0x693: 0x3eaf, 0x694: 0x3e9f, 0x695: 0x3eb7, 0x696: 0x3ea7, 0x697: 0x3ebf, + 0x699: 0x47fd, 0x69b: 0x3d7f, 0x69d: 0x3d87, + 0x69f: 0x3d8f, 0x6a0: 0x4893, 0x6a1: 0x4899, 0x6a2: 0x4995, 0x6a3: 0x49ad, + 0x6a4: 0x499d, 0x6a5: 0x49b5, 0x6a6: 0x49a5, 0x6a7: 0x49bd, 0x6a8: 0x4803, 0x6a9: 0x4809, + 0x6aa: 0x4905, 0x6ab: 0x491d, 0x6ac: 0x490d, 0x6ad: 0x4925, 0x6ae: 0x4915, 0x6af: 0x492d, + 0x6b0: 0x480f, 0x6b1: 0x4335, 0x6b2: 0x36a8, 0x6b3: 0x433b, 0x6b4: 0x4839, 0x6b5: 0x4341, + 0x6b6: 0x36ba, 0x6b7: 0x4347, 0x6b8: 0x36d8, 0x6b9: 0x434d, 0x6ba: 0x36f0, 0x6bb: 0x4353, + 0x6bc: 0x4887, 0x6bd: 0x4359, + // Block 0x1b, offset 0x6c0 + 0x6c0: 0x3db7, 0x6c1: 0x3dbf, 0x6c2: 0x419b, 0x6c3: 0x41b9, 0x6c4: 0x41a5, 0x6c5: 0x41c3, + 0x6c6: 0x41af, 0x6c7: 0x41cd, 0x6c8: 0x3cef, 0x6c9: 0x3cf7, 0x6ca: 0x40e7, 0x6cb: 0x4105, + 0x6cc: 0x40f1, 0x6cd: 0x410f, 0x6ce: 0x40fb, 0x6cf: 0x4119, 0x6d0: 0x3dff, 0x6d1: 0x3e07, + 0x6d2: 0x41d7, 0x6d3: 0x41f5, 0x6d4: 0x41e1, 0x6d5: 0x41ff, 0x6d6: 0x41eb, 0x6d7: 0x4209, + 0x6d8: 0x3d1f, 0x6d9: 0x3d27, 0x6da: 0x4123, 0x6db: 0x4141, 0x6dc: 0x412d, 0x6dd: 0x414b, + 0x6de: 0x4137, 0x6df: 0x4155, 0x6e0: 0x3ed7, 0x6e1: 0x3edf, 0x6e2: 0x4213, 0x6e3: 0x4231, + 0x6e4: 0x421d, 0x6e5: 0x423b, 0x6e6: 0x4227, 0x6e7: 0x4245, 0x6e8: 0x3d97, 0x6e9: 0x3d9f, + 0x6ea: 0x415f, 0x6eb: 0x417d, 0x6ec: 0x4169, 0x6ed: 0x4187, 0x6ee: 0x4173, 0x6ef: 0x4191, + 0x6f0: 0x369c, 0x6f1: 0x3696, 0x6f2: 0x3da7, 0x6f3: 0x36a2, 0x6f4: 0x3daf, + 0x6f6: 0x4827, 0x6f7: 0x3dc7, 0x6f8: 0x360c, 0x6f9: 0x3606, 0x6fa: 0x35fa, 0x6fb: 0x4305, + 0x6fc: 0x3612, 0x6fd: 0x429e, 0x6fe: 0x01d6, 0x6ff: 0x429e, + // Block 0x1c, offset 0x700 + 0x700: 0x42b7, 0x701: 0x4499, 0x702: 0x3def, 0x703: 0x36b4, 0x704: 0x3df7, + 0x706: 0x4851, 0x707: 0x3e0f, 0x708: 0x3618, 0x709: 0x430b, 0x70a: 0x3624, 0x70b: 0x4311, + 0x70c: 0x3630, 0x70d: 0x44a0, 0x70e: 0x44a7, 0x70f: 0x44ae, 0x710: 0x36cc, 0x711: 0x36c6, + 0x712: 0x3e17, 0x713: 0x44fb, 0x716: 0x36d2, 0x717: 0x3e27, + 0x718: 0x3648, 0x719: 0x3642, 0x71a: 0x3636, 0x71b: 0x4317, 0x71d: 0x44b5, + 0x71e: 0x44bc, 0x71f: 0x44c3, 0x720: 0x3702, 0x721: 0x36fc, 0x722: 0x3e7f, 0x723: 0x4503, + 0x724: 0x36e4, 0x725: 0x36ea, 0x726: 0x3708, 0x727: 0x3e8f, 0x728: 0x3678, 0x729: 0x3672, + 0x72a: 0x3666, 0x72b: 0x4323, 0x72c: 0x3660, 0x72d: 0x448b, 0x72e: 0x4492, 0x72f: 0x0081, + 0x732: 0x3ec7, 0x733: 0x370e, 0x734: 0x3ecf, + 0x736: 0x489f, 0x737: 0x3ee7, 0x738: 0x3654, 0x739: 0x431d, 0x73a: 0x3684, 0x73b: 0x432f, + 0x73c: 0x3690, 0x73d: 0x4271, 0x73e: 0x42a3, + // Block 0x1d, offset 0x740 + 0x740: 0x1bde, 0x741: 0x1be2, 0x742: 0x0047, 0x743: 0x1c5a, 0x745: 0x1bee, + 0x746: 0x1bf2, 0x747: 0x00e9, 0x749: 0x1c5e, 0x74a: 0x008f, 0x74b: 0x0051, + 0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053, + 0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1993, + 0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065, + 0x760: 0x19a5, 0x761: 0x1bce, 0x762: 0x19ae, + 0x764: 0x0075, 0x766: 0x01bb, 0x768: 0x0075, + 0x76a: 0x0057, 0x76b: 0x42e9, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, + 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0218, + 0x776: 0x021b, 0x777: 0x021e, 0x778: 0x0221, 0x779: 0x0093, 0x77b: 0x1b9e, + 0x77c: 0x01eb, 0x77d: 0x01c4, 0x77e: 0x017c, 0x77f: 0x01a3, + // Block 0x1e, offset 0x780 + 0x780: 0x0466, 0x785: 0x0049, + 0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095, + 0x790: 0x2234, 0x791: 0x2240, + 0x792: 0x22f4, 0x793: 0x221c, 0x794: 0x22a0, 0x795: 0x2228, 0x796: 0x22a6, 0x797: 0x22be, + 0x798: 0x22ca, 0x799: 0x222e, 0x79a: 0x22d0, 0x79b: 0x223a, 0x79c: 0x22c4, 0x79d: 0x22d6, + 0x79e: 0x22dc, 0x79f: 0x1cc2, 0x7a0: 0x0053, 0x7a1: 0x195d, 0x7a2: 0x1baa, 0x7a3: 0x1966, + 0x7a4: 0x006d, 0x7a5: 0x19b1, 0x7a6: 0x1bd6, 0x7a7: 0x1d4e, 0x7a8: 0x1969, 0x7a9: 0x0071, + 0x7aa: 0x19bd, 0x7ab: 0x1bda, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b, + 0x7b0: 0x0093, 0x7b1: 0x19ea, 0x7b2: 0x1c1e, 0x7b3: 0x19f3, 0x7b4: 0x00ad, 0x7b5: 0x1a68, + 0x7b6: 0x1c52, 0x7b7: 0x1d62, 0x7b8: 0x19f6, 0x7b9: 0x00b1, 0x7ba: 0x1a6b, 0x7bb: 0x1c56, + 0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x3c1d, 0x7c3: 0xa000, 0x7c4: 0x3c24, 0x7c5: 0xa000, + 0x7c7: 0x3c2b, 0x7c8: 0xa000, 0x7c9: 0x3c32, + 0x7cd: 0xa000, + 0x7e0: 0x2f7c, 0x7e1: 0xa000, 0x7e2: 0x3c40, + 0x7e4: 0xa000, 0x7e5: 0xa000, + 0x7ed: 0x3c39, 0x7ee: 0x2f77, 0x7ef: 0x2f81, + 0x7f0: 0x3c47, 0x7f1: 0x3c4e, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c55, 0x7f5: 0x3c5c, + 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c63, 0x7f9: 0x3c6a, 0x7fa: 0xa000, 0x7fb: 0xa000, + 0x7fc: 0xa000, 0x7fd: 0xa000, + // Block 0x20, offset 0x800 + 0x800: 0x3c71, 0x801: 0x3c78, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c8d, 0x805: 0x3c94, + 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c9b, 0x809: 0x3ca2, + 0x811: 0xa000, + 0x812: 0xa000, + 0x822: 0xa000, + 0x828: 0xa000, 0x829: 0xa000, + 0x82b: 0xa000, 0x82c: 0x3cb7, 0x82d: 0x3cbe, 0x82e: 0x3cc5, 0x82f: 0x3ccc, + 0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000, + // Block 0x21, offset 0x840 + 0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029, + 0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1885, + 0x86a: 0x1888, 0x86b: 0x188b, 0x86c: 0x188e, 0x86d: 0x1891, 0x86e: 0x1894, 0x86f: 0x1897, + 0x870: 0x189a, 0x871: 0x189d, 0x872: 0x18a0, 0x873: 0x18a9, 0x874: 0x1a6e, 0x875: 0x1a72, + 0x876: 0x1a76, 0x877: 0x1a7a, 0x878: 0x1a7e, 0x879: 0x1a82, 0x87a: 0x1a86, 0x87b: 0x1a8a, + 0x87c: 0x1a8e, 0x87d: 0x1c86, 0x87e: 0x1c8b, 0x87f: 0x1c90, + // Block 0x22, offset 0x880 + 0x880: 0x1c95, 0x881: 0x1c9a, 0x882: 0x1c9f, 0x883: 0x1ca4, 0x884: 0x1ca9, 0x885: 0x1cae, + 0x886: 0x1cb3, 0x887: 0x1cb8, 0x888: 0x1882, 0x889: 0x18a6, 0x88a: 0x18ca, 0x88b: 0x18ee, + 0x88c: 0x1912, 0x88d: 0x191b, 0x88e: 0x1921, 0x88f: 0x1927, 0x890: 0x192d, 0x891: 0x1b66, + 0x892: 0x1b6a, 0x893: 0x1b6e, 0x894: 0x1b72, 0x895: 0x1b76, 0x896: 0x1b7a, 0x897: 0x1b7e, + 0x898: 0x1b82, 0x899: 0x1b86, 0x89a: 0x1b8a, 0x89b: 0x1b8e, 0x89c: 0x1afa, 0x89d: 0x1afe, + 0x89e: 0x1b02, 0x89f: 0x1b06, 0x8a0: 0x1b0a, 0x8a1: 0x1b0e, 0x8a2: 0x1b12, 0x8a3: 0x1b16, + 0x8a4: 0x1b1a, 0x8a5: 0x1b1e, 0x8a6: 0x1b22, 0x8a7: 0x1b26, 0x8a8: 0x1b2a, 0x8a9: 0x1b2e, + 0x8aa: 0x1b32, 0x8ab: 0x1b36, 0x8ac: 0x1b3a, 0x8ad: 0x1b3e, 0x8ae: 0x1b42, 0x8af: 0x1b46, + 0x8b0: 0x1b4a, 0x8b1: 0x1b4e, 0x8b2: 0x1b52, 0x8b3: 0x1b56, 0x8b4: 0x1b5a, 0x8b5: 0x1b5e, + 0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d, + 0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055, + // Block 0x23, offset 0x8c0 + 0x8c0: 0x06c2, 0x8c1: 0x06e6, 0x8c2: 0x06f2, 0x8c3: 0x0702, 0x8c4: 0x070a, 0x8c5: 0x0716, + 0x8c6: 0x071e, 0x8c7: 0x0726, 0x8c8: 0x0732, 0x8c9: 0x0786, 0x8ca: 0x079e, 0x8cb: 0x07ae, + 0x8cc: 0x07be, 0x8cd: 0x07ce, 0x8ce: 0x07de, 0x8cf: 0x07fe, 0x8d0: 0x0802, 0x8d1: 0x0806, + 0x8d2: 0x083a, 0x8d3: 0x0862, 0x8d4: 0x0872, 0x8d5: 0x087a, 0x8d6: 0x087e, 0x8d7: 0x088a, + 0x8d8: 0x08a6, 0x8d9: 0x08aa, 0x8da: 0x08c2, 0x8db: 0x08c6, 0x8dc: 0x08ce, 0x8dd: 0x08de, + 0x8de: 0x097a, 0x8df: 0x098e, 0x8e0: 0x09ce, 0x8e1: 0x09e2, 0x8e2: 0x09ea, 0x8e3: 0x09ee, + 0x8e4: 0x09fe, 0x8e5: 0x0a1a, 0x8e6: 0x0a46, 0x8e7: 0x0a52, 0x8e8: 0x0a72, 0x8e9: 0x0a7e, + 0x8ea: 0x0a82, 0x8eb: 0x0a86, 0x8ec: 0x0a9e, 0x8ed: 0x0aa2, 0x8ee: 0x0ace, 0x8ef: 0x0ada, + 0x8f0: 0x0ae2, 0x8f1: 0x0aea, 0x8f2: 0x0afa, 0x8f3: 0x0b02, 0x8f4: 0x0b0a, 0x8f5: 0x0b36, + 0x8f6: 0x0b3a, 0x8f7: 0x0b42, 0x8f8: 0x0b46, 0x8f9: 0x0b4e, 0x8fa: 0x0b56, 0x8fb: 0x0b66, + 0x8fc: 0x0b82, 0x8fd: 0x0bfa, 0x8fe: 0x0c0e, 0x8ff: 0x0c12, + // Block 0x24, offset 0x900 + 0x900: 0x0c92, 0x901: 0x0c96, 0x902: 0x0caa, 0x903: 0x0cae, 0x904: 0x0cb6, 0x905: 0x0cbe, + 0x906: 0x0cc6, 0x907: 0x0cd2, 0x908: 0x0cfa, 0x909: 0x0d0a, 0x90a: 0x0d1e, 0x90b: 0x0d8e, + 0x90c: 0x0d9a, 0x90d: 0x0daa, 0x90e: 0x0db6, 0x90f: 0x0dc2, 0x910: 0x0dca, 0x911: 0x0dce, + 0x912: 0x0dd2, 0x913: 0x0dd6, 0x914: 0x0dda, 0x915: 0x0e92, 0x916: 0x0eda, 0x917: 0x0ee6, + 0x918: 0x0eea, 0x919: 0x0eee, 0x91a: 0x0ef2, 0x91b: 0x0efa, 0x91c: 0x0efe, 0x91d: 0x0f12, + 0x91e: 0x0f2e, 0x91f: 0x0f36, 0x920: 0x0f76, 0x921: 0x0f7a, 0x922: 0x0f82, 0x923: 0x0f86, + 0x924: 0x0f8e, 0x925: 0x0f92, 0x926: 0x0fb6, 0x927: 0x0fba, 0x928: 0x0fd6, 0x929: 0x0fda, + 0x92a: 0x0fde, 0x92b: 0x0fe2, 0x92c: 0x0ff6, 0x92d: 0x101a, 0x92e: 0x101e, 0x92f: 0x1022, + 0x930: 0x1046, 0x931: 0x1086, 0x932: 0x108a, 0x933: 0x10aa, 0x934: 0x10ba, 0x935: 0x10c2, + 0x936: 0x10e2, 0x937: 0x1106, 0x938: 0x114a, 0x939: 0x1152, 0x93a: 0x1166, 0x93b: 0x1172, + 0x93c: 0x117a, 0x93d: 0x1182, 0x93e: 0x1186, 0x93f: 0x118a, + // Block 0x25, offset 0x940 + 0x940: 0x11a2, 0x941: 0x11a6, 0x942: 0x11c2, 0x943: 0x11ca, 0x944: 0x11d2, 0x945: 0x11d6, + 0x946: 0x11e2, 0x947: 0x11ea, 0x948: 0x11ee, 0x949: 0x11f2, 0x94a: 0x11fa, 0x94b: 0x11fe, + 0x94c: 0x129e, 0x94d: 0x12b2, 0x94e: 0x12e6, 0x94f: 0x12ea, 0x950: 0x12f2, 0x951: 0x131e, + 0x952: 0x1326, 0x953: 0x132e, 0x954: 0x1336, 0x955: 0x1372, 0x956: 0x1376, 0x957: 0x137e, + 0x958: 0x1382, 0x959: 0x1386, 0x95a: 0x13b2, 0x95b: 0x13b6, 0x95c: 0x13be, 0x95d: 0x13d2, + 0x95e: 0x13d6, 0x95f: 0x13f2, 0x960: 0x13fa, 0x961: 0x13fe, 0x962: 0x1422, 0x963: 0x1442, + 0x964: 0x1456, 0x965: 0x145a, 0x966: 0x1462, 0x967: 0x148e, 0x968: 0x1492, 0x969: 0x14a2, + 0x96a: 0x14c6, 0x96b: 0x14d2, 0x96c: 0x14e2, 0x96d: 0x14fa, 0x96e: 0x1502, 0x96f: 0x1506, + 0x970: 0x150a, 0x971: 0x150e, 0x972: 0x151a, 0x973: 0x151e, 0x974: 0x1526, 0x975: 0x1542, + 0x976: 0x1546, 0x977: 0x154a, 0x978: 0x1562, 0x979: 0x1566, 0x97a: 0x156e, 0x97b: 0x1582, + 0x97c: 0x1586, 0x97d: 0x158a, 0x97e: 0x1592, 0x97f: 0x1596, + // Block 0x26, offset 0x980 + 0x986: 0xa000, 0x98b: 0xa000, + 0x98c: 0x3f1f, 0x98d: 0xa000, 0x98e: 0x3f27, 0x98f: 0xa000, 0x990: 0x3f2f, 0x991: 0xa000, + 0x992: 0x3f37, 0x993: 0xa000, 0x994: 0x3f3f, 0x995: 0xa000, 0x996: 0x3f47, 0x997: 0xa000, + 0x998: 0x3f4f, 0x999: 0xa000, 0x99a: 0x3f57, 0x99b: 0xa000, 0x99c: 0x3f5f, 0x99d: 0xa000, + 0x99e: 0x3f67, 0x99f: 0xa000, 0x9a0: 0x3f6f, 0x9a1: 0xa000, 0x9a2: 0x3f77, + 0x9a4: 0xa000, 0x9a5: 0x3f7f, 0x9a6: 0xa000, 0x9a7: 0x3f87, 0x9a8: 0xa000, 0x9a9: 0x3f8f, + 0x9af: 0xa000, + 0x9b0: 0x3f97, 0x9b1: 0x3f9f, 0x9b2: 0xa000, 0x9b3: 0x3fa7, 0x9b4: 0x3faf, 0x9b5: 0xa000, + 0x9b6: 0x3fb7, 0x9b7: 0x3fbf, 0x9b8: 0xa000, 0x9b9: 0x3fc7, 0x9ba: 0x3fcf, 0x9bb: 0xa000, + 0x9bc: 0x3fd7, 0x9bd: 0x3fdf, + // Block 0x27, offset 0x9c0 + 0x9d4: 0x3f17, + 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x42f3, 0x9dc: 0x42f9, 0x9dd: 0xa000, + 0x9de: 0x3fe7, 0x9df: 0x26ba, + 0x9e6: 0xa000, + 0x9eb: 0xa000, 0x9ec: 0x3ff7, 0x9ed: 0xa000, 0x9ee: 0x3fff, 0x9ef: 0xa000, + 0x9f0: 0x4007, 0x9f1: 0xa000, 0x9f2: 0x400f, 0x9f3: 0xa000, 0x9f4: 0x4017, 0x9f5: 0xa000, + 0x9f6: 0x401f, 0x9f7: 0xa000, 0x9f8: 0x4027, 0x9f9: 0xa000, 0x9fa: 0x402f, 0x9fb: 0xa000, + 0x9fc: 0x4037, 0x9fd: 0xa000, 0x9fe: 0x403f, 0x9ff: 0xa000, + // Block 0x28, offset 0xa00 + 0xa00: 0x4047, 0xa01: 0xa000, 0xa02: 0x404f, 0xa04: 0xa000, 0xa05: 0x4057, + 0xa06: 0xa000, 0xa07: 0x405f, 0xa08: 0xa000, 0xa09: 0x4067, + 0xa0f: 0xa000, 0xa10: 0x406f, 0xa11: 0x4077, + 0xa12: 0xa000, 0xa13: 0x407f, 0xa14: 0x4087, 0xa15: 0xa000, 0xa16: 0x408f, 0xa17: 0x4097, + 0xa18: 0xa000, 0xa19: 0x409f, 0xa1a: 0x40a7, 0xa1b: 0xa000, 0xa1c: 0x40af, 0xa1d: 0x40b7, + 0xa2f: 0xa000, + 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fef, + 0xa37: 0x40bf, 0xa38: 0x40c7, 0xa39: 0x40cf, 0xa3a: 0x40d7, + 0xa3d: 0xa000, 0xa3e: 0x40df, 0xa3f: 0x26cf, + // Block 0x29, offset 0xa40 + 0xa40: 0x036a, 0xa41: 0x032e, 0xa42: 0x0332, 0xa43: 0x0336, 0xa44: 0x037e, 0xa45: 0x033a, + 0xa46: 0x033e, 0xa47: 0x0342, 0xa48: 0x0346, 0xa49: 0x034a, 0xa4a: 0x034e, 0xa4b: 0x0352, + 0xa4c: 0x0356, 0xa4d: 0x035a, 0xa4e: 0x035e, 0xa4f: 0x49d4, 0xa50: 0x49da, 0xa51: 0x49e0, + 0xa52: 0x49e6, 0xa53: 0x49ec, 0xa54: 0x49f2, 0xa55: 0x49f8, 0xa56: 0x49fe, 0xa57: 0x4a04, + 0xa58: 0x4a0a, 0xa59: 0x4a10, 0xa5a: 0x4a16, 0xa5b: 0x4a1c, 0xa5c: 0x4a22, 0xa5d: 0x4a28, + 0xa5e: 0x4a2e, 0xa5f: 0x4a34, 0xa60: 0x4a3a, 0xa61: 0x4a40, 0xa62: 0x4a46, 0xa63: 0x4a4c, + 0xa64: 0x03c6, 0xa65: 0x0362, 0xa66: 0x0366, 0xa67: 0x03ea, 0xa68: 0x03ee, 0xa69: 0x03f2, + 0xa6a: 0x03f6, 0xa6b: 0x03fa, 0xa6c: 0x03fe, 0xa6d: 0x0402, 0xa6e: 0x036e, 0xa6f: 0x0406, + 0xa70: 0x040a, 0xa71: 0x0372, 0xa72: 0x0376, 0xa73: 0x037a, 0xa74: 0x0382, 0xa75: 0x0386, + 0xa76: 0x038a, 0xa77: 0x038e, 0xa78: 0x0392, 0xa79: 0x0396, 0xa7a: 0x039a, 0xa7b: 0x039e, + 0xa7c: 0x03a2, 0xa7d: 0x03a6, 0xa7e: 0x03aa, 0xa7f: 0x03ae, + // Block 0x2a, offset 0xa80 + 0xa80: 0x03b2, 0xa81: 0x03b6, 0xa82: 0x040e, 0xa83: 0x0412, 0xa84: 0x03ba, 0xa85: 0x03be, + 0xa86: 0x03c2, 0xa87: 0x03ca, 0xa88: 0x03ce, 0xa89: 0x03d2, 0xa8a: 0x03d6, 0xa8b: 0x03da, + 0xa8c: 0x03de, 0xa8d: 0x03e2, 0xa8e: 0x03e6, + 0xa92: 0x06c2, 0xa93: 0x071e, 0xa94: 0x06ce, 0xa95: 0x097e, 0xa96: 0x06d2, 0xa97: 0x06ea, + 0xa98: 0x06d6, 0xa99: 0x0f96, 0xa9a: 0x070a, 0xa9b: 0x06de, 0xa9c: 0x06c6, 0xa9d: 0x0a02, + 0xa9e: 0x0992, 0xa9f: 0x0732, + // Block 0x2b, offset 0xac0 + 0xac0: 0x205a, 0xac1: 0x2060, 0xac2: 0x2066, 0xac3: 0x206c, 0xac4: 0x2072, 0xac5: 0x2078, + 0xac6: 0x207e, 0xac7: 0x2084, 0xac8: 0x208a, 0xac9: 0x2090, 0xaca: 0x2096, 0xacb: 0x209c, + 0xacc: 0x20a2, 0xacd: 0x20a8, 0xace: 0x2733, 0xacf: 0x273c, 0xad0: 0x2745, 0xad1: 0x274e, + 0xad2: 0x2757, 0xad3: 0x2760, 0xad4: 0x2769, 0xad5: 0x2772, 0xad6: 0x277b, 0xad7: 0x278d, + 0xad8: 0x2796, 0xad9: 0x279f, 0xada: 0x27a8, 0xadb: 0x27b1, 0xadc: 0x2784, 0xadd: 0x2bb9, + 0xade: 0x2afa, 0xae0: 0x20ae, 0xae1: 0x20c6, 0xae2: 0x20ba, 0xae3: 0x210e, + 0xae4: 0x20cc, 0xae5: 0x20ea, 0xae6: 0x20b4, 0xae7: 0x20e4, 0xae8: 0x20c0, 0xae9: 0x20f6, + 0xaea: 0x2126, 0xaeb: 0x2144, 0xaec: 0x213e, 0xaed: 0x2132, 0xaee: 0x2180, 0xaef: 0x2114, + 0xaf0: 0x2120, 0xaf1: 0x2138, 0xaf2: 0x212c, 0xaf3: 0x2156, 0xaf4: 0x2102, 0xaf5: 0x214a, + 0xaf6: 0x2174, 0xaf7: 0x215c, 0xaf8: 0x20f0, 0xaf9: 0x20d2, 0xafa: 0x2108, 0xafb: 0x211a, + 0xafc: 0x2150, 0xafd: 0x20d8, 0xafe: 0x217a, 0xaff: 0x20fc, + // Block 0x2c, offset 0xb00 + 0xb00: 0x2162, 0xb01: 0x20de, 0xb02: 0x2168, 0xb03: 0x216e, 0xb04: 0x0932, 0xb05: 0x0b06, + 0xb06: 0x0caa, 0xb07: 0x10ca, + 0xb10: 0x1bca, 0xb11: 0x18ac, + 0xb12: 0x18af, 0xb13: 0x18b2, 0xb14: 0x18b5, 0xb15: 0x18b8, 0xb16: 0x18bb, 0xb17: 0x18be, + 0xb18: 0x18c1, 0xb19: 0x18c4, 0xb1a: 0x18cd, 0xb1b: 0x18d0, 0xb1c: 0x18d3, 0xb1d: 0x18d6, + 0xb1e: 0x18d9, 0xb1f: 0x18dc, 0xb20: 0x0316, 0xb21: 0x031e, 0xb22: 0x0322, 0xb23: 0x032a, + 0xb24: 0x032e, 0xb25: 0x0332, 0xb26: 0x033a, 0xb27: 0x0342, 0xb28: 0x0346, 0xb29: 0x034e, + 0xb2a: 0x0352, 0xb2b: 0x0356, 0xb2c: 0x035a, 0xb2d: 0x035e, 0xb2e: 0x2e2f, 0xb2f: 0x2e37, + 0xb30: 0x2e3f, 0xb31: 0x2e47, 0xb32: 0x2e4f, 0xb33: 0x2e57, 0xb34: 0x2e5f, 0xb35: 0x2e67, + 0xb36: 0x2e77, 0xb37: 0x2e7f, 0xb38: 0x2e87, 0xb39: 0x2e8f, 0xb3a: 0x2e97, 0xb3b: 0x2e9f, + 0xb3c: 0x2eea, 0xb3d: 0x2eb2, 0xb3e: 0x2e6f, + // Block 0x2d, offset 0xb40 + 0xb40: 0x06c2, 0xb41: 0x071e, 0xb42: 0x06ce, 0xb43: 0x097e, 0xb44: 0x0722, 0xb45: 0x07b2, + 0xb46: 0x06ca, 0xb47: 0x07ae, 0xb48: 0x070e, 0xb49: 0x088a, 0xb4a: 0x0d0a, 0xb4b: 0x0e92, + 0xb4c: 0x0dda, 0xb4d: 0x0d1e, 0xb4e: 0x1462, 0xb4f: 0x098e, 0xb50: 0x0cd2, 0xb51: 0x0d4e, + 0xb52: 0x0d0e, 0xb53: 0x104e, 0xb54: 0x08fe, 0xb55: 0x0f06, 0xb56: 0x138a, 0xb57: 0x1062, + 0xb58: 0x0846, 0xb59: 0x1092, 0xb5a: 0x0f9e, 0xb5b: 0x0a1a, 0xb5c: 0x1412, 0xb5d: 0x0782, + 0xb5e: 0x08ae, 0xb5f: 0x0dfa, 0xb60: 0x152a, 0xb61: 0x0746, 0xb62: 0x07d6, 0xb63: 0x0d9e, + 0xb64: 0x06d2, 0xb65: 0x06ea, 0xb66: 0x06d6, 0xb67: 0x0ade, 0xb68: 0x08f2, 0xb69: 0x0882, + 0xb6a: 0x0a5a, 0xb6b: 0x0a4e, 0xb6c: 0x0fee, 0xb6d: 0x0742, 0xb6e: 0x139e, 0xb6f: 0x089e, + 0xb70: 0x09f6, 0xb71: 0x18df, 0xb72: 0x18e2, 0xb73: 0x18e5, 0xb74: 0x18e8, 0xb75: 0x18f1, + 0xb76: 0x18f4, 0xb77: 0x18f7, 0xb78: 0x18fa, 0xb79: 0x18fd, 0xb7a: 0x1900, 0xb7b: 0x1903, + 0xb7c: 0x1906, 0xb7d: 0x1909, 0xb7e: 0x190c, 0xb7f: 0x1915, + // Block 0x2e, offset 0xb80 + 0xb80: 0x1ccc, 0xb81: 0x1cdb, 0xb82: 0x1cea, 0xb83: 0x1cf9, 0xb84: 0x1d08, 0xb85: 0x1d17, + 0xb86: 0x1d26, 0xb87: 0x1d35, 0xb88: 0x1d44, 0xb89: 0x2192, 0xb8a: 0x21a4, 0xb8b: 0x21b6, + 0xb8c: 0x1957, 0xb8d: 0x1c0a, 0xb8e: 0x19d8, 0xb8f: 0x1bae, 0xb90: 0x04ce, 0xb91: 0x04d6, + 0xb92: 0x04de, 0xb93: 0x04e6, 0xb94: 0x04ee, 0xb95: 0x04f2, 0xb96: 0x04f6, 0xb97: 0x04fa, + 0xb98: 0x04fe, 0xb99: 0x0502, 0xb9a: 0x0506, 0xb9b: 0x050a, 0xb9c: 0x050e, 0xb9d: 0x0512, + 0xb9e: 0x0516, 0xb9f: 0x051a, 0xba0: 0x051e, 0xba1: 0x0526, 0xba2: 0x052a, 0xba3: 0x052e, + 0xba4: 0x0532, 0xba5: 0x0536, 0xba6: 0x053a, 0xba7: 0x053e, 0xba8: 0x0542, 0xba9: 0x0546, + 0xbaa: 0x054a, 0xbab: 0x054e, 0xbac: 0x0552, 0xbad: 0x0556, 0xbae: 0x055a, 0xbaf: 0x055e, + 0xbb0: 0x0562, 0xbb1: 0x0566, 0xbb2: 0x056a, 0xbb3: 0x0572, 0xbb4: 0x057a, 0xbb5: 0x0582, + 0xbb6: 0x0586, 0xbb7: 0x058a, 0xbb8: 0x058e, 0xbb9: 0x0592, 0xbba: 0x0596, 0xbbb: 0x059a, + 0xbbc: 0x059e, 0xbbd: 0x05a2, 0xbbe: 0x05a6, 0xbbf: 0x2700, + // Block 0x2f, offset 0xbc0 + 0xbc0: 0x2b19, 0xbc1: 0x29b5, 0xbc2: 0x2b29, 0xbc3: 0x288d, 0xbc4: 0x2efb, 0xbc5: 0x2897, + 0xbc6: 0x28a1, 0xbc7: 0x2f3f, 0xbc8: 0x29c2, 0xbc9: 0x28ab, 0xbca: 0x28b5, 0xbcb: 0x28bf, + 0xbcc: 0x29e9, 0xbcd: 0x29f6, 0xbce: 0x29cf, 0xbcf: 0x29dc, 0xbd0: 0x2ec0, 0xbd1: 0x2a03, + 0xbd2: 0x2a10, 0xbd3: 0x2bcb, 0xbd4: 0x26c1, 0xbd5: 0x2bde, 0xbd6: 0x2bf1, 0xbd7: 0x2b39, + 0xbd8: 0x2a1d, 0xbd9: 0x2c04, 0xbda: 0x2c17, 0xbdb: 0x2a2a, 0xbdc: 0x28c9, 0xbdd: 0x28d3, + 0xbde: 0x2ece, 0xbdf: 0x2a37, 0xbe0: 0x2b49, 0xbe1: 0x2f0c, 0xbe2: 0x28dd, 0xbe3: 0x28e7, + 0xbe4: 0x2a44, 0xbe5: 0x28f1, 0xbe6: 0x28fb, 0xbe7: 0x26d6, 0xbe8: 0x26dd, 0xbe9: 0x2905, + 0xbea: 0x290f, 0xbeb: 0x2c2a, 0xbec: 0x2a51, 0xbed: 0x2b59, 0xbee: 0x2c3d, 0xbef: 0x2a5e, + 0xbf0: 0x2923, 0xbf1: 0x2919, 0xbf2: 0x2f53, 0xbf3: 0x2a6b, 0xbf4: 0x2c50, 0xbf5: 0x292d, + 0xbf6: 0x2b69, 0xbf7: 0x2937, 0xbf8: 0x2a85, 0xbf9: 0x2941, 0xbfa: 0x2a92, 0xbfb: 0x2f1d, + 0xbfc: 0x2a78, 0xbfd: 0x2b79, 0xbfe: 0x2a9f, 0xbff: 0x26e4, + // Block 0x30, offset 0xc00 + 0xc00: 0x2f2e, 0xc01: 0x294b, 0xc02: 0x2955, 0xc03: 0x2aac, 0xc04: 0x295f, 0xc05: 0x2969, + 0xc06: 0x2973, 0xc07: 0x2b89, 0xc08: 0x2ab9, 0xc09: 0x26eb, 0xc0a: 0x2c63, 0xc0b: 0x2ea7, + 0xc0c: 0x2b99, 0xc0d: 0x2ac6, 0xc0e: 0x2edc, 0xc0f: 0x297d, 0xc10: 0x2987, 0xc11: 0x2ad3, + 0xc12: 0x26f2, 0xc13: 0x2ae0, 0xc14: 0x2ba9, 0xc15: 0x26f9, 0xc16: 0x2c76, 0xc17: 0x2991, + 0xc18: 0x1cbd, 0xc19: 0x1cd1, 0xc1a: 0x1ce0, 0xc1b: 0x1cef, 0xc1c: 0x1cfe, 0xc1d: 0x1d0d, + 0xc1e: 0x1d1c, 0xc1f: 0x1d2b, 0xc20: 0x1d3a, 0xc21: 0x1d49, 0xc22: 0x2198, 0xc23: 0x21aa, + 0xc24: 0x21bc, 0xc25: 0x21c8, 0xc26: 0x21d4, 0xc27: 0x21e0, 0xc28: 0x21ec, 0xc29: 0x21f8, + 0xc2a: 0x2204, 0xc2b: 0x2210, 0xc2c: 0x224c, 0xc2d: 0x2258, 0xc2e: 0x2264, 0xc2f: 0x2270, + 0xc30: 0x227c, 0xc31: 0x1c1a, 0xc32: 0x19cc, 0xc33: 0x1939, 0xc34: 0x1bea, 0xc35: 0x1a4d, + 0xc36: 0x1a5c, 0xc37: 0x19d2, 0xc38: 0x1c02, 0xc39: 0x1c06, 0xc3a: 0x1963, 0xc3b: 0x270e, + 0xc3c: 0x271c, 0xc3d: 0x2707, 0xc3e: 0x2715, 0xc3f: 0x2aed, + // Block 0x31, offset 0xc40 + 0xc40: 0x1a50, 0xc41: 0x1a38, 0xc42: 0x1c66, 0xc43: 0x1a20, 0xc44: 0x19f9, 0xc45: 0x196c, + 0xc46: 0x197b, 0xc47: 0x194b, 0xc48: 0x1bf6, 0xc49: 0x1d58, 0xc4a: 0x1a53, 0xc4b: 0x1a3b, + 0xc4c: 0x1c6a, 0xc4d: 0x1c76, 0xc4e: 0x1a2c, 0xc4f: 0x1a02, 0xc50: 0x195a, 0xc51: 0x1c22, + 0xc52: 0x1bb6, 0xc53: 0x1ba2, 0xc54: 0x1bd2, 0xc55: 0x1c7a, 0xc56: 0x1a2f, 0xc57: 0x19cf, + 0xc58: 0x1a05, 0xc59: 0x19e4, 0xc5a: 0x1a47, 0xc5b: 0x1c7e, 0xc5c: 0x1a32, 0xc5d: 0x19c6, + 0xc5e: 0x1a08, 0xc5f: 0x1c42, 0xc60: 0x1bfa, 0xc61: 0x1a1a, 0xc62: 0x1c2a, 0xc63: 0x1c46, + 0xc64: 0x1bfe, 0xc65: 0x1a1d, 0xc66: 0x1c2e, 0xc67: 0x22ee, 0xc68: 0x2302, 0xc69: 0x199c, + 0xc6a: 0x1c26, 0xc6b: 0x1bba, 0xc6c: 0x1ba6, 0xc6d: 0x1c4e, 0xc6e: 0x2723, 0xc6f: 0x27ba, + 0xc70: 0x1a5f, 0xc71: 0x1a4a, 0xc72: 0x1c82, 0xc73: 0x1a35, 0xc74: 0x1a56, 0xc75: 0x1a3e, + 0xc76: 0x1c6e, 0xc77: 0x1a23, 0xc78: 0x19fc, 0xc79: 0x1987, 0xc7a: 0x1a59, 0xc7b: 0x1a41, + 0xc7c: 0x1c72, 0xc7d: 0x1a26, 0xc7e: 0x19ff, 0xc7f: 0x198a, + // Block 0x32, offset 0xc80 + 0xc80: 0x1c32, 0xc81: 0x1bbe, 0xc82: 0x1d53, 0xc83: 0x193c, 0xc84: 0x19c0, 0xc85: 0x19c3, + 0xc86: 0x22fb, 0xc87: 0x1b9a, 0xc88: 0x19c9, 0xc89: 0x194e, 0xc8a: 0x19e7, 0xc8b: 0x1951, + 0xc8c: 0x19f0, 0xc8d: 0x196f, 0xc8e: 0x1972, 0xc8f: 0x1a0b, 0xc90: 0x1a11, 0xc91: 0x1a14, + 0xc92: 0x1c36, 0xc93: 0x1a17, 0xc94: 0x1a29, 0xc95: 0x1c3e, 0xc96: 0x1c4a, 0xc97: 0x1996, + 0xc98: 0x1d5d, 0xc99: 0x1bc2, 0xc9a: 0x1999, 0xc9b: 0x1a62, 0xc9c: 0x19ab, 0xc9d: 0x19ba, + 0xc9e: 0x22e8, 0xc9f: 0x22e2, 0xca0: 0x1cc7, 0xca1: 0x1cd6, 0xca2: 0x1ce5, 0xca3: 0x1cf4, + 0xca4: 0x1d03, 0xca5: 0x1d12, 0xca6: 0x1d21, 0xca7: 0x1d30, 0xca8: 0x1d3f, 0xca9: 0x218c, + 0xcaa: 0x219e, 0xcab: 0x21b0, 0xcac: 0x21c2, 0xcad: 0x21ce, 0xcae: 0x21da, 0xcaf: 0x21e6, + 0xcb0: 0x21f2, 0xcb1: 0x21fe, 0xcb2: 0x220a, 0xcb3: 0x2246, 0xcb4: 0x2252, 0xcb5: 0x225e, + 0xcb6: 0x226a, 0xcb7: 0x2276, 0xcb8: 0x2282, 0xcb9: 0x2288, 0xcba: 0x228e, 0xcbb: 0x2294, + 0xcbc: 0x229a, 0xcbd: 0x22ac, 0xcbe: 0x22b2, 0xcbf: 0x1c16, + // Block 0x33, offset 0xcc0 + 0xcc0: 0x137a, 0xcc1: 0x0cfe, 0xcc2: 0x13d6, 0xcc3: 0x13a2, 0xcc4: 0x0e5a, 0xcc5: 0x06ee, + 0xcc6: 0x08e2, 0xcc7: 0x162e, 0xcc8: 0x162e, 0xcc9: 0x0a0e, 0xcca: 0x1462, 0xccb: 0x0946, + 0xccc: 0x0a0a, 0xccd: 0x0bf2, 0xcce: 0x0fd2, 0xccf: 0x1162, 0xcd0: 0x129a, 0xcd1: 0x12d6, + 0xcd2: 0x130a, 0xcd3: 0x141e, 0xcd4: 0x0d76, 0xcd5: 0x0e02, 0xcd6: 0x0eae, 0xcd7: 0x0f46, + 0xcd8: 0x1262, 0xcd9: 0x144a, 0xcda: 0x1576, 0xcdb: 0x0712, 0xcdc: 0x08b6, 0xcdd: 0x0d8a, + 0xcde: 0x0ed2, 0xcdf: 0x1296, 0xce0: 0x15c6, 0xce1: 0x0ab6, 0xce2: 0x0e7a, 0xce3: 0x1286, + 0xce4: 0x131a, 0xce5: 0x0c26, 0xce6: 0x11be, 0xce7: 0x12e2, 0xce8: 0x0b22, 0xce9: 0x0d12, + 0xcea: 0x0e1a, 0xceb: 0x0f1e, 0xcec: 0x142a, 0xced: 0x0752, 0xcee: 0x07ea, 0xcef: 0x0856, + 0xcf0: 0x0c8e, 0xcf1: 0x0d82, 0xcf2: 0x0ece, 0xcf3: 0x0ff2, 0xcf4: 0x117a, 0xcf5: 0x128e, + 0xcf6: 0x12a6, 0xcf7: 0x13ca, 0xcf8: 0x14f2, 0xcf9: 0x15a6, 0xcfa: 0x15c2, 0xcfb: 0x102e, + 0xcfc: 0x106e, 0xcfd: 0x1126, 0xcfe: 0x1246, 0xcff: 0x147e, + // Block 0x34, offset 0xd00 + 0xd00: 0x15ce, 0xd01: 0x134e, 0xd02: 0x09ca, 0xd03: 0x0b3e, 0xd04: 0x10de, 0xd05: 0x119e, + 0xd06: 0x0f02, 0xd07: 0x1036, 0xd08: 0x139a, 0xd09: 0x14ea, 0xd0a: 0x09c6, 0xd0b: 0x0a92, + 0xd0c: 0x0d7a, 0xd0d: 0x0e2e, 0xd0e: 0x0e62, 0xd0f: 0x1116, 0xd10: 0x113e, 0xd11: 0x14aa, + 0xd12: 0x0852, 0xd13: 0x11aa, 0xd14: 0x07f6, 0xd15: 0x07f2, 0xd16: 0x109a, 0xd17: 0x112a, + 0xd18: 0x125e, 0xd19: 0x14b2, 0xd1a: 0x136a, 0xd1b: 0x0c2a, 0xd1c: 0x0d76, 0xd1d: 0x135a, + 0xd1e: 0x06fa, 0xd1f: 0x0a66, 0xd20: 0x0b96, 0xd21: 0x0f32, 0xd22: 0x0fb2, 0xd23: 0x0876, + 0xd24: 0x103e, 0xd25: 0x0762, 0xd26: 0x0b7a, 0xd27: 0x06da, 0xd28: 0x0dee, 0xd29: 0x0ca6, + 0xd2a: 0x1112, 0xd2b: 0x08ca, 0xd2c: 0x09b6, 0xd2d: 0x0ffe, 0xd2e: 0x1266, 0xd2f: 0x133e, + 0xd30: 0x0dba, 0xd31: 0x13fa, 0xd32: 0x0de6, 0xd33: 0x0c3a, 0xd34: 0x121e, 0xd35: 0x0c5a, + 0xd36: 0x0fae, 0xd37: 0x072e, 0xd38: 0x07aa, 0xd39: 0x07ee, 0xd3a: 0x0d56, 0xd3b: 0x10fe, + 0xd3c: 0x11f6, 0xd3d: 0x134a, 0xd3e: 0x145e, 0xd3f: 0x085e, + // Block 0x35, offset 0xd40 + 0xd40: 0x0912, 0xd41: 0x0a1a, 0xd42: 0x0b32, 0xd43: 0x0cc2, 0xd44: 0x0e7e, 0xd45: 0x1042, + 0xd46: 0x149a, 0xd47: 0x157e, 0xd48: 0x15d2, 0xd49: 0x15ea, 0xd4a: 0x083a, 0xd4b: 0x0cf6, + 0xd4c: 0x0da6, 0xd4d: 0x13ee, 0xd4e: 0x0afe, 0xd4f: 0x0bda, 0xd50: 0x0bf6, 0xd51: 0x0c86, + 0xd52: 0x0e6e, 0xd53: 0x0eba, 0xd54: 0x0f6a, 0xd55: 0x108e, 0xd56: 0x1132, 0xd57: 0x1196, + 0xd58: 0x13de, 0xd59: 0x126e, 0xd5a: 0x1406, 0xd5b: 0x1482, 0xd5c: 0x0812, 0xd5d: 0x083e, + 0xd5e: 0x0926, 0xd5f: 0x0eaa, 0xd60: 0x12f6, 0xd61: 0x133e, 0xd62: 0x0b1e, 0xd63: 0x0b8e, + 0xd64: 0x0c52, 0xd65: 0x0db2, 0xd66: 0x10da, 0xd67: 0x0f26, 0xd68: 0x073e, 0xd69: 0x0982, + 0xd6a: 0x0a66, 0xd6b: 0x0aca, 0xd6c: 0x0b9a, 0xd6d: 0x0f42, 0xd6e: 0x0f5e, 0xd6f: 0x116e, + 0xd70: 0x118e, 0xd71: 0x1466, 0xd72: 0x14e6, 0xd73: 0x14f6, 0xd74: 0x1532, 0xd75: 0x0756, + 0xd76: 0x1082, 0xd77: 0x1452, 0xd78: 0x14ce, 0xd79: 0x0bb2, 0xd7a: 0x071a, 0xd7b: 0x077a, + 0xd7c: 0x0a6a, 0xd7d: 0x0a8a, 0xd7e: 0x0cb2, 0xd7f: 0x0d76, + // Block 0x36, offset 0xd80 + 0xd80: 0x0ec6, 0xd81: 0x0fce, 0xd82: 0x127a, 0xd83: 0x141a, 0xd84: 0x1626, 0xd85: 0x0ce6, + 0xd86: 0x14a6, 0xd87: 0x0836, 0xd88: 0x0d32, 0xd89: 0x0d3e, 0xd8a: 0x0e12, 0xd8b: 0x0e4a, + 0xd8c: 0x0f4e, 0xd8d: 0x0faa, 0xd8e: 0x102a, 0xd8f: 0x110e, 0xd90: 0x153e, 0xd91: 0x07b2, + 0xd92: 0x0c06, 0xd93: 0x14b6, 0xd94: 0x076a, 0xd95: 0x0aae, 0xd96: 0x0e32, 0xd97: 0x13e2, + 0xd98: 0x0b6a, 0xd99: 0x0bba, 0xd9a: 0x0d46, 0xd9b: 0x0f32, 0xd9c: 0x14be, 0xd9d: 0x081a, + 0xd9e: 0x0902, 0xd9f: 0x0a9a, 0xda0: 0x0cd6, 0xda1: 0x0d22, 0xda2: 0x0d62, 0xda3: 0x0df6, + 0xda4: 0x0f4a, 0xda5: 0x0fbe, 0xda6: 0x115a, 0xda7: 0x12fa, 0xda8: 0x1306, 0xda9: 0x145a, + 0xdaa: 0x14da, 0xdab: 0x0886, 0xdac: 0x0e4e, 0xdad: 0x0906, 0xdae: 0x0eca, 0xdaf: 0x0f6e, + 0xdb0: 0x128a, 0xdb1: 0x14c2, 0xdb2: 0x15ae, 0xdb3: 0x15d6, 0xdb4: 0x0d3a, 0xdb5: 0x0e2a, + 0xdb6: 0x11c6, 0xdb7: 0x10ba, 0xdb8: 0x10c6, 0xdb9: 0x10ea, 0xdba: 0x0f1a, 0xdbb: 0x0ea2, + 0xdbc: 0x1366, 0xdbd: 0x0736, 0xdbe: 0x122e, 0xdbf: 0x081e, + // Block 0x37, offset 0xdc0 + 0xdc0: 0x080e, 0xdc1: 0x0b0e, 0xdc2: 0x0c2e, 0xdc3: 0x10f6, 0xdc4: 0x0a56, 0xdc5: 0x0e06, + 0xdc6: 0x0cf2, 0xdc7: 0x13ea, 0xdc8: 0x12ea, 0xdc9: 0x14ae, 0xdca: 0x1326, 0xdcb: 0x0b2a, + 0xdcc: 0x078a, 0xdcd: 0x095e, 0xdd0: 0x09b2, + 0xdd2: 0x0ce2, 0xdd5: 0x07fa, 0xdd6: 0x0f22, 0xdd7: 0x0fe6, + 0xdd8: 0x104a, 0xdd9: 0x1066, 0xdda: 0x106a, 0xddb: 0x107e, 0xddc: 0x14fe, 0xddd: 0x10ee, + 0xdde: 0x1172, 0xde0: 0x1292, 0xde2: 0x1356, + 0xde5: 0x140a, 0xde6: 0x1436, + 0xdea: 0x1552, 0xdeb: 0x1556, 0xdec: 0x155a, 0xded: 0x15be, 0xdee: 0x142e, 0xdef: 0x14ca, + 0xdf0: 0x075a, 0xdf1: 0x077e, 0xdf2: 0x0792, 0xdf3: 0x084e, 0xdf4: 0x085a, 0xdf5: 0x089a, + 0xdf6: 0x094e, 0xdf7: 0x096a, 0xdf8: 0x0972, 0xdf9: 0x09ae, 0xdfa: 0x09ba, 0xdfb: 0x0a96, + 0xdfc: 0x0a9e, 0xdfd: 0x0ba6, 0xdfe: 0x0bce, 0xdff: 0x0bd6, + // Block 0x38, offset 0xe00 + 0xe00: 0x0bee, 0xe01: 0x0c9a, 0xe02: 0x0cca, 0xe03: 0x0cea, 0xe04: 0x0d5a, 0xe05: 0x0e1e, + 0xe06: 0x0e3a, 0xe07: 0x0e6a, 0xe08: 0x0ebe, 0xe09: 0x0ede, 0xe0a: 0x0f52, 0xe0b: 0x1032, + 0xe0c: 0x104e, 0xe0d: 0x1056, 0xe0e: 0x1052, 0xe0f: 0x105a, 0xe10: 0x105e, 0xe11: 0x1062, + 0xe12: 0x1076, 0xe13: 0x107a, 0xe14: 0x109e, 0xe15: 0x10b2, 0xe16: 0x10ce, 0xe17: 0x1132, + 0xe18: 0x113a, 0xe19: 0x1142, 0xe1a: 0x1156, 0xe1b: 0x117e, 0xe1c: 0x11ce, 0xe1d: 0x1202, + 0xe1e: 0x1202, 0xe1f: 0x126a, 0xe20: 0x1312, 0xe21: 0x132a, 0xe22: 0x135e, 0xe23: 0x1362, + 0xe24: 0x13a6, 0xe25: 0x13aa, 0xe26: 0x1402, 0xe27: 0x140a, 0xe28: 0x14de, 0xe29: 0x1522, + 0xe2a: 0x153a, 0xe2b: 0x0b9e, 0xe2c: 0x1721, 0xe2d: 0x11e6, + 0xe30: 0x06e2, 0xe31: 0x07e6, 0xe32: 0x07a6, 0xe33: 0x074e, 0xe34: 0x078e, 0xe35: 0x07ba, + 0xe36: 0x084a, 0xe37: 0x0866, 0xe38: 0x094e, 0xe39: 0x093a, 0xe3a: 0x094a, 0xe3b: 0x0966, + 0xe3c: 0x09b2, 0xe3d: 0x09c2, 0xe3e: 0x0a06, 0xe3f: 0x0a12, + // Block 0x39, offset 0xe40 + 0xe40: 0x0a2e, 0xe41: 0x0a3e, 0xe42: 0x0b26, 0xe43: 0x0b2e, 0xe44: 0x0b5e, 0xe45: 0x0b7e, + 0xe46: 0x0bae, 0xe47: 0x0bc6, 0xe48: 0x0bb6, 0xe49: 0x0bd6, 0xe4a: 0x0bca, 0xe4b: 0x0bee, + 0xe4c: 0x0c0a, 0xe4d: 0x0c62, 0xe4e: 0x0c6e, 0xe4f: 0x0c76, 0xe50: 0x0c9e, 0xe51: 0x0ce2, + 0xe52: 0x0d12, 0xe53: 0x0d16, 0xe54: 0x0d2a, 0xe55: 0x0daa, 0xe56: 0x0dba, 0xe57: 0x0e12, + 0xe58: 0x0e5e, 0xe59: 0x0e56, 0xe5a: 0x0e6a, 0xe5b: 0x0e86, 0xe5c: 0x0ebe, 0xe5d: 0x1016, + 0xe5e: 0x0ee2, 0xe5f: 0x0f16, 0xe60: 0x0f22, 0xe61: 0x0f62, 0xe62: 0x0f7e, 0xe63: 0x0fa2, + 0xe64: 0x0fc6, 0xe65: 0x0fca, 0xe66: 0x0fe6, 0xe67: 0x0fea, 0xe68: 0x0ffa, 0xe69: 0x100e, + 0xe6a: 0x100a, 0xe6b: 0x103a, 0xe6c: 0x10b6, 0xe6d: 0x10ce, 0xe6e: 0x10e6, 0xe6f: 0x111e, + 0xe70: 0x1132, 0xe71: 0x114e, 0xe72: 0x117e, 0xe73: 0x1232, 0xe74: 0x125a, 0xe75: 0x12ce, + 0xe76: 0x1316, 0xe77: 0x1322, 0xe78: 0x132a, 0xe79: 0x1342, 0xe7a: 0x1356, 0xe7b: 0x1346, + 0xe7c: 0x135e, 0xe7d: 0x135a, 0xe7e: 0x1352, 0xe7f: 0x1362, + // Block 0x3a, offset 0xe80 + 0xe80: 0x136e, 0xe81: 0x13aa, 0xe82: 0x13e6, 0xe83: 0x1416, 0xe84: 0x144e, 0xe85: 0x146e, + 0xe86: 0x14ba, 0xe87: 0x14de, 0xe88: 0x14fe, 0xe89: 0x1512, 0xe8a: 0x1522, 0xe8b: 0x152e, + 0xe8c: 0x153a, 0xe8d: 0x158e, 0xe8e: 0x162e, 0xe8f: 0x16b8, 0xe90: 0x16b3, 0xe91: 0x16e5, + 0xe92: 0x060a, 0xe93: 0x0632, 0xe94: 0x0636, 0xe95: 0x1767, 0xe96: 0x1794, 0xe97: 0x180c, + 0xe98: 0x161a, 0xe99: 0x162a, + // Block 0x3b, offset 0xec0 + 0xec0: 0x19db, 0xec1: 0x19de, 0xec2: 0x19e1, 0xec3: 0x1c0e, 0xec4: 0x1c12, 0xec5: 0x1a65, + 0xec6: 0x1a65, + 0xed3: 0x1d7b, 0xed4: 0x1d6c, 0xed5: 0x1d71, 0xed6: 0x1d80, 0xed7: 0x1d76, + 0xedd: 0x43a7, + 0xede: 0x8116, 0xedf: 0x4419, 0xee0: 0x0230, 0xee1: 0x0218, 0xee2: 0x0221, 0xee3: 0x0224, + 0xee4: 0x0227, 0xee5: 0x022a, 0xee6: 0x022d, 0xee7: 0x0233, 0xee8: 0x0236, 0xee9: 0x0017, + 0xeea: 0x4407, 0xeeb: 0x440d, 0xeec: 0x450b, 0xeed: 0x4513, 0xeee: 0x435f, 0xeef: 0x4365, + 0xef0: 0x436b, 0xef1: 0x4371, 0xef2: 0x437d, 0xef3: 0x4383, 0xef4: 0x4389, 0xef5: 0x4395, + 0xef6: 0x439b, 0xef8: 0x43a1, 0xef9: 0x43ad, 0xefa: 0x43b3, 0xefb: 0x43b9, + 0xefc: 0x43c5, 0xefe: 0x43cb, + // Block 0x3c, offset 0xf00 + 0xf00: 0x43d1, 0xf01: 0x43d7, 0xf03: 0x43dd, 0xf04: 0x43e3, + 0xf06: 0x43ef, 0xf07: 0x43f5, 0xf08: 0x43fb, 0xf09: 0x4401, 0xf0a: 0x4413, 0xf0b: 0x438f, + 0xf0c: 0x4377, 0xf0d: 0x43bf, 0xf0e: 0x43e9, 0xf0f: 0x1d85, 0xf10: 0x029c, 0xf11: 0x029c, + 0xf12: 0x02a5, 0xf13: 0x02a5, 0xf14: 0x02a5, 0xf15: 0x02a5, 0xf16: 0x02a8, 0xf17: 0x02a8, + 0xf18: 0x02a8, 0xf19: 0x02a8, 0xf1a: 0x02ae, 0xf1b: 0x02ae, 0xf1c: 0x02ae, 0xf1d: 0x02ae, + 0xf1e: 0x02a2, 0xf1f: 0x02a2, 0xf20: 0x02a2, 0xf21: 0x02a2, 0xf22: 0x02ab, 0xf23: 0x02ab, + 0xf24: 0x02ab, 0xf25: 0x02ab, 0xf26: 0x029f, 0xf27: 0x029f, 0xf28: 0x029f, 0xf29: 0x029f, + 0xf2a: 0x02d2, 0xf2b: 0x02d2, 0xf2c: 0x02d2, 0xf2d: 0x02d2, 0xf2e: 0x02d5, 0xf2f: 0x02d5, + 0xf30: 0x02d5, 0xf31: 0x02d5, 0xf32: 0x02b4, 0xf33: 0x02b4, 0xf34: 0x02b4, 0xf35: 0x02b4, + 0xf36: 0x02b1, 0xf37: 0x02b1, 0xf38: 0x02b1, 0xf39: 0x02b1, 0xf3a: 0x02b7, 0xf3b: 0x02b7, + 0xf3c: 0x02b7, 0xf3d: 0x02b7, 0xf3e: 0x02ba, 0xf3f: 0x02ba, + // Block 0x3d, offset 0xf40 + 0xf40: 0x02ba, 0xf41: 0x02ba, 0xf42: 0x02c3, 0xf43: 0x02c3, 0xf44: 0x02c0, 0xf45: 0x02c0, + 0xf46: 0x02c6, 0xf47: 0x02c6, 0xf48: 0x02bd, 0xf49: 0x02bd, 0xf4a: 0x02cc, 0xf4b: 0x02cc, + 0xf4c: 0x02c9, 0xf4d: 0x02c9, 0xf4e: 0x02d8, 0xf4f: 0x02d8, 0xf50: 0x02d8, 0xf51: 0x02d8, + 0xf52: 0x02de, 0xf53: 0x02de, 0xf54: 0x02de, 0xf55: 0x02de, 0xf56: 0x02e4, 0xf57: 0x02e4, + 0xf58: 0x02e4, 0xf59: 0x02e4, 0xf5a: 0x02e1, 0xf5b: 0x02e1, 0xf5c: 0x02e1, 0xf5d: 0x02e1, + 0xf5e: 0x02e7, 0xf5f: 0x02e7, 0xf60: 0x02ea, 0xf61: 0x02ea, 0xf62: 0x02ea, 0xf63: 0x02ea, + 0xf64: 0x4485, 0xf65: 0x4485, 0xf66: 0x02f0, 0xf67: 0x02f0, 0xf68: 0x02f0, 0xf69: 0x02f0, + 0xf6a: 0x02ed, 0xf6b: 0x02ed, 0xf6c: 0x02ed, 0xf6d: 0x02ed, 0xf6e: 0x030b, 0xf6f: 0x030b, + 0xf70: 0x447f, 0xf71: 0x447f, + // Block 0x3e, offset 0xf80 + 0xf93: 0x02db, 0xf94: 0x02db, 0xf95: 0x02db, 0xf96: 0x02db, 0xf97: 0x02f9, + 0xf98: 0x02f9, 0xf99: 0x02f6, 0xf9a: 0x02f6, 0xf9b: 0x02fc, 0xf9c: 0x02fc, 0xf9d: 0x2055, + 0xf9e: 0x0302, 0xf9f: 0x0302, 0xfa0: 0x02f3, 0xfa1: 0x02f3, 0xfa2: 0x02ff, 0xfa3: 0x02ff, + 0xfa4: 0x0308, 0xfa5: 0x0308, 0xfa6: 0x0308, 0xfa7: 0x0308, 0xfa8: 0x0290, 0xfa9: 0x0290, + 0xfaa: 0x25b0, 0xfab: 0x25b0, 0xfac: 0x2620, 0xfad: 0x2620, 0xfae: 0x25ef, 0xfaf: 0x25ef, + 0xfb0: 0x260b, 0xfb1: 0x260b, 0xfb2: 0x2604, 0xfb3: 0x2604, 0xfb4: 0x2612, 0xfb5: 0x2612, + 0xfb6: 0x2619, 0xfb7: 0x2619, 0xfb8: 0x2619, 0xfb9: 0x25f6, 0xfba: 0x25f6, 0xfbb: 0x25f6, + 0xfbc: 0x0305, 0xfbd: 0x0305, 0xfbe: 0x0305, 0xfbf: 0x0305, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x25b7, 0xfc1: 0x25be, 0xfc2: 0x25da, 0xfc3: 0x25f6, 0xfc4: 0x25fd, 0xfc5: 0x1d8f, + 0xfc6: 0x1d94, 0xfc7: 0x1d99, 0xfc8: 0x1da8, 0xfc9: 0x1db7, 0xfca: 0x1dbc, 0xfcb: 0x1dc1, + 0xfcc: 0x1dc6, 0xfcd: 0x1dcb, 0xfce: 0x1dda, 0xfcf: 0x1de9, 0xfd0: 0x1dee, 0xfd1: 0x1df3, + 0xfd2: 0x1e02, 0xfd3: 0x1e11, 0xfd4: 0x1e16, 0xfd5: 0x1e1b, 0xfd6: 0x1e20, 0xfd7: 0x1e2f, + 0xfd8: 0x1e34, 0xfd9: 0x1e43, 0xfda: 0x1e48, 0xfdb: 0x1e4d, 0xfdc: 0x1e5c, 0xfdd: 0x1e61, + 0xfde: 0x1e66, 0xfdf: 0x1e70, 0xfe0: 0x1eac, 0xfe1: 0x1ebb, 0xfe2: 0x1eca, 0xfe3: 0x1ecf, + 0xfe4: 0x1ed4, 0xfe5: 0x1ede, 0xfe6: 0x1eed, 0xfe7: 0x1ef2, 0xfe8: 0x1f01, 0xfe9: 0x1f06, + 0xfea: 0x1f0b, 0xfeb: 0x1f1a, 0xfec: 0x1f1f, 0xfed: 0x1f2e, 0xfee: 0x1f33, 0xfef: 0x1f38, + 0xff0: 0x1f3d, 0xff1: 0x1f42, 0xff2: 0x1f47, 0xff3: 0x1f4c, 0xff4: 0x1f51, 0xff5: 0x1f56, + 0xff6: 0x1f5b, 0xff7: 0x1f60, 0xff8: 0x1f65, 0xff9: 0x1f6a, 0xffa: 0x1f6f, 0xffb: 0x1f74, + 0xffc: 0x1f79, 0xffd: 0x1f7e, 0xffe: 0x1f83, 0xfff: 0x1f8d, + // Block 0x40, offset 0x1000 + 0x1000: 0x1f92, 0x1001: 0x1f97, 0x1002: 0x1f9c, 0x1003: 0x1fa6, 0x1004: 0x1fab, 0x1005: 0x1fb5, + 0x1006: 0x1fba, 0x1007: 0x1fbf, 0x1008: 0x1fc4, 0x1009: 0x1fc9, 0x100a: 0x1fce, 0x100b: 0x1fd3, + 0x100c: 0x1fd8, 0x100d: 0x1fdd, 0x100e: 0x1fec, 0x100f: 0x1ffb, 0x1010: 0x2000, 0x1011: 0x2005, + 0x1012: 0x200a, 0x1013: 0x200f, 0x1014: 0x2014, 0x1015: 0x201e, 0x1016: 0x2023, 0x1017: 0x2028, + 0x1018: 0x2037, 0x1019: 0x2046, 0x101a: 0x204b, 0x101b: 0x4437, 0x101c: 0x443d, 0x101d: 0x4473, + 0x101e: 0x44ca, 0x101f: 0x44d1, 0x1020: 0x44d8, 0x1021: 0x44df, 0x1022: 0x44e6, 0x1023: 0x44ed, + 0x1024: 0x25cc, 0x1025: 0x25d3, 0x1026: 0x25da, 0x1027: 0x25e1, 0x1028: 0x25f6, 0x1029: 0x25fd, + 0x102a: 0x1d9e, 0x102b: 0x1da3, 0x102c: 0x1da8, 0x102d: 0x1dad, 0x102e: 0x1db7, 0x102f: 0x1dbc, + 0x1030: 0x1dd0, 0x1031: 0x1dd5, 0x1032: 0x1dda, 0x1033: 0x1ddf, 0x1034: 0x1de9, 0x1035: 0x1dee, + 0x1036: 0x1df8, 0x1037: 0x1dfd, 0x1038: 0x1e02, 0x1039: 0x1e07, 0x103a: 0x1e11, 0x103b: 0x1e16, + 0x103c: 0x1f42, 0x103d: 0x1f47, 0x103e: 0x1f56, 0x103f: 0x1f5b, + // Block 0x41, offset 0x1040 + 0x1040: 0x1f60, 0x1041: 0x1f74, 0x1042: 0x1f79, 0x1043: 0x1f7e, 0x1044: 0x1f83, 0x1045: 0x1f9c, + 0x1046: 0x1fa6, 0x1047: 0x1fab, 0x1048: 0x1fb0, 0x1049: 0x1fc4, 0x104a: 0x1fe2, 0x104b: 0x1fe7, + 0x104c: 0x1fec, 0x104d: 0x1ff1, 0x104e: 0x1ffb, 0x104f: 0x2000, 0x1050: 0x4473, 0x1051: 0x202d, + 0x1052: 0x2032, 0x1053: 0x2037, 0x1054: 0x203c, 0x1055: 0x2046, 0x1056: 0x204b, 0x1057: 0x25b7, + 0x1058: 0x25be, 0x1059: 0x25c5, 0x105a: 0x25da, 0x105b: 0x25e8, 0x105c: 0x1d8f, 0x105d: 0x1d94, + 0x105e: 0x1d99, 0x105f: 0x1da8, 0x1060: 0x1db2, 0x1061: 0x1dc1, 0x1062: 0x1dc6, 0x1063: 0x1dcb, + 0x1064: 0x1dda, 0x1065: 0x1de4, 0x1066: 0x1e02, 0x1067: 0x1e1b, 0x1068: 0x1e20, 0x1069: 0x1e2f, + 0x106a: 0x1e34, 0x106b: 0x1e43, 0x106c: 0x1e4d, 0x106d: 0x1e5c, 0x106e: 0x1e61, 0x106f: 0x1e66, + 0x1070: 0x1e70, 0x1071: 0x1eac, 0x1072: 0x1eb1, 0x1073: 0x1ebb, 0x1074: 0x1eca, 0x1075: 0x1ecf, + 0x1076: 0x1ed4, 0x1077: 0x1ede, 0x1078: 0x1eed, 0x1079: 0x1f01, 0x107a: 0x1f06, 0x107b: 0x1f0b, + 0x107c: 0x1f1a, 0x107d: 0x1f1f, 0x107e: 0x1f2e, 0x107f: 0x1f33, + // Block 0x42, offset 0x1080 + 0x1080: 0x1f38, 0x1081: 0x1f3d, 0x1082: 0x1f4c, 0x1083: 0x1f51, 0x1084: 0x1f65, 0x1085: 0x1f6a, + 0x1086: 0x1f6f, 0x1087: 0x1f74, 0x1088: 0x1f79, 0x1089: 0x1f8d, 0x108a: 0x1f92, 0x108b: 0x1f97, + 0x108c: 0x1f9c, 0x108d: 0x1fa1, 0x108e: 0x1fb5, 0x108f: 0x1fba, 0x1090: 0x1fbf, 0x1091: 0x1fc4, + 0x1092: 0x1fd3, 0x1093: 0x1fd8, 0x1094: 0x1fdd, 0x1095: 0x1fec, 0x1096: 0x1ff6, 0x1097: 0x2005, + 0x1098: 0x200a, 0x1099: 0x4467, 0x109a: 0x201e, 0x109b: 0x2023, 0x109c: 0x2028, 0x109d: 0x2037, + 0x109e: 0x2041, 0x109f: 0x25da, 0x10a0: 0x25e8, 0x10a1: 0x1da8, 0x10a2: 0x1db2, 0x10a3: 0x1dda, + 0x10a4: 0x1de4, 0x10a5: 0x1e02, 0x10a6: 0x1e0c, 0x10a7: 0x1e70, 0x10a8: 0x1e75, 0x10a9: 0x1e98, + 0x10aa: 0x1e9d, 0x10ab: 0x1f74, 0x10ac: 0x1f79, 0x10ad: 0x1f9c, 0x10ae: 0x1fec, 0x10af: 0x1ff6, + 0x10b0: 0x2037, 0x10b1: 0x2041, 0x10b2: 0x451b, 0x10b3: 0x4523, 0x10b4: 0x452b, 0x10b5: 0x1ef7, + 0x10b6: 0x1efc, 0x10b7: 0x1f10, 0x10b8: 0x1f15, 0x10b9: 0x1f24, 0x10ba: 0x1f29, 0x10bb: 0x1e7a, + 0x10bc: 0x1e7f, 0x10bd: 0x1ea2, 0x10be: 0x1ea7, 0x10bf: 0x1e39, + // Block 0x43, offset 0x10c0 + 0x10c0: 0x1e3e, 0x10c1: 0x1e25, 0x10c2: 0x1e2a, 0x10c3: 0x1e52, 0x10c4: 0x1e57, 0x10c5: 0x1ec0, + 0x10c6: 0x1ec5, 0x10c7: 0x1ee3, 0x10c8: 0x1ee8, 0x10c9: 0x1e84, 0x10ca: 0x1e89, 0x10cb: 0x1e8e, + 0x10cc: 0x1e98, 0x10cd: 0x1e93, 0x10ce: 0x1e6b, 0x10cf: 0x1eb6, 0x10d0: 0x1ed9, 0x10d1: 0x1ef7, + 0x10d2: 0x1efc, 0x10d3: 0x1f10, 0x10d4: 0x1f15, 0x10d5: 0x1f24, 0x10d6: 0x1f29, 0x10d7: 0x1e7a, + 0x10d8: 0x1e7f, 0x10d9: 0x1ea2, 0x10da: 0x1ea7, 0x10db: 0x1e39, 0x10dc: 0x1e3e, 0x10dd: 0x1e25, + 0x10de: 0x1e2a, 0x10df: 0x1e52, 0x10e0: 0x1e57, 0x10e1: 0x1ec0, 0x10e2: 0x1ec5, 0x10e3: 0x1ee3, + 0x10e4: 0x1ee8, 0x10e5: 0x1e84, 0x10e6: 0x1e89, 0x10e7: 0x1e8e, 0x10e8: 0x1e98, 0x10e9: 0x1e93, + 0x10ea: 0x1e6b, 0x10eb: 0x1eb6, 0x10ec: 0x1ed9, 0x10ed: 0x1e84, 0x10ee: 0x1e89, 0x10ef: 0x1e8e, + 0x10f0: 0x1e98, 0x10f1: 0x1e75, 0x10f2: 0x1e9d, 0x10f3: 0x1ef2, 0x10f4: 0x1e5c, 0x10f5: 0x1e61, + 0x10f6: 0x1e66, 0x10f7: 0x1e84, 0x10f8: 0x1e89, 0x10f9: 0x1e8e, 0x10fa: 0x1ef2, 0x10fb: 0x1f01, + 0x10fc: 0x441f, 0x10fd: 0x441f, + // Block 0x44, offset 0x1100 + 0x1110: 0x2317, 0x1111: 0x232c, + 0x1112: 0x232c, 0x1113: 0x2333, 0x1114: 0x233a, 0x1115: 0x234f, 0x1116: 0x2356, 0x1117: 0x235d, + 0x1118: 0x2380, 0x1119: 0x2380, 0x111a: 0x23a3, 0x111b: 0x239c, 0x111c: 0x23b8, 0x111d: 0x23aa, + 0x111e: 0x23b1, 0x111f: 0x23d4, 0x1120: 0x23d4, 0x1121: 0x23cd, 0x1122: 0x23db, 0x1123: 0x23db, + 0x1124: 0x2405, 0x1125: 0x2405, 0x1126: 0x2421, 0x1127: 0x23e9, 0x1128: 0x23e9, 0x1129: 0x23e2, + 0x112a: 0x23f7, 0x112b: 0x23f7, 0x112c: 0x23fe, 0x112d: 0x23fe, 0x112e: 0x2428, 0x112f: 0x2436, + 0x1130: 0x2436, 0x1131: 0x243d, 0x1132: 0x243d, 0x1133: 0x2444, 0x1134: 0x244b, 0x1135: 0x2452, + 0x1136: 0x2459, 0x1137: 0x2459, 0x1138: 0x2460, 0x1139: 0x246e, 0x113a: 0x247c, 0x113b: 0x2475, + 0x113c: 0x2483, 0x113d: 0x2483, 0x113e: 0x2498, 0x113f: 0x249f, + // Block 0x45, offset 0x1140 + 0x1140: 0x24d0, 0x1141: 0x24de, 0x1142: 0x24d7, 0x1143: 0x24bb, 0x1144: 0x24bb, 0x1145: 0x24e5, + 0x1146: 0x24e5, 0x1147: 0x24ec, 0x1148: 0x24ec, 0x1149: 0x2516, 0x114a: 0x251d, 0x114b: 0x2524, + 0x114c: 0x24fa, 0x114d: 0x2508, 0x114e: 0x252b, 0x114f: 0x2532, + 0x1152: 0x2501, 0x1153: 0x2586, 0x1154: 0x258d, 0x1155: 0x2563, 0x1156: 0x256a, 0x1157: 0x254e, + 0x1158: 0x254e, 0x1159: 0x2555, 0x115a: 0x257f, 0x115b: 0x2578, 0x115c: 0x25a2, 0x115d: 0x25a2, + 0x115e: 0x2310, 0x115f: 0x2325, 0x1160: 0x231e, 0x1161: 0x2348, 0x1162: 0x2341, 0x1163: 0x236b, + 0x1164: 0x2364, 0x1165: 0x238e, 0x1166: 0x2372, 0x1167: 0x2387, 0x1168: 0x23bf, 0x1169: 0x240c, + 0x116a: 0x23f0, 0x116b: 0x242f, 0x116c: 0x24c9, 0x116d: 0x24f3, 0x116e: 0x259b, 0x116f: 0x2594, + 0x1170: 0x25a9, 0x1171: 0x2540, 0x1172: 0x24a6, 0x1173: 0x2571, 0x1174: 0x2498, 0x1175: 0x24d0, + 0x1176: 0x2467, 0x1177: 0x24b4, 0x1178: 0x2547, 0x1179: 0x2539, 0x117a: 0x24c2, 0x117b: 0x24ad, + 0x117c: 0x24c2, 0x117d: 0x2547, 0x117e: 0x2379, 0x117f: 0x2395, + // Block 0x46, offset 0x1180 + 0x1180: 0x250f, 0x1181: 0x248a, 0x1182: 0x2309, 0x1183: 0x24ad, 0x1184: 0x2452, 0x1185: 0x2421, + 0x1186: 0x23c6, 0x1187: 0x255c, + 0x11b0: 0x241a, 0x11b1: 0x2491, 0x11b2: 0x27cc, 0x11b3: 0x27c3, 0x11b4: 0x27f9, 0x11b5: 0x27e7, + 0x11b6: 0x27d5, 0x11b7: 0x27f0, 0x11b8: 0x2802, 0x11b9: 0x2413, 0x11ba: 0x2c89, 0x11bb: 0x2b09, + 0x11bc: 0x27de, + // Block 0x47, offset 0x11c0 + 0x11d0: 0x0019, 0x11d1: 0x0486, + 0x11d2: 0x048a, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04c2, + 0x11d8: 0x04c6, 0x11d9: 0x1b62, + 0x11e0: 0x8133, 0x11e1: 0x8133, 0x11e2: 0x8133, 0x11e3: 0x8133, + 0x11e4: 0x8133, 0x11e5: 0x8133, 0x11e6: 0x8133, 0x11e7: 0x812e, 0x11e8: 0x812e, 0x11e9: 0x812e, + 0x11ea: 0x812e, 0x11eb: 0x812e, 0x11ec: 0x812e, 0x11ed: 0x812e, 0x11ee: 0x8133, 0x11ef: 0x8133, + 0x11f0: 0x1876, 0x11f1: 0x0446, 0x11f2: 0x0442, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011, + 0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04ba, 0x11fa: 0x04be, 0x11fb: 0x04ae, + 0x11fc: 0x04b2, 0x11fd: 0x0496, 0x11fe: 0x049a, 0x11ff: 0x048e, + // Block 0x48, offset 0x1200 + 0x1200: 0x0492, 0x1201: 0x049e, 0x1202: 0x04a2, 0x1203: 0x04a6, 0x1204: 0x04aa, + 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4280, 0x120a: 0x4280, 0x120b: 0x4280, + 0x120c: 0x4280, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0486, + 0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003, + 0x1218: 0x0446, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04ba, + 0x121e: 0x04be, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, + 0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009, + 0x122a: 0x000b, 0x122b: 0x0041, + 0x1230: 0x42c1, 0x1231: 0x4443, 0x1232: 0x42c6, 0x1234: 0x42cb, + 0x1236: 0x42d0, 0x1237: 0x4449, 0x1238: 0x42d5, 0x1239: 0x444f, 0x123a: 0x42da, 0x123b: 0x4455, + 0x123c: 0x42df, 0x123d: 0x445b, 0x123e: 0x42e4, 0x123f: 0x4461, + // Block 0x49, offset 0x1240 + 0x1240: 0x0239, 0x1241: 0x4425, 0x1242: 0x4425, 0x1243: 0x442b, 0x1244: 0x442b, 0x1245: 0x446d, + 0x1246: 0x446d, 0x1247: 0x4431, 0x1248: 0x4431, 0x1249: 0x4479, 0x124a: 0x4479, 0x124b: 0x4479, + 0x124c: 0x4479, 0x124d: 0x023c, 0x124e: 0x023c, 0x124f: 0x023f, 0x1250: 0x023f, 0x1251: 0x023f, + 0x1252: 0x023f, 0x1253: 0x0242, 0x1254: 0x0242, 0x1255: 0x0245, 0x1256: 0x0245, 0x1257: 0x0245, + 0x1258: 0x0245, 0x1259: 0x0248, 0x125a: 0x0248, 0x125b: 0x0248, 0x125c: 0x0248, 0x125d: 0x024b, + 0x125e: 0x024b, 0x125f: 0x024b, 0x1260: 0x024b, 0x1261: 0x024e, 0x1262: 0x024e, 0x1263: 0x024e, + 0x1264: 0x024e, 0x1265: 0x0251, 0x1266: 0x0251, 0x1267: 0x0251, 0x1268: 0x0251, 0x1269: 0x0254, + 0x126a: 0x0254, 0x126b: 0x0257, 0x126c: 0x0257, 0x126d: 0x025a, 0x126e: 0x025a, 0x126f: 0x025d, + 0x1270: 0x025d, 0x1271: 0x0260, 0x1272: 0x0260, 0x1273: 0x0260, 0x1274: 0x0260, 0x1275: 0x0263, + 0x1276: 0x0263, 0x1277: 0x0263, 0x1278: 0x0263, 0x1279: 0x0266, 0x127a: 0x0266, 0x127b: 0x0266, + 0x127c: 0x0266, 0x127d: 0x0269, 0x127e: 0x0269, 0x127f: 0x0269, + // Block 0x4a, offset 0x1280 + 0x1280: 0x0269, 0x1281: 0x026c, 0x1282: 0x026c, 0x1283: 0x026c, 0x1284: 0x026c, 0x1285: 0x026f, + 0x1286: 0x026f, 0x1287: 0x026f, 0x1288: 0x026f, 0x1289: 0x0272, 0x128a: 0x0272, 0x128b: 0x0272, + 0x128c: 0x0272, 0x128d: 0x0275, 0x128e: 0x0275, 0x128f: 0x0275, 0x1290: 0x0275, 0x1291: 0x0278, + 0x1292: 0x0278, 0x1293: 0x0278, 0x1294: 0x0278, 0x1295: 0x027b, 0x1296: 0x027b, 0x1297: 0x027b, + 0x1298: 0x027b, 0x1299: 0x027e, 0x129a: 0x027e, 0x129b: 0x027e, 0x129c: 0x027e, 0x129d: 0x0281, + 0x129e: 0x0281, 0x129f: 0x0281, 0x12a0: 0x0281, 0x12a1: 0x0284, 0x12a2: 0x0284, 0x12a3: 0x0284, + 0x12a4: 0x0284, 0x12a5: 0x0287, 0x12a6: 0x0287, 0x12a7: 0x0287, 0x12a8: 0x0287, 0x12a9: 0x028a, + 0x12aa: 0x028a, 0x12ab: 0x028a, 0x12ac: 0x028a, 0x12ad: 0x028d, 0x12ae: 0x028d, 0x12af: 0x0290, + 0x12b0: 0x0290, 0x12b1: 0x0293, 0x12b2: 0x0293, 0x12b3: 0x0293, 0x12b4: 0x0293, 0x12b5: 0x2e17, + 0x12b6: 0x2e17, 0x12b7: 0x2e1f, 0x12b8: 0x2e1f, 0x12b9: 0x2e27, 0x12ba: 0x2e27, 0x12bb: 0x1f88, + 0x12bc: 0x1f88, + // Block 0x4b, offset 0x12c0 + 0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b, + 0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097, + 0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3, + 0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af, + 0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb, + 0x12de: 0x00bd, 0x12df: 0x047a, 0x12e0: 0x047e, 0x12e1: 0x048a, 0x12e2: 0x049e, 0x12e3: 0x04a2, + 0x12e4: 0x0486, 0x12e5: 0x05ae, 0x12e6: 0x05a6, 0x12e7: 0x04ca, 0x12e8: 0x04d2, 0x12e9: 0x04da, + 0x12ea: 0x04e2, 0x12eb: 0x04ea, 0x12ec: 0x056e, 0x12ed: 0x0576, 0x12ee: 0x057e, 0x12ef: 0x0522, + 0x12f0: 0x05b2, 0x12f1: 0x04ce, 0x12f2: 0x04d6, 0x12f3: 0x04de, 0x12f4: 0x04e6, 0x12f5: 0x04ee, + 0x12f6: 0x04f2, 0x12f7: 0x04f6, 0x12f8: 0x04fa, 0x12f9: 0x04fe, 0x12fa: 0x0502, 0x12fb: 0x0506, + 0x12fc: 0x050a, 0x12fd: 0x050e, 0x12fe: 0x0512, 0x12ff: 0x0516, + // Block 0x4c, offset 0x1300 + 0x1300: 0x051a, 0x1301: 0x051e, 0x1302: 0x0526, 0x1303: 0x052a, 0x1304: 0x052e, 0x1305: 0x0532, + 0x1306: 0x0536, 0x1307: 0x053a, 0x1308: 0x053e, 0x1309: 0x0542, 0x130a: 0x0546, 0x130b: 0x054a, + 0x130c: 0x054e, 0x130d: 0x0552, 0x130e: 0x0556, 0x130f: 0x055a, 0x1310: 0x055e, 0x1311: 0x0562, + 0x1312: 0x0566, 0x1313: 0x056a, 0x1314: 0x0572, 0x1315: 0x057a, 0x1316: 0x0582, 0x1317: 0x0586, + 0x1318: 0x058a, 0x1319: 0x058e, 0x131a: 0x0592, 0x131b: 0x0596, 0x131c: 0x059a, 0x131d: 0x05aa, + 0x131e: 0x4a8f, 0x131f: 0x4a95, 0x1320: 0x03c6, 0x1321: 0x0316, 0x1322: 0x031a, 0x1323: 0x4a52, + 0x1324: 0x031e, 0x1325: 0x4a58, 0x1326: 0x4a5e, 0x1327: 0x0322, 0x1328: 0x0326, 0x1329: 0x032a, + 0x132a: 0x4a64, 0x132b: 0x4a6a, 0x132c: 0x4a70, 0x132d: 0x4a76, 0x132e: 0x4a7c, 0x132f: 0x4a82, + 0x1330: 0x036a, 0x1331: 0x032e, 0x1332: 0x0332, 0x1333: 0x0336, 0x1334: 0x037e, 0x1335: 0x033a, + 0x1336: 0x033e, 0x1337: 0x0342, 0x1338: 0x0346, 0x1339: 0x034a, 0x133a: 0x034e, 0x133b: 0x0352, + 0x133c: 0x0356, 0x133d: 0x035a, 0x133e: 0x035e, + // Block 0x4d, offset 0x1340 + 0x1342: 0x49d4, 0x1343: 0x49da, 0x1344: 0x49e0, 0x1345: 0x49e6, + 0x1346: 0x49ec, 0x1347: 0x49f2, 0x134a: 0x49f8, 0x134b: 0x49fe, + 0x134c: 0x4a04, 0x134d: 0x4a0a, 0x134e: 0x4a10, 0x134f: 0x4a16, + 0x1352: 0x4a1c, 0x1353: 0x4a22, 0x1354: 0x4a28, 0x1355: 0x4a2e, 0x1356: 0x4a34, 0x1357: 0x4a3a, + 0x135a: 0x4a40, 0x135b: 0x4a46, 0x135c: 0x4a4c, + 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x427b, + 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x044a, 0x1368: 0x046e, 0x1369: 0x044e, + 0x136a: 0x0452, 0x136b: 0x0456, 0x136c: 0x045a, 0x136d: 0x0472, 0x136e: 0x0476, + // Block 0x4e, offset 0x1380 + 0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d, + 0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085, + 0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091, + 0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d, + 0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9, + 0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5, + 0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0176, 0x13a9: 0x0179, + 0x13aa: 0x017c, 0x13ab: 0x017f, 0x13ac: 0x0182, 0x13ad: 0x0185, 0x13ae: 0x0188, 0x13af: 0x018b, + 0x13b0: 0x018e, 0x13b1: 0x0191, 0x13b2: 0x0194, 0x13b3: 0x0197, 0x13b4: 0x019a, 0x13b5: 0x019d, + 0x13b6: 0x01a0, 0x13b7: 0x01a3, 0x13b8: 0x01a6, 0x13b9: 0x018b, 0x13ba: 0x01a9, 0x13bb: 0x01ac, + 0x13bc: 0x01af, 0x13bd: 0x01b2, 0x13be: 0x01b5, 0x13bf: 0x01b8, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x0200, 0x13c1: 0x0203, 0x13c2: 0x0206, 0x13c3: 0x045e, 0x13c4: 0x01ca, 0x13c5: 0x01d3, + 0x13c6: 0x01d9, 0x13c7: 0x01fd, 0x13c8: 0x01ee, 0x13c9: 0x01eb, 0x13ca: 0x0209, 0x13cb: 0x020c, + 0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027, + 0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033, + 0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b, + 0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023, + 0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f, + 0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027, + 0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033, + 0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b, + 0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033, + // Block 0x50, offset 0x1400 + 0x1400: 0x023c, 0x1401: 0x023f, 0x1402: 0x024b, 0x1403: 0x0254, 0x1405: 0x028d, + 0x1406: 0x025d, 0x1407: 0x024e, 0x1408: 0x026c, 0x1409: 0x0293, 0x140a: 0x027e, 0x140b: 0x0281, + 0x140c: 0x0284, 0x140d: 0x0287, 0x140e: 0x0260, 0x140f: 0x0272, 0x1410: 0x0278, 0x1411: 0x0266, + 0x1412: 0x027b, 0x1413: 0x025a, 0x1414: 0x0263, 0x1415: 0x0245, 0x1416: 0x0248, 0x1417: 0x0251, + 0x1418: 0x0257, 0x1419: 0x0269, 0x141a: 0x026f, 0x141b: 0x0275, 0x141c: 0x0296, 0x141d: 0x02e7, + 0x141e: 0x02cf, 0x141f: 0x0299, 0x1421: 0x023f, 0x1422: 0x024b, + 0x1424: 0x028a, 0x1427: 0x024e, 0x1429: 0x0293, + 0x142a: 0x027e, 0x142b: 0x0281, 0x142c: 0x0284, 0x142d: 0x0287, 0x142e: 0x0260, 0x142f: 0x0272, + 0x1430: 0x0278, 0x1431: 0x0266, 0x1432: 0x027b, 0x1434: 0x0263, 0x1435: 0x0245, + 0x1436: 0x0248, 0x1437: 0x0251, 0x1439: 0x0269, 0x143b: 0x0275, + // Block 0x51, offset 0x1440 + 0x1442: 0x024b, + 0x1447: 0x024e, 0x1449: 0x0293, 0x144b: 0x0281, + 0x144d: 0x0287, 0x144e: 0x0260, 0x144f: 0x0272, 0x1451: 0x0266, + 0x1452: 0x027b, 0x1454: 0x0263, 0x1457: 0x0251, + 0x1459: 0x0269, 0x145b: 0x0275, 0x145d: 0x02e7, + 0x145f: 0x0299, 0x1461: 0x023f, 0x1462: 0x024b, + 0x1464: 0x028a, 0x1467: 0x024e, 0x1468: 0x026c, 0x1469: 0x0293, + 0x146a: 0x027e, 0x146c: 0x0284, 0x146d: 0x0287, 0x146e: 0x0260, 0x146f: 0x0272, + 0x1470: 0x0278, 0x1471: 0x0266, 0x1472: 0x027b, 0x1474: 0x0263, 0x1475: 0x0245, + 0x1476: 0x0248, 0x1477: 0x0251, 0x1479: 0x0269, 0x147a: 0x026f, 0x147b: 0x0275, + 0x147c: 0x0296, 0x147e: 0x02cf, + // Block 0x52, offset 0x1480 + 0x1480: 0x023c, 0x1481: 0x023f, 0x1482: 0x024b, 0x1483: 0x0254, 0x1484: 0x028a, 0x1485: 0x028d, + 0x1486: 0x025d, 0x1487: 0x024e, 0x1488: 0x026c, 0x1489: 0x0293, 0x148b: 0x0281, + 0x148c: 0x0284, 0x148d: 0x0287, 0x148e: 0x0260, 0x148f: 0x0272, 0x1490: 0x0278, 0x1491: 0x0266, + 0x1492: 0x027b, 0x1493: 0x025a, 0x1494: 0x0263, 0x1495: 0x0245, 0x1496: 0x0248, 0x1497: 0x0251, + 0x1498: 0x0257, 0x1499: 0x0269, 0x149a: 0x026f, 0x149b: 0x0275, + 0x14a1: 0x023f, 0x14a2: 0x024b, 0x14a3: 0x0254, + 0x14a5: 0x028d, 0x14a6: 0x025d, 0x14a7: 0x024e, 0x14a8: 0x026c, 0x14a9: 0x0293, + 0x14ab: 0x0281, 0x14ac: 0x0284, 0x14ad: 0x0287, 0x14ae: 0x0260, 0x14af: 0x0272, + 0x14b0: 0x0278, 0x14b1: 0x0266, 0x14b2: 0x027b, 0x14b3: 0x025a, 0x14b4: 0x0263, 0x14b5: 0x0245, + 0x14b6: 0x0248, 0x14b7: 0x0251, 0x14b8: 0x0257, 0x14b9: 0x0269, 0x14ba: 0x026f, 0x14bb: 0x0275, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x187c, 0x14c1: 0x1879, 0x14c2: 0x187f, 0x14c3: 0x18a3, 0x14c4: 0x18c7, 0x14c5: 0x18eb, + 0x14c6: 0x190f, 0x14c7: 0x1918, 0x14c8: 0x191e, 0x14c9: 0x1924, 0x14ca: 0x192a, + 0x14d0: 0x1a92, 0x14d1: 0x1a96, + 0x14d2: 0x1a9a, 0x14d3: 0x1a9e, 0x14d4: 0x1aa2, 0x14d5: 0x1aa6, 0x14d6: 0x1aaa, 0x14d7: 0x1aae, + 0x14d8: 0x1ab2, 0x14d9: 0x1ab6, 0x14da: 0x1aba, 0x14db: 0x1abe, 0x14dc: 0x1ac2, 0x14dd: 0x1ac6, + 0x14de: 0x1aca, 0x14df: 0x1ace, 0x14e0: 0x1ad2, 0x14e1: 0x1ad6, 0x14e2: 0x1ada, 0x14e3: 0x1ade, + 0x14e4: 0x1ae2, 0x14e5: 0x1ae6, 0x14e6: 0x1aea, 0x14e7: 0x1aee, 0x14e8: 0x1af2, 0x14e9: 0x1af6, + 0x14ea: 0x272b, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193f, 0x14ee: 0x19b7, + 0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d, + 0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059, + 0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061, + // Block 0x54, offset 0x1500 + 0x1500: 0x26b3, 0x1501: 0x26c8, 0x1502: 0x0506, + 0x1510: 0x0c12, 0x1511: 0x0a4a, + 0x1512: 0x08d6, 0x1513: 0x45db, 0x1514: 0x071e, 0x1515: 0x09f2, 0x1516: 0x1332, 0x1517: 0x0a02, + 0x1518: 0x072a, 0x1519: 0x0cda, 0x151a: 0x0eb2, 0x151b: 0x0cb2, 0x151c: 0x082a, 0x151d: 0x0b6e, + 0x151e: 0x07c2, 0x151f: 0x0cba, 0x1520: 0x0816, 0x1521: 0x111a, 0x1522: 0x0f86, 0x1523: 0x138e, + 0x1524: 0x09d6, 0x1525: 0x090e, 0x1526: 0x0e66, 0x1527: 0x0c1e, 0x1528: 0x0c4a, 0x1529: 0x06c2, + 0x152a: 0x06ce, 0x152b: 0x140e, 0x152c: 0x0ade, 0x152d: 0x06ea, 0x152e: 0x08f2, 0x152f: 0x0c3e, + 0x1530: 0x13b6, 0x1531: 0x0c16, 0x1532: 0x1072, 0x1533: 0x10ae, 0x1534: 0x08fa, 0x1535: 0x0e46, + 0x1536: 0x0d0e, 0x1537: 0x0d0a, 0x1538: 0x0f9a, 0x1539: 0x082e, 0x153a: 0x095a, 0x153b: 0x1446, + // Block 0x55, offset 0x1540 + 0x1540: 0x06fe, 0x1541: 0x06f6, 0x1542: 0x0706, 0x1543: 0x164a, 0x1544: 0x074a, 0x1545: 0x075a, + 0x1546: 0x075e, 0x1547: 0x0766, 0x1548: 0x076e, 0x1549: 0x0772, 0x154a: 0x077e, 0x154b: 0x0776, + 0x154c: 0x05b6, 0x154d: 0x165e, 0x154e: 0x0792, 0x154f: 0x0796, 0x1550: 0x079a, 0x1551: 0x07b6, + 0x1552: 0x164f, 0x1553: 0x05ba, 0x1554: 0x07a2, 0x1555: 0x07c2, 0x1556: 0x1659, 0x1557: 0x07d2, + 0x1558: 0x07da, 0x1559: 0x073a, 0x155a: 0x07e2, 0x155b: 0x07e6, 0x155c: 0x1834, 0x155d: 0x0802, + 0x155e: 0x080a, 0x155f: 0x05c2, 0x1560: 0x0822, 0x1561: 0x0826, 0x1562: 0x082e, 0x1563: 0x0832, + 0x1564: 0x05c6, 0x1565: 0x084a, 0x1566: 0x084e, 0x1567: 0x085a, 0x1568: 0x0866, 0x1569: 0x086a, + 0x156a: 0x086e, 0x156b: 0x0876, 0x156c: 0x0896, 0x156d: 0x089a, 0x156e: 0x08a2, 0x156f: 0x08b2, + 0x1570: 0x08ba, 0x1571: 0x08be, 0x1572: 0x08be, 0x1573: 0x08be, 0x1574: 0x166d, 0x1575: 0x0e96, + 0x1576: 0x08d2, 0x1577: 0x08da, 0x1578: 0x1672, 0x1579: 0x08e6, 0x157a: 0x08ee, 0x157b: 0x08f6, + 0x157c: 0x091e, 0x157d: 0x090a, 0x157e: 0x0916, 0x157f: 0x091a, + // Block 0x56, offset 0x1580 + 0x1580: 0x0922, 0x1581: 0x092a, 0x1582: 0x092e, 0x1583: 0x0936, 0x1584: 0x093e, 0x1585: 0x0942, + 0x1586: 0x0942, 0x1587: 0x094a, 0x1588: 0x0952, 0x1589: 0x0956, 0x158a: 0x0962, 0x158b: 0x0986, + 0x158c: 0x096a, 0x158d: 0x098a, 0x158e: 0x096e, 0x158f: 0x0976, 0x1590: 0x080e, 0x1591: 0x09d2, + 0x1592: 0x099a, 0x1593: 0x099e, 0x1594: 0x09a2, 0x1595: 0x0996, 0x1596: 0x09aa, 0x1597: 0x09a6, + 0x1598: 0x09be, 0x1599: 0x1677, 0x159a: 0x09da, 0x159b: 0x09de, 0x159c: 0x09e6, 0x159d: 0x09f2, + 0x159e: 0x09fa, 0x159f: 0x0a16, 0x15a0: 0x167c, 0x15a1: 0x1681, 0x15a2: 0x0a22, 0x15a3: 0x0a26, + 0x15a4: 0x0a2a, 0x15a5: 0x0a1e, 0x15a6: 0x0a32, 0x15a7: 0x05ca, 0x15a8: 0x05ce, 0x15a9: 0x0a3a, + 0x15aa: 0x0a42, 0x15ab: 0x0a42, 0x15ac: 0x1686, 0x15ad: 0x0a5e, 0x15ae: 0x0a62, 0x15af: 0x0a66, + 0x15b0: 0x0a6e, 0x15b1: 0x168b, 0x15b2: 0x0a76, 0x15b3: 0x0a7a, 0x15b4: 0x0b52, 0x15b5: 0x0a82, + 0x15b6: 0x05d2, 0x15b7: 0x0a8e, 0x15b8: 0x0a9e, 0x15b9: 0x0aaa, 0x15ba: 0x0aa6, 0x15bb: 0x1695, + 0x15bc: 0x0ab2, 0x15bd: 0x169a, 0x15be: 0x0abe, 0x15bf: 0x0aba, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x0ac2, 0x15c1: 0x0ad2, 0x15c2: 0x0ad6, 0x15c3: 0x05d6, 0x15c4: 0x0ae6, 0x15c5: 0x0aee, + 0x15c6: 0x0af2, 0x15c7: 0x0af6, 0x15c8: 0x05da, 0x15c9: 0x169f, 0x15ca: 0x05de, 0x15cb: 0x0b12, + 0x15cc: 0x0b16, 0x15cd: 0x0b1a, 0x15ce: 0x0b22, 0x15cf: 0x1866, 0x15d0: 0x0b3a, 0x15d1: 0x16a9, + 0x15d2: 0x16a9, 0x15d3: 0x11da, 0x15d4: 0x0b4a, 0x15d5: 0x0b4a, 0x15d6: 0x05e2, 0x15d7: 0x16cc, + 0x15d8: 0x179e, 0x15d9: 0x0b5a, 0x15da: 0x0b62, 0x15db: 0x05e6, 0x15dc: 0x0b76, 0x15dd: 0x0b86, + 0x15de: 0x0b8a, 0x15df: 0x0b92, 0x15e0: 0x0ba2, 0x15e1: 0x05ee, 0x15e2: 0x05ea, 0x15e3: 0x0ba6, + 0x15e4: 0x16ae, 0x15e5: 0x0baa, 0x15e6: 0x0bbe, 0x15e7: 0x0bc2, 0x15e8: 0x0bc6, 0x15e9: 0x0bc2, + 0x15ea: 0x0bd2, 0x15eb: 0x0bd6, 0x15ec: 0x0be6, 0x15ed: 0x0bde, 0x15ee: 0x0be2, 0x15ef: 0x0bea, + 0x15f0: 0x0bee, 0x15f1: 0x0bf2, 0x15f2: 0x0bfe, 0x15f3: 0x0c02, 0x15f4: 0x0c1a, 0x15f5: 0x0c22, + 0x15f6: 0x0c32, 0x15f7: 0x0c46, 0x15f8: 0x16bd, 0x15f9: 0x0c42, 0x15fa: 0x0c36, 0x15fb: 0x0c4e, + 0x15fc: 0x0c56, 0x15fd: 0x0c6a, 0x15fe: 0x16c2, 0x15ff: 0x0c72, + // Block 0x58, offset 0x1600 + 0x1600: 0x0c66, 0x1601: 0x0c5e, 0x1602: 0x05f2, 0x1603: 0x0c7a, 0x1604: 0x0c82, 0x1605: 0x0c8a, + 0x1606: 0x0c7e, 0x1607: 0x05f6, 0x1608: 0x0c9a, 0x1609: 0x0ca2, 0x160a: 0x16c7, 0x160b: 0x0cce, + 0x160c: 0x0d02, 0x160d: 0x0cde, 0x160e: 0x0602, 0x160f: 0x0cea, 0x1610: 0x05fe, 0x1611: 0x05fa, + 0x1612: 0x07c6, 0x1613: 0x07ca, 0x1614: 0x0d06, 0x1615: 0x0cee, 0x1616: 0x11ae, 0x1617: 0x0666, + 0x1618: 0x0d12, 0x1619: 0x0d16, 0x161a: 0x0d1a, 0x161b: 0x0d2e, 0x161c: 0x0d26, 0x161d: 0x16e0, + 0x161e: 0x0606, 0x161f: 0x0d42, 0x1620: 0x0d36, 0x1621: 0x0d52, 0x1622: 0x0d5a, 0x1623: 0x16ea, + 0x1624: 0x0d5e, 0x1625: 0x0d4a, 0x1626: 0x0d66, 0x1627: 0x060a, 0x1628: 0x0d6a, 0x1629: 0x0d6e, + 0x162a: 0x0d72, 0x162b: 0x0d7e, 0x162c: 0x16ef, 0x162d: 0x0d86, 0x162e: 0x060e, 0x162f: 0x0d92, + 0x1630: 0x16f4, 0x1631: 0x0d96, 0x1632: 0x0612, 0x1633: 0x0da2, 0x1634: 0x0dae, 0x1635: 0x0dba, + 0x1636: 0x0dbe, 0x1637: 0x16f9, 0x1638: 0x1690, 0x1639: 0x16fe, 0x163a: 0x0dde, 0x163b: 0x1703, + 0x163c: 0x0dea, 0x163d: 0x0df2, 0x163e: 0x0de2, 0x163f: 0x0dfe, + // Block 0x59, offset 0x1640 + 0x1640: 0x0e0e, 0x1641: 0x0e1e, 0x1642: 0x0e12, 0x1643: 0x0e16, 0x1644: 0x0e22, 0x1645: 0x0e26, + 0x1646: 0x1708, 0x1647: 0x0e0a, 0x1648: 0x0e3e, 0x1649: 0x0e42, 0x164a: 0x0616, 0x164b: 0x0e56, + 0x164c: 0x0e52, 0x164d: 0x170d, 0x164e: 0x0e36, 0x164f: 0x0e72, 0x1650: 0x1712, 0x1651: 0x1717, + 0x1652: 0x0e76, 0x1653: 0x0e8a, 0x1654: 0x0e86, 0x1655: 0x0e82, 0x1656: 0x061a, 0x1657: 0x0e8e, + 0x1658: 0x0e9e, 0x1659: 0x0e9a, 0x165a: 0x0ea6, 0x165b: 0x1654, 0x165c: 0x0eb6, 0x165d: 0x171c, + 0x165e: 0x0ec2, 0x165f: 0x1726, 0x1660: 0x0ed6, 0x1661: 0x0ee2, 0x1662: 0x0ef6, 0x1663: 0x172b, + 0x1664: 0x0f0a, 0x1665: 0x0f0e, 0x1666: 0x1730, 0x1667: 0x1735, 0x1668: 0x0f2a, 0x1669: 0x0f3a, + 0x166a: 0x061e, 0x166b: 0x0f3e, 0x166c: 0x0622, 0x166d: 0x0622, 0x166e: 0x0f56, 0x166f: 0x0f5a, + 0x1670: 0x0f62, 0x1671: 0x0f66, 0x1672: 0x0f72, 0x1673: 0x0626, 0x1674: 0x0f8a, 0x1675: 0x173a, + 0x1676: 0x0fa6, 0x1677: 0x173f, 0x1678: 0x0fb2, 0x1679: 0x16a4, 0x167a: 0x0fc2, 0x167b: 0x1744, + 0x167c: 0x1749, 0x167d: 0x174e, 0x167e: 0x062a, 0x167f: 0x062e, + // Block 0x5a, offset 0x1680 + 0x1680: 0x0ffa, 0x1681: 0x1758, 0x1682: 0x1753, 0x1683: 0x175d, 0x1684: 0x1762, 0x1685: 0x1002, + 0x1686: 0x1006, 0x1687: 0x1006, 0x1688: 0x100e, 0x1689: 0x0636, 0x168a: 0x1012, 0x168b: 0x063a, + 0x168c: 0x063e, 0x168d: 0x176c, 0x168e: 0x1026, 0x168f: 0x102e, 0x1690: 0x103a, 0x1691: 0x0642, + 0x1692: 0x1771, 0x1693: 0x105e, 0x1694: 0x1776, 0x1695: 0x177b, 0x1696: 0x107e, 0x1697: 0x1096, + 0x1698: 0x0646, 0x1699: 0x109e, 0x169a: 0x10a2, 0x169b: 0x10a6, 0x169c: 0x1780, 0x169d: 0x1785, + 0x169e: 0x1785, 0x169f: 0x10be, 0x16a0: 0x064a, 0x16a1: 0x178a, 0x16a2: 0x10d2, 0x16a3: 0x10d6, + 0x16a4: 0x064e, 0x16a5: 0x178f, 0x16a6: 0x10f2, 0x16a7: 0x0652, 0x16a8: 0x1102, 0x16a9: 0x10fa, + 0x16aa: 0x110a, 0x16ab: 0x1799, 0x16ac: 0x1122, 0x16ad: 0x0656, 0x16ae: 0x112e, 0x16af: 0x1136, + 0x16b0: 0x1146, 0x16b1: 0x065a, 0x16b2: 0x17a3, 0x16b3: 0x17a8, 0x16b4: 0x065e, 0x16b5: 0x17ad, + 0x16b6: 0x115e, 0x16b7: 0x17b2, 0x16b8: 0x116a, 0x16b9: 0x1176, 0x16ba: 0x117e, 0x16bb: 0x17b7, + 0x16bc: 0x17bc, 0x16bd: 0x1192, 0x16be: 0x17c1, 0x16bf: 0x119a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x16d1, 0x16c1: 0x0662, 0x16c2: 0x11b2, 0x16c3: 0x11b6, 0x16c4: 0x066a, 0x16c5: 0x11ba, + 0x16c6: 0x0a36, 0x16c7: 0x17c6, 0x16c8: 0x17cb, 0x16c9: 0x16d6, 0x16ca: 0x16db, 0x16cb: 0x11da, + 0x16cc: 0x11de, 0x16cd: 0x13f6, 0x16ce: 0x066e, 0x16cf: 0x120a, 0x16d0: 0x1206, 0x16d1: 0x120e, + 0x16d2: 0x0842, 0x16d3: 0x1212, 0x16d4: 0x1216, 0x16d5: 0x121a, 0x16d6: 0x1222, 0x16d7: 0x17d0, + 0x16d8: 0x121e, 0x16d9: 0x1226, 0x16da: 0x123a, 0x16db: 0x123e, 0x16dc: 0x122a, 0x16dd: 0x1242, + 0x16de: 0x1256, 0x16df: 0x126a, 0x16e0: 0x1236, 0x16e1: 0x124a, 0x16e2: 0x124e, 0x16e3: 0x1252, + 0x16e4: 0x17d5, 0x16e5: 0x17df, 0x16e6: 0x17da, 0x16e7: 0x0672, 0x16e8: 0x1272, 0x16e9: 0x1276, + 0x16ea: 0x127e, 0x16eb: 0x17f3, 0x16ec: 0x1282, 0x16ed: 0x17e4, 0x16ee: 0x0676, 0x16ef: 0x067a, + 0x16f0: 0x17e9, 0x16f1: 0x17ee, 0x16f2: 0x067e, 0x16f3: 0x12a2, 0x16f4: 0x12a6, 0x16f5: 0x12aa, + 0x16f6: 0x12ae, 0x16f7: 0x12ba, 0x16f8: 0x12b6, 0x16f9: 0x12c2, 0x16fa: 0x12be, 0x16fb: 0x12ce, + 0x16fc: 0x12c6, 0x16fd: 0x12ca, 0x16fe: 0x12d2, 0x16ff: 0x0682, + // Block 0x5c, offset 0x1700 + 0x1700: 0x12da, 0x1701: 0x12de, 0x1702: 0x0686, 0x1703: 0x12ee, 0x1704: 0x12f2, 0x1705: 0x17f8, + 0x1706: 0x12fe, 0x1707: 0x1302, 0x1708: 0x068a, 0x1709: 0x130e, 0x170a: 0x05be, 0x170b: 0x17fd, + 0x170c: 0x1802, 0x170d: 0x068e, 0x170e: 0x0692, 0x170f: 0x133a, 0x1710: 0x1352, 0x1711: 0x136e, + 0x1712: 0x137e, 0x1713: 0x1807, 0x1714: 0x1392, 0x1715: 0x1396, 0x1716: 0x13ae, 0x1717: 0x13ba, + 0x1718: 0x1811, 0x1719: 0x1663, 0x171a: 0x13c6, 0x171b: 0x13c2, 0x171c: 0x13ce, 0x171d: 0x1668, + 0x171e: 0x13da, 0x171f: 0x13e6, 0x1720: 0x1816, 0x1721: 0x181b, 0x1722: 0x1426, 0x1723: 0x1432, + 0x1724: 0x143a, 0x1725: 0x1820, 0x1726: 0x143e, 0x1727: 0x146a, 0x1728: 0x1476, 0x1729: 0x147a, + 0x172a: 0x1472, 0x172b: 0x1486, 0x172c: 0x148a, 0x172d: 0x1825, 0x172e: 0x1496, 0x172f: 0x0696, + 0x1730: 0x149e, 0x1731: 0x182a, 0x1732: 0x069a, 0x1733: 0x14d6, 0x1734: 0x0ac6, 0x1735: 0x14ee, + 0x1736: 0x182f, 0x1737: 0x1839, 0x1738: 0x069e, 0x1739: 0x06a2, 0x173a: 0x1516, 0x173b: 0x183e, + 0x173c: 0x06a6, 0x173d: 0x1843, 0x173e: 0x152e, 0x173f: 0x152e, + // Block 0x5d, offset 0x1740 + 0x1740: 0x1536, 0x1741: 0x1848, 0x1742: 0x154e, 0x1743: 0x06aa, 0x1744: 0x155e, 0x1745: 0x156a, + 0x1746: 0x1572, 0x1747: 0x157a, 0x1748: 0x06ae, 0x1749: 0x184d, 0x174a: 0x158e, 0x174b: 0x15aa, + 0x174c: 0x15b6, 0x174d: 0x06b2, 0x174e: 0x06b6, 0x174f: 0x15ba, 0x1750: 0x1852, 0x1751: 0x06ba, + 0x1752: 0x1857, 0x1753: 0x185c, 0x1754: 0x1861, 0x1755: 0x15de, 0x1756: 0x06be, 0x1757: 0x15f2, + 0x1758: 0x15fa, 0x1759: 0x15fe, 0x175a: 0x1606, 0x175b: 0x160e, 0x175c: 0x1616, 0x175d: 0x186b, +} + +// nfkcIndex: 22 blocks, 1408 entries, 2816 bytes +// Block 0 is the zero block. +var nfkcIndex = [1408]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, + 0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62, + 0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, + 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, + 0xf0: 0x13, + // Block 0x4, offset 0x100 + 0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d, + 0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74, + 0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a, + 0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82, + // Block 0x5, offset 0x140 + 0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89, + 0x14d: 0x8a, + 0x15c: 0x8b, 0x15f: 0x8c, + 0x162: 0x8d, 0x164: 0x8e, + 0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16b: 0x92, 0x16c: 0x0f, 0x16d: 0x93, 0x16e: 0x94, 0x16f: 0x95, + 0x170: 0x96, 0x173: 0x97, 0x174: 0x98, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12, + 0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a, + // Block 0x6, offset 0x180 + 0x180: 0x99, 0x181: 0x9a, 0x182: 0x9b, 0x183: 0x9c, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9d, 0x187: 0x9e, + 0x188: 0x9f, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0xa0, 0x18c: 0xa1, + 0x191: 0x1f, 0x192: 0x20, 0x193: 0xa2, + 0x1a8: 0xa3, 0x1a9: 0xa4, 0x1ab: 0xa5, + 0x1b1: 0xa6, 0x1b3: 0xa7, 0x1b5: 0xa8, 0x1b7: 0xa9, + 0x1ba: 0xaa, 0x1bb: 0xab, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xac, + // Block 0x7, offset 0x1c0 + 0x1c0: 0xad, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xae, 0x1c5: 0x27, 0x1c6: 0x28, + 0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30, + // Block 0x8, offset 0x200 + 0x219: 0xaf, 0x21a: 0xb0, 0x21b: 0xb1, 0x21d: 0xb2, 0x21f: 0xb3, + 0x220: 0xb4, 0x223: 0xb5, 0x224: 0xb6, 0x225: 0xb7, 0x226: 0xb8, 0x227: 0xb9, + 0x22a: 0xba, 0x22b: 0xbb, 0x22d: 0xbc, 0x22f: 0xbd, + 0x230: 0xbe, 0x231: 0xbf, 0x232: 0xc0, 0x233: 0xc1, 0x234: 0xc2, 0x235: 0xc3, 0x236: 0xc4, 0x237: 0xbe, + 0x238: 0xbf, 0x239: 0xc0, 0x23a: 0xc1, 0x23b: 0xc2, 0x23c: 0xc3, 0x23d: 0xc4, 0x23e: 0xbe, 0x23f: 0xbf, + // Block 0x9, offset 0x240 + 0x240: 0xc0, 0x241: 0xc1, 0x242: 0xc2, 0x243: 0xc3, 0x244: 0xc4, 0x245: 0xbe, 0x246: 0xbf, 0x247: 0xc0, + 0x248: 0xc1, 0x249: 0xc2, 0x24a: 0xc3, 0x24b: 0xc4, 0x24c: 0xbe, 0x24d: 0xbf, 0x24e: 0xc0, 0x24f: 0xc1, + 0x250: 0xc2, 0x251: 0xc3, 0x252: 0xc4, 0x253: 0xbe, 0x254: 0xbf, 0x255: 0xc0, 0x256: 0xc1, 0x257: 0xc2, + 0x258: 0xc3, 0x259: 0xc4, 0x25a: 0xbe, 0x25b: 0xbf, 0x25c: 0xc0, 0x25d: 0xc1, 0x25e: 0xc2, 0x25f: 0xc3, + 0x260: 0xc4, 0x261: 0xbe, 0x262: 0xbf, 0x263: 0xc0, 0x264: 0xc1, 0x265: 0xc2, 0x266: 0xc3, 0x267: 0xc4, + 0x268: 0xbe, 0x269: 0xbf, 0x26a: 0xc0, 0x26b: 0xc1, 0x26c: 0xc2, 0x26d: 0xc3, 0x26e: 0xc4, 0x26f: 0xbe, + 0x270: 0xbf, 0x271: 0xc0, 0x272: 0xc1, 0x273: 0xc2, 0x274: 0xc3, 0x275: 0xc4, 0x276: 0xbe, 0x277: 0xbf, + 0x278: 0xc0, 0x279: 0xc1, 0x27a: 0xc2, 0x27b: 0xc3, 0x27c: 0xc4, 0x27d: 0xbe, 0x27e: 0xbf, 0x27f: 0xc0, + // Block 0xa, offset 0x280 + 0x280: 0xc1, 0x281: 0xc2, 0x282: 0xc3, 0x283: 0xc4, 0x284: 0xbe, 0x285: 0xbf, 0x286: 0xc0, 0x287: 0xc1, + 0x288: 0xc2, 0x289: 0xc3, 0x28a: 0xc4, 0x28b: 0xbe, 0x28c: 0xbf, 0x28d: 0xc0, 0x28e: 0xc1, 0x28f: 0xc2, + 0x290: 0xc3, 0x291: 0xc4, 0x292: 0xbe, 0x293: 0xbf, 0x294: 0xc0, 0x295: 0xc1, 0x296: 0xc2, 0x297: 0xc3, + 0x298: 0xc4, 0x299: 0xbe, 0x29a: 0xbf, 0x29b: 0xc0, 0x29c: 0xc1, 0x29d: 0xc2, 0x29e: 0xc3, 0x29f: 0xc4, + 0x2a0: 0xbe, 0x2a1: 0xbf, 0x2a2: 0xc0, 0x2a3: 0xc1, 0x2a4: 0xc2, 0x2a5: 0xc3, 0x2a6: 0xc4, 0x2a7: 0xbe, + 0x2a8: 0xbf, 0x2a9: 0xc0, 0x2aa: 0xc1, 0x2ab: 0xc2, 0x2ac: 0xc3, 0x2ad: 0xc4, 0x2ae: 0xbe, 0x2af: 0xbf, + 0x2b0: 0xc0, 0x2b1: 0xc1, 0x2b2: 0xc2, 0x2b3: 0xc3, 0x2b4: 0xc4, 0x2b5: 0xbe, 0x2b6: 0xbf, 0x2b7: 0xc0, + 0x2b8: 0xc1, 0x2b9: 0xc2, 0x2ba: 0xc3, 0x2bb: 0xc4, 0x2bc: 0xbe, 0x2bd: 0xbf, 0x2be: 0xc0, 0x2bf: 0xc1, + // Block 0xb, offset 0x2c0 + 0x2c0: 0xc2, 0x2c1: 0xc3, 0x2c2: 0xc4, 0x2c3: 0xbe, 0x2c4: 0xbf, 0x2c5: 0xc0, 0x2c6: 0xc1, 0x2c7: 0xc2, + 0x2c8: 0xc3, 0x2c9: 0xc4, 0x2ca: 0xbe, 0x2cb: 0xbf, 0x2cc: 0xc0, 0x2cd: 0xc1, 0x2ce: 0xc2, 0x2cf: 0xc3, + 0x2d0: 0xc4, 0x2d1: 0xbe, 0x2d2: 0xbf, 0x2d3: 0xc0, 0x2d4: 0xc1, 0x2d5: 0xc2, 0x2d6: 0xc3, 0x2d7: 0xc4, + 0x2d8: 0xbe, 0x2d9: 0xbf, 0x2da: 0xc0, 0x2db: 0xc1, 0x2dc: 0xc2, 0x2dd: 0xc3, 0x2de: 0xc5, + // Block 0xc, offset 0x300 + 0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34, + 0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c, + 0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44, + 0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc6, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, + // Block 0xd, offset 0x340 + 0x347: 0xc7, + 0x34b: 0xc8, 0x34d: 0xc9, + 0x368: 0xca, 0x36b: 0xcb, + 0x374: 0xcc, + 0x37a: 0xcd, 0x37d: 0xce, + // Block 0xe, offset 0x380 + 0x381: 0xcf, 0x382: 0xd0, 0x384: 0xd1, 0x385: 0xb8, 0x387: 0xd2, + 0x388: 0xd3, 0x38b: 0xd4, 0x38c: 0xd5, 0x38d: 0xd6, + 0x391: 0xd7, 0x392: 0xd8, 0x393: 0xd9, 0x396: 0xda, 0x397: 0xdb, + 0x398: 0xdc, 0x39a: 0xdd, 0x39c: 0xde, + 0x3a0: 0xdf, 0x3a4: 0xe0, 0x3a5: 0xe1, 0x3a7: 0xe2, + 0x3a8: 0xe3, 0x3a9: 0xe4, 0x3aa: 0xe5, + 0x3b0: 0xdc, 0x3b5: 0xe6, 0x3b6: 0xe7, + // Block 0xf, offset 0x3c0 + 0x3eb: 0xe8, 0x3ec: 0xe9, + 0x3ff: 0xea, + // Block 0x10, offset 0x400 + 0x432: 0xeb, + // Block 0x11, offset 0x440 + 0x445: 0xec, 0x446: 0xed, 0x447: 0xee, + 0x449: 0xef, + 0x450: 0xf0, 0x451: 0xf1, 0x452: 0xf2, 0x453: 0xf3, 0x454: 0xf4, 0x455: 0xf5, 0x456: 0xf6, 0x457: 0xf7, + 0x458: 0xf8, 0x459: 0xf9, 0x45a: 0x4c, 0x45b: 0xfa, 0x45c: 0xfb, 0x45d: 0xfc, 0x45e: 0xfd, 0x45f: 0x4d, + // Block 0x12, offset 0x480 + 0x480: 0xfe, 0x484: 0xe9, + 0x48b: 0xff, + 0x4a3: 0x100, 0x4a5: 0x101, + 0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50, + // Block 0x13, offset 0x4c0 + 0x4c4: 0x51, 0x4c5: 0x102, 0x4c6: 0x103, + 0x4c8: 0x52, 0x4c9: 0x104, + 0x4ef: 0x105, + // Block 0x14, offset 0x500 + 0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a, + 0x528: 0x5b, + // Block 0x15, offset 0x540 + 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, + 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, +} + +// nfkcSparseOffset: 170 entries, 340 bytes +var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x70, 0x75, 0x77, 0x7f, 0x86, 0x89, 0x91, 0x95, 0x99, 0x9b, 0x9d, 0xa6, 0xaa, 0xb1, 0xb6, 0xb9, 0xc3, 0xc6, 0xcd, 0xd5, 0xd9, 0xdb, 0xdf, 0xe3, 0xe9, 0xfa, 0x106, 0x108, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11f, 0x122, 0x124, 0x127, 0x12a, 0x12e, 0x134, 0x136, 0x13f, 0x141, 0x144, 0x146, 0x151, 0x15c, 0x16a, 0x178, 0x188, 0x196, 0x19d, 0x1a3, 0x1b2, 0x1b6, 0x1b8, 0x1bc, 0x1be, 0x1c1, 0x1c3, 0x1c6, 0x1c8, 0x1cb, 0x1cd, 0x1cf, 0x1d1, 0x1dd, 0x1e7, 0x1f1, 0x1f4, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x201, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x212, 0x215, 0x21a, 0x21c, 0x223, 0x229, 0x22f, 0x237, 0x23d, 0x243, 0x249, 0x24d, 0x24f, 0x251, 0x253, 0x255, 0x25b, 0x25e, 0x260, 0x262, 0x268, 0x26b, 0x273, 0x27a, 0x27d, 0x280, 0x282, 0x285, 0x28d, 0x291, 0x298, 0x29b, 0x2a1, 0x2a3, 0x2a5, 0x2a8, 0x2aa, 0x2ad, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2bc, 0x2bf, 0x2c1, 0x2c3, 0x2c5, 0x2c7, 0x2c9, 0x2d6, 0x2e0, 0x2e2, 0x2e4, 0x2e8, 0x2ed, 0x2f9, 0x2fe, 0x307, 0x30d, 0x312, 0x316, 0x31b, 0x31f, 0x32f, 0x33d, 0x34b, 0x359, 0x35f, 0x361, 0x363, 0x366, 0x371, 0x373, 0x37d} + +// nfkcSparseValues: 895 entries, 3580 bytes +var nfkcSparseValues = [895]valueRange{ + // Block 0x0, offset 0x0 + {value: 0x0002, lo: 0x0d}, + {value: 0x0001, lo: 0xa0, hi: 0xa0}, + {value: 0x428f, lo: 0xa8, hi: 0xa8}, + {value: 0x0083, lo: 0xaa, hi: 0xaa}, + {value: 0x427b, lo: 0xaf, hi: 0xaf}, + {value: 0x0025, lo: 0xb2, hi: 0xb3}, + {value: 0x4271, lo: 0xb4, hi: 0xb4}, + {value: 0x01df, lo: 0xb5, hi: 0xb5}, + {value: 0x42a8, lo: 0xb8, hi: 0xb8}, + {value: 0x0023, lo: 0xb9, hi: 0xb9}, + {value: 0x009f, lo: 0xba, hi: 0xba}, + {value: 0x2222, lo: 0xbc, hi: 0xbc}, + {value: 0x2216, lo: 0xbd, hi: 0xbd}, + {value: 0x22b8, lo: 0xbe, hi: 0xbe}, + // Block 0x1, offset 0xe + {value: 0x0091, lo: 0x03}, + {value: 0x46f9, lo: 0xa0, hi: 0xa1}, + {value: 0x472b, lo: 0xaf, hi: 0xb0}, + {value: 0xa000, lo: 0xb7, hi: 0xb7}, + // Block 0x2, offset 0x12 + {value: 0x0003, lo: 0x08}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x0091, lo: 0xb0, hi: 0xb0}, + {value: 0x0119, lo: 0xb1, hi: 0xb1}, + {value: 0x0095, lo: 0xb2, hi: 0xb2}, + {value: 0x00a5, lo: 0xb3, hi: 0xb3}, + {value: 0x0143, lo: 0xb4, hi: 0xb6}, + {value: 0x00af, lo: 0xb7, hi: 0xb7}, + {value: 0x00b3, lo: 0xb8, hi: 0xb8}, + // Block 0x3, offset 0x1b + {value: 0x000a, lo: 0x09}, + {value: 0x4285, lo: 0x98, hi: 0x98}, + {value: 0x428a, lo: 0x99, hi: 0x9a}, + {value: 0x42ad, lo: 0x9b, hi: 0x9b}, + {value: 0x4276, lo: 0x9c, hi: 0x9c}, + {value: 0x4299, lo: 0x9d, hi: 0x9d}, + {value: 0x0113, lo: 0xa0, hi: 0xa0}, + {value: 0x0099, lo: 0xa1, hi: 0xa1}, + {value: 0x00a7, lo: 0xa2, hi: 0xa3}, + {value: 0x016a, lo: 0xa4, hi: 0xa4}, + // Block 0x4, offset 0x25 + {value: 0x0000, lo: 0x0f}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0xa000, lo: 0x8d, hi: 0x8d}, + {value: 0x37bc, lo: 0x90, hi: 0x90}, + {value: 0x37c8, lo: 0x91, hi: 0x91}, + {value: 0x37b6, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x96, hi: 0x96}, + {value: 0x382e, lo: 0x97, hi: 0x97}, + {value: 0x37f8, lo: 0x9c, hi: 0x9c}, + {value: 0x37e0, lo: 0x9d, hi: 0x9d}, + {value: 0x380a, lo: 0x9e, hi: 0x9e}, + {value: 0xa000, lo: 0xb4, hi: 0xb5}, + {value: 0x3834, lo: 0xb6, hi: 0xb6}, + {value: 0x383a, lo: 0xb7, hi: 0xb7}, + // Block 0x5, offset 0x35 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x83, hi: 0x87}, + // Block 0x6, offset 0x37 + {value: 0x0001, lo: 0x04}, + {value: 0x8114, lo: 0x81, hi: 0x82}, + {value: 0x8133, lo: 0x84, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + {value: 0x810e, lo: 0x87, hi: 0x87}, + // Block 0x7, offset 0x3c + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x97}, + {value: 0x811a, lo: 0x98, hi: 0x98}, + {value: 0x811b, lo: 0x99, hi: 0x99}, + {value: 0x811c, lo: 0x9a, hi: 0x9a}, + {value: 0x3858, lo: 0xa2, hi: 0xa2}, + {value: 0x385e, lo: 0xa3, hi: 0xa3}, + {value: 0x386a, lo: 0xa4, hi: 0xa4}, + {value: 0x3864, lo: 0xa5, hi: 0xa5}, + {value: 0x3870, lo: 0xa6, hi: 0xa6}, + {value: 0xa000, lo: 0xa7, hi: 0xa7}, + // Block 0x8, offset 0x47 + {value: 0x0000, lo: 0x0e}, + {value: 0x3882, lo: 0x80, hi: 0x80}, + {value: 0xa000, lo: 0x81, hi: 0x81}, + {value: 0x3876, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x387c, lo: 0x93, hi: 0x93}, + {value: 0xa000, lo: 0x95, hi: 0x95}, + {value: 0x8133, lo: 0x96, hi: 0x9c}, + {value: 0x8133, lo: 0x9f, hi: 0xa2}, + {value: 0x812e, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa4, hi: 0xa4}, + {value: 0x8133, lo: 0xa7, hi: 0xa8}, + {value: 0x812e, lo: 0xaa, hi: 0xaa}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + // Block 0x9, offset 0x56 + {value: 0x0000, lo: 0x0c}, + {value: 0x8120, lo: 0x91, hi: 0x91}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x812e, lo: 0xb1, hi: 0xb1}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb5, hi: 0xb6}, + {value: 0x812e, lo: 0xb7, hi: 0xb9}, + {value: 0x8133, lo: 0xba, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbc}, + {value: 0x8133, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbe, hi: 0xbe}, + {value: 0x8133, lo: 0xbf, hi: 0xbf}, + // Block 0xa, offset 0x63 + {value: 0x0005, lo: 0x07}, + {value: 0x8133, lo: 0x80, hi: 0x80}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x812e, lo: 0x82, hi: 0x83}, + {value: 0x812e, lo: 0x84, hi: 0x85}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x812e, lo: 0x88, hi: 0x89}, + {value: 0x8133, lo: 0x8a, hi: 0x8a}, + // Block 0xb, offset 0x6b + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0xab, hi: 0xb1}, + {value: 0x812e, lo: 0xb2, hi: 0xb2}, + {value: 0x8133, lo: 0xb3, hi: 0xb3}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0xc, offset 0x70 + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0x96, hi: 0x99}, + {value: 0x8133, lo: 0x9b, hi: 0xa3}, + {value: 0x8133, lo: 0xa5, hi: 0xa7}, + {value: 0x8133, lo: 0xa9, hi: 0xad}, + // Block 0xd, offset 0x75 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + // Block 0xe, offset 0x77 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0xa8, hi: 0xa8}, + {value: 0x3eef, lo: 0xa9, hi: 0xa9}, + {value: 0xa000, lo: 0xb0, hi: 0xb0}, + {value: 0x3ef7, lo: 0xb1, hi: 0xb1}, + {value: 0xa000, lo: 0xb3, hi: 0xb3}, + {value: 0x3eff, lo: 0xb4, hi: 0xb4}, + {value: 0x9903, lo: 0xbc, hi: 0xbc}, + // Block 0xf, offset 0x7f + {value: 0x0008, lo: 0x06}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x91, hi: 0x91}, + {value: 0x812e, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x93, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x94}, + {value: 0x4533, lo: 0x98, hi: 0x9f}, + // Block 0x10, offset 0x86 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x11, offset 0x89 + {value: 0x0008, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cab, lo: 0x8b, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x4573, lo: 0x9c, hi: 0x9d}, + {value: 0x4583, lo: 0x9f, hi: 0x9f}, + {value: 0x8133, lo: 0xbe, hi: 0xbe}, + // Block 0x12, offset 0x91 + {value: 0x0000, lo: 0x03}, + {value: 0x45ab, lo: 0xb3, hi: 0xb3}, + {value: 0x45b3, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x13, offset 0x95 + {value: 0x0008, lo: 0x03}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x458b, lo: 0x99, hi: 0x9b}, + {value: 0x45a3, lo: 0x9e, hi: 0x9e}, + // Block 0x14, offset 0x99 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + // Block 0x15, offset 0x9b + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + // Block 0x16, offset 0x9d + {value: 0x0000, lo: 0x08}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2cc3, lo: 0x88, hi: 0x88}, + {value: 0x2cbb, lo: 0x8b, hi: 0x8b}, + {value: 0x2ccb, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x96, hi: 0x97}, + {value: 0x45bb, lo: 0x9c, hi: 0x9c}, + {value: 0x45c3, lo: 0x9d, hi: 0x9d}, + // Block 0x17, offset 0xa6 + {value: 0x0000, lo: 0x03}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0x2cd3, lo: 0x94, hi: 0x94}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x18, offset 0xaa + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2cdb, lo: 0x8a, hi: 0x8a}, + {value: 0x2ceb, lo: 0x8b, hi: 0x8b}, + {value: 0x2ce3, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x19, offset 0xb1 + {value: 0x1801, lo: 0x04}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x3f07, lo: 0x88, hi: 0x88}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x8121, lo: 0x95, hi: 0x96}, + // Block 0x1a, offset 0xb6 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbc, hi: 0xbc}, + {value: 0xa000, lo: 0xbf, hi: 0xbf}, + // Block 0x1b, offset 0xb9 + {value: 0x0000, lo: 0x09}, + {value: 0x2cf3, lo: 0x80, hi: 0x80}, + {value: 0x9900, lo: 0x82, hi: 0x82}, + {value: 0xa000, lo: 0x86, hi: 0x86}, + {value: 0x2cfb, lo: 0x87, hi: 0x87}, + {value: 0x2d03, lo: 0x88, hi: 0x88}, + {value: 0x2f67, lo: 0x8a, hi: 0x8a}, + {value: 0x2def, lo: 0x8b, hi: 0x8b}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x95, hi: 0x96}, + // Block 0x1c, offset 0xc3 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x1d, offset 0xc6 + {value: 0x0000, lo: 0x06}, + {value: 0xa000, lo: 0x86, hi: 0x87}, + {value: 0x2d0b, lo: 0x8a, hi: 0x8a}, + {value: 0x2d1b, lo: 0x8b, hi: 0x8b}, + {value: 0x2d13, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + // Block 0x1e, offset 0xcd + {value: 0x6bdd, lo: 0x07}, + {value: 0x9905, lo: 0x8a, hi: 0x8a}, + {value: 0x9900, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x3f0f, lo: 0x9a, hi: 0x9a}, + {value: 0x2f6f, lo: 0x9c, hi: 0x9c}, + {value: 0x2dfa, lo: 0x9d, hi: 0x9d}, + {value: 0x2d23, lo: 0x9e, hi: 0x9f}, + // Block 0x1f, offset 0xd5 + {value: 0x0000, lo: 0x03}, + {value: 0x2627, lo: 0xb3, hi: 0xb3}, + {value: 0x8123, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x20, offset 0xd9 + {value: 0x0000, lo: 0x01}, + {value: 0x8124, lo: 0x88, hi: 0x8b}, + // Block 0x21, offset 0xdb + {value: 0x0000, lo: 0x03}, + {value: 0x263c, lo: 0xb3, hi: 0xb3}, + {value: 0x8125, lo: 0xb8, hi: 0xb9}, + {value: 0x8105, lo: 0xba, hi: 0xba}, + // Block 0x22, offset 0xdf + {value: 0x0000, lo: 0x03}, + {value: 0x8126, lo: 0x88, hi: 0x8b}, + {value: 0x262e, lo: 0x9c, hi: 0x9c}, + {value: 0x2635, lo: 0x9d, hi: 0x9d}, + // Block 0x23, offset 0xe3 + {value: 0x0000, lo: 0x05}, + {value: 0x030e, lo: 0x8c, hi: 0x8c}, + {value: 0x812e, lo: 0x98, hi: 0x99}, + {value: 0x812e, lo: 0xb5, hi: 0xb5}, + {value: 0x812e, lo: 0xb7, hi: 0xb7}, + {value: 0x812c, lo: 0xb9, hi: 0xb9}, + // Block 0x24, offset 0xe9 + {value: 0x0000, lo: 0x10}, + {value: 0x264a, lo: 0x83, hi: 0x83}, + {value: 0x2651, lo: 0x8d, hi: 0x8d}, + {value: 0x2658, lo: 0x92, hi: 0x92}, + {value: 0x265f, lo: 0x97, hi: 0x97}, + {value: 0x2666, lo: 0x9c, hi: 0x9c}, + {value: 0x2643, lo: 0xa9, hi: 0xa9}, + {value: 0x8127, lo: 0xb1, hi: 0xb1}, + {value: 0x8128, lo: 0xb2, hi: 0xb2}, + {value: 0x4a9b, lo: 0xb3, hi: 0xb3}, + {value: 0x8129, lo: 0xb4, hi: 0xb4}, + {value: 0x4aa4, lo: 0xb5, hi: 0xb5}, + {value: 0x45cb, lo: 0xb6, hi: 0xb6}, + {value: 0x460b, lo: 0xb7, hi: 0xb7}, + {value: 0x45d3, lo: 0xb8, hi: 0xb8}, + {value: 0x4616, lo: 0xb9, hi: 0xb9}, + {value: 0x8128, lo: 0xba, hi: 0xbd}, + // Block 0x25, offset 0xfa + {value: 0x0000, lo: 0x0b}, + {value: 0x8128, lo: 0x80, hi: 0x80}, + {value: 0x4aad, lo: 0x81, hi: 0x81}, + {value: 0x8133, lo: 0x82, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0x86, hi: 0x87}, + {value: 0x2674, lo: 0x93, hi: 0x93}, + {value: 0x267b, lo: 0x9d, hi: 0x9d}, + {value: 0x2682, lo: 0xa2, hi: 0xa2}, + {value: 0x2689, lo: 0xa7, hi: 0xa7}, + {value: 0x2690, lo: 0xac, hi: 0xac}, + {value: 0x266d, lo: 0xb9, hi: 0xb9}, + // Block 0x26, offset 0x106 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x86, hi: 0x86}, + // Block 0x27, offset 0x108 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x2d2b, lo: 0xa6, hi: 0xa6}, + {value: 0x9900, lo: 0xae, hi: 0xae}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x28, offset 0x10e + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + // Block 0x29, offset 0x110 + {value: 0x0000, lo: 0x01}, + {value: 0x0312, lo: 0xbc, hi: 0xbc}, + // Block 0x2a, offset 0x112 + {value: 0x0000, lo: 0x01}, + {value: 0xa000, lo: 0x80, hi: 0x92}, + // Block 0x2b, offset 0x114 + {value: 0x0000, lo: 0x01}, + {value: 0xb900, lo: 0xa1, hi: 0xb5}, + // Block 0x2c, offset 0x116 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0xa8, hi: 0xbf}, + // Block 0x2d, offset 0x118 + {value: 0x0000, lo: 0x01}, + {value: 0x9900, lo: 0x80, hi: 0x82}, + // Block 0x2e, offset 0x11a + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x9d, hi: 0x9f}, + // Block 0x2f, offset 0x11c + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x94, hi: 0x94}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x30, offset 0x11f + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x92, hi: 0x92}, + {value: 0x8133, lo: 0x9d, hi: 0x9d}, + // Block 0x31, offset 0x122 + {value: 0x0000, lo: 0x01}, + {value: 0x8132, lo: 0xa9, hi: 0xa9}, + // Block 0x32, offset 0x124 + {value: 0x0004, lo: 0x02}, + {value: 0x812f, lo: 0xb9, hi: 0xba}, + {value: 0x812e, lo: 0xbb, hi: 0xbb}, + // Block 0x33, offset 0x127 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x97, hi: 0x97}, + {value: 0x812e, lo: 0x98, hi: 0x98}, + // Block 0x34, offset 0x12a + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + {value: 0x8133, lo: 0xb5, hi: 0xbc}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x35, offset 0x12e + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + {value: 0x812e, lo: 0xb5, hi: 0xba}, + {value: 0x8133, lo: 0xbb, hi: 0xbc}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + {value: 0x812e, lo: 0xbf, hi: 0xbf}, + // Block 0x36, offset 0x134 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x80, hi: 0x80}, + // Block 0x37, offset 0x136 + {value: 0x0000, lo: 0x08}, + {value: 0x2d73, lo: 0x80, hi: 0x80}, + {value: 0x2d7b, lo: 0x81, hi: 0x81}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x2d83, lo: 0x83, hi: 0x83}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xab, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xac}, + {value: 0x8133, lo: 0xad, hi: 0xb3}, + // Block 0x38, offset 0x13f + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xaa, hi: 0xab}, + // Block 0x39, offset 0x141 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xa6, hi: 0xa6}, + {value: 0x8105, lo: 0xb2, hi: 0xb3}, + // Block 0x3a, offset 0x144 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x3b, offset 0x146 + {value: 0x0000, lo: 0x0a}, + {value: 0x8133, lo: 0x90, hi: 0x92}, + {value: 0x8101, lo: 0x94, hi: 0x94}, + {value: 0x812e, lo: 0x95, hi: 0x99}, + {value: 0x8133, lo: 0x9a, hi: 0x9b}, + {value: 0x812e, lo: 0x9c, hi: 0x9f}, + {value: 0x8133, lo: 0xa0, hi: 0xa0}, + {value: 0x8101, lo: 0xa2, hi: 0xa8}, + {value: 0x812e, lo: 0xad, hi: 0xad}, + {value: 0x8133, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb8, hi: 0xb9}, + // Block 0x3c, offset 0x151 + {value: 0x0002, lo: 0x0a}, + {value: 0x0043, lo: 0xac, hi: 0xac}, + {value: 0x00d1, lo: 0xad, hi: 0xad}, + {value: 0x0045, lo: 0xae, hi: 0xae}, + {value: 0x0049, lo: 0xb0, hi: 0xb1}, + {value: 0x00e6, lo: 0xb2, hi: 0xb2}, + {value: 0x004f, lo: 0xb3, hi: 0xba}, + {value: 0x005f, lo: 0xbc, hi: 0xbc}, + {value: 0x00ef, lo: 0xbd, hi: 0xbd}, + {value: 0x0061, lo: 0xbe, hi: 0xbe}, + {value: 0x0065, lo: 0xbf, hi: 0xbf}, + // Block 0x3d, offset 0x15c + {value: 0x0000, lo: 0x0d}, + {value: 0x0001, lo: 0x80, hi: 0x8a}, + {value: 0x043e, lo: 0x91, hi: 0x91}, + {value: 0x42b2, lo: 0x97, hi: 0x97}, + {value: 0x001d, lo: 0xa4, hi: 0xa4}, + {value: 0x1876, lo: 0xa5, hi: 0xa5}, + {value: 0x1b62, lo: 0xa6, hi: 0xa6}, + {value: 0x0001, lo: 0xaf, hi: 0xaf}, + {value: 0x2697, lo: 0xb3, hi: 0xb3}, + {value: 0x280b, lo: 0xb4, hi: 0xb4}, + {value: 0x269e, lo: 0xb6, hi: 0xb6}, + {value: 0x2815, lo: 0xb7, hi: 0xb7}, + {value: 0x1870, lo: 0xbc, hi: 0xbc}, + {value: 0x4280, lo: 0xbe, hi: 0xbe}, + // Block 0x3e, offset 0x16a + {value: 0x0002, lo: 0x0d}, + {value: 0x1936, lo: 0x87, hi: 0x87}, + {value: 0x1933, lo: 0x88, hi: 0x88}, + {value: 0x1873, lo: 0x89, hi: 0x89}, + {value: 0x299b, lo: 0x97, hi: 0x97}, + {value: 0x0001, lo: 0x9f, hi: 0x9f}, + {value: 0x0021, lo: 0xb0, hi: 0xb0}, + {value: 0x0093, lo: 0xb1, hi: 0xb1}, + {value: 0x0029, lo: 0xb4, hi: 0xb9}, + {value: 0x0017, lo: 0xba, hi: 0xba}, + {value: 0x046a, lo: 0xbb, hi: 0xbb}, + {value: 0x003b, lo: 0xbc, hi: 0xbc}, + {value: 0x0011, lo: 0xbd, hi: 0xbe}, + {value: 0x009d, lo: 0xbf, hi: 0xbf}, + // Block 0x3f, offset 0x178 + {value: 0x0002, lo: 0x0f}, + {value: 0x0021, lo: 0x80, hi: 0x89}, + {value: 0x0017, lo: 0x8a, hi: 0x8a}, + {value: 0x046a, lo: 0x8b, hi: 0x8b}, + {value: 0x003b, lo: 0x8c, hi: 0x8c}, + {value: 0x0011, lo: 0x8d, hi: 0x8e}, + {value: 0x0083, lo: 0x90, hi: 0x90}, + {value: 0x008b, lo: 0x91, hi: 0x91}, + {value: 0x009f, lo: 0x92, hi: 0x92}, + {value: 0x00b1, lo: 0x93, hi: 0x93}, + {value: 0x0104, lo: 0x94, hi: 0x94}, + {value: 0x0091, lo: 0x95, hi: 0x95}, + {value: 0x0097, lo: 0x96, hi: 0x99}, + {value: 0x00a1, lo: 0x9a, hi: 0x9a}, + {value: 0x00a7, lo: 0x9b, hi: 0x9c}, + {value: 0x199f, lo: 0xa8, hi: 0xa8}, + // Block 0x40, offset 0x188 + {value: 0x0000, lo: 0x0d}, + {value: 0x8133, lo: 0x90, hi: 0x91}, + {value: 0x8101, lo: 0x92, hi: 0x93}, + {value: 0x8133, lo: 0x94, hi: 0x97}, + {value: 0x8101, lo: 0x98, hi: 0x9a}, + {value: 0x8133, lo: 0x9b, hi: 0x9c}, + {value: 0x8133, lo: 0xa1, hi: 0xa1}, + {value: 0x8101, lo: 0xa5, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xa7}, + {value: 0x812e, lo: 0xa8, hi: 0xa8}, + {value: 0x8133, lo: 0xa9, hi: 0xa9}, + {value: 0x8101, lo: 0xaa, hi: 0xab}, + {value: 0x812e, lo: 0xac, hi: 0xaf}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + // Block 0x41, offset 0x196 + {value: 0x0007, lo: 0x06}, + {value: 0x2186, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + {value: 0x3bd0, lo: 0x9a, hi: 0x9b}, + {value: 0x3bde, lo: 0xae, hi: 0xae}, + // Block 0x42, offset 0x19d + {value: 0x000e, lo: 0x05}, + {value: 0x3be5, lo: 0x8d, hi: 0x8e}, + {value: 0x3bec, lo: 0x8f, hi: 0x8f}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x94, hi: 0x94}, + // Block 0x43, offset 0x1a3 + {value: 0x017a, lo: 0x0e}, + {value: 0xa000, lo: 0x83, hi: 0x83}, + {value: 0x3bfa, lo: 0x84, hi: 0x84}, + {value: 0xa000, lo: 0x88, hi: 0x88}, + {value: 0x3c01, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x3c08, lo: 0x8c, hi: 0x8c}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0x3c0f, lo: 0xa4, hi: 0xa4}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x3c16, lo: 0xa6, hi: 0xa6}, + {value: 0x26a5, lo: 0xac, hi: 0xad}, + {value: 0x26ac, lo: 0xaf, hi: 0xaf}, + {value: 0x2829, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xbc, hi: 0xbc}, + // Block 0x44, offset 0x1b2 + {value: 0x0007, lo: 0x03}, + {value: 0x3c7f, lo: 0xa0, hi: 0xa1}, + {value: 0x3ca9, lo: 0xa2, hi: 0xa3}, + {value: 0x3cd3, lo: 0xaa, hi: 0xad}, + // Block 0x45, offset 0x1b6 + {value: 0x0004, lo: 0x01}, + {value: 0x048e, lo: 0xa9, hi: 0xaa}, + // Block 0x46, offset 0x1b8 + {value: 0x0002, lo: 0x03}, + {value: 0x0057, lo: 0x80, hi: 0x8f}, + {value: 0x0083, lo: 0x90, hi: 0xa9}, + {value: 0x0021, lo: 0xaa, hi: 0xaa}, + // Block 0x47, offset 0x1bc + {value: 0x0000, lo: 0x01}, + {value: 0x29a8, lo: 0x8c, hi: 0x8c}, + // Block 0x48, offset 0x1be + {value: 0x0266, lo: 0x02}, + {value: 0x1b92, lo: 0xb4, hi: 0xb4}, + {value: 0x1930, lo: 0xb5, hi: 0xb6}, + // Block 0x49, offset 0x1c1 + {value: 0x0000, lo: 0x01}, + {value: 0x44f4, lo: 0x9c, hi: 0x9c}, + // Block 0x4a, offset 0x1c3 + {value: 0x0000, lo: 0x02}, + {value: 0x0095, lo: 0xbc, hi: 0xbc}, + {value: 0x006d, lo: 0xbd, hi: 0xbd}, + // Block 0x4b, offset 0x1c6 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xaf, hi: 0xb1}, + // Block 0x4c, offset 0x1c8 + {value: 0x0000, lo: 0x02}, + {value: 0x0482, lo: 0xaf, hi: 0xaf}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x4d, offset 0x1cb + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa0, hi: 0xbf}, + // Block 0x4e, offset 0x1cd + {value: 0x0000, lo: 0x01}, + {value: 0x0dc6, lo: 0x9f, hi: 0x9f}, + // Block 0x4f, offset 0x1cf + {value: 0x0000, lo: 0x01}, + {value: 0x1632, lo: 0xb3, hi: 0xb3}, + // Block 0x50, offset 0x1d1 + {value: 0x0004, lo: 0x0b}, + {value: 0x159a, lo: 0x80, hi: 0x82}, + {value: 0x15b2, lo: 0x83, hi: 0x83}, + {value: 0x15ca, lo: 0x84, hi: 0x85}, + {value: 0x15da, lo: 0x86, hi: 0x89}, + {value: 0x15ee, lo: 0x8a, hi: 0x8c}, + {value: 0x1602, lo: 0x8d, hi: 0x8d}, + {value: 0x160a, lo: 0x8e, hi: 0x8e}, + {value: 0x1612, lo: 0x8f, hi: 0x90}, + {value: 0x161e, lo: 0x91, hi: 0x93}, + {value: 0x162e, lo: 0x94, hi: 0x94}, + {value: 0x1636, lo: 0x95, hi: 0x95}, + // Block 0x51, offset 0x1dd + {value: 0x0004, lo: 0x09}, + {value: 0x0001, lo: 0x80, hi: 0x80}, + {value: 0x812d, lo: 0xaa, hi: 0xaa}, + {value: 0x8132, lo: 0xab, hi: 0xab}, + {value: 0x8134, lo: 0xac, hi: 0xac}, + {value: 0x812f, lo: 0xad, hi: 0xad}, + {value: 0x8130, lo: 0xae, hi: 0xae}, + {value: 0x8130, lo: 0xaf, hi: 0xaf}, + {value: 0x04b6, lo: 0xb6, hi: 0xb6}, + {value: 0x088a, lo: 0xb8, hi: 0xba}, + // Block 0x52, offset 0x1e7 + {value: 0x0006, lo: 0x09}, + {value: 0x0316, lo: 0xb1, hi: 0xb1}, + {value: 0x031a, lo: 0xb2, hi: 0xb2}, + {value: 0x4a52, lo: 0xb3, hi: 0xb3}, + {value: 0x031e, lo: 0xb4, hi: 0xb4}, + {value: 0x4a58, lo: 0xb5, hi: 0xb6}, + {value: 0x0322, lo: 0xb7, hi: 0xb7}, + {value: 0x0326, lo: 0xb8, hi: 0xb8}, + {value: 0x032a, lo: 0xb9, hi: 0xb9}, + {value: 0x4a64, lo: 0xba, hi: 0xbf}, + // Block 0x53, offset 0x1f1 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + {value: 0x8133, lo: 0xb4, hi: 0xbd}, + // Block 0x54, offset 0x1f4 + {value: 0x0000, lo: 0x03}, + {value: 0x0212, lo: 0x9c, hi: 0x9c}, + {value: 0x0215, lo: 0x9d, hi: 0x9d}, + {value: 0x8133, lo: 0x9e, hi: 0x9f}, + // Block 0x55, offset 0x1f8 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb1}, + // Block 0x56, offset 0x1fa + {value: 0x0000, lo: 0x01}, + {value: 0x163e, lo: 0xb0, hi: 0xb0}, + // Block 0x57, offset 0x1fc + {value: 0x000c, lo: 0x01}, + {value: 0x00d7, lo: 0xb8, hi: 0xb9}, + // Block 0x58, offset 0x1fe + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xac, hi: 0xac}, + // Block 0x59, offset 0x201 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x84, hi: 0x84}, + {value: 0x8133, lo: 0xa0, hi: 0xb1}, + // Block 0x5a, offset 0x204 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xab, hi: 0xad}, + // Block 0x5b, offset 0x206 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x93, hi: 0x93}, + // Block 0x5c, offset 0x208 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0xb3, hi: 0xb3}, + // Block 0x5d, offset 0x20a + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + // Block 0x5e, offset 0x20c + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0xb0, hi: 0xb0}, + {value: 0x8133, lo: 0xb2, hi: 0xb3}, + {value: 0x812e, lo: 0xb4, hi: 0xb4}, + {value: 0x8133, lo: 0xb7, hi: 0xb8}, + {value: 0x8133, lo: 0xbe, hi: 0xbf}, + // Block 0x5f, offset 0x212 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x81, hi: 0x81}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + // Block 0x60, offset 0x215 + {value: 0x0008, lo: 0x04}, + {value: 0x163a, lo: 0x9c, hi: 0x9d}, + {value: 0x0125, lo: 0x9e, hi: 0x9e}, + {value: 0x1646, lo: 0x9f, hi: 0x9f}, + {value: 0x015e, lo: 0xa9, hi: 0xa9}, + // Block 0x61, offset 0x21a + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xad, hi: 0xad}, + // Block 0x62, offset 0x21c + {value: 0x0000, lo: 0x06}, + {value: 0xe500, lo: 0x80, hi: 0x80}, + {value: 0xc600, lo: 0x81, hi: 0x9b}, + {value: 0xe500, lo: 0x9c, hi: 0x9c}, + {value: 0xc600, lo: 0x9d, hi: 0xb7}, + {value: 0xe500, lo: 0xb8, hi: 0xb8}, + {value: 0xc600, lo: 0xb9, hi: 0xbf}, + // Block 0x63, offset 0x223 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x93}, + {value: 0xe500, lo: 0x94, hi: 0x94}, + {value: 0xc600, lo: 0x95, hi: 0xaf}, + {value: 0xe500, lo: 0xb0, hi: 0xb0}, + {value: 0xc600, lo: 0xb1, hi: 0xbf}, + // Block 0x64, offset 0x229 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8b}, + {value: 0xe500, lo: 0x8c, hi: 0x8c}, + {value: 0xc600, lo: 0x8d, hi: 0xa7}, + {value: 0xe500, lo: 0xa8, hi: 0xa8}, + {value: 0xc600, lo: 0xa9, hi: 0xbf}, + // Block 0x65, offset 0x22f + {value: 0x0000, lo: 0x07}, + {value: 0xc600, lo: 0x80, hi: 0x83}, + {value: 0xe500, lo: 0x84, hi: 0x84}, + {value: 0xc600, lo: 0x85, hi: 0x9f}, + {value: 0xe500, lo: 0xa0, hi: 0xa0}, + {value: 0xc600, lo: 0xa1, hi: 0xbb}, + {value: 0xe500, lo: 0xbc, hi: 0xbc}, + {value: 0xc600, lo: 0xbd, hi: 0xbf}, + // Block 0x66, offset 0x237 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x97}, + {value: 0xe500, lo: 0x98, hi: 0x98}, + {value: 0xc600, lo: 0x99, hi: 0xb3}, + {value: 0xe500, lo: 0xb4, hi: 0xb4}, + {value: 0xc600, lo: 0xb5, hi: 0xbf}, + // Block 0x67, offset 0x23d + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x8f}, + {value: 0xe500, lo: 0x90, hi: 0x90}, + {value: 0xc600, lo: 0x91, hi: 0xab}, + {value: 0xe500, lo: 0xac, hi: 0xac}, + {value: 0xc600, lo: 0xad, hi: 0xbf}, + // Block 0x68, offset 0x243 + {value: 0x0000, lo: 0x05}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + {value: 0xe500, lo: 0xa4, hi: 0xa4}, + {value: 0xc600, lo: 0xa5, hi: 0xbf}, + // Block 0x69, offset 0x249 + {value: 0x0000, lo: 0x03}, + {value: 0xc600, lo: 0x80, hi: 0x87}, + {value: 0xe500, lo: 0x88, hi: 0x88}, + {value: 0xc600, lo: 0x89, hi: 0xa3}, + // Block 0x6a, offset 0x24d + {value: 0x0002, lo: 0x01}, + {value: 0x0003, lo: 0x81, hi: 0xbf}, + // Block 0x6b, offset 0x24f + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xbd, hi: 0xbd}, + // Block 0x6c, offset 0x251 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0xa0, hi: 0xa0}, + // Block 0x6d, offset 0x253 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb6, hi: 0xba}, + // Block 0x6e, offset 0x255 + {value: 0x002d, lo: 0x05}, + {value: 0x812e, lo: 0x8d, hi: 0x8d}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + {value: 0x8133, lo: 0xb8, hi: 0xb8}, + {value: 0x8101, lo: 0xb9, hi: 0xba}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x6f, offset 0x25b + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xa5, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + // Block 0x70, offset 0x25e + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa4, hi: 0xa7}, + // Block 0x71, offset 0x260 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xab, hi: 0xac}, + // Block 0x72, offset 0x262 + {value: 0x0000, lo: 0x05}, + {value: 0x812e, lo: 0x86, hi: 0x87}, + {value: 0x8133, lo: 0x88, hi: 0x8a}, + {value: 0x812e, lo: 0x8b, hi: 0x8b}, + {value: 0x8133, lo: 0x8c, hi: 0x8c}, + {value: 0x812e, lo: 0x8d, hi: 0x90}, + // Block 0x73, offset 0x268 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x74, offset 0x26b + {value: 0x17fe, lo: 0x07}, + {value: 0xa000, lo: 0x99, hi: 0x99}, + {value: 0x424f, lo: 0x9a, hi: 0x9a}, + {value: 0xa000, lo: 0x9b, hi: 0x9b}, + {value: 0x4259, lo: 0x9c, hi: 0x9c}, + {value: 0xa000, lo: 0xa5, hi: 0xa5}, + {value: 0x4263, lo: 0xab, hi: 0xab}, + {value: 0x8105, lo: 0xb9, hi: 0xba}, + // Block 0x75, offset 0x273 + {value: 0x0000, lo: 0x06}, + {value: 0x8133, lo: 0x80, hi: 0x82}, + {value: 0x9900, lo: 0xa7, hi: 0xa7}, + {value: 0x2d8b, lo: 0xae, hi: 0xae}, + {value: 0x2d95, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb1, hi: 0xb2}, + {value: 0x8105, lo: 0xb3, hi: 0xb4}, + // Block 0x76, offset 0x27a + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x80, hi: 0x80}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0x77, offset 0x27d + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb5, hi: 0xb5}, + {value: 0x8103, lo: 0xb6, hi: 0xb6}, + // Block 0x78, offset 0x280 + {value: 0x0002, lo: 0x01}, + {value: 0x8103, lo: 0xa9, hi: 0xaa}, + // Block 0x79, offset 0x282 + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0xbb, hi: 0xbc}, + {value: 0x9900, lo: 0xbe, hi: 0xbe}, + // Block 0x7a, offset 0x285 + {value: 0x0000, lo: 0x07}, + {value: 0xa000, lo: 0x87, hi: 0x87}, + {value: 0x2d9f, lo: 0x8b, hi: 0x8b}, + {value: 0x2da9, lo: 0x8c, hi: 0x8c}, + {value: 0x8105, lo: 0x8d, hi: 0x8d}, + {value: 0x9900, lo: 0x97, hi: 0x97}, + {value: 0x8133, lo: 0xa6, hi: 0xac}, + {value: 0x8133, lo: 0xb0, hi: 0xb4}, + // Block 0x7b, offset 0x28d + {value: 0x0000, lo: 0x03}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x86, hi: 0x86}, + {value: 0x8133, lo: 0x9e, hi: 0x9e}, + // Block 0x7c, offset 0x291 + {value: 0x6b4d, lo: 0x06}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb9, hi: 0xb9}, + {value: 0x9900, lo: 0xba, hi: 0xba}, + {value: 0x2dbd, lo: 0xbb, hi: 0xbb}, + {value: 0x2db3, lo: 0xbc, hi: 0xbd}, + {value: 0x2dc7, lo: 0xbe, hi: 0xbe}, + // Block 0x7d, offset 0x298 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0x82, hi: 0x82}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x7e, offset 0x29b + {value: 0x0000, lo: 0x05}, + {value: 0x9900, lo: 0xaf, hi: 0xaf}, + {value: 0xa000, lo: 0xb8, hi: 0xb9}, + {value: 0x2dd1, lo: 0xba, hi: 0xba}, + {value: 0x2ddb, lo: 0xbb, hi: 0xbb}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x7f, offset 0x2a1 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x80, hi: 0x80}, + // Block 0x80, offset 0x2a3 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xbf, hi: 0xbf}, + // Block 0x81, offset 0x2a5 + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb6, hi: 0xb6}, + {value: 0x8103, lo: 0xb7, hi: 0xb7}, + // Block 0x82, offset 0x2a8 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xab, hi: 0xab}, + // Block 0x83, offset 0x2aa + {value: 0x0000, lo: 0x02}, + {value: 0x8105, lo: 0xb9, hi: 0xb9}, + {value: 0x8103, lo: 0xba, hi: 0xba}, + // Block 0x84, offset 0x2ad + {value: 0x0000, lo: 0x04}, + {value: 0x9900, lo: 0xb0, hi: 0xb0}, + {value: 0xa000, lo: 0xb5, hi: 0xb5}, + {value: 0x2de5, lo: 0xb8, hi: 0xb8}, + {value: 0x8105, lo: 0xbd, hi: 0xbe}, + // Block 0x85, offset 0x2b2 + {value: 0x0000, lo: 0x01}, + {value: 0x8103, lo: 0x83, hi: 0x83}, + // Block 0x86, offset 0x2b4 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xa0, hi: 0xa0}, + // Block 0x87, offset 0x2b6 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0xb4, hi: 0xb4}, + // Block 0x88, offset 0x2b8 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x87, hi: 0x87}, + // Block 0x89, offset 0x2ba + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x99, hi: 0x99}, + // Block 0x8a, offset 0x2bc + {value: 0x0000, lo: 0x02}, + {value: 0x8103, lo: 0x82, hi: 0x82}, + {value: 0x8105, lo: 0x84, hi: 0x85}, + // Block 0x8b, offset 0x2bf + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x97, hi: 0x97}, + // Block 0x8c, offset 0x2c1 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0xb0, hi: 0xb4}, + // Block 0x8d, offset 0x2c3 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xb0, hi: 0xb6}, + // Block 0x8e, offset 0x2c5 + {value: 0x0000, lo: 0x01}, + {value: 0x8102, lo: 0xb0, hi: 0xb1}, + // Block 0x8f, offset 0x2c7 + {value: 0x0000, lo: 0x01}, + {value: 0x8101, lo: 0x9e, hi: 0x9e}, + // Block 0x90, offset 0x2c9 + {value: 0x0000, lo: 0x0c}, + {value: 0x45e3, lo: 0x9e, hi: 0x9e}, + {value: 0x45ed, lo: 0x9f, hi: 0x9f}, + {value: 0x4621, lo: 0xa0, hi: 0xa0}, + {value: 0x462f, lo: 0xa1, hi: 0xa1}, + {value: 0x463d, lo: 0xa2, hi: 0xa2}, + {value: 0x464b, lo: 0xa3, hi: 0xa3}, + {value: 0x4659, lo: 0xa4, hi: 0xa4}, + {value: 0x812c, lo: 0xa5, hi: 0xa6}, + {value: 0x8101, lo: 0xa7, hi: 0xa9}, + {value: 0x8131, lo: 0xad, hi: 0xad}, + {value: 0x812c, lo: 0xae, hi: 0xb2}, + {value: 0x812e, lo: 0xbb, hi: 0xbf}, + // Block 0x91, offset 0x2d6 + {value: 0x0000, lo: 0x09}, + {value: 0x812e, lo: 0x80, hi: 0x82}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8b}, + {value: 0x8133, lo: 0xaa, hi: 0xad}, + {value: 0x45f7, lo: 0xbb, hi: 0xbb}, + {value: 0x4601, lo: 0xbc, hi: 0xbc}, + {value: 0x4667, lo: 0xbd, hi: 0xbd}, + {value: 0x4683, lo: 0xbe, hi: 0xbe}, + {value: 0x4675, lo: 0xbf, hi: 0xbf}, + // Block 0x92, offset 0x2e0 + {value: 0x0000, lo: 0x01}, + {value: 0x4691, lo: 0x80, hi: 0x80}, + // Block 0x93, offset 0x2e2 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x82, hi: 0x84}, + // Block 0x94, offset 0x2e4 + {value: 0x0002, lo: 0x03}, + {value: 0x0043, lo: 0x80, hi: 0x99}, + {value: 0x0083, lo: 0x9a, hi: 0xb3}, + {value: 0x0043, lo: 0xb4, hi: 0xbf}, + // Block 0x95, offset 0x2e8 + {value: 0x0002, lo: 0x04}, + {value: 0x005b, lo: 0x80, hi: 0x8d}, + {value: 0x0083, lo: 0x8e, hi: 0x94}, + {value: 0x0093, lo: 0x96, hi: 0xa7}, + {value: 0x0043, lo: 0xa8, hi: 0xbf}, + // Block 0x96, offset 0x2ed + {value: 0x0002, lo: 0x0b}, + {value: 0x0073, lo: 0x80, hi: 0x81}, + {value: 0x0083, lo: 0x82, hi: 0x9b}, + {value: 0x0043, lo: 0x9c, hi: 0x9c}, + {value: 0x0047, lo: 0x9e, hi: 0x9f}, + {value: 0x004f, lo: 0xa2, hi: 0xa2}, + {value: 0x0055, lo: 0xa5, hi: 0xa6}, + {value: 0x005d, lo: 0xa9, hi: 0xac}, + {value: 0x0067, lo: 0xae, hi: 0xb5}, + {value: 0x0083, lo: 0xb6, hi: 0xb9}, + {value: 0x008d, lo: 0xbb, hi: 0xbb}, + {value: 0x0091, lo: 0xbd, hi: 0xbf}, + // Block 0x97, offset 0x2f9 + {value: 0x0002, lo: 0x04}, + {value: 0x0097, lo: 0x80, hi: 0x83}, + {value: 0x00a1, lo: 0x85, hi: 0x8f}, + {value: 0x0043, lo: 0x90, hi: 0xa9}, + {value: 0x0083, lo: 0xaa, hi: 0xbf}, + // Block 0x98, offset 0x2fe + {value: 0x0002, lo: 0x08}, + {value: 0x00af, lo: 0x80, hi: 0x83}, + {value: 0x0043, lo: 0x84, hi: 0x85}, + {value: 0x0049, lo: 0x87, hi: 0x8a}, + {value: 0x0055, lo: 0x8d, hi: 0x94}, + {value: 0x0067, lo: 0x96, hi: 0x9c}, + {value: 0x0083, lo: 0x9e, hi: 0xb7}, + {value: 0x0043, lo: 0xb8, hi: 0xb9}, + {value: 0x0049, lo: 0xbb, hi: 0xbe}, + // Block 0x99, offset 0x307 + {value: 0x0002, lo: 0x05}, + {value: 0x0053, lo: 0x80, hi: 0x84}, + {value: 0x005f, lo: 0x86, hi: 0x86}, + {value: 0x0067, lo: 0x8a, hi: 0x90}, + {value: 0x0083, lo: 0x92, hi: 0xab}, + {value: 0x0043, lo: 0xac, hi: 0xbf}, + // Block 0x9a, offset 0x30d + {value: 0x0002, lo: 0x04}, + {value: 0x006b, lo: 0x80, hi: 0x85}, + {value: 0x0083, lo: 0x86, hi: 0x9f}, + {value: 0x0043, lo: 0xa0, hi: 0xb9}, + {value: 0x0083, lo: 0xba, hi: 0xbf}, + // Block 0x9b, offset 0x312 + {value: 0x0002, lo: 0x03}, + {value: 0x008f, lo: 0x80, hi: 0x93}, + {value: 0x0043, lo: 0x94, hi: 0xad}, + {value: 0x0083, lo: 0xae, hi: 0xbf}, + // Block 0x9c, offset 0x316 + {value: 0x0002, lo: 0x04}, + {value: 0x00a7, lo: 0x80, hi: 0x87}, + {value: 0x0043, lo: 0x88, hi: 0xa1}, + {value: 0x0083, lo: 0xa2, hi: 0xbb}, + {value: 0x0043, lo: 0xbc, hi: 0xbf}, + // Block 0x9d, offset 0x31b + {value: 0x0002, lo: 0x03}, + {value: 0x004b, lo: 0x80, hi: 0x95}, + {value: 0x0083, lo: 0x96, hi: 0xaf}, + {value: 0x0043, lo: 0xb0, hi: 0xbf}, + // Block 0x9e, offset 0x31f + {value: 0x0003, lo: 0x0f}, + {value: 0x01bb, lo: 0x80, hi: 0x80}, + {value: 0x0462, lo: 0x81, hi: 0x81}, + {value: 0x01be, lo: 0x82, hi: 0x9a}, + {value: 0x045e, lo: 0x9b, hi: 0x9b}, + {value: 0x01ca, lo: 0x9c, hi: 0x9c}, + {value: 0x01d3, lo: 0x9d, hi: 0x9d}, + {value: 0x01d9, lo: 0x9e, hi: 0x9e}, + {value: 0x01fd, lo: 0x9f, hi: 0x9f}, + {value: 0x01ee, lo: 0xa0, hi: 0xa0}, + {value: 0x01eb, lo: 0xa1, hi: 0xa1}, + {value: 0x0176, lo: 0xa2, hi: 0xb2}, + {value: 0x018b, lo: 0xb3, hi: 0xb3}, + {value: 0x01a9, lo: 0xb4, hi: 0xba}, + {value: 0x0462, lo: 0xbb, hi: 0xbb}, + {value: 0x01be, lo: 0xbc, hi: 0xbf}, + // Block 0x9f, offset 0x32f + {value: 0x0003, lo: 0x0d}, + {value: 0x01ca, lo: 0x80, hi: 0x94}, + {value: 0x045e, lo: 0x95, hi: 0x95}, + {value: 0x01ca, lo: 0x96, hi: 0x96}, + {value: 0x01d3, lo: 0x97, hi: 0x97}, + {value: 0x01d9, lo: 0x98, hi: 0x98}, + {value: 0x01fd, lo: 0x99, hi: 0x99}, + {value: 0x01ee, lo: 0x9a, hi: 0x9a}, + {value: 0x01eb, lo: 0x9b, hi: 0x9b}, + {value: 0x0176, lo: 0x9c, hi: 0xac}, + {value: 0x018b, lo: 0xad, hi: 0xad}, + {value: 0x01a9, lo: 0xae, hi: 0xb4}, + {value: 0x0462, lo: 0xb5, hi: 0xb5}, + {value: 0x01be, lo: 0xb6, hi: 0xbf}, + // Block 0xa0, offset 0x33d + {value: 0x0003, lo: 0x0d}, + {value: 0x01dc, lo: 0x80, hi: 0x8e}, + {value: 0x045e, lo: 0x8f, hi: 0x8f}, + {value: 0x01ca, lo: 0x90, hi: 0x90}, + {value: 0x01d3, lo: 0x91, hi: 0x91}, + {value: 0x01d9, lo: 0x92, hi: 0x92}, + {value: 0x01fd, lo: 0x93, hi: 0x93}, + {value: 0x01ee, lo: 0x94, hi: 0x94}, + {value: 0x01eb, lo: 0x95, hi: 0x95}, + {value: 0x0176, lo: 0x96, hi: 0xa6}, + {value: 0x018b, lo: 0xa7, hi: 0xa7}, + {value: 0x01a9, lo: 0xa8, hi: 0xae}, + {value: 0x0462, lo: 0xaf, hi: 0xaf}, + {value: 0x01be, lo: 0xb0, hi: 0xbf}, + // Block 0xa1, offset 0x34b + {value: 0x0003, lo: 0x0d}, + {value: 0x01ee, lo: 0x80, hi: 0x88}, + {value: 0x045e, lo: 0x89, hi: 0x89}, + {value: 0x01ca, lo: 0x8a, hi: 0x8a}, + {value: 0x01d3, lo: 0x8b, hi: 0x8b}, + {value: 0x01d9, lo: 0x8c, hi: 0x8c}, + {value: 0x01fd, lo: 0x8d, hi: 0x8d}, + {value: 0x01ee, lo: 0x8e, hi: 0x8e}, + {value: 0x01eb, lo: 0x8f, hi: 0x8f}, + {value: 0x0176, lo: 0x90, hi: 0xa0}, + {value: 0x018b, lo: 0xa1, hi: 0xa1}, + {value: 0x01a9, lo: 0xa2, hi: 0xa8}, + {value: 0x0462, lo: 0xa9, hi: 0xa9}, + {value: 0x01be, lo: 0xaa, hi: 0xbf}, + // Block 0xa2, offset 0x359 + {value: 0x0000, lo: 0x05}, + {value: 0x8133, lo: 0x80, hi: 0x86}, + {value: 0x8133, lo: 0x88, hi: 0x98}, + {value: 0x8133, lo: 0x9b, hi: 0xa1}, + {value: 0x8133, lo: 0xa3, hi: 0xa4}, + {value: 0x8133, lo: 0xa6, hi: 0xaa}, + // Block 0xa3, offset 0x35f + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xac, hi: 0xaf}, + // Block 0xa4, offset 0x361 + {value: 0x0000, lo: 0x01}, + {value: 0x812e, lo: 0x90, hi: 0x96}, + // Block 0xa5, offset 0x363 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0x84, hi: 0x89}, + {value: 0x8103, lo: 0x8a, hi: 0x8a}, + // Block 0xa6, offset 0x366 + {value: 0x0002, lo: 0x0a}, + {value: 0x0063, lo: 0x80, hi: 0x89}, + {value: 0x1954, lo: 0x8a, hi: 0x8a}, + {value: 0x1987, lo: 0x8b, hi: 0x8b}, + {value: 0x19a2, lo: 0x8c, hi: 0x8c}, + {value: 0x19a8, lo: 0x8d, hi: 0x8d}, + {value: 0x1bc6, lo: 0x8e, hi: 0x8e}, + {value: 0x19b4, lo: 0x8f, hi: 0x8f}, + {value: 0x197e, lo: 0xaa, hi: 0xaa}, + {value: 0x1981, lo: 0xab, hi: 0xab}, + {value: 0x1984, lo: 0xac, hi: 0xac}, + // Block 0xa7, offset 0x371 + {value: 0x0000, lo: 0x01}, + {value: 0x1942, lo: 0x90, hi: 0x90}, + // Block 0xa8, offset 0x373 + {value: 0x0028, lo: 0x09}, + {value: 0x286f, lo: 0x80, hi: 0x80}, + {value: 0x2833, lo: 0x81, hi: 0x81}, + {value: 0x283d, lo: 0x82, hi: 0x82}, + {value: 0x2851, lo: 0x83, hi: 0x84}, + {value: 0x285b, lo: 0x85, hi: 0x86}, + {value: 0x2847, lo: 0x87, hi: 0x87}, + {value: 0x2865, lo: 0x88, hi: 0x88}, + {value: 0x0b72, lo: 0x90, hi: 0x90}, + {value: 0x08ea, lo: 0x91, hi: 0x91}, + // Block 0xa9, offset 0x37d + {value: 0x0002, lo: 0x01}, + {value: 0x0021, lo: 0xb0, hi: 0xb9}, +} + +// recompMap: 7528 bytes (entries only) +var recompMap map[uint32]rune +var recompMapOnce sync.Once + +const recompMapPacked = "" + + "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 + "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 + "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 + "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 + "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 + "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 + "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 + "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 + "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 + "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA + "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB + "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC + "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD + "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE + "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF + "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 + "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 + "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 + "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 + "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 + "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 + "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 + "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA + "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB + "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC + "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD + "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 + "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 + "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 + "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 + "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 + "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 + "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 + "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 + "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 + "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA + "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB + "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC + "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED + "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE + "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF + "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 + "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 + "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 + "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 + "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 + "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 + "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 + "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA + "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB + "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC + "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD + "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF + "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 + "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 + "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 + "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 + "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 + "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 + "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 + "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 + "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 + "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 + "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A + "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B + "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C + "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D + "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E + "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F + "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 + "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 + "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 + "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 + "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 + "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 + "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 + "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 + "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A + "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B + "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C + "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D + "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E + "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F + "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 + "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 + "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 + "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 + "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 + "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 + "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 + "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 + "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A + "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B + "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C + "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D + "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E + "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F + "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 + "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 + "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 + "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 + "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 + "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 + "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A + "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B + "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C + "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D + "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E + "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 + "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 + "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 + "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 + "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 + "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 + "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C + "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D + "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E + "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F + "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 + "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 + "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 + "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 + "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 + "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 + "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 + "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 + "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A + "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B + "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C + "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D + "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E + "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F + "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 + "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 + "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 + "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 + "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 + "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 + "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 + "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 + "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A + "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B + "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C + "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D + "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E + "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F + "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 + "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 + "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 + "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 + "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 + "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 + "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 + "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 + "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 + "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 + "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A + "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B + "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C + "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D + "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E + "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 + "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 + "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF + "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 + "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD + "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE + "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF + "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 + "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 + "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 + "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 + "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 + "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 + "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 + "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 + "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 + "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 + "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA + "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB + "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC + "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE + "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF + "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 + "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 + "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 + "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 + "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 + "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 + "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 + "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 + "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA + "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB + "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC + "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED + "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE + "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF + "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 + "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 + "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 + "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 + "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 + "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA + "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB + "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC + "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD + "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE + "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF + "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 + "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 + "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 + "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 + "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 + "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 + "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 + "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 + "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 + "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 + "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A + "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B + "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C + "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D + "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E + "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F + "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 + "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 + "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 + "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 + "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 + "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 + "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 + "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 + "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 + "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 + "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A + "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B + "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E + "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F + "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 + "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 + "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 + "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 + "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A + "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B + "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C + "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D + "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E + "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F + "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 + "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 + "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 + "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 + "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 + "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 + "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 + "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 + "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A + "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C + "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E + "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F + "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 + "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA + "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB + "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC + "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD + "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE + "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF + "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 + "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA + "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB + "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC + "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD + "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE + "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 + "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 + "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 + "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 + "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 + "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 + "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C + "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D + "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E + "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 + "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 + "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 + "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 + "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 + "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 + "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C + "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D + "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E + "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 + "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 + "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 + "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 + "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 + "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 + "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 + "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 + "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 + "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 + "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA + "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB + "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC + "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD + "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE + "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF + "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 + "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 + "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 + "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 + "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 + "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 + "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA + "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB + "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC + "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED + "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE + "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF + "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 + "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 + "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 + "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 + "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 + "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 + "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 + "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 + "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 + "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 + "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 + "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 + "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 + "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 + "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 + "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 + "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 + "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 + "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 + "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB + "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC + "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 + "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B + "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C + "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 + "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA + "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB + "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC + "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 + "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 + "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 + "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 + "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA + "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB + "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A + "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B + "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C + "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA + "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC + "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD + "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE + "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 + "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 + "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 + "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A + "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C + "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E + "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 + "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B + "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D + "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 + "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 + "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 + "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 + "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 + "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 + "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 + "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 + "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 + "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 + "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 + "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 + "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 + "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A + "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B + "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C + "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D + "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E + "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F + "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 + "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 + "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 + "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 + "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 + "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 + "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 + "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 + "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 + "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 + "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A + "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B + "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C + "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D + "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E + "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F + "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 + "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 + "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 + "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 + "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 + "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 + "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 + "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 + "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 + "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 + "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A + "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B + "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C + "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D + "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E + "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F + "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 + "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 + "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 + "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 + "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 + "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 + "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 + "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 + "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 + "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 + "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A + "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B + "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C + "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D + "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E + "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F + "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 + "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 + "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 + "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 + "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 + "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 + "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 + "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 + "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 + "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 + "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A + "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B + "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C + "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D + "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E + "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F + "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 + "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 + "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 + "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 + "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 + "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 + "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 + "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 + "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 + "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 + "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A + "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B + "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C + "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D + "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E + "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F + "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 + "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 + "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 + "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 + "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 + "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 + "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 + "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 + "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 + "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 + "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A + "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B + "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C + "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D + "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E + "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F + "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 + "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 + "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 + "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 + "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 + "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 + "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 + "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 + "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 + "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 + "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A + "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B + "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C + "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D + "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E + "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F + "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 + "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 + "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 + "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 + "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 + "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 + "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 + "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 + "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 + "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 + "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A + "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B + "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C + "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D + "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E + "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F + "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 + "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 + "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 + "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 + "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 + "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 + "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 + "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 + "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 + "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 + "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B + "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 + "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 + "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 + "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 + "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 + "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 + "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 + "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 + "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 + "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 + "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA + "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB + "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC + "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD + "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE + "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF + "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 + "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 + "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 + "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 + "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 + "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 + "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 + "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 + "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 + "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 + "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA + "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB + "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC + "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD + "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE + "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF + "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 + "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 + "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 + "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 + "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 + "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 + "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 + "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 + "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 + "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 + "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA + "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB + "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC + "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD + "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE + "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF + "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 + "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 + "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 + "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 + "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 + "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 + "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 + "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 + "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 + "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 + "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA + "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB + "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC + "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD + "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE + "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF + "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 + "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 + "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 + "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 + "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 + "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 + "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 + "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 + "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 + "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 + "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA + "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB + "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC + "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED + "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE + "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF + "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 + "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 + "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 + "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 + "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 + "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 + "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 + "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 + "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 + "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 + "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 + "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 + "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 + "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 + "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 + "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 + "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 + "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 + "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 + "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 + "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A + "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B + "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C + "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D + "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E + "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F + "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 + "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 + "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 + "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 + "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 + "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 + "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 + "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 + "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A + "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B + "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C + "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D + "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 + "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 + "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 + "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 + "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 + "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 + "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 + "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 + "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 + "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 + "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A + "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B + "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C + "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D + "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E + "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F + "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 + "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 + "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 + "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 + "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 + "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 + "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 + "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 + "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 + "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 + "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A + "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B + "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C + "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D + "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E + "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F + "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 + "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 + "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 + "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 + "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 + "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 + "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 + "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 + "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A + "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B + "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C + "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D + "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 + "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 + "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 + "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 + "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 + "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 + "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 + "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 + "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 + "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B + "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D + "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F + "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 + "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 + "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 + "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 + "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 + "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 + "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 + "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 + "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 + "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 + "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A + "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B + "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C + "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D + "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E + "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F + "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 + "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 + "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 + "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 + "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 + "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A + "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C + "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 + "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 + "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 + "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 + "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 + "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 + "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 + "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 + "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 + "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 + "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A + "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B + "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C + "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D + "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E + "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F + "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 + "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 + "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 + "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 + "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 + "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 + "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 + "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 + "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 + "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 + "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A + "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B + "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C + "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D + "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E + "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F + "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 + "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 + "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 + "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 + "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 + "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 + "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 + "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 + "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 + "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 + "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA + "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB + "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC + "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD + "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE + "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF + "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 + "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 + "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 + "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 + "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 + "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 + "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 + "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 + "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 + "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA + "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC + "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 + "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 + "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 + "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 + "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 + "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 + "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 + "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA + "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC + "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD + "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE + "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF + "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 + "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 + "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 + "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 + "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 + "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 + "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 + "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA + "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD + "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE + "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF + "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 + "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 + "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 + "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 + "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 + "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 + "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 + "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 + "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 + "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA + "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC + "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED + "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 + "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 + "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 + "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 + "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 + "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 + "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA + "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC + "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A + "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B + "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE + "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD + "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE + "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF + "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 + "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 + "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C + "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 + "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 + "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 + "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 + "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 + "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 + "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 + "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 + "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D + "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E + "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F + "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 + "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 + "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 + "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 + "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 + "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 + "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 + "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 + "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 + "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 + "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 + "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 + "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC + "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD + "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE + "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF + "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 + "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 + "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 + "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 + "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA + "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB + "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC + "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED + "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C + "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E + "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 + "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 + "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 + "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 + "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 + "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A + "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C + "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E + "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 + "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 + "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 + "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 + "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 + "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 + "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 + "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 + "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 + "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 + "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 + "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 + "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A + "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C + "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D + "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 + "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E + "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC + "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE + "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 + "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 + "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 + "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 + "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 + "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA + "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC + "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE + "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 + "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 + "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 + "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 + "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 + "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 + "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 + "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 + "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 + "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 + "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 + "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 + "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA + "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC + "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD + "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 + "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 + "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 + "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 + "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA + "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE + "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A + "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C + "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB + "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E + "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F + "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B + "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C + "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB + "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC + "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE + "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA + "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB + "\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938 + "" + // Total size of tables: 55KB (56160 bytes) diff --git a/vendor/gopkg.in/yaml.v3/.travis.yml b/vendor/gopkg.in/yaml.v3/.travis.yml deleted file mode 100644 index 04d4dae09..000000000 --- a/vendor/gopkg.in/yaml.v3/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: go - -go: - - "1.4.x" - - "1.5.x" - - "1.6.x" - - "1.7.x" - - "1.8.x" - - "1.9.x" - - "1.10.x" - - "1.11.x" - - "1.12.x" - - "1.13.x" - - "tip" - -go_import_path: gopkg.in/yaml.v3 diff --git a/vendor/gopkg.in/yaml.v3/apic.go b/vendor/gopkg.in/yaml.v3/apic.go index 65846e674..ae7d049f1 100644 --- a/vendor/gopkg.in/yaml.v3/apic.go +++ b/vendor/gopkg.in/yaml.v3/apic.go @@ -108,6 +108,7 @@ func yaml_emitter_initialize(emitter *yaml_emitter_t) { raw_buffer: make([]byte, 0, output_raw_buffer_size), states: make([]yaml_emitter_state_t, 0, initial_stack_size), events: make([]yaml_event_t, 0, initial_queue_size), + best_width: -1, } } diff --git a/vendor/gopkg.in/yaml.v3/decode.go b/vendor/gopkg.in/yaml.v3/decode.go index be63169b7..df36e3a30 100644 --- a/vendor/gopkg.in/yaml.v3/decode.go +++ b/vendor/gopkg.in/yaml.v3/decode.go @@ -35,6 +35,7 @@ type parser struct { doc *Node anchors map[string]*Node doneInit bool + textless bool } func newParser(b []byte) *parser { @@ -108,14 +109,18 @@ func (p *parser) peek() yaml_event_type_t { func (p *parser) fail() { var where string var line int - if p.parser.problem_mark.line != 0 { + if p.parser.context_mark.line != 0 { + line = p.parser.context_mark.line + // Scanner errors don't iterate line before returning error + if p.parser.error == yaml_SCANNER_ERROR { + line++ + } + } else if p.parser.problem_mark.line != 0 { line = p.parser.problem_mark.line // Scanner errors don't iterate line before returning error if p.parser.error == yaml_SCANNER_ERROR { line++ } - } else if p.parser.context_mark.line != 0 { - line = p.parser.context_mark.line } if line != 0 { where = "line " + strconv.Itoa(line) + ": " @@ -169,17 +174,20 @@ func (p *parser) node(kind Kind, defaultTag, tag, value string) *Node { } else if kind == ScalarNode { tag, _ = resolve("", value) } - return &Node{ - Kind: kind, - Tag: tag, - Value: value, - Style: style, - Line: p.event.start_mark.line + 1, - Column: p.event.start_mark.column + 1, - HeadComment: string(p.event.head_comment), - LineComment: string(p.event.line_comment), - FootComment: string(p.event.foot_comment), + n := &Node{ + Kind: kind, + Tag: tag, + Value: value, + Style: style, } + if !p.textless { + n.Line = p.event.start_mark.line + 1 + n.Column = p.event.start_mark.column + 1 + n.HeadComment = string(p.event.head_comment) + n.LineComment = string(p.event.line_comment) + n.FootComment = string(p.event.foot_comment) + } + return n } func (p *parser) parseChild(parent *Node) *Node { @@ -497,8 +505,13 @@ func (d *decoder) unmarshal(n *Node, out reflect.Value) (good bool) { good = d.mapping(n, out) case SequenceNode: good = d.sequence(n, out) + case 0: + if n.IsZero() { + return d.null(out) + } + fallthrough default: - panic("internal error: unknown node kind: " + strconv.Itoa(int(n.Kind))) + failf("cannot decode node with unknown kind %d", n.Kind) } return good } @@ -533,6 +546,17 @@ func resetMap(out reflect.Value) { } } +func (d *decoder) null(out reflect.Value) bool { + if out.CanAddr() { + switch out.Kind() { + case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: + out.Set(reflect.Zero(out.Type())) + return true + } + } + return false +} + func (d *decoder) scalar(n *Node, out reflect.Value) bool { var tag string var resolved interface{} @@ -550,14 +574,7 @@ func (d *decoder) scalar(n *Node, out reflect.Value) bool { } } if resolved == nil { - if out.CanAddr() { - switch out.Kind() { - case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: - out.Set(reflect.Zero(out.Type())) - return true - } - } - return false + return d.null(out) } if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { // We've resolved to exactly the type we want, so use that. @@ -791,8 +808,10 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { } } + mapIsNew := false if out.IsNil() { out.Set(reflect.MakeMap(outt)) + mapIsNew = true } for i := 0; i < l; i += 2 { if isMerge(n.Content[i]) { @@ -809,7 +828,7 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { failf("invalid map key: %#v", k.Interface()) } e := reflect.New(et).Elem() - if d.unmarshal(n.Content[i+1], e) { + if d.unmarshal(n.Content[i+1], e) || n.Content[i+1].ShortTag() == nullTag && (mapIsNew || !out.MapIndex(k).IsValid()) { out.SetMapIndex(k, e) } } diff --git a/vendor/gopkg.in/yaml.v3/emitterc.go b/vendor/gopkg.in/yaml.v3/emitterc.go index ab2a06619..0f47c9ca8 100644 --- a/vendor/gopkg.in/yaml.v3/emitterc.go +++ b/vendor/gopkg.in/yaml.v3/emitterc.go @@ -235,10 +235,13 @@ func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool emitter.indent = 0 } } else if !indentless { - emitter.indent += emitter.best_indent - // [Go] If inside a block sequence item, discount the space taken by the indicator. - if emitter.best_indent > 2 && emitter.states[len(emitter.states)-1] == yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE { - emitter.indent -= 2 + // [Go] This was changed so that indentations are more regular. + if emitter.states[len(emitter.states)-1] == yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE { + // The first indent inside a sequence will just skip the "- " indicator. + emitter.indent += 2 + } else { + // Everything else aligns to the chosen indentation. + emitter.indent = emitter.best_indent*((emitter.indent+emitter.best_indent)/emitter.best_indent) } } return true @@ -725,16 +728,9 @@ func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_e // Expect a block item node. func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { if first { - // [Go] The original logic here would not indent the sequence when inside a mapping. - // In Go we always indent it, but take the sequence indicator out of the indentation. - indentless := emitter.best_indent == 2 && emitter.mapping_context && (emitter.column == 0 || !emitter.indention) - original := emitter.indent - if !yaml_emitter_increase_indent(emitter, false, indentless) { + if !yaml_emitter_increase_indent(emitter, false, false) { return false } - if emitter.indent > original+2 { - emitter.indent -= 2 - } } if event.typ == yaml_SEQUENCE_END_EVENT { emitter.indent = emitter.indents[len(emitter.indents)-1] @@ -785,6 +781,13 @@ func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_ev if !yaml_emitter_write_indent(emitter) { return false } + if len(emitter.line_comment) > 0 { + // [Go] A line comment was provided for the key. That's unusual as the + // scanner associates line comments with the value. Either way, + // save the line comment and render it appropriately later. + emitter.key_line_comment = emitter.line_comment + emitter.line_comment = nil + } if yaml_emitter_check_simple_key(emitter) { emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) return yaml_emitter_emit_node(emitter, event, false, false, true, true) @@ -810,6 +813,27 @@ func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_ return false } } + if len(emitter.key_line_comment) > 0 { + // [Go] Line comments are generally associated with the value, but when there's + // no value on the same line as a mapping key they end up attached to the + // key itself. + if event.typ == yaml_SCALAR_EVENT { + if len(emitter.line_comment) == 0 { + // A scalar is coming and it has no line comments by itself yet, + // so just let it handle the line comment as usual. If it has a + // line comment, we can't have both so the one from the key is lost. + emitter.line_comment = emitter.key_line_comment + emitter.key_line_comment = nil + } + } else if event.sequence_style() != yaml_FLOW_SEQUENCE_STYLE && (event.typ == yaml_MAPPING_START_EVENT || event.typ == yaml_SEQUENCE_START_EVENT) { + // An indented block follows, so write the comment right now. + emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment + if !yaml_emitter_process_line_comment(emitter) { + return false + } + emitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment + } + } emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) if !yaml_emitter_emit_node(emitter, event, false, false, true, false) { return false @@ -823,6 +847,10 @@ func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_ return true } +func yaml_emitter_silent_nil_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { + return event.typ == yaml_SCALAR_EVENT && event.implicit && !emitter.canonical && len(emitter.scalar_data.value) == 0 +} + // Expect a node. func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, root bool, sequence bool, mapping bool, simple_key bool) bool { @@ -1866,7 +1894,7 @@ func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bo if !yaml_emitter_write_block_scalar_hints(emitter, value) { return false } - if !put_break(emitter) { + if !yaml_emitter_process_line_comment(emitter) { return false } //emitter.indention = true @@ -1903,10 +1931,10 @@ func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) boo if !yaml_emitter_write_block_scalar_hints(emitter, value) { return false } - - if !put_break(emitter) { + if !yaml_emitter_process_line_comment(emitter) { return false } + //emitter.indention = true emitter.whitespace = true diff --git a/vendor/gopkg.in/yaml.v3/encode.go b/vendor/gopkg.in/yaml.v3/encode.go index 1f37271ce..de9e72a3e 100644 --- a/vendor/gopkg.in/yaml.v3/encode.go +++ b/vendor/gopkg.in/yaml.v3/encode.go @@ -119,6 +119,14 @@ func (e *encoder) marshal(tag string, in reflect.Value) { case *Node: e.nodev(in) return + case Node: + if !in.CanAddr() { + var n = reflect.New(in.Type()).Elem() + n.Set(in) + in = n + } + e.nodev(in.Addr()) + return case time.Time: e.timev(tag, in) return @@ -422,18 +430,23 @@ func (e *encoder) nodev(in reflect.Value) { } func (e *encoder) node(node *Node, tail string) { + // Zero nodes behave as nil. + if node.Kind == 0 && node.IsZero() { + e.nilv() + return + } + // If the tag was not explicitly requested, and dropping it won't change the // implicit tag of the value, don't include it in the presentation. var tag = node.Tag var stag = shortTag(tag) - var rtag string var forceQuoting bool if tag != "" && node.Style&TaggedStyle == 0 { if node.Kind == ScalarNode { if stag == strTag && node.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0 { tag = "" } else { - rtag, _ = resolve("", node.Value) + rtag, _ := resolve("", node.Value) if rtag == stag { tag = "" } else if stag == strTag { @@ -442,6 +455,7 @@ func (e *encoder) node(node *Node, tail string) { } } } else { + var rtag string switch node.Kind { case MappingNode: rtag = mapTag @@ -471,7 +485,7 @@ func (e *encoder) node(node *Node, tail string) { if node.Style&FlowStyle != 0 { style = yaml_FLOW_SEQUENCE_STYLE } - e.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(tag), tag == "", style)) + e.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style)) e.event.head_comment = []byte(node.HeadComment) e.emit() for _, node := range node.Content { @@ -487,7 +501,7 @@ func (e *encoder) node(node *Node, tail string) { if node.Style&FlowStyle != 0 { style = yaml_FLOW_MAPPING_STYLE } - yaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(tag), tag == "", style) + yaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style) e.event.tail_comment = []byte(tail) e.event.head_comment = []byte(node.HeadComment) e.emit() @@ -528,11 +542,11 @@ func (e *encoder) node(node *Node, tail string) { case ScalarNode: value := node.Value if !utf8.ValidString(value) { - if tag == binaryTag { + if stag == binaryTag { failf("explicitly tagged !!binary data must be base64-encoded") } - if tag != "" { - failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) + if stag != "" { + failf("cannot marshal invalid UTF-8 data as %s", stag) } // It can't be encoded directly as YAML so use a binary tag // and encode it as base64. @@ -557,5 +571,7 @@ func (e *encoder) node(node *Node, tail string) { } e.emitScalar(value, node.Anchor, tag, style, []byte(node.HeadComment), []byte(node.LineComment), []byte(node.FootComment), []byte(tail)) + default: + failf("cannot encode node with unknown kind %d", node.Kind) } } diff --git a/vendor/gopkg.in/yaml.v3/parserc.go b/vendor/gopkg.in/yaml.v3/parserc.go index aea9050b8..ac66fccc0 100644 --- a/vendor/gopkg.in/yaml.v3/parserc.go +++ b/vendor/gopkg.in/yaml.v3/parserc.go @@ -648,6 +648,10 @@ func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, i implicit: implicit, style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), } + if parser.stem_comment != nil { + event.head_comment = parser.stem_comment + parser.stem_comment = nil + } return true } if len(anchor) > 0 || len(tag) > 0 { @@ -694,25 +698,13 @@ func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_e if token.typ == yaml_BLOCK_ENTRY_TOKEN { mark := token.end_mark - prior_head := len(parser.head_comment) + prior_head_len := len(parser.head_comment) skip_token(parser) + yaml_parser_split_stem_comment(parser, prior_head_len) token = peek_token(parser) if token == nil { return false } - if prior_head > 0 && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { - // [Go] It's a sequence under a sequence entry, so the former head comment - // is for the list itself, not the first list item under it. - parser.stem_comment = parser.head_comment[:prior_head] - if len(parser.head_comment) == prior_head { - parser.head_comment = nil - } else { - // Copy suffix to prevent very strange bugs if someone ever appends - // further bytes to the prefix in the stem_comment slice above. - parser.head_comment = append([]byte(nil), parser.head_comment[prior_head+1:]...) - } - - } if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) return yaml_parser_parse_node(parser, event, true, false) @@ -754,7 +746,9 @@ func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *y if token.typ == yaml_BLOCK_ENTRY_TOKEN { mark := token.end_mark + prior_head_len := len(parser.head_comment) skip_token(parser) + yaml_parser_split_stem_comment(parser, prior_head_len) token = peek_token(parser) if token == nil { return false @@ -780,6 +774,32 @@ func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *y return true } +// Split stem comment from head comment. +// +// When a sequence or map is found under a sequence entry, the former head comment +// is assigned to the underlying sequence or map as a whole, not the individual +// sequence or map entry as would be expected otherwise. To handle this case the +// previous head comment is moved aside as the stem comment. +func yaml_parser_split_stem_comment(parser *yaml_parser_t, stem_len int) { + if stem_len == 0 { + return + } + + token := peek_token(parser) + if token.typ != yaml_BLOCK_SEQUENCE_START_TOKEN && token.typ != yaml_BLOCK_MAPPING_START_TOKEN { + return + } + + parser.stem_comment = parser.head_comment[:stem_len] + if len(parser.head_comment) == stem_len { + parser.head_comment = nil + } else { + // Copy suffix to prevent very strange bugs if someone ever appends + // further bytes to the prefix in the stem_comment slice above. + parser.head_comment = append([]byte(nil), parser.head_comment[stem_len+1:]...) + } +} + // Parse the productions: // block_mapping ::= BLOCK-MAPPING_START // ******************* diff --git a/vendor/gopkg.in/yaml.v3/scannerc.go b/vendor/gopkg.in/yaml.v3/scannerc.go index 57e954ca5..ca0070108 100644 --- a/vendor/gopkg.in/yaml.v3/scannerc.go +++ b/vendor/gopkg.in/yaml.v3/scannerc.go @@ -749,6 +749,11 @@ func yaml_parser_fetch_next_token(parser *yaml_parser_t) (ok bool) { if !ok { return } + if len(parser.tokens) > 0 && parser.tokens[len(parser.tokens)-1].typ == yaml_BLOCK_ENTRY_TOKEN { + // Sequence indicators alone have no line comments. It becomes + // a head comment for whatever follows. + return + } if !yaml_parser_scan_line_comment(parser, comment_mark) { ok = false return @@ -2255,10 +2260,9 @@ func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, l } } if parser.buffer[parser.buffer_pos] == '#' { - // TODO Test this and then re-enable it. - //if !yaml_parser_scan_line_comment(parser, start_mark) { - // return false - //} + if !yaml_parser_scan_line_comment(parser, start_mark) { + return false + } for !is_breakz(parser.buffer, parser.buffer_pos) { skip(parser) if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { @@ -2856,13 +2860,12 @@ func yaml_parser_scan_line_comment(parser *yaml_parser_t, token_mark yaml_mark_t return false } skip_line(parser) - } else { - if parser.mark.index >= seen { - if len(text) == 0 { - start_mark = parser.mark - } - text = append(text, parser.buffer[parser.buffer_pos]) + } else if parser.mark.index >= seen { + if len(text) == 0 { + start_mark = parser.mark } + text = read(parser, text) + } else { skip(parser) } } @@ -2888,6 +2891,10 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo var token_mark = token.start_mark var start_mark yaml_mark_t + var next_indent = parser.indent + if next_indent < 0 { + next_indent = 0 + } var recent_empty = false var first_empty = parser.newlines <= 1 @@ -2919,15 +2926,18 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo continue } c := parser.buffer[parser.buffer_pos+peek] - if is_breakz(parser.buffer, parser.buffer_pos+peek) || parser.flow_level > 0 && (c == ']' || c == '}') { + var close_flow = parser.flow_level > 0 && (c == ']' || c == '}') + if close_flow || is_breakz(parser.buffer, parser.buffer_pos+peek) { // Got line break or terminator. - if !recent_empty { - if first_empty && (start_mark.line == foot_line || start_mark.column-1 < parser.indent) { + if close_flow || !recent_empty { + if close_flow || first_empty && (start_mark.line == foot_line && token.typ != yaml_VALUE_TOKEN || start_mark.column-1 < next_indent) { // This is the first empty line and there were no empty lines before, // so this initial part of the comment is a foot of the prior token // instead of being a head for the following one. Split it up. + // Alternatively, this might also be the last comment inside a flow + // scope, so it must be a footer. if len(text) > 0 { - if start_mark.column-1 < parser.indent { + if start_mark.column-1 < next_indent { // If dedented it's unrelated to the prior token. token_mark = start_mark } @@ -2958,7 +2968,7 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo continue } - if len(text) > 0 && column < parser.indent+1 && column != start_mark.column { + if len(text) > 0 && (close_flow || column-1 < next_indent && column != start_mark.column) { // The comment at the different indentation is a foot of the // preceding data rather than a head of the upcoming one. parser.comments = append(parser.comments, yaml_comment_t{ @@ -2999,10 +3009,9 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo return false } skip_line(parser) + } else if parser.mark.index >= seen { + text = read(parser, text) } else { - if parser.mark.index >= seen { - text = append(text, parser.buffer[parser.buffer_pos]) - } skip(parser) } } @@ -3010,6 +3019,10 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo peek = 0 column = 0 line = parser.mark.line + next_indent = parser.indent + if next_indent < 0 { + next_indent = 0 + } } if len(text) > 0 { diff --git a/vendor/gopkg.in/yaml.v3/yaml.go b/vendor/gopkg.in/yaml.v3/yaml.go index b5d35a50d..8cec6da48 100644 --- a/vendor/gopkg.in/yaml.v3/yaml.go +++ b/vendor/gopkg.in/yaml.v3/yaml.go @@ -89,7 +89,7 @@ func Unmarshal(in []byte, out interface{}) (err error) { return unmarshal(in, out, false) } -// A Decorder reads and decodes YAML values from an input stream. +// A Decoder reads and decodes YAML values from an input stream. type Decoder struct { parser *parser knownFields bool @@ -194,7 +194,7 @@ func unmarshal(in []byte, out interface{}, strict bool) (err error) { // Zero valued structs will be omitted if all their public // fields are zero, unless they implement an IsZero // method (see the IsZeroer interface type), in which -// case the field will be included if that method returns true. +// case the field will be excluded if IsZero returns true. // // flow Marshal using a flow style (useful for structs, // sequences and maps). @@ -252,6 +252,24 @@ func (e *Encoder) Encode(v interface{}) (err error) { return nil } +// Encode encodes value v and stores its representation in n. +// +// See the documentation for Marshal for details about the +// conversion of Go values into YAML. +func (n *Node) Encode(v interface{}) (err error) { + defer handleErr(&err) + e := newEncoder() + defer e.destroy() + e.marshalDoc("", reflect.ValueOf(v)) + e.finish() + p := newParser(e.out) + p.textless = true + defer p.destroy() + doc := p.parse() + *n = *doc.Content[0] + return nil +} + // SetIndent changes the used indentation used when encoding. func (e *Encoder) SetIndent(spaces int) { if spaces < 0 { @@ -328,6 +346,12 @@ const ( // and maps, Node is an intermediate representation that allows detailed // control over the content being decoded or encoded. // +// It's worth noting that although Node offers access into details such as +// line numbers, colums, and comments, the content when re-encoded will not +// have its original textual representation preserved. An effort is made to +// render the data plesantly, and to preserve comments near the data they +// describe, though. +// // Values that make use of the Node type interact with the yaml package in the // same way any other type would do, by encoding and decoding yaml data // directly or indirectly into them. @@ -391,6 +415,13 @@ type Node struct { Column int } +// IsZero returns whether the node has all of its fields unset. +func (n *Node) IsZero() bool { + return n.Kind == 0 && n.Style == 0 && n.Tag == "" && n.Value == "" && n.Anchor == "" && n.Alias == nil && n.Content == nil && + n.HeadComment == "" && n.LineComment == "" && n.FootComment == "" && n.Line == 0 && n.Column == 0 +} + + // LongTag returns the long form of the tag that indicates the data type for // the node. If the Tag field isn't explicitly defined, one will be computed // based on the node properties. @@ -418,6 +449,11 @@ func (n *Node) ShortTag() string { case ScalarNode: tag, _ := resolve("", n.Value) return tag + case 0: + // Special case to make the zero value convenient. + if n.IsZero() { + return nullTag + } } return "" } diff --git a/vendor/gopkg.in/yaml.v3/yamlh.go b/vendor/gopkg.in/yaml.v3/yamlh.go index 2719cfbb0..7c6d00770 100644 --- a/vendor/gopkg.in/yaml.v3/yamlh.go +++ b/vendor/gopkg.in/yaml.v3/yamlh.go @@ -787,6 +787,8 @@ type yaml_emitter_t struct { foot_comment []byte tail_comment []byte + key_line_comment []byte + // Dumper stuff opened bool // If the stream was already opened? diff --git a/vendor/modules.txt b/vendor/modules.txt index 895ebd3de..f5a55521e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -198,6 +198,9 @@ github.com/cheggaaa/pb github.com/chzyer/readline # github.com/davecgh/go-spew v1.1.1 github.com/davecgh/go-spew/spew +# github.com/deepmap/oapi-codegen v1.5.1 +github.com/deepmap/oapi-codegen/pkg/runtime +github.com/deepmap/oapi-codegen/pkg/types # github.com/dgrijalva/jwt-go v3.2.0+incompatible ## explicit github.com/dgrijalva/jwt-go @@ -216,8 +219,15 @@ github.com/digitalocean/godo github.com/dimchansky/utfbom # github.com/dylanmei/iso8601 v0.1.0 github.com/dylanmei/iso8601 +# github.com/exoscale/egoscale v0.43.1 +github.com/exoscale/egoscale +github.com/exoscale/egoscale/v2 +github.com/exoscale/egoscale/v2/api +github.com/exoscale/egoscale/v2/internal/public-api +# github.com/exoscale/packer-plugin-exoscale v0.1.0 ## explicit - github.com/fatih/camelcase v1.0.0 +github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import +# github.com/fatih/camelcase v1.0.0 ## explicit github.com/fatih/camelcase # github.com/fatih/color v1.9.0 @@ -248,7 +258,7 @@ github.com/gobwas/glob/util/runes github.com/gobwas/glob/util/strings # github.com/gofrs/flock v0.7.3 github.com/gofrs/flock -# github.com/gofrs/uuid v3.2.0+incompatible +# github.com/gofrs/uuid v4.0.0+incompatible github.com/gofrs/uuid # github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 ## explicit @@ -480,6 +490,9 @@ github.com/hetznercloud/hcloud-go/hcloud/schema # github.com/hyperonecom/h1-client-go v0.0.0-20191203060043-b46280e4c4a4 ## explicit github.com/hyperonecom/h1-client-go +# github.com/jarcoal/httpmock v1.0.8 +github.com/jarcoal/httpmock +github.com/jarcoal/httpmock/internal # github.com/jdcloud-api/jdcloud-sdk-go v1.9.1-0.20190605102154-3d81a50ca961 ## explicit github.com/jdcloud-api/jdcloud-sdk-go/core @@ -532,7 +545,7 @@ github.com/masterzen/simplexml/dom ## explicit github.com/masterzen/winrm github.com/masterzen/winrm/soap -# github.com/mattn/go-colorable v0.1.6 +# github.com/mattn/go-colorable v0.1.8 github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.12 github.com/mattn/go-isatty @@ -637,9 +650,12 @@ github.com/shirou/gopsutil/net github.com/shirou/gopsutil/process # github.com/sirupsen/logrus v1.4.2 github.com/sirupsen/logrus -# github.com/stretchr/testify v1.6.1 +# github.com/stretchr/objx v0.3.0 +github.com/stretchr/objx +# github.com/stretchr/testify v1.7.0 ## explicit github.com/stretchr/testify/assert +github.com/stretchr/testify/mock github.com/stretchr/testify/require # github.com/tencentcloud/tencentcloud-sdk-go v3.0.222+incompatible ## explicit @@ -815,7 +831,7 @@ go.opencensus.io/trace go.opencensus.io/trace/internal go.opencensus.io/trace/propagation go.opencensus.io/trace/tracestate -# golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 +# golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad ## explicit golang.org/x/crypto/bcrypt golang.org/x/crypto/blowfish @@ -851,7 +867,7 @@ golang.org/x/mobile/event/key golang.org/x/mod/module golang.org/x/mod/semver golang.org/x/mod/sumdb/dirhash -# golang.org/x/net v0.0.0-20201209123823-ac852fbbde11 +# golang.org/x/net v0.0.0-20210119194325-5f4716e94777 ## explicit golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -880,7 +896,7 @@ golang.org/x/oauth2/jwt ## explicit golang.org/x/sync/errgroup golang.org/x/sync/semaphore -# golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 +# golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c ## explicit golang.org/x/sys/cpu golang.org/x/sys/internal/unsafeheader @@ -889,7 +905,7 @@ golang.org/x/sys/unix golang.org/x/sys/windows # golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 golang.org/x/term -# golang.org/x/text v0.3.3 +# golang.org/x/text v0.3.5 golang.org/x/text/encoding golang.org/x/text/encoding/charmap golang.org/x/text/encoding/htmlindex @@ -1064,5 +1080,5 @@ gopkg.in/square/go-jose.v2/json gopkg.in/square/go-jose.v2/jwt # gopkg.in/yaml.v2 v2.3.0 gopkg.in/yaml.v2 -# gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c +# gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gopkg.in/yaml.v3 From beceace7b7f2040e5e11d639d24c8c397ee71c0a Mon Sep 17 00:00:00 2001 From: Wilken Rivera Date: Fri, 5 Mar 2021 11:27:30 -0500 Subject: [PATCH 5/6] Move to remote plugin docs for exoscale --- .../docs/post-processors/exoscale-import.mdx | 89 ------------------- .../community_post-processors.mdx | 2 - website/data/docs-nav-data.json | 4 - website/data/docs-remote-plugins.json | 5 ++ 4 files changed, 5 insertions(+), 95 deletions(-) delete mode 100644 website/content/docs/post-processors/exoscale-import.mdx diff --git a/website/content/docs/post-processors/exoscale-import.mdx b/website/content/docs/post-processors/exoscale-import.mdx deleted file mode 100644 index 7a47a6072..000000000 --- a/website/content/docs/post-processors/exoscale-import.mdx +++ /dev/null @@ -1,89 +0,0 @@ ---- -description: | - The Packer Exoscale Import post-processor takes an image artifact - from various builders and imports it to Exoscale. -page_title: Exoscale Import - Post-Processors -sidebar_title: Exoscale Import ---- - -# Exoscale Import Post-Processor - -Type: `exoscale-import` -Artifact BuilderId: `packer.post-processor.exoscale-import` - -The Packer Exoscale Import post-processor takes an image artifact from -the QEMU, Artifice, or File builders and imports it to Exoscale. - -## How Does it Work? - -The import process operates uploading a temporary copy of the image to -Exoscale's [Object Storage](https://www.exoscale.com/object-storage/) (SOS) -and then importing it as a Custom Template via the Exoscale API. The -temporary copy in SOS can be discarded after the import is complete. - -For more information about Exoscale Custom Templates, see the -[documentation](https://community.exoscale.com/documentation/compute/custom-templates/). - -## Configuration - -There are some configuration options available for the post-processor. - -Required: - -- `api_key` (string) - The API key used to communicate with Exoscale - services. This may also be set using the `EXOSCALE_API_KEY` environmental - variable. - -- `api_secret` (string) - The API secret used to communicate with Exoscale - services. This may also be set using the `EXOSCALE_API_SECRET` - environmental variable. - -- `image_bucket` (string) - The name of the bucket in which to upload the - template image to SOS. The bucket must exist when the post-processor is - run. - -- `template_name` (string) - The name to be used for registering the template. - -- `template_description` (string) - The description for the registered template. - -Optional: - -- `api_endpoint` (string) - The API endpoint used to communicate with the - Exoscale API. Defaults to `https://api.exoscale.com/compute`. - -- `sos_endpoint` (string) - The endpoint used to communicate with SOS. - Defaults to `https://sos-ch-gva-2.exo.io`. - -- `template_zone` (string) - The Exoscale [zone](https://www.exoscale.com/datacenters/) - in which to register the template. Defaults to `ch-gva-2`. - -- `template_username` (string) - An optional username to be used to log into - Compute instances using this template. - -- `template_disable_password` (boolean) - Whether the registered template - should disable Compute instance password reset. Defaults to `false`. - -- `template_disable_sshkey` (boolean) - Whether the registered template - should disable SSH key installation during Compute instance creation. - Defaults to `false`. - -- `skip_clean` (boolean) - Whether we should skip removing the image file - uploaded to SOS after the import process has completed. "true" means that - we should leave it in the bucket, "false" means deleting it. - Defaults to `false`. - -## Basic Example - -Here is a basic example: - -```json -{ - "type": "exoscale-import", - "api_key": "{{user `exoscale_api_key`}}", - "api_secret": "{{user `exoscale_api_secret`}}", - "image_bucket": "my-templates", - "template_name": "myapp", - "template_description": "myapp v1.2.3", - "template_username": "admin" -} -``` diff --git a/website/content/partials/post-processors/community_post-processors.mdx b/website/content/partials/post-processors/community_post-processors.mdx index c2a1f99fe..7d82a5512 100644 --- a/website/content/partials/post-processors/community_post-processors.mdx +++ b/website/content/partials/post-processors/community_post-processors.mdx @@ -1,4 +1,2 @@ ### Community Post-Processors -- [Exoscale Import](https://github.com/exoscale/packer-post-processor-exoscale-import) - - Import a builder artifact as a new Exoscale Compute instance template. diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json index 1f93cc5a8..f4a652250 100644 --- a/website/data/docs-nav-data.json +++ b/website/data/docs-nav-data.json @@ -1092,10 +1092,6 @@ "title": "DigitalOcean Import", "path": "post-processors/digitalocean-import" }, - { - "title": "Exoscale Import", - "path": "post-processors/exoscale-import" - }, { "title": "Google Compute Export", "path": "post-processors/googlecompute-export" diff --git a/website/data/docs-remote-plugins.json b/website/data/docs-remote-plugins.json index 8c247cfab..f70ece336 100644 --- a/website/data/docs-remote-plugins.json +++ b/website/data/docs-remote-plugins.json @@ -3,5 +3,10 @@ "title": "Docker", "path": "docker", "repo": "hashicorp/packer-plugin-docker" + }, + { + "title": "Exoscale", + "path": "exoscale", + "repo": "exoscale/packer-plugin-exoscale" } ] From 3c282de6c318a632a435bd2565e426e193ce3cb5 Mon Sep 17 00:00:00 2001 From: Wilken Rivera Date: Fri, 5 Mar 2021 15:27:03 -0500 Subject: [PATCH 6/6] Add maps for statically vendored components This change adds a new set of maps for builders, provisioners, and post-processors that store reference to components that were once part of Packer and are now vendored. This file acts as a single place for defining this vendored components, which are then merged into the main components maps to be used in Packer. Quick test to ensure the exoscale-import post-processor is still loaded ``` // Validate that exoscale-import is in the know post-procoessors list ~> packer.test build docker_centos_shell_provisioner.pkr.hcl Error: Unknown post-processor type "badlynamed-import" on docker_centos_shell_provisioner.pkr.hcl line 18: (source code not available) known post-processors: [ucloud-import digitalocean-import docker-push googlecompute-export manifest vsphere-template docker-tag vsphere checksum docker-import exoscale-import yandex-export compress googlecompute-import yandex-import vagrant-cloud alicloud-import amazon-import artifice shell-local docker-save vagrant] // Validate that exoscale-import get loaded ~> packer.test build docker_centos_shell_provisioner.pkr.hcl Error: Failed preparing post-processor-block "exoscale-import" "" on docker_centos_shell_provisioner.pkr.hcl line 18: (source code not available) 4 error(s) occurred: * api_key must be set * api_secret must be set * image_bucket must be set * template_zone must be set ==> Wait completed after 2 microseconds ==> Builds finished but no artifacts were created. ``` --- command/plugin.go | 4 ++++ command/vendored_plugins.go | 14 ++++++++------ main.go | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/command/plugin.go b/command/plugin.go index edfeca617..b5c08b185 100644 --- a/command/plugin.go +++ b/command/plugin.go @@ -1,3 +1,7 @@ +// +// This file is automatically generated by scripts/generate-plugins.go -- Do not edit! +// + package command import ( diff --git a/command/vendored_plugins.go b/command/vendored_plugins.go index 19762365a..4c4d6498a 100644 --- a/command/vendored_plugins.go +++ b/command/vendored_plugins.go @@ -6,6 +6,7 @@ import ( // Previously core-bundled components, split into their own plugins but // still vendored with Packer for now. Importing as library instead of // forcing use of packer init, until packer v1.8.0 + exoscaleimportpostprocessor "github.com/exoscale/packer-plugin-exoscale/post-processor/exoscale-import" dockerbuilder "github.com/hashicorp/packer-plugin-docker/builder/docker" dockerimportpostprocessor "github.com/hashicorp/packer-plugin-docker/post-processor/docker-import" dockerpushpostprocessor "github.com/hashicorp/packer-plugin-docker/post-processor/docker-push" @@ -26,14 +27,15 @@ var VendoredProvisioners = map[string]packersdk.Provisioner{} // VendoredPostProcessors are post-processor components that were once bundled with the // Packer core, but are now being imported from their counterpart plugin repos var VendoredPostProcessors = map[string]packersdk.PostProcessor{ - "docker-import": new(dockerimportpostprocessor.PostProcessor), - "docker-push": new(dockerpushpostprocessor.PostProcessor), - "docker-save": new(dockersavepostprocessor.PostProcessor), - "docker-tag": new(dockertagpostprocessor.PostProcessor), + "docker-import": new(dockerimportpostprocessor.PostProcessor), + "docker-push": new(dockerpushpostprocessor.PostProcessor), + "docker-save": new(dockersavepostprocessor.PostProcessor), + "docker-tag": new(dockertagpostprocessor.PostProcessor), + "exoscale-import": new(exoscaleimportpostprocessor.PostProcessor), } -// Upon init lets us load up any plugins that were vendored manually into the -// default set of plugins. +// Upon init lets load up any plugins that were vendored manually into the default +// set of plugins. func init() { for k, v := range VendoredBuilders { if _, ok := Builders[k]; ok { diff --git a/main.go b/main.go index f358c2f05..f7806b0bc 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,6 @@ // This is the main package for the `packer` application. +//go:generate go run ./scripts/generate-plugins.go package main import (